网站首页 > java教程 正文
算法分析
(一)启动一个独立线程根据 direction 重绘面板实现蛇身移动效果,运行过程:
- 记录上次头部的坐标到 tempBody 中
- 根据方向修改头部坐标
- 重绘面板
- 判断头部坐标与食物坐标的关系,如果重合则蛇身增加,同时生成新的食物坐标,积分累加
- 判断与边缘的关系,如果重叠,则游戏结束
- 判断与 body 的关系,如果重叠,则说明碰到自己,游戏结束
- 休眠几十毫秒
(二)按键事件
- 方向键控制 direction ,只允许 90 度方向转换,不允许 180 度转换方向
- A 键控制开始游戏
- R 键控制重新开始游戏
- Esc 键控制退出游戏
(三)初始化
- 头部块
- 食物块
- 游戏区
- 积分区
- tempBody 初始值与头部一致
(四)移动后重绘方法
- 绘制背景图
- 绘制头部方块
- 回事食物方块
- 绘制得分
- 修正将 body 中的数据替换到 tempBody 除了第一个以外的数据处,得到完整的蛇身坐标
- 用 tempBody 修正 body 坐标数据,得到最终的数据
- 遍历 body 绘制蛇身方块
核心实现移动的代码
//让蛇移动的线程
public void move() {
new Thread() {
public void run() {
while (true) {
//O 是方向
if (gameState == 1) {
//记录此次移动前的头部坐标
tempBody.get(0).x = head.x;
tempBody.get(0).y = head.y;
switch (direction) {
case south:
head.y = head.y + 10;
break;
case north:
head.y = head.y - 10;
break;
case east:
head.x = head.x + 10;
break;
case west:
head.x = head.x - 10;
break;
}
//重绘移动后的蛇身
repaint();
//吃到食物了
if (head.x == food.x && head.y == food.y) {
//身体长度加一个初始值为0的坐标
tempBody.add(new Point(0,0));
body.add(new Point(0,0));
//得分加 10
myScore = myScore + 10;
System.out.println("Get the food ,new score is:"+myScore);
//重新生成食物坐标
food.x = random.nextInt(60) * 10;
food.y = random.nextInt(56) * 10;
//重绘
repaint();
}
//碰到边缘
if (head.x < 0 || head.y < 0 || head.x == 600 || head.y == 560) {
gameState = -1;
repaint();
System.out.println("Game over because touch the edge.");
break;
}
//碰到自己了
for (int i = 0; i < body.size(); i++) {
if (head.x == body.get(i).x && head.y == body.get(i).y) {
gameState = -1;
repaint();
System.out.println("Game over because touch the body.");
break;
}
}
}
try {
Thread.sleep(140);
} catch (InterruptedException e) {
// TODO: handle exception
}
}
}
}.start();
}
使用说明
- 创建一个 Java 工程,将 game 文件夹拷贝到 src 目录下。
- 执行 GameFrame 类。
这是一个已经发布在Github 上的 Java 小应用,感兴趣的同学可以私信我获取链接。
猜你喜欢
- 2024-12-01 Java游戏开发基于J2ME的手机游戏开发
- 2024-12-01 适合编程初学者的开源项目:小游戏2048(Java版)
- 2024-12-01 Java Swing五子棋游戏
- 2024-12-01 Java 开源 斗地主 游戏源码 程序员放松神器 的调试实战
- 2024-12-01 无聊的时候怎么办?教你用java写一个简单挂机打金币小游戏吧
- 2024-12-01 java 游戏服务器框架 ioGame 17.1.54 netty nginx 代理获取用户真实ip
- 2024-12-01 如何学习java游戏服务器开发?
- 2024-12-01 误入 GitHub 游戏区,意外地收获满满
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)