用Java编写精典小游戏——贪吃蛇!

前言

  我想贪吃蛇应该是不少90后和00后的童年(我本人是01年的),回想起从前偷偷拿着我爹的诺基亚在被窝里玩贪吃蛇,不禁感慨万分,时间飞逝,没想到10年后的我也可以自己做一个贪吃蛇了。
  



  
该程序主要实现了以下功能:
  1.按空格开始游戏、暂停游戏或重新开始游戏。
  2.方向键控制蛇移动的方向。
  3.蛇吃掉食物可以增长,并增加游戏分数(不会加快游戏速度)。
  4.蛇咬到自己会结束游戏。
  5.蛇撞到游戏区域外会结束游戏。
  
  接下来放出源码,为了让初学者也能够理解,我尽量将大部分代码写了注释:
  

测试类

public class Test {public static void main(String[] args) {Snake snake = new Snake();snake.myJFrame();}
}

  

Snake类

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;public class Snake extends JFrame implements KeyListener, ActionListener, MouseListener {int slong = 2;//蛇当前长度//蛇坐标int[] Snakex = new int[100];int[] Snakey = new int[100];int fx = 1;//蛇的方向 0-左 1-右 2-上 3-下Timer timer = new Timer(100, this);//设置定时器,每100毫秒一次//食物位置int foodx;int foody;Random random = new Random();//随机数,随机位置生成食物int started = 0;//游戏信息 0-未开始 1-开始 2-结束//---------------------------------------------------------------------------------------------------------------------//窗体public void myJFrame() {this.setTitle("贪吃蛇"); //标题this.setSize(800, 600); //窗口大小this.setResizable(false); //窗口是否可以改变大小=否this.setDefaultCloseOperation(Snake.EXIT_ON_CLOSE); //窗口关闭方式为关闭窗口同时结束程序int width = Toolkit.getDefaultToolkit().getScreenSize().width; //获取屏幕宽度int height = Toolkit.getDefaultToolkit().getScreenSize().height; //获取屏幕高度
//        System.out.println("宽度:"+width);//测试
//        System.out.println("高度:"+height);//测试this.setLocation((width - 800) / 2, (height - 600) / 2); //设置窗口默认位置以屏幕居中this.setFocusable(true);this.addKeyListener(this);this.setVisible(true); //窗口是否显示=是//        蛇的初识位置Snakex[0] = 60;Snakey[0] = 100;Snakex[1] = 40;Snakey[1] = 100;//        随机食物的初识位置foodx = random.nextInt(39);foody = random.nextInt(22);foodx = foodx * 20;foody = foody * 20 + 80;System.out.println(foodx + "," + foody);}//---------------------------------------------------------------------------------------------------------------------//覆写paint方法,绘制界面public void paint(Graphics g) {//        绘制背景g.setColor(Color.LIGHT_GRAY);g.fillRect(0, 0, 800, 600);//绘制游戏区域g.setColor(Color.black);g.fillRect(0, 80, 800, 520);//绘制蛇for (int i = 0; i < slong; i++) {g.setColor(Color.CYAN);g.fillRect(Snakex[i], Snakey[i], 20, 20);}//        绘制食物g.setColor(Color.yellow);g.fillOval(foodx, foody, 20, 20);if (started == 0) {g.setColor(Color.BLACK);//设置画笔颜色g.setFont(new Font("微软雅黑", 10, 20)); //设置字体g.drawString("按下“空格键”开始游戏", 300, 65); //绘制字符} else if (started == 1) {g.setColor(Color.BLACK);//设置画笔颜色g.setFont(new Font("微软雅黑", 10, 20)); //设置字体g.drawString("当前分数为:", 300, 65); //绘制字符g.drawString(String.valueOf(slong - 2), 420, 65); //绘制字符} else if (started == 2) {g.setColor(Color.BLACK);//设置画笔颜色g.setFont(new Font("微软雅黑", 10, 20)); //设置字体g.drawString("游戏结束-", 250, 65); //绘制字符g.drawString("最终分数为:", 350, 65); //绘制字符g.drawString(String.valueOf(slong - 2), 470, 65); //绘制字符}}//    操作监听——控制蛇的不断移动@Overridepublic void actionPerformed(ActionEvent e) {//        判断游戏是否开始if (started == 1) {//            通过循环控制蛇移动for (int i = slong - 1; i > 0; i--) {Snakex[i] = Snakex[i - 1];Snakey[i] = Snakey[i - 1];}//            判断蛇移动的方向if (fx == 0) {Snakex[0] = Snakex[0] - 20;} else if (fx == 1) {Snakex[0] = Snakex[0] + 20;} else if (fx == 2) {Snakey[0] = Snakey[0] - 20;} else if (fx == 3) {Snakey[0] = Snakey[0] + 20;}//            判断蛇是否撞到墙外if (Snakex[0] < 0 || Snakex[0] > 780 || Snakey[0] < 80 || Snakey[0] > 580) {started = 2;}//            判断蛇是否吃到了食物if (Snakex[0] == foodx && Snakey[0] == foody) {slong++;foodx = random.nextInt(39);foody = random.nextInt(22);foodx = foodx * 20;foody = foody * 20 + 80;System.out.println(foodx + "," + foody);}//            判断是否吃到了自己for (int i = 1; i < slong; i++) {if (Snakex[0] == Snakex[i] && Snakey[0] == Snakey[i]) {started = 2;}}//            判断食物是否随机在了蛇身上for (int i = 0; i < slong; i++) {if (foodx == Snakex[i] && foody == Snakey[i]) {//        随机食物的初识位置foodx = random.nextInt(39);foody = random.nextInt(22);foodx = foodx * 20;foody = foody * 20 + 80;System.out.println(foodx + "," + foody);}}repaint();}timer.start();}//    输入@Overridepublic void keyTyped(KeyEvent e) {}//    键盘按下——控制游戏的开始以及蛇的移动方向@Overridepublic void keyPressed(KeyEvent e) {//        获取从键盘输入的键int key = e.getKeyCode();
//        判断是否为空格if (key == KeyEvent.VK_SPACE) {if (started == 0) {started = 1;} else if (started == 1) {started = 0;} else if (started == 2) {started = 0;slong = 2;//蛇当前长度//        蛇的初识位置Snakex[0] = 60;Snakey[0] = 100;Snakex[1] = 40;Snakey[1] = 100;//        随机食物的初识位置foodx = random.nextInt(39);foody = random.nextInt(22);foodx = foodx * 20;foody = foody * 20 + 80;//                初始化方向fx = 1;}repaint();timer.start();//            左} else if (key == KeyEvent.VK_LEFT) {if (fx != 1) {fx = 0;}
//            右} else if (key == KeyEvent.VK_RIGHT) {if (fx != 0) {fx = 1;}
//            上} else if (key == KeyEvent.VK_UP) {if (fx != 3) {fx = 2;}
//下} else if (key == KeyEvent.VK_DOWN) {if (fx != 2) {fx = 3;}}}//    弹起@Overridepublic void keyReleased(KeyEvent e) {}//    点击@Overridepublic void mouseClicked(MouseEvent e) {}//    按下@Overridepublic void mousePressed(MouseEvent e) {}//    抬起@Overridepublic void mouseReleased(MouseEvent e) {}//    进入@Overridepublic void mouseEntered(MouseEvent e) {}//    离开@Overridepublic void mouseExited(MouseEvent e) {}
}

  

