贪吃蛇游戏的设计步骤:

Part 1:  

  设计游戏图纸

  画出900*700的白色窗口

  在窗口上添加画布

  在画布上添加标题

  在画布上添加黑色游戏区

Part 2:

  放置静态的蛇:一个头、两个身体

  加上开始提示:按空格键开始游戏

  让蛇动起来:监听Timer事件,平移数据

  实现游戏暂停

  实现转向功能

Part 3:

  添加食物

  吃掉食物

  添加死亡条件

  实现“重新开始”功能

  添加分数和长度

游戏图纸如下:

蛇及游戏框的素材如下:

                            

图片下载地址     链接:https://pan.baidu.com/s/1jH6xnXc 密码:hqze

Snake主类:

 1 package snake;
 2
 3 import javax.swing.JFrame;
 4 import javax.swing.JPanel;
 5
 6 public class Snake {
 7
 8     public static void main(String[] args) {
 9
10         JFrame frame = new JFrame(); // 创建一个游戏界面的框架
11         frame.setBounds(10, 10, 900, 720); // 设置框架的大小
12         frame.setResizable(false); // 设置框架大小为不能改变
13         // 点击关闭按钮 关闭游戏界面
14         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
15
16         SnakePanel panel = new SnakePanel();  //添加画布
17         frame.add(panel); // 刚添加时画布是空的看不到
18
19         frame.setVisible(true); // 允许显示游戏界面
20     }
21
22 }

