基于Java实现简单贪吃蛇游戏

2025-05-29 0 80

本文实例为大家分享了Java实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下

贪吃蛇小游戏制作方法

首先需要的准备有:

1、掌握Java基础知识,即Java SE
2、了解一定的GUI知识
3、自定义的贪吃蛇图片(可以在网上找到)

如果以上三点都没有,也不要紧,完全可以看我之前的博文来进行学习!!!!

学习贪吃蛇的目的

一:了解GUI 对前端的知识进行了解
二:了解监听器的作用 熟练掌握监听器(重点)
三:为枯燥乏味的学习提高兴趣(大重点!!)

贪吃蛇小游戏运行效果

基于Java实现简单贪吃蛇游戏

基于Java实现简单贪吃蛇游戏

设计思路:

由GameStart的启动方法 main方法,Date存储外部数据,GamePanel进行画出贪吃蛇并监听输入

基于Java实现简单贪吃蛇游戏

基于Java实现简单贪吃蛇游戏

基于Java实现简单贪吃蛇游戏

GamePanel:

  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.KeyEvent;
  6. import java.awt.event.KeyListener;
  7. import java.util.Random;
  8. public class GamePanel extends JPanel implements KeyListener,ActionListener{
  9. int lenth;
  10. int[] snakeX = new int [600]; // 蛇的坐标X
  11. int[] snakeY = new int [600];// 蛇的坐标Y
  12. String fx; // 操控上下左右
  13. boolean isStart = false;
  14. Timer timer = new Timer(100,this);
  15. // 定义一个食物
  16. int foodx;
  17. int foody;
  18. Random random = new Random();
  19. // 添加一个死亡判断
  20. boolean isFail = false;
  21. boolean isPass = false; //游戏是否通关
  22. // 积分系统
  23. int score;
  24. // 构造器
  25. public GamePanel(){
  26. init();
  27. // 获取键盘监听事件
  28. this.setFocusable(true);
  29. this.addKeyListener(this);
  30. timer.start(); // 让时间动起来
  31. }
  32. // 初始化游戏
  33. public void init(){
  34. lenth = 3;
  35. snakeX[0] = 100; snakeY[0] = 100; // 头部坐标
  36. snakeX[1] = 75; snakeY[1] = 100; // 第一个身体坐标
  37. snakeX[2] = 50; snakeY[2] = 100;// 第二个身体坐标
  38. fx = "R";
  39. foodx = 25 + 25 * random.nextInt(34);
  40. foody = 75 + 25 * random.nextInt(24);
  41. score = 0;
  42. }
  43. // 画板 画出界面和蛇
  44. // Graphics : 画笔
  45. @Override
  46. protected void paintComponent(Graphics g) {
  47. super.paintComponent(g);//清屏
  48. this.setBackground(Color.BLUE);//设置背景的颜色
  49. //绘制头部的广告栏
  50. Date.header.paintIcon(this, g, 25, 11);
  51. //绘制游戏区域
  52. g.fillRect(25, 75, 850, 600);
  53. // 画一条静态的小蛇
  54. if (fx.equals("R")){
  55. Date.right.paintIcon(this,g,snakeX[0],snakeY[0]);
  56. }else if (fx.equals("L")){
  57. Date.left.paintIcon(this,g,snakeX[0],snakeY[0]);
  58. }else if (fx.equals("U")){
  59. Date.up.paintIcon(this,g,snakeX[0],snakeY[0]);
  60. }else if (fx.equals("D")){
  61. Date.down.paintIcon(this,g,snakeX[0],snakeY[0]);
  62. }
  63. for (int i = 1; i < lenth; i++) {
  64. Date.body.paintIcon(this,g,snakeX[i],snakeY[i]); // 蛇的身体长度通过了lenth控制
  65. }
  66. // 画食物
  67. Date.food.paintIcon(this,g,foodx,foody);
  68. // 画积分
  69. g.setColor(Color.WHITE);
  70. g.setFont(new Font("微软雅黑",Font.BOLD,18)); // 设置字体
  71. g.drawString("您的积分是:" + score,700,50);
  72. g.drawString("您的长度是:" + lenth,700,35);
  73. // 游戏提示:是否开始
  74. if (isStart == false){
  75. // 画一个文字String
  76. g.setColor(Color.WHITE); // 设置画笔颜色
  77. g.setFont(new Font("微软雅黑",Font.BOLD,40)); // 设置字体
  78. g.drawString("摁下空格开始游戏",300,300);
  79. }
  80. // 失败提醒
  81. if (isFail){
  82. g.setColor(Color.RED);
  83. g.setFont(new Font("微软雅黑", Font.BOLD,40));
  84. g.drawString("摁下空格开始游戏", 200, 300);
  85. }
  86. if (isPass) {
  87. g.setColor(Color.YELLOW);
  88. g.setFont(new Font("微软雅黑", Font.BOLD, 40));//设置字体
  89. g.drawString("游戏通关!", 350, 300);
  90. }
  91. }
  92. // 接收键盘的输入:监听
  93. @Override
  94. public void keyPressed(KeyEvent e) {
  95. //键盘摁下 未释放
  96. // 获取输入哪个键
  97. int keyCode = e.getKeyCode();
  98. if (keyCode == KeyEvent.VK_SPACE){ // 如果摁下空格键 则改变启动或暂停状态
  99. if (isFail){ // 失败 游戏重新开始
  100. isFail = false;
  101. init(); // 重新初始化游戏
  102. }else {
  103. isStart = !isStart;
  104. }
  105. repaint(); //刷新界面
  106. }
  107. // 键盘控制走向
  108. if(keyCode == KeyEvent.VK_LEFT){
  109. fx = "L";
  110. }else if (keyCode == KeyEvent.VK_UP){
  111. fx = "U";
  112. }else if (keyCode == KeyEvent.VK_DOWN){
  113. fx = "D";
  114. }else if (keyCode == KeyEvent.VK_RIGHT){
  115. fx = "R";
  116. }
  117. }
  118. // 定时器 :监听时间流动 执行定时操作
  119. @Override
  120. public void actionPerformed(ActionEvent e) {
  121. //随着分数增加,蛇的运动速度加快,难度增大,并判断是否已通关
  122. int delay = 100 score / 5;
  123. timer.setDelay(delay);
  124. if (delay <= 20) {
  125. isPass = true;
  126. repaint();
  127. }
  128. // 如果游戏开始状态 并且游戏没有结束
  129. if (isStart&&isFail==false){
  130. // 右移
  131. for (int i = lenth 1; i > 0; i–) {
  132. snakeX[i] = snakeX[i1];
  133. snakeY[i] = snakeY[i1];
  134. }
  135. // 通过控制方向 让头部移动
  136. if (fx.equals("R")){
  137. snakeX[0] = snakeX[0] + 25;
  138. if (snakeX[0]>850){ isFail = true; }
  139. } else if (fx.equals("L")) {
  140. snakeX[0] = snakeX[0] 25;
  141. if (snakeX[0] < 25) { isFail = true;}
  142. } else if (fx.equals("U")) {
  143. snakeY[0] = snakeY[0] 25;
  144. if (snakeY[0] < 75) { isFail = true; }
  145. }else if (fx.equals("D")) {
  146. snakeY[0] = snakeY[0] + 25;
  147. if (snakeY[0] > 650) { isFail = true; }
  148. }
  149. // 如果小蛇的头于食物坐标重合
  150. if (snakeX[0]==foodx && snakeY[0]==foody){
  151. // 长度加一
  152. lenth++;
  153. snakeX[lenth 1] = foodx 1;
  154. snakeY[lenth 1] = foody 1;
  155. score = score + 10;
  156. // 重新生成食物
  157. foodx = 25 + 25 * random.nextInt(34);
  158. foody = 75 + 25 * random.nextInt(24);
  159. }
  160. // 结束判断
  161. for (int i = 1; i < lenth; i++) {
  162. if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){
  163. isFail = true;
  164. break;
  165. }
  166. }
  167. // 刷新界面
  168. repaint();
  169. }
  170. timer.start(); //让时间动起来
  171. }
  172. //——————————————————以下不用:
  173. @Override
  174. public void keyTyped(KeyEvent e) {
  175. // 键盘摁下 弹起
  176. }
  177. @Override
  178. public void keyReleased(KeyEvent e) {
  179. // 释放某个键
  180. }
  181. }

其中的图片可以更换成自己喜欢的贪吃蛇,并且可以通过改变参数使贪吃蛇加快移动速度,当完成了贪吃蛇小游戏后 ,还能温习学到的Java知识。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/qq_51555533/article/details/115670754

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 基于Java实现简单贪吃蛇游戏 https://www.kuaiidc.com/108207.html

相关文章

发表评论
暂无评论