前言

贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃东西,从而使得蛇变得越来越长。

本程序是通过java的swing来实现《贪吃蛇大作战》这款游戏。

主要需求

1、通过上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,蛇的身体会变长

2、蛇头碰到自己的身体,则算失败

主要设计

1、设置swing的窗体大小

2、随机初始化蛇的位置和食物的位置,且食物不能落在蛇的身体上。

4、添加键盘监听器,监听上下左右的方向键,来控制蛇的上下左右运动

5、蛇运行时,头向前走一步,增加一个头部节点,去掉尾部节点。

6、蛇吃了一个食物后,蛇的尾部节点添加一个节点,食物消失。

7、食物每次被蛇吃掉后,要随机再次生成一个新的食物节点。

8、有个计数器,统计蛇的长度和积分,吃一个食物,蛇的长度+1,积分+10

9、通过按空格开始/暂停游戏

功能截图

代码实现

启动类

public class StartGame {public static void main(String[] args) {JFrame jf=new JFrame("贪吃蛇大作战");jf.setBounds(100, 100, 905, 720);jf.setResizable(false);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.add(new GamePanel());jf.setVisible(true);}}

游戏核心类

public class GamePanel extends JPanel implements KeyListener,ActionListener{//蛇的数据结构static int i=0;int length;int[] snakex=new int[600];int[] snakey=new int[600];String fx;boolean isStart=false;boolean isfail=false;int lx,ly;//吃食物后多出来一个的坐标//目标的数据结构int foodx,foody;//随机数Random random =new Random();//计时器Timer timer=new Timer(100, this);int score;public GamePanel(){init();//添加键盘监听器this.addKeyListener(this);//必须设置可以获得焦点才能监听到键盘事件this.setFocusable(true);timer.start();}public void init(){score=0;length=3;snakex[0]=100;snakey[0]=100;snakex[1]=75;snakey[1]=100;snakex[2]=50;snakey[2]=100;fx="R";foodx=25+25*random.nextInt(850/25);foody=75+25*random.nextInt(600/25);}protected void paintComponent(Graphics g) {super.paintComponent(g);//清屏,这样不会闪烁this.setBackground(Color.white);Data.headicno.paintIcon(this, g, 25, 11);g.setColor(new Color(104,197,107));g.fillRect(25, 75, 850, 600);//蛇头的绘制if(fx.equals("U")){Data.upicno.paintIcon(this, g, snakex[0], snakey[0]);}else if(fx.equals("D")){Data.downicno.paintIcon(this, g, snakex[0], snakey[0]);}else if(fx.equals("L")){Data.lefticno.paintIcon(this, g, snakex[0], snakey[0]);}else if(fx.equals("R")){Data.righticno.paintIcon(this, g, snakex[0], snakey[0]);}//蛇身体绘制for(int i=1;i<length;++i){Data.bodyicno.paintIcon(this, g, snakex[i], snakey[i]);}//食物的绘制Data.foodicon.paintIcon(this, g, foodx, foody);//暂停开始状态的绘制if(isStart==false){g.setFont(new Font("微软雅黑",Font.BOLD,40));g.setColor(Color.WHITE);g.drawString("按空格开始/暂停游戏", 275, 350);}//失败情况的绘制if(isfail==true){g.setFont(new Font("微软雅黑",Font.BOLD,40));g.setColor(Color.red);g.drawString("失败!按空格重新开始", 275, 350);}//积分的绘制g.setColor(Color.PINK);g.setFont(new Font("微软雅黑", Font.ITALIC, 15));g.drawString("长度: "+length, 800, 30);g.drawString("积分: "+score, 800, 55);}//实现键盘监听的接口方法@Overridepublic void keyPressed(KeyEvent e) {int keycode=e.getKeyCode();//空格键暂停或者重开if(keycode==KeyEvent.VK_SPACE){if(isfail==true){System.out.println(1);init();isfail=false;}else{System.out.println(2);isStart=!isStart;repaint();}}//上下左右if(keycode==KeyEvent.VK_UP){fx="U";}else if(keycode==KeyEvent.VK_DOWN){fx="D";//System.out.println("down");}else if(keycode==KeyEvent.VK_LEFT){fx="L";}else if(keycode==KeyEvent.VK_RIGHT){fx="R";}}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e){}@Overridepublic void actionPerformed(ActionEvent e) {if(isStart==true&&isfail==false){//身体移动lx=snakex[length-1];ly=snakey[length-1];for(int i=length-1;i>0;--i){snakex[i]=snakex[i-1];snakey[i]=snakey[i-1];}//头移动if(fx=="U"){snakey[0]-=25;if(snakey[0]<75)snakey[0]=650;}else if(fx=="D"){snakey[0]+=25;if(snakey[0]>650)snakey[0]=75;}else if(fx=="L"){snakex[0]-=25;if(snakex[0]<25)snakex[0]=850;}else if(fx=="R"){snakex[0]+=25;if(snakex[0]>850)snakex[0]=25;}//失败判定for(int i=1;i<length;++i){if(snakex[i]==snakex[0]&&snakey[i]==snakey[0]){isfail=true;}}//吃食物if(snakex[0]==foodx&&snakey[0]==foody){length++;score+=10;snakex[length-1]=lx;snakey[length-1]=ly;foodx=25+25*random.nextInt(850/25);foody=75+25*random.nextInt(600/25);}repaint();}}}

总结

通过此次的《贪吃蛇大作战》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。

源码获取

源码下载地址:传送门------->

可关注博主后,私聊博主免费获取
需要技术指导,写项目程序,等更多服务请联系博主

今天是持续写作的第 1 / 100 天。
可以关注我,点赞我、评论我、收藏我啦。

JAVA 实现《贪吃蛇大作战》游戏|CSDN创作打卡相关推荐

