该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

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类的源码是这个

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

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

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package greedsnake; import java.awt.Color; import java.awt.Font; import java. ...

  2. java进一_JAVA小白进:基础入门知识

    1.注释,关键字,标识符1.注释 (1)注释:解释说明程序的而文字. (2)注释的分类:单行注释 格式: //注释的文字 多行注释 格式:/*注释的文字*/ 文档注释 格式:/**注释的文字*/ (3 ...

  3. java switch case怎么判断范围_java小白从入门到精通(基础二)

    六:流程控制语句 1.作用: 一个程序他在执行的时候,各个语句的执行顺序对程序的结果是有直接影响的,所以我们必须很清楚每条语句的执行流程.并且有些时候我们需要通过控制语句的执行流程来实现我们要完成的功 ...

  4. java 6 基础教程_Java小白入门教程(6)——循环语句

    提纲: 1.循环结构 2.while循环 3.do-while循环 4.for循环 5.break语句 6.continue语句 7.循环嵌套 8.作业 一.循环结构1.1 概念 条件满足,某些代码会 ...

  5. java 计数器_java并发之计数器CountDownLatch原理

    java并发之计数器CountDownLatch原理 CountDownLatch简介 CountDownLatch顾名思义,count + down + latch = 计数 + 减 + 门闩(这么 ...

  6. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  7. 适合Java零基础小白学习的Java零基础教程

    很多Java零基础小白,在刚刚快入门的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英文词汇,然后遇见一些未知的困难,让自己打到癫狂状态,逐渐迷失自我放弃Java,为了解决这 ...

  8. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  9. cmd运行java文件_Java基础 前传

    微信搜一搜秃然编程 一.关于MS-DOS MS-DOS(微软磁盘操作系统),是美国微软公司提供的磁盘操作系统.在美国微软公司推出Windows1.0.Windows3.0.1995年8月24日推出的操 ...

最新文章

  1. 013 Android锁机病毒分析
  2. React Hooks的使用(三)——useRef、useImperativeHandle、useLayoutEffect解析、自定义Hook
  3. 为什么Java 中1000==1000为false,而100==100为true?
  4. nginx总结(面试必看)
  5. 电脑主板接口_电脑主板接口大全
  6. 云计算中的地域和可用区概念
  7. SQL Server 环形缓冲区(Ring Buffer) -- 环形缓冲在AlwaysOn的应用
  8. 计算机模拟做报童模型,用基于计算机随机模拟的下降法求解报童问题.pdf
  9. 【论文阅读笔记】FCOS代码结合论文阅读
  10. VBA下载糗事百科图片
  11. 修改mtk平台power按键的gpio控制口
  12. a1708硬盘转接口_macbook pro2017 a1708转接卡更换大容量硬盘,Apple/苹果笔记本电脑_好文分享_优购 - 荐优,购适...
  13. [POJ 1625] Censored! (AC自动机+DP+高精度)
  14. Unity制作格斗游戏核心思路总结
  15. matlab画红色爱心(心形图)
  16. 72小时灵感冲刺,创意就该这么玩 | LigaAI Hackathon特别策划
  17. PR模板 复古回忆棱镜光效梦幻内容展示PR视频模板
  18. ChatGPT 使用 强化学习:Proximal Policy Optimization算法(详细图解)
  19. 56个JavaScript 实用工具函数助你提升开发效率!
  20. mysql eva模型_第四章 Schema 与数据类型优化

热门文章

  1. Microsoft 邀您参加云对话!
  2. hexo-cli博客 hexo-admin编辑器 next主题安装命令整理
  3. 启动HBase抛出org.apache.hadoop.hbase.ClockOutOfSyncException异常:hmaster正常,节点hregionserver启动失败
  4. Scala 数组详解
  5. k8s查看节点CPU消耗情况
  6. 再见 Jenkins!几行脚本搞定自动化部署,这款神器有点厉害
  7. golang管道channel的遍历和关闭:应该使用for...range来遍历
  8. zookeeper 3.6.2启动报错:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
  9. (提示)ubuntu16.04通过sealos安装k8s,需要重新部署apply一下calico组件
  10. linux 产生0~100内的随机数