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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/10/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java死循环_java小白关于while死循环时处理办法的一发求助帖 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該樓層疑似違規已被系統折疊?隱藏此樓查看此樓

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 {//窗口類 可以同時設置尺寸

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

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

public static final int COLS = 40;//列數 public static final int BLOCK_SIZE = 20;//活動區域 private Font fontGameOver = new Font("宋體", Font.BOLD, 50);//調用資源字號字體 private int score = 0;//初始分數 private long beginTime=0;//初始時間 Snake s = new Snake(this);//調用構造方法(普通構造)實例化分配內存

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

public boolean running;

public void launch() {//設置窗口的大小、位置、可見,以及點擊事件和鍵盤事件,開啟繪圖線程

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

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

public void windowClosing(WindowEvent e) {//窗口正在關閉(點X)

System.exit(0);//退出

} });

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

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

Yard y=new Yard();

y.beginTime=System.currentTimeMillis();//獲取當前時間

y.launch();//運行y

}

public void stop() {

gameOver = true;

} @Override

public void paint(Graphics g) {//繪制進入內存

Color c = g.getColor();

g.setColor(Color.GRAY);

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

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

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);

}//畫線

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

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

g.drawString("目前分數:" + score, 10, 60);

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

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

if(gameOver) {

g.setFont(fontGameOver);

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

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

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

}

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

e.draw(g);//上色

s.draw(g);//上色

} @Override

public void update(Graphics g) {

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

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

}

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

paint(gOff);//paint方法

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

}

private class PaintThread implements Runnable {

private boolean running = true;

private boolean pause = false;

private int play;

public void run() {

while(running) {//線程將一直處于運行當中,只有在游戲結束的時候

if(pause==true) {

continue;

}

else {

repaint();//如果組件是輕量級組件,則會盡快調用paint()方法或者是調用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;

} }

/*

* 此函數的功能為:檢測我們是否按下F2,若按下,則重新啟動線程,即重新開始游戲

* */

private class KeyMonitor extends KeyAdapter { @Override

public void keyPressed(KeyEvent e) {

int key = e.getKeyCode();

if(key == KeyEvent.VK_F5) {

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

beginTime = System.currentTimeMillis();

}

else if(key==KeyEvent.VK_F1){

paintThread.pause=true;//暫停

}

else if(key==KeyEvent.VK_F2){

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

paintThread.pause=false;

}

s.keyPressed(e);

} } /**

* 拿到所得的分數

* @return 分數

*/ public int getScore() {

return score;

} /**

* 設置所得的分數

* @param score 分數

*/ public void setScore(int score) {

this.score = score;

}}

snake類的源碼是這個

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。