在狂神的基础上只增加了回头判定(不能回头撞自己)

项目结构

项目代码

package com.jian.snake;import javax.swing.*;public class StartGame {public static void main(String[] args) {JFrame jFrame = new JFrame();jFrame.setBounds(10,10,900,720);jFrame.setResizable(false);jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jFrame.add(new GamePanel());jFrame.setVisible(true);}
}
package com.jian.snake;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;public class GamePanel extends JPanel implements KeyListener , ActionListener {//蛇的数据结构int length;int[] snakeX=new int[600];int[] snakeY=new int[500];String direction;int foodX;int foodY;int score;Random random=new Random();boolean isfalse=false;boolean isStart =false;Timer timer=new Timer(100,this);//构造器public GamePanel() {init();this.setFocusable(true);this.addKeyListener(this);}public void init(){length=3;snakeX[0]=100;snakeY[0]=100;snakeX[1]=75;snakeY[1]=100;snakeX[2]=50;snakeY[2]=100;direction="R";foodX=25 + 25*random.nextInt(34);foodY=75 + 25*random.nextInt(24);score=0;timer.start();}@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);this.setBackground(Color.white);Date.header.paintIcon(this,g,25,11);//头部广告栏画上去g.fillRect(25,75,850,600);//默认的游戏界面g.setColor(Color.white);g.setFont(new Font("微软雅黑",Font.BOLD,18));g.drawString("长度:"+length,750,35);g.drawString("分数:"+score,750,50);//食物Date.food.paintIcon(this,g,foodX,foodY);if (direction.equals("R")){Date.right.paintIcon(this,g,snakeX[0],snakeY[0]);}else if(direction.equals("L")){Date.left.paintIcon(this,g,snakeX[0],snakeY[0]);}else if(direction.equals("U")){Date.up.paintIcon(this,g,snakeX[0],snakeY[0]);}else if(direction.equals("D")){Date.down.paintIcon(this,g,snakeX[0],snakeY[0]);}//蛇for (int i = 1; i < length; i++) {Date.body.paintIcon(this,g,snakeX[i],snakeY[i]);}if (isStart==false){g.setColor(Color.white);g.setFont(new Font("微软雅黑",Font.BOLD,40));g.drawString("按下空格开始游戏",300,300);}if (isfalse){g.setColor(Color.red);g.setFont(new Font("微软雅黑",Font.BOLD,40));g.drawString("失败,按下空格重新开始 ",300,300);}}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();if(keyCode==KeyEvent.VK_SPACE){if (isfalse){isfalse=false;init();}else {isStart=!isStart;}repaint();}if(keyCode==KeyEvent.VK_UP){if (direction!="D"){direction="U";repaint();}}if(keyCode==KeyEvent.VK_LEFT){if (direction!="R"){direction="L";repaint();}}if(keyCode==KeyEvent.VK_DOWN){if (direction!="U"){direction="D";repaint();}}if(keyCode==KeyEvent.VK_RIGHT){if (direction!="L"){direction="R";repaint();}}}@Overridepublic void keyReleased(KeyEvent e) {}@Override//事件监听public void actionPerformed(ActionEvent e) {if (isStart  && isfalse==false){for (int i = length-1; i >0; i--) {snakeX[i]=snakeX[i-1];snakeY[i]=snakeY[i-1];}//吃食物if (snakeX[0]==foodX && snakeY[0]==foodY){length++;score+=10;foodX=25 + 25*random.nextInt(34);foodY=75 + 25*random.nextInt(24);}if(direction.equals("R")){snakeX[0]+=25;if (snakeX[0]>850){snakeX[0]=25;}}else if (direction.equals("L")){snakeX[0]-=25;if (snakeX[0]<25){snakeX[0]=850;}}else if (direction.equals("U")){snakeY[0]-=25;if (snakeY[0]<75){snakeY[0]=650;}}else if (direction.equals("D")){snakeY[0]+=25;if (snakeY[0]>650){snakeY[0]=75;}}for (int i = 1; i < length; i++) {if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){isfalse=true;}}repaint();}timer.start();}
}
package com.jian.snake;import javax.swing.*;
import java.net.URL;public class Date {public static URL headerURL=Date.class.getResource("statics/header.png");public static ImageIcon header=new ImageIcon(headerURL);public static URL upURL=Date.class.getResource("statics/up.png");public static URL downURL=Date.class.getResource("statics/down.png");public static URL leftURL=Date.class.getResource("statics/left.png");public static URL rightURL=Date.class.getResource("statics/right.png");public static ImageIcon up=new ImageIcon(upURL);public static ImageIcon down=new ImageIcon(downURL);public static ImageIcon left=new ImageIcon(leftURL);public static ImageIcon right=new ImageIcon(rightURL);public static URL bodyURL=Date.class.getResource("statics/body.png");public static ImageIcon body=new ImageIcon(bodyURL);public static URL foodURL=Date.class.getResource("statics/food.png");public static ImageIcon food=new ImageIcon(foodURL);
}