SnakePanel类:

  1 package snake;
  2
  3 import java.awt.Color;
  4 import java.awt.Font;
  5 import java.awt.Graphics;
  6 import java.awt.event.ActionEvent;
  7 import java.awt.event.ActionListener;
  8 import java.awt.event.KeyEvent;
  9 import java.awt.event.KeyListener;
 10 import java.util.Random;
 11
 12 import javax.swing.ImageIcon;
 13 import javax.swing.JPanel;
 14 import javax.swing.Timer;
 15
 16 public class SnakePanel extends JPanel implements KeyListener,ActionListener{
 17
 18     // 定义七个图片变量,代表七张图片
 19     ImageIcon up = new ImageIcon("up.png"); // 向上的蛇头
 20     ImageIcon down = new ImageIcon("down.png"); // 向下的蛇头
 21     ImageIcon left = new ImageIcon("left.png"); // 向左的蛇头
 22     ImageIcon right = new ImageIcon("right.png"); // 向右的蛇头
 23     ImageIcon food = new ImageIcon("food.png");  // 食物
 24     ImageIcon body = new ImageIcon("body.png");  // 蛇的身体
 25     ImageIcon title = new ImageIcon("title.jpg"); // 游戏界面的主题
 26
 27     // 蛇的每一部分
 28     int[] snakex = new int [750];
 29     int[] snakey = new int [750];
 30
 31     // 随机生成食物
 32     Random rand = new Random();
 33     int foodx = rand.nextInt(34)*25+25; //此处的数值根据自己设计的游戏界面的大小来确定
 34     int foody = rand.nextInt(24)*25+75;
 35
 36     // 设置游戏的默认属性
 37     int len = 3;
 38     int score = 0;
 39     String direction = "R"; // U上 D下 L左 R右
 40
 41     boolean isStarted = false; // 判断游戏是否开始
 42     boolean isFailed = false; // 判断游戏是否结束
 43
 44     Timer timer = new Timer(100,this); // 每100毫秒调用一次ActionPerformed
 45
 46
 47     public SnakePanel() { // 建造画布的构造函数
 48         this.setFocusable(true);  // 获取焦点
 49         this.addKeyListener(this); // 监听键盘事件
 50         setup();
 51         timer.start();
 52     }
 53
 54     public void paint(Graphics g) { // Graphics 画笔
 55
 56         this.setBackground(Color.BLACK); // 设置画布背景颜色
 57         title.paintIcon(this, g, 25, 11);// 放置主题图片
 58         g.fillRect(25, 75, 850, 650); // 用画笔设置游戏方框
 59
 60         // 画蛇头(注意判断蛇头的方向)
 61         if (direction.equals("R"))
 62             right.paintIcon(this, g, snakex[0], snakey[0]);
 63         else if (direction.equals("L"))
 64             left.paintIcon(this, g, snakex[0], snakey[0]);
 65         else if (direction.equals("U"))
 66             up.paintIcon(this, g, snakex[0], snakey[0]);
 67         else if (direction.equals("D"))
 68             down.paintIcon(this, g, snakex[0], snakey[0]);
 69
 70         // 画蛇的身体
 71         for(int i = 1; i < len; i ++)
 72             body.paintIcon(this, g, snakex[i], snakey[i]);
 73
 74         // 判断如果游戏没开始显示。。。
 75         if (!isStarted){
 76             g.setColor(Color.WHITE);
 77             g.setFont(new Font("arial",Font.BOLD, 30));
 78             g.drawString("Press Space to start / pause", 200, 300);
 79         }
 80
 81         // 判断如果游戏结束显示。。。
 82         if (isFailed){
 83             g.setColor(Color.WHITE);
 84             g.setFont(new Font("arial",Font.BOLD, 30));
 85             g.drawString("Game Over ! Press space to restart", 200, 300);
 86         }
 87
 88         // 显示食物
 89         food.paintIcon(this, g, foodx, foody);
 90
 91         // 设置分数和蛇的长度
 92         g.setColor(Color.WHITE);
 93         g.setFont(new Font("arial",Font.PLAIN,15));
 94         g.drawString("Score : "+score, 650, 37);
 95         g.drawString("Len :"+len, 650, 57);
 96     }
 97
 98     public void setup() { // 游戏初始化
 99         isStarted = false;
100         isFailed = false;
101         len = 3;
102         score = 0;
103         snakex[0] = 100; snakex[1] = 75; snakex[2] = 50;
104         snakey[0] = 100; snakey[1] = 100; snakey[2] = 100;
105     }
106
107     @Override
108     public void keyPressed(KeyEvent e) {
109
110         //实现键盘响应
111         int KeyCode = e.getKeyCode();
112         if (KeyCode == KeyEvent.VK_SPACE){ // 敲击空格现实/消除提示信息
113             if (isFailed){
114 //                isStarted = false;  // 可以将这两行放入setup中
115 //                isFailed = false;
116                 setup();
117             }else
118                 isStarted = !isStarted;
119         } else if (KeyCode ==  KeyEvent.VK_UP && direction != "D")
120                 direction = "U";
121           else if (KeyCode ==  KeyEvent.VK_DOWN && direction != "U" )
122                 direction = "D";
123           else if (KeyCode ==  KeyEvent.VK_RIGHT && direction != "L")
124                 direction = "R";
125           else if (KeyCode ==  KeyEvent.VK_LEFT && direction != "R")
126                 direction = "L";
127     }
128
129     @Override
130     public void actionPerformed(ActionEvent e) {
131         // 1. 再定义一个闹钟
132         timer.start();
133
134         // 2. 移动数据
135         if (isStarted && !isFailed){
136             // 移动身体
137         for (int i = len; i>0; i--){
138             snakex[i] = snakex[i-1];
139             snakey[i] = snakey[i-1];
140         }
141         // 移动头
142         if (direction.equals("R")){
143             snakex[0] = snakex[0] + 25;
144             if(snakex[0] > 850) snakex[0] = 25;
145             }else if (direction.equals("L")){
146                 snakex[0] = snakex[0] - 25;
147                 if(snakex[0] < 25) snakex[0] = 850;
148             }else if (direction.equals("U")){
149                 snakey[0] = snakey[0] - 25;
150                 if (snakey[0] < 75) snakey[0] = 650;
151             }else if (direction.equals("D")){
152                 snakey[0] = snakey[0] + 25;
153                 if (snakey[0] > 650) snakey[0] = 75;
154             }
155
156             if (snakex[0] == foodx && snakey[0] == foody){  // 吃食物
157                     len ++;
158                     score ++;
159                     foodx = rand.nextInt(34)*25+25;
160                     foody = rand.nextInt(24)*25+75;
161             }
162
163             for (int i = 1; i < len; i ++){  // 如果蛇头碰到自己的身体游戏结束
164                 if (snakex[0] == snakex[i] && snakey[0] == snakey[i]){
165                     isFailed = true;
166                 }
167             }
168
169         }
170         // 3. repaint()
171             repaint();
172     }
173
174     @Override
175     public void keyTyped(KeyEvent e) {
176
177     }
178
179     @Override
180     public void keyReleased(KeyEvent e) {
181
182     }
183 }

游戏效果如下:

