服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 基于Java实现简单贪吃蛇游戏

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

2021-09-07 12:36小吴学JAVA Java教程

这篇文章主要为大家详细介绍了基于Java实现简单贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

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

延伸 · 阅读

精彩推荐
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7472021-02-04
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17