打包运行

素材

java贪吃蛇(跟着狂神做的,附贪吃蛇素材)相关推荐

  1. Java贪吃蛇暂停怎么做_Java实现贪吃蛇游戏(1小时学会)

    今天就来拿贪吃蛇小游戏来练练手吧! 贪吃蛇游戏规则: 1.按下空格键(游戏未结束)则游戏暂停或开始: 2.按下空格键(游戏结束后)则游戏重新开始: 3.当贪吃蛇的头部撞到身体时则贪吃蛇死亡(游戏结束) ...

  2. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  3. python经典教程游戏软件_手把手带领大家用Python来做经典游戏 — 贪吃蛇

    从头到尾,从无到有,逐步分析每一个环节的实现,旨在让大家真正搞清楚"如何用python做贪吃蛇". 课程内容: 基本逻辑 游戏逻辑 第一步.初始框架 第二步.绘制格子 第三步 ...

  4. “我想玩游戏!” 大佬:玩啥游戏,教你做一个智能贪吃蛇游戏!

    作者 | 李秋键 责编 | Carol 出品 | AI科技大本营(ID:rgznai100) 如果说这几年网络上最为常见的词语,其中必然会提到的便是人工智能. 人工智能的发展已经影响到了我们的日常生活 ...

  5. 面向对象编程java小游戏_JavaScript面向对象编程小游戏---贪吃蛇代码实例

    1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1-2 维护非常方便并且成本较低. ​2 这个demo是采用了面向 ...

  6. JAVA文件上传详解(附源码)

    文章目录 JAVA文件上传详解(附源码) 1.准备工作 2.使用类介绍 FileItem类 ServletFileUpload类 3.代码编写 JAVA文件上传详解(附源码) 在web应用中,文件上传 ...

  7. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计)

    软件实习项目2--贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计) 实验内容 编程语言以及开发环境的选择 实验思路(游戏设计) 一.游戏的逻辑设计 1.猫头的生成 2.鱼的生成 3.猫头和鱼骨的移动 4.按 ...

  8. 用java实现表白二维码(附源码)

    用java实现表白二维码(附源码) 以下源码可以实现生成一个表白二维码,扫描二维码就能看到二维码里蕴藏的信息. import com.google.zxing.BarcodeFormat;import ...

  9. 跟着狂神聊聊现在和未来

    跟着狂神聊聊现在和未来 回顾以前,架构 架构--->解耦 开发框架SpringIOC AOPIOC :控制反转约泡:泡温泉,泡茶..... 泡友附近的人,打招呼.加微信,聊天,天天聊,---&g ...

最新文章

  1. Windows scp传输文件给Linux
  2. 二元置信椭圆r语言_医学统计与R语言:圆形树状图(circular dendrogram)
  3. 【消息队列MQ】各类MQ比较
  4. 17 FI配置-财务会计-定义雇员的容差组
  5. Python的闭包的后期绑定问题
  6. 设计模式二:结构型模式
  7. python 读取数据库内存爆_解决python读取几千万行的大表内存问题
  8. 夏天第一图noob sky
  9. unity怎么显示骨骼_Unity3D 骨骼动画原理学习笔记
  10. Win11删除英文输入法的方法教程
  11. PyQt5网易云主页UI实现
  12. docker安装_Java EE,Docker和Maven(技术提示#89)
  13. java cron表达式 每天凌晨两点_Quartz cron表达式(时间表达式)
  14. 远程链接linux桌面的软件,远程linux桌面软件
  15. 搜狗2020秋招笔试的一道算法题
  16. Required field ‘client_protocol‘ is unset
  17. L1-031 到底是不是太胖了 (10分)
  18. android动态分区AB升级,Android A/B System OTA分析(四)系统的启动和升级
  19. 传说中的100句英语可以帮你背7000单词(zt)
  20. linux shell 删除key \xAC\xED\x00\x05t\x00\x04${key} 序列化16进制

热门文章

  1. 《金瓶梅》是何等小说
  2. ALS3-P系列限位开关
  3. 零敲碎打基本功-分清的地得的用法
  4. Python黑马头条推荐系统第三天 实时计算和召回业务、推荐业务流实现与ABTest
  5. 基于华为ensp的计算机网络实验(路由器配置 RIPv1 基本功能)
  6. [ubuntu20]动态ip在路由器上mac地址绑定ip(虚拟机不能用Mac地址绑定IP)
  7. Linux使用wget下载文件时报错
  8. 星露谷物语的MOD加载教程
  9. vue-devtools在build时出错
  10. 纯css实现科技感十足的方格闪烁背景