  1. 基于java的俄罗斯方块游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    基于Java的俄罗斯方块游戏的设计与实现 俄罗斯方块是一款风靡全球,从一开始到现在都一直经久不衰的电脑.手机.掌上游戏机产品,是一款游戏规则简单,但又不缺乏乐趣的简单经典小游戏,上手容易,适用范围广泛 ...

  2. java实现俄罗斯方块游戏

    1.功能需求 2.软件功能架构图 3.界面设计 4.程序逻辑图 5.实现代码 创建控制面板并添加按钮 初始化界面 添加事件监听 创建方块 实现对方块操作 游戏主类,实现游戏控制 功能需求 1. 在二维 ...

  3. JAVA 实现《大富翁》游戏|CSDN创作打卡

    前言 大富翁,又名地产大亨.是一种多人策略图版游戏.参与者分得游戏金钱,凭运气(掷骰子)及交易策略,买地.建楼以赚取租金.英文原名monopoly意为"垄断",因为最后只得一个胜利 ...

  4. JAVA 实现《坦克大战》游戏|CSDN创作打卡

    前言 小时候大家都玩过坦克大战吧,熟悉的旋律和丰富的关卡陪伴了我们一整个寒暑假,还记得传说中的经典坦克大战 吗?那些怀旧的记忆,伴随着我们一起走过来的经典坦克大战,刚开始那战战兢兢,屡屡被敌人坦克击毁 ...

  5. JAVA 实现《五子棋》游戏|CSDN创作打卡

    前言 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜. 棋具与围 ...

  6. JAVA 实现《扫雷》游戏|CSDN创作打卡

    前言 windows自带的游戏<扫雷>是陪伴了无数人的经典游戏,本程序参考<扫雷>的规则进行了简化,用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对 ...

  7. 《Redis系列第三篇、incr与decr使用|CSDN创作打卡》

    incr与decr的效率要高于set操作,故而个人在开发过程中用作高并发的时候的限制器,效果非常nice的. 接下来看看具体用法与官方解释啊. incr自增·将存储的key数字加一 使用方法 incr ...

  8. Spring框架之Spring Boot框架搭建详解|CSDN创作打卡

    一.IDEA搭建Spring Boot 1.打开IDEA选择file-new-Project 2.进入新界面先选择Spring Initializr,然后选择SDK版本,及 Initializr Se ...

  9. [ Linux ] systemd启动文件系统流程|CSDN创作打卡

    文章目录 systemd介绍 第一步 启动 Target 确认级别 第二步 启动服务 配置文件的区块 systemd与[init进程](https://blog.csdn.net/weixin_435 ...

最新文章

  1. 30005 rust_Steam三连冠老游戏《腐蚀(RUST)》为什么突然火起来了?
  2. iSCSI原理和实现
  3. java学习:Iterator数据加工厂
  4. asp.net代码审计起始篇之系统搭建
  5. 自编码器及其相关模型
  6. MFC动态按钮的创建及其消息响应 和 自定义消息
  7. 【转】ABP源码分析三十四:ABP.Web.Mvc
  8. 清北学堂培训2019.4.4
  9. Oracle11完全卸载方法
  10. 【clickhouse】ClickHouse中的低基数(LowCardinality)类型
  11. Windows Phone 7 Belling‘s课堂(一) 磁贴的学习
  12. AI ProCon 2020第一天:40+大厂专家共话AI技术应用下一个十年!
  13. win7局域网访问共享文件取消需要密码的方法(完美解决)。
  14. 7-8 哈利·波特的考试 (20 分)
  15. 计算机组成原理下列数中最小的数位,计算机组成原理试题(四)
  16. android swstnw cn,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
  17. 《Vision based autonomous driving - A survey of recent methods》读书笔记
  18. 深度学习基础知识点【更新中】
  19. PyTorch nn.CrossEntropyLoss() dimension out of range (expected to be in range of [-1, 0], but got 1)
  20. PS系列 -- 颜色替换

热门文章

  1. php股票波动率计算公式,因子选股系列:波动率因子的改进,异质波动率
  2. OM | 运筹学在医疗运营管理中的应用
  3. 2019年11月中国大陆编程语言排行榜
  4. Android 实现录音功能
  5. 肖邦21首夜曲 简略介绍
  6. Java与模式学习笔记 —— 桥梁(Bridge)模式
  7. day60:thymeleaf
  8. win7 sp2 好神奇
  9. Latex插入灰白相间的跨页长表格
  10. 10个可视化图表数据网站推荐