结束语

  
  测试的次数不多,不知道还有多少隐藏BUG,但我平常玩的时候是没有问题的,如果你在玩的时候发现了BUG欢迎来私聊我,如果能带着解决方法来的话那就更好了。
  
  我一直坚持“分享知识”的原则,免费透明的将代码公开展示,如果帮到了你,请顺手点个赞吧(#^.^#)。
  

Java贪吃蛇全代码相关推荐

  1. Day19-22 2021/10/13-16 JAVA贪吃蛇 全注释版

    Day19-22 2021/10/13-16 贪吃蛇 帧:如果时间足够小 就是动画 键盘监听 定时器 Timer package snale; import javax.swing.*; /*** @ ...

  2. java贪吃蛇游戏代码下载_java实现贪吃蛇游戏代码(附完整源码)

    免费资源网,https://freexyz.cn/ 先给大家分享源码,喜欢的朋友点此处下载. 游戏界面 GUI界面 java实现贪吃蛇游戏需要创建一个桌面窗口出来,此时就需要使用java中的swing ...

  3. java贪吃蛇不能回头,儿时回忆!泪流满面,Java 实现贪吃蛇游戏的示例(附代码)...

    image.png image.png java实现贪吃蛇游戏需要创建一个桌面窗口出来,此时就需要使用java中的swing控件 创建一个新窗口 JFrame frame = new JFrame(& ...

  4. java贪吃蛇代码_java实现贪吃蛇游戏代码(附完整源码)

    先给大家分享源码,喜欢的朋友点此处下载. 游戏界面 GUI界面 java实现贪吃蛇游戏需要创建一个桌面窗口出来,此时就需要使用java中的swing控件 创建一个新窗口 JFrame frame = ...

  5. Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解)

      分享一个我刚刚写的贪吃蛇小游戏,非常简短的代码实现方法.这可能是全网最简单实现方法,效果图如下: ps 最新贪吃蛇源码+教学视频+论文下载 java贪吃蛇  有多简短呢 ? 上代码!!   一共四 ...

  6. Java 贪吃蛇游戏引言

    欢迎关注公众号: 贪吃蛇小游戏是一款十分经典的小游戏,适合用于新手的练习,花了近两个月的时间,终于可以运行出比较完善的贪吃蛇了,相比于CSDN中的大神,花个几天的时间就可以做出Java版本的贪吃蛇小游 ...

  7. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

  8. Java贪吃蛇应用的设计与实现

    今天来实现一个简单的贪吃蛇应用,效果如下: 这里把大概实现过程跟大家讲解一下,完整的教程比较长, 在网上能找到不少贪吃蛇的代码,但是往往写得比较乱,甚至有所有代码都包含在一个类中的情况,对于初学者而言 ...

  9. html贪吃蛇自动走,分享一个用html5实现的贪吃蛇特效代码

    本篇小编为大家分享一个用html5实现的简单贪吃蛇特效代码,喜欢的小伙伴们可以看一下 Snake //内置大量BUG,I'm sorry. var lev=100; //定时器间隔时间 var num ...

  10. html5实现贪吃蛇,分享一个用html5实现的贪吃蛇特效代码

    本篇小编为大家分享一个用html5实现的简单贪吃蛇特效代码,喜欢的小伙伴们可以看一下 Snake //内置大量BUG,I'm sorry. var lev=100; //定时器间隔时间 var num ...

最新文章

  1. tensorflow基础-placeholder
  2. Python快速学习09: 函数的参数
  3. linux循环条件,shell脚本编写 之 条件选择,条件判断,循环语句
  4. 最详细的java泛型详解
  5. zabbix3.2学习笔记(二):服务端安装
  6. threejs 局部辉光
  7. opencv BRIEF角检测
  8. 【Python】安装方法小结
  9. Android开发实践:线程与异步任务
  10. mybatis多参数传递(其中包括数组)
  11. web前端常用开发工具有哪些?
  12. sqlserver2008导入mysql_SQL Server 2008怎么导入sql文件?-SQL Server 2008导入sql文件的三种方法 - 河东软件园...
  13. Linux 服务器CPU占用率100%,使用率高解决方案
  14. IDEA 社区版配置Tocat(超详细)
  15. UVA1586 Molar Mass(分子量)
  16. eclipse设置工作空间的默认编码和设置项目的编码
  17. git push 提交失败
  18. 关于‘\0’ ,‘0’, “0” ,0的理解
  19. 高级shell编程笔记(第十三章 系统与管理命令)
  20. 南京信息工程计算机老师,南京信息工程大学计算机与软件学院导师教师师资介绍简介-姚永雷...

热门文章

  1. Java图书管理系统(控制台程序)
  2. 傅里叶变换和拉普拉斯变换
  3. nfine框架连接oracle,NFine快速开发框架(无后门)
  4. eclipse导入jsp项目
  5. ECharts中国地图篇-名称经纬度调整
  6. 服务器如何安装虚拟声卡,虚拟声卡驱动VirtualAudioCable安装使用设置教程
  7. 基于二叉链表的二叉树最长路径的求解
  8. 《深入理解计算机系统》CSAPP第三章知识点归纳(看完一遍复习专用)
  9. 研磨设计模式-设计模式的基础-设计模式有什么
  10. 外卖红包小程序0基础搭建附教程+源码