如何在 Swing 中制作贪吃蛇游戏

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

首先,我们将定义游戏中使用的常量。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

B_WIDTH B_HEIGHT 常量决定了棋盘的大小。 DOT_SIZE 是苹果的大小和蛇的点。


ALL_DOTS 常量定义板上可能的最大点数 (900 = (300*300)/(10*10))。 RAND_POS 常量用于计算苹果的随机位置。 DELAY 常量决定了游戏的速度。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

这两个数组存储了蛇所有关节的 x 和 y 坐标。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

loadImages() 方法中,我们获取游戏的图像。 ImageIcon 类用于显示 PNG 图像。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

initGame() 方法中,我们创建了蛇,在棋盘上随机定位一个苹果,并启动计时器。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

如果苹果与头部发生碰撞,我们会增加蛇的关节数。我们调用 locateApple() 方法随机定位一个新的苹果对象。

move() 方法中,我们有游戏的关键算法。要了解它,请查看蛇的移动方式。我们控制蛇的头。我们可以用光标键改变它的方向。其余关节向上移动一个位置。第二个关节移动到第一个关节所在的位置,第三个关节移动到第二个关节所在的位置,依此类推。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

此代码将关节向上移动链。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

这条线将头部向左移动。

checkCollision() 方法中,我们确定蛇是撞到自己还是撞到其中一堵墙。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

如果蛇用头撞到其中一个关节,游戏就结束了。


 private final int B_WIDTH = 300;
private final int B_HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;

如果蛇撞到棋盘底部,游戏就结束了。


完整源代码: http://geekonjava.blogspot.com/2015/07/make-snake-game-in-swing.html

相关文章