用Java写贪吃蛇小游戏相关推荐

  1. 简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏

    本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public stat ...

  2. Java开发贪吃蛇小游戏

    Java开发贪吃蛇小游戏 文章目录 Java开发贪吃蛇小游戏 一.开发思路 二.具体开发过程 1.绘制静态游戏窗口 2.导入素材图标 3.绘制游戏面板 4.绘制一条静态的小蛇 5.让小蛇动起来 ①监听 ...

  3. Java实现贪吃蛇小游戏(附完整源码)

    今天我就从零开始来完成这个小游戏,完成的方式也是一步一步的添加功能这样的方式来实现. 第一步完成的功能:写一个界面 大家见到的贪吃蛇小游戏,界面肯定是少不了的.因此,第一步就是写一个小界面. 实现代码 ...

  4. Java Swing 贪吃蛇小游戏

    静态资源参考: 注:实际上没有用到header.png. 工程目录: 源码: package snake;import javax.swing.*; import java.net.URL;/*** ...

  5. 用 Java 实现贪吃蛇小游戏

    程序说明 这是一个用 Java Awt 实现的贪吃蛇小游戏的完整代码 算法分析 (一)启动一个独立线程根据 direction 重绘面板实现蛇身移动效果,运行过程: 记录上次头部的坐标到 tempBo ...

  6. JAVA版贪吃蛇小游戏

    这是一篇关于JAVA的贪吃蛇游戏,源代码的部分在下面正文中介绍,图片和音频的部分都放在百度云盘,需要的自行下载. 文章目录 开发环境 一.下载方法 二.运行效果展示 三.项目结构以及主程序入口 1.项 ...

  7. 【笔记】用vs2017 c语言写 贪吃蛇 小游戏

    目录 文章目录 前言 一.贪吃蛇游戏 设计逻辑 二.详细介绍 1.设置界面(界面大小,背景颜色) 2.设置贪吃蛇的身体并显示 3.使之能够移动并能够穿墙 4.添加食物并让蛇吃掉 5.设置背景音乐 完整 ...

  8. java 实现贪吃蛇小游戏

    在贪吃蛇游戏中,贪吃蛇的移动可以看作是一个先进先出的队列(从蛇尾的角度看),因此我们在C语言实现贪吃蛇小游戏一文中使用了循环链接表作为队来存储蛇身节点,在 python实现贪吃蛇小游戏一文中,使用列表 ...

  9. python100行代码-怎样写贪吃蛇小游戏?用100行python代码轻松解决!

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

最新文章

  1. Python为给定模型执行留一法交叉验证实战LOOCV(leave-one-out cross-validation)
  2. 关于机器学习中的一些常用方法的补充
  3. 科略教育——执行力的3W管理法
  4. Lua 通过 alien 库调用 zlib 压缩/解压
  5. 【Bugly 技术干货】Android开发必备知识:为什么说Kotlin值得一试
  6. 面试:TCP协议面试10连问,总会用得到,值得收藏!
  7. 输出有样式的php,PHP导出带样式的Excel
  8. css布局与ldquo;切图rdquo;
  9. ROS Nodelet使用
  10. Golang网络游戏协议处理框架
  11. Java web技术及应用答案_超星《Java Web应用开发技术》答案
  12. 2022最新Android项目导入过程(以Android studio2021.2.1为例)
  13. php通讯hpsocket,HP-Socket 远程通信 服务端 客户端 源码
  14. 魔法表格(MagicTable)入门教程--CAD转Excel、CAD多个表格批量转Excel
  15. 北航计算机组成原理课程设计-2021秋 PreProject-MIPS-MIPS 汇编程序设计
  16. 判断闰年java_java中判断是否闰年
  17. ds5100更换电池 ibm_IBMDS5100更换电池
  18. 营收数据增长的京东物流,期待“外部探索”
  19. 激光3D打印做饭或更香,下一代大厨问世
  20. 激活windows系列地址

热门文章

  1. 游戏本天梯_给新生的游戏本推荐指南
  2. 将txt导入mysql_将Excel或txt导入Mysql(转载)
  3. 简洁商务风公司产品介绍通用PPT模板
  4. 手机CPU知识扫盲:谈谈手机CPU架构与原理 (全
  5. php贴吧源码,FluxBB v1.5.11 php论坛贴吧源码下载
  6. 使用Amazon S3下载HCP数据
  7. python简单代码演示效果-python制作演示动画
  8. mpvue使用vuex基本步骤以及如何使用
  9. 怎么给PDF签名?来看看这几个方法吧
  10. Unity3D 游戏引擎之FBX模型的载入与人物行走动画的播放【转】