参考狂神b站视频,希望大家多多关注狂神呀

public class Data {public static URL headerURL = Data.class.getResource("statics/header.png");public static ImageIcon header = new ImageIcon(headerURL);public static URL upURL = Data.class.getResource("statics/up.png");public static ImageIcon up = new ImageIcon(upURL);public static URL downURL = Data.class.getResource("statics/down.png");public static ImageIcon down = new ImageIcon(downURL);public static URL leftURL = Data.class.getResource("statics/left.png");public static ImageIcon left = new ImageIcon(leftURL);public static URL rightURL = Data.class.getResource("statics/right.png");public static ImageIcon right = new ImageIcon(rightURL);public static URL bodyURL = Data.class.getResource("statics/body.png");public static ImageIcon body = new ImageIcon(bodyURL);public static URL foodURL = Data.class.getResource("statics/food.png");public static ImageIcon food = new ImageIcon(foodURL);
}
public class GamePanel extends JPanel implements KeyListener, ActionListener {int length;int[] snakeX = new int[600]; //蛇x坐标int[] snakeY = new int[500];boolean isStart = false;String fx;Timer timer = new Timer(100, this); //100浩毫秒执行一次int foodX; //食物坐标int foodY;Random random = new Random();boolean isFail = false;int score;public GamePanel() {init();//获得焦点和键盘事件this.setFocusable(true);this.addKeyListener(this);timer.start();}public void init() {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(34);foodY = 75 + 25 * random.nextInt(24);score = 0;}//绘制面板 游戏里的所有东西 都用这个画笔画@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g); //清屏//绘制静态面板this.setBackground(Color.WHITE);Data.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);Data.food.paintIcon(this, g, foodX, foodY);if (fx.equals("R")) {Data.right.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (fx.equals("L")) {Data.left.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (fx.equals("U")) {Data.up.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (fx.equals("D")) {Data.down.paintIcon(this, g, snakeX[0], snakeY[0]);}for (int i = 1; i < length; i++) {Data.body.paintIcon(this, g, snakeX[i], snakeY[i]);}if (!isStart) {g.setColor(Color.WHITE);g.setFont(new Font("微软雅黑", Font.BOLD, 40));g.drawString("按下空格开始游戏", 300, 300);}if (isFail) {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 (isFail) {isFail = false;init();} else {isStart = !isStart;repaint();}repaint();}if (keyCode == KeyEvent.VK_UP) {fx = "U";} else if (keyCode == KeyEvent.VK_DOWN) {fx = "D";} else if (keyCode == KeyEvent.VK_LEFT) {fx = "L";} else if (keyCode == KeyEvent.VK_RIGHT) {fx = "R";} else if (keyCode == KeyEvent.VK_ESCAPE) {System.exit(0);}}@Overridepublic void keyReleased(KeyEvent e) {}//事件监听--需要通过固定时间来刷新 1s 10次@Overridepublic void actionPerformed(ActionEvent e) {if (isStart && !isFail) {//吃食物if (snakeX[0] == foodX && snakeY[0] == foodY) {length++;score += 10;foodX = 25 + 25 * random.nextInt(34);foodY = 75 + 25 * random.nextInt(24);}for (int i = length - 1; i > 0; i--) {snakeX[i] = snakeX[i - 1];snakeY[i] = snakeY[i - 1];}if (fx.equals("R")) {snakeX[0] = snakeX[0] + 25;if (snakeX[0] > 850) {snakeX[0] = 25;}} else if (fx.equals("L")) {snakeX[0] = snakeX[0] - 25;if (snakeX[0] < 25) {snakeX[0] = 850;}} else if (fx.equals("U")) {snakeY[0] = snakeY[0] - 25;if (snakeY[0] < 75) {snakeY[0] = 650;}} else if (fx.equals("D")) {snakeY[0] = 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]) {isFail = true;}}repaint();}timer.start();}
}
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);//游戏界面都应该在游戏面板上GamePanel gamePanel = new GamePanel();jFrame.add(gamePanel);jFrame.setVisible(true);}
}

Java之GUI 简易贪吃蛇相关推荐

  1. 计算机毕业设计-基于Java的GUI实现贪吃蛇小游戏

    标题:基于Java多线程版本GUI贪吃蛇小游戏 1.项目技术点 1.多线程的运用. 2.JAVA的GUI的运用. 3.数据结构的灵活运用. 4.随机食物的生成. 5.关卡加速,随着蛇身增长,蛇的速度也 ...

  2. 【使用java swing制作简易贪吃蛇游戏】软件实习项目二

    一.项目准备 需求分析: 实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子,上下左右控制"蛇"的移动,吃到"豆子"以后" ...

  3. Java的GUI编程---贪吃蛇游戏实现

    绘制静态窗口 代码实现 package com.akita.snake;import javax.swing.*;public class StartGames {public static void ...

  4. java编写 超简易贪吃蛇

    . 这是本人早些在别的地方发过的帖子了,加上本靓仔有点懒(很懒),备注只给了一些关键的地方(应该够了吧....) . 最后,如果大家觉的还可以,还请大家给点赞给我,你们的鼓励也就是我坚持的动力 /** ...

  5. JAVA简易贪吃蛇游戏实现

    JAVA简易贪吃蛇游戏实现 自学java不久,最近看了些GUI编程,就拿贪吃蛇练个手,很基础 刚学的 也是最简易的版本.纯粹就想通过博客记录来巩固自己的学习效果. 游戏介绍 玩家通过按键控制蛇身的移动 ...

  6. java gui怎么做游戏_Java中关于GUI实现贪吃蛇游戏的简单方法

    这篇文章主要介绍了Java GUI编程之贪吃蛇游戏简单实现方法,详细分析了贪吃蛇游戏的具体实现步骤与相关注意事项,并附带demo源码供读者下载参考,需要的朋友可以参考下 本文实例讲述了Java GUI ...

  7. GUI编程---贪吃蛇小游戏开发

    学习链接:狂神说Java–1小时开发贪吃蛇小游戏 ①初识理论 帧:时间片足够小=>就是动画,1秒30帧.连起来是动画,拆开就是静态的图片! 键盘监听 定时器Timer 游戏图片素材:GUI之贪吃 ...

  8. 贪吃蛇java 暂停_Java实现贪吃蛇小游戏

    三月份的时候用Java写了一个贪吃蛇的小游戏,写完的时候颇有成就感,现在在这里做一下总结. 先把需要用到的图片资源放在这里,分别为上.下.左.右方向的蛇头,蛇身,食物,标题,可以通过右击另存为的方式下 ...

  9. JavaGUI 简易贪吃蛇代码详解+图片素材

    简易贪吃蛇 运行截图 图片素材 代码详解 package com.du.snake; import javax.swing.*; import java.awt.*; import java.awt. ...

最新文章

  1. python数据分析的主要流程-将Python和R整合进一个数据分析流程
  2. hdu 4676 Sum Of Gcd 莫队+phi反演
  3. 切换运行时用户以及用户组
  4. Boost:无序的bimap双图的测试程序
  5. centos查看当前目录下文件大小_centos Linux 统计某个文件夹占用空间大小
  6. thinkphp出现Call to undefined function Think\C() in ... online 313
  7. mysql权限分立_MySQL设置3权分立
  8. uniapp+typeScript+vue3.0+vite
  9. 向Docker容器中导入sql文件
  10. 苹果推送iOS 15系统正式版:实况文本等功能上线
  11. vue中的watch监听数据变化
  12. 物联网99%是中小企业 引发赚快钱担忧
  13. jedate选中日期后关闭弹层_jeDate 插件修改日期或时间后无法触发change事件。
  14. 阿里云弹性云桌面、传统PC和虚拟桌面VDI区别对比
  15. 新的IcedTea项目
  16. pm2 start 带参数_pm2 start命令进阶详解
  17. Hexo个人免费博客(二) 创建主界面分页签和新博客
  18. 苹果开发者账号申请说明
  19. Java使用IP代理突破IP限制进行投票
  20. 薅羊毛的神器,悄悄介绍给你,低调使用!

热门文章

  1. 1964503-39-6,Carboxy-PEG4-phosphonic acid ethyl ester包含羧酸端基和膦酸乙酯部分
  2. cad二次开发:模型空间中的点,变换得到布局空间的点坐标
  3. Java网络编程重点总结
  4. Calendar.HOUR_OF_DAY 和 Calendar.HOUR区别
  5. 测试not_in_vstar_and_v3(mate)_(e_t)_no_tec_rec
  6. 视频教程-物联网之java实现(springboot + netty + 心跳,附完整源码)-Java
  7. Yarn 源码 | 分布式资源调度引擎 Yarn 内核源码剖析
  8. 【小技巧】UltraEdit中替换操作如何替换特殊字符(比如回车)
  9. LIN ldf文件配置
  10. ESP8266 通过红外二极管发射红外信号