贪吃蛇 Java版(基于GUI)
作者:网络转载 发布时间:[ 2014/7/22 10:34:35 ] 推荐标签:贪吃蛇 Java
import java.awt.*;
import java.awt.event.KeyEvent;
public class Snake {
int x,y,oldX,oldY;
int id;
private static int WIDTH=20,HEIGHT=20,dx=20,dy=20;
static Direction dir=Direction.STOP;
boolean head;//判断是否是是蛇头
SnakeClient sc=null;
private boolean live;
public Snake(int x, int y, boolean head,int id,SnakeClient sc) {
this.x = x;
this.y = y;
this.head = head;
this.id=id;
this.sc=sc;
}
void draw(Graphics g){
move();
Color c=g.getColor();
if(head){
g.setColor(Color.red);
}else{
g.setColor(Color.green);
}
g.fillRect(x, y, WIDTH, HEIGHT);
g.setColor(Color.black);
g.drawRect(x, y, WIDTH, HEIGHT);
g.setColor(c);
}
public void keyPressed(KeyEvent e) {
if(!head) return;
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_UP:
if(Direction.D==dir) break;
dir=Direction.U;
break;
case KeyEvent.VK_DOWN:
if(Direction.U==dir) break;
dir=Direction.D;
break;
case KeyEvent.VK_LEFT:
if(Direction.R==dir) break;
dir=Direction.L;
break;
case KeyEvent.VK_RIGHT:
if(Direction.L==dir) break;
dir=Direction.R;
break;
case KeyEvent.VK_F2:
if(!live){
sc.snakes.add(sc.s);
}
}
}
// 从蛇头到蛇尾编号id从0递增,根据id来移动蛇身,具体如下,记录下当前位置oldX,oldY
// 当move()时,根据id-1的蛇身改变自己的位置;
void move(){
oldX=x;
oldY=y;
if(!head){
if(dir==Direction.STOP) return;
for(int i=0;i<sc.snakes.size();i++){
if(sc.snakes.get(i).id==id-1){
x=sc.snakes.get(i).oldX;
y=sc.snakes.get(i).oldY;
}
}
return;
}
switch(dir){
case U:
y-=dy;
break;
case R:
x+=dx;
break;
case D:
y+=dy;
break;
case L:
x-=dx;
break;
case STOP:
break;
}
//新版贪吃蛇,当到达边界时从另外一边出来
if(x<3) x=383;
if(x>383) x=3;
if(y<25) y=405;
if(y>405) y=25;
}
public Rectangle getRect(){
return new Rectangle(x,y,WIDTH-1,HEIGHT-1);
}
boolean eatEgg(Egg e){
if(!head) {
return false;
}
else{
return e.getRect().intersects(this.getRect());
}
}
boolean hitSnake(Snake s){
if(!head) return false;
if(s.getRect().intersects(this.getRect())){
live = false;
return true;
}else{
return false;
}
}
}
[java] view plaincopy
import java.awt.*;
import java.util.*;
public class Egg {
private static int WIDTH=20,HEIGHT=20;
private static Random r=new Random();
int x=3+20*r.nextInt(20);
int y=25+20*r.nextInt(20);
void draw(Graphics g){
Color c=g.getColor();
g.setColor(Color.pink);
g.fillOval(x, y, WIDTH, HEIGHT);
g.setColor(c);
}
public Rectangle getRect(){
return new Rectangle(x,y,WIDTH,HEIGHT);
}
}
|
public enum Direction {
U,R,D,L,STOP;
}
|
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南