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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java jsp学习指南_JSP教程–最终指南

java jsp学习指南编者注: JavaServer Pages(JSP)技术使您可以轻松创建同时包含静态和动态组件的Web内容。 JSP技术提供了Java Servlet技术的所有动态功能,但提供了一种更自然的方法来创建静态内容。 JSP技术的主要功能包括用于开…

c语言中main函数是什么

点击上方蓝字关注我,了解更多咨询1、main函数是C程序的入口函数,即程序的执行从main函数开始,其他函数的调动也直接或间接地在main函数中调用。2、main函数的返回值用于解释程序的退出状态。若返回0,则表示程序正常退出。返回其他…

什么是通用字符名称?_通用名称

什么是通用字符名称&#xff1f;泛型类型参数名称通常包含一个大写字母字符。 如果您开始阅读有关泛型的官方ORACLE文档&#xff0c;则第一个示例是 /*** Generic version of the Box class.* param <T> the type of the value being boxed*/ public class Box<T>…

c语言中__cplusplus是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、__cplusplus和extern“C”一般都是配对使用&#xff0c;如果定义了__cplusplus(cpp文件默认定义了该宏)&#xff0c;则采用C语言方式进行编译。2、是在C中特有的&#xff0c;__cplusplus 其实就是C。实例#ifndef __CODERSRC_H__ …

git rollback代码都没了_git回滚线上代码

由于之前自己推代码的时候操作失误&#xff0c;才push代码的时候没有push到dev分支&#xff0c;而是push到了本地master同名分支的线上master分支&#xff0c;覆盖掉了线上在用的代码。在搜索解决办法的时候&#xff0c;发现网上给的信息大多不够全&#xff0c;且很多无用。所以…

c语言中fwirte函数的使用方法示例

点击上方蓝字关注我&#xff0c;了解更多咨询1、fwrite函数用于将缓冲区数据写入文件&#xff0c;并返回成功写入文件的元素数。如果出现错误或到达文件末尾&#xff0c;可能小于nmemb。2、fwrite函数不区分文件的尾部和错误&#xff0c;因此调用者必须使用feof和ferror来判断发…

联通光纤限制连接数_从数百万个光纤(而不是数千个线程)中查询数据库

联通光纤限制连接数jOOQ是在Java中执行SQL的好方法&#xff0c;而Quasar光纤带来了大大提高的并发性 我们很高兴在平行世界的 Fabio Tudone的jOOQ博客上宣布另一个非常有趣的来宾帖子。 Parallel Universe开发了一个开放源代码堆栈&#xff0c;使开发人员可以轻松地在JVM上对…

java 工程新建ivy文件_Hadoop学习之路(八)在eclispe上搭建Hadoop开发环境

一、添加插件将hadoop-eclipse-plugin-2.7.5.jar放入eclipse的plugins文件夹中二、在Windows上安装Hadoop2.7.5版本最好与Linux集群中的hadoop版本保持一致1、将hadoop-2.7.5-centos-6.7.tar.gz解压到Windows上的C盘software目录中2、配置hadoop的环境变量HADOOP_HOMEC:\softwa…

c语言中fclose函数的使用你会吗

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言fclose函数用于关闭使用fopen成功打开的文件。2、fopen函数和fclose函数总是成对出现。如果文件成功打开fopen函数&#xff0c;请使用fclose函数关闭文件。实例#include <stdio.h> #include <stdlib.h>int main…

悲观锁 引起死锁_悲观锁定时如何避免可怕的死锁-以及Java 8的一些用法!

悲观锁 引起死锁有时您根本无法避免&#xff1a;通过SQL进行悲观锁定。 实际上&#xff0c;当您要在共享的全局锁上同步多个应用程序时&#xff0c;它是一个很棒的工具。 有人可能认为这是在滥用数据库。 如果可以解决您遇到的问题&#xff0c;我们认为可以使用您拥有的工具。…

Java反序列化json内存溢出_fastJson与一起堆内存溢出'血案'

现象QA同学反映登录不上服务器排查问题1–日志级别查看log,发现玩家登录的时候抛出了一个java.lang.OutOfMemoryError大概代码是向Redis序列化一个PlayerMirror镜像数据,但是在JSON.toJSONString的时候出现了错误.比较清晰&#xff0c;即序列化的时候expandCapacity,内存不足。…

c语言中预处理器是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言有预处理器&#xff0c;Java中没有这个概念&#xff0c;其实只是文本替换工具。2、C的预处理器&#xff0c;即CPP&#xff0c;将在实际编译器中完成处理&#xff0c;所有预处理命令将从#开始。实例#include <stdio.h>…

愚弄dnn_不要被泛型和向后兼容性所愚弄。 使用泛型类型

愚弄dnn最近&#xff0c;我与jOOQ的早期客户Ergon的 Sebastian Gruber进行了非常有趣的讨论&#xff0c;我们与之保持了密切联系。 与Sebastian交谈使我们的工程团队得出了一个结论&#xff0c;即我们应该完全重写jOOQ API。 现在&#xff0c;我们已经有很多用于各种用途的泛型…

php asp.net 代码量少,.NET_asp.net 反射减少代码书写量, 复制代码 代码如下:public b - phpStudy...

asp.net 反射减少代码书写量public bool Add(Liuyan refmodel){string sql "insert into liuyan(name,phone,zhiwei,gongsi,addr,country,dianyou,content,adddate)values(name,phone,zhiwei,gongsi,addr,country,dianyou,content,adddate)";OleDbParameter[] param…

c语言strcat_s函数如何使用

点击上方蓝字关注我&#xff0c;了解更多咨询1、strcat_s函数将strSource指向的字符串添加到其它字符串结尾。因此需要确保strDestination有足够的内存空间来容纳strSource和strDestination两个字符串&#xff0c;否则会导致溢出错误。2、strDestination末端的\0将被覆盖。strS…

502无法解析服务器标头_编写下载服务器。 第二部分:标头:Last-Modified,ETag和If-None-Match...

502无法解析服务器标头客户端缓存是万维网的基础之一。 服务器应通知客户端资源的有效性&#xff0c;客户端应尽可能快地对其进行缓存。 如我们所见&#xff0c;如果不缓存Web&#xff0c;它将非常缓慢。 只需在任何网站上Ctrl F5并将其与普通F5进行比较-后者就会更快&#xf…

c语言strcat_s函数的原理

点击上方蓝字关注我&#xff0c;了解更多咨询1、dst 内存空间大小目标字符串长度原始字符串场地‘\0’。2、使用sizeof函数获取内存空间大小&#xff0c;strlen函数获取字符串长度。即获取内存空间大小和查字符串长度。实例#include "stdafx.h" #include<stdlib.h…

java开发用怎么软件开发_Java 9中的5个功能将改变您开发软件的方式(还有2个不会)...

java开发用怎么软件开发有望在Java 9中发布的最令人兴奋的功能是什么&#xff1f; 近期不要对Java 9相对沉默而分心。JDK提交者正在努力准备下一个版本&#xff0c;预计在2015年12月才完成功能的下一个版本。此后&#xff0c;它将通过严格的测试和错误修复了将其准备于一般可用…

php redis并发读写,PHP使用Redis实现防止大并发下二次写入的方法

本文实例讲述了PHP使用Redis实现防止大并发下二次写入的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;PHP调用redis进行读写操作&#xff0c;大并发下会出现&#xff1a;读取key1&#xff0c;没有内容则写入内容&#xff0c;但是大并发下会出现同时多个php进程写…

理解C语言指针概念只需几分钟

点击上方蓝字关注我&#xff0c;了解更多咨询当我们声明一个变量或常量时&#xff0c;计算机系统会为这个变量或常量分配存储单元&#xff0c;变量的数据存储到被分配的存储单元内&#xff0c;对变量的赋值和取值操作都是针对存储单元的操作。C编译器是如何通过变量找到与其对应…