日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 暂停循环_java小白关于while死循环时处理办法的一发求助帖

發(fā)布時(shí)間:2023/12/2 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 暂停循环_java小白关于while死循环时处理办法的一发求助帖 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓

package greedsnake;

import java.awt.Color;

import java.awt.Font;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.util.Scanner;import org.omg.CORBA.PUBLIC_MEMBER;public class Yard extends Frame {//窗口類(lèi) 可以同時(shí)設(shè)置尺寸

PaintThread paintThread = new PaintThread();//繪制線程

private boolean gameOver = false; //布爾型賦值(只能真假) public static final int ROWS = 40;//行數(shù)

public static final int COLS = 40;//列數(shù) public static final int BLOCK_SIZE = 20;//活動(dòng)區(qū)域 private Font fontGameOver = new Font("宋體", Font.BOLD, 50);//調(diào)用資源字號(hào)字體 private int score = 0;//初始分?jǐn)?shù) private long beginTime=0;//初始時(shí)間 Snake s = new Snake(this);//調(diào)用構(gòu)造方法(普通構(gòu)造)實(shí)例化分配內(nèi)存

Egg e = new Egg(); Image offScreenImage = null;//圖形圖像超類(lèi)(圖像總類(lèi))

public boolean running;

public void launch() {//設(shè)置窗口的大小、位置、可見(jiàn),以及點(diǎn)擊事件和鍵盤(pán)事件,開(kāi)啟繪圖線程

this.setLocation(90, 10);//指定窗口位置(移動(dòng)窗口位置) this.setSize(COLS * BLOCK_SIZE, ROWS * BLOCK_SIZE);//窗口大小

this.addWindowListener(new WindowAdapter() {//窗口事件接收(點(diǎn)) @Override//檢查是否為父類(lèi)中含有的

public void windowClosing(WindowEvent e) {//窗口正在關(guān)閉(點(diǎn)X)

System.exit(0);//退出

} });

this.setVisible(true);//使組件可視 this.addKeyListener(new KeyMonitor());//添加鍵盤(pán)事件 new Thread(paintThread).start();//定義匿名類(lèi)開(kāi)始線程

} public static void main(String[] args) {

Yard y=new Yard();

y.beginTime=System.currentTimeMillis();//獲取當(dāng)前時(shí)間

y.launch();//運(yùn)行y

}

public void stop() {

gameOver = true;

} @Override

public void paint(Graphics g) {//繪制進(jìn)入內(nèi)存

Color c = g.getColor();

g.setColor(Color.GRAY);

g.fillRect(0, 0, COLS * BLOCK_SIZE, ROWS * BLOCK_SIZE);//填充

g.setColor(Color.DARK_GRAY);//區(qū)別文字和繪圖的顏色

for(int i=1; i

g.drawLine(0, BLOCK_SIZE * i, COLS * BLOCK_SIZE, BLOCK_SIZE * i);

}

for(int i=1; i

g.drawLine(BLOCK_SIZE * i, 0, BLOCK_SIZE * i, BLOCK_SIZE * ROWS);

}//畫(huà)線

g.setColor(Color.YELLOW);//設(shè)定顏色,為下面顯示文字信息做準(zhǔn)備

g.drawString("使用說(shuō)明:使用方向鍵控制方向,F1--停止,F2--停止后恢復(fù),F5--重新開(kāi)始" , 10, 40);//指定位置顯示黃字

g.drawString("目前分?jǐn)?shù):" + score, 10, 60);

g.drawString("加分規(guī)則:每吃一個(gè)加5分,加油!" , 10, 80);

g.drawString("已經(jīng)使用的時(shí)間:"+(System.currentTimeMillis()-beginTime)/1000 , 10, 100);

if(gameOver) {

g.setFont(fontGameOver);

g.drawString("game over!", 90, 170);

g.drawString("在玩一次,請(qǐng)按F5", 10, 250);

g.drawString(" ", 200, 230);//判斷游戲是否結(jié)束 paintThread.pause();

}

g.setColor(c);//將圖形界面設(shè)置為剛開(kāi)始的顏色 s.eat(e);//吃蛋

e.draw(g);//上色

s.draw(g);//上色

} @Override

public void update(Graphics g) {

if(offScreenImage == null) {//雙緩沖解決閃爍問(wèn)題

offScreenImage = this.createImage(COLS * BLOCK_SIZE, ROWS * BLOCK_SIZE);

}

Graphics gOff = offScreenImage.getGraphics();//繪圖

paint(gOff);//paint方法

g.drawImage(offScreenImage, 0, 0, null);//緩沖區(qū)繪制到實(shí)際屏幕上

}

private class PaintThread implements Runnable {

private boolean running = true;

private boolean pause = false;

private int play;

public void run() {

while(running) {//線程將一直處于運(yùn)行當(dāng)中,只有在游戲結(jié)束的時(shí)候

if(pause==true) {

continue;

}

else {

repaint();//如果組件是輕量級(jí)組件,則會(huì)盡快調(diào)用paint()方法或者是調(diào)用update()

} try {

Thread.sleep(200);//休眠0.2s

} catch (InterruptedException e) {//捕獲中斷異常

e.printStackTrace();

}

}

} public void pause() {

this.pause = true;

gameOver = false;

} public void reStart() {

this.pause = false;

s = new Snake(Yard.this);

gameOver = false;

score=0;

} public void gameOver() {

running = false;

}

public void play() {

pause=false;

} }

/*

* 此函數(shù)的功能為:檢測(cè)我們是否按下F2,若按下,則重新啟動(dòng)線程,即重新開(kāi)始游戲

* */

private class KeyMonitor extends KeyAdapter { @Override

public void keyPressed(KeyEvent e) {

int key = e.getKeyCode();

if(key == KeyEvent.VK_F5) {

paintThread.reStart();//重新開(kāi)始游戲

beginTime = System.currentTimeMillis();

}

else if(key==KeyEvent.VK_F1){

paintThread.pause=true;//暫停

}

else if(key==KeyEvent.VK_F2){

paintThread.run();//從暫停中恢復(fù)

paintThread.pause=false;

}

s.keyPressed(e);

} } /**

* 拿到所得的分?jǐn)?shù)

* @return 分?jǐn)?shù)

*/ public int getScore() {

return score;

} /**

* 設(shè)置所得的分?jǐn)?shù)

* @param score 分?jǐn)?shù)

*/ public void setScore(int score) {

this.score = score;

}}

snake類(lèi)的源碼是這個(gè)

總結(jié)

以上是生活随笔為你收集整理的java 暂停循环_java小白关于while死循环时处理办法的一发求助帖的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。