网站首页 > 精选教程 正文
算法分析
(一)启动一个独立线程根据 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 小应用,感兴趣的同学可以私信我获取链接。
- 上一篇: Java Swing五子棋游戏
- 下一篇: 每天一款传奇游戏,带给你不一样的新感觉「三」
猜你喜欢
- 2024-11-30 每天一款传奇游戏,带给你不一样的新感觉「三」
- 2024-11-30 Java Swing五子棋游戏
- 2024-11-30 曾经销量最高的5款视频游戏
- 2024-11-30 零基础Java入门课程,小游戏《石头迷阵》入门,带你更好的学习
- 2024-11-30 厉害了,Java还能写出塔防游戏
- 2024-11-30 程序员用Java实现扫雷小游戏,引来广大网友狂点赞,直呼炸天
- 2024-11-30 Java经典游戏:(一)贪吃蛇
- 2024-11-30 这画风有没有让你联想到小时候玩的java角色扮演小游戏??
- 2024-11-30 java小游戏贪吃蛇大作战:勾起你的童年记忆
- 2024-11-30 《我的世界》迎15周年,Java+ 基岩版游戏国区五折售44.5元
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)