4、贪吃蛇

(帧,如果时间片足够小,就是动画,一秒30帧,60帧。)

定时器 Timer

package com.yang.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];//蛇的X坐标int[] snakeY = new int[500];//蛇的Y坐标String fx;//食物的坐标int foodx;int foody;Random random = new Random();int score;//成绩//游戏当前的状态   开始,停止boolean isStart = false;  //默认是不开始boolean isFail = false;//游戏状态失败//定时器  以毫秒为单位Timer timer = new Timer(100,this);//100毫秒执行一次//构造器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,60);//画食物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 == false){g.setColor(Color.WHITE);g.setFont(new Font("微软雅黑",Font.BOLD,40));//设置字体g.drawString("按下空格开始游戏",300,300);}if(isFail == true){g.setColor(Color.red);g.setFont(new Font("微软雅黑",Font.BOLD,40));//设置字体g.drawString("游戏失败,按下空格重新开始",300,300);}}//键盘监听事件@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();//获得键盘按键是哪个if(keyCode == KeyEvent.VK_SPACE){//如果按下的是空格if (isFail) {//重新开始isFail = false;init();}else {isStart = !isStart;}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";}}//事件监听----需要通过固定的事件来刷新  1秒10次@Overridepublic void actionPerformed(ActionEvent e) {if(isStart && isFail == false){//如果游戏是开始状态,将小蛇动起来//吃食物if(snakeX[0] == foodx && snakeY[0] == foody){length++;//分数加10score += 10;//重新生成食物foodx = 25 + 25*random.nextInt(34);foody = 75 + 25*random.nextInt(24);}//移动for (int i = length; 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();//定时器开始}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}}

GUI实现简单贪吃蛇相关推荐

  1. java gui怎么做游戏_Java GUI编程之贪吃蛇游戏简单实现方法【附demo源码下载】

    本文实例讲述了Java GUI编程之贪吃蛇游戏简单实现方法.分享给大家供大家参考,具体如下: 例子简单,界面简陋 请见谅 项目结构如下 Constant.jvava 代码如下: package sna ...

  2. 基于C语言Ncurse库和链表的简单贪吃蛇小游戏

    参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44 ...

  3. html与js简单小游戏,JS实现简单贪吃蛇小游戏

    本文实例为大家分享了JS实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 1.使用语言 HTML+CSS+JavaScript 2.使用工具 visual studio code 3.GitHu ...

  4. 简单贪吃蛇c语言代码,一个C语言写简单贪吃蛇源代码.doc

    一个C语言写简单贪吃蛇源代码 #include #include #include #include #include #include int grade=5,point=0,life=3; voi ...

  5. 完整版! 大一新手C语言数据结构实现简单贪吃蛇游戏

    大一新手C语言数据结构实现简单贪吃蛇游戏含源代码 贪吃蛇 1.前言简述 2.编写语言及工具 3.游戏的头文件代码(.h) 3.1map.h 3.2snake.h 3.3Food.h 4.游戏的源文件代 ...

  6. php 实现贪吃蛇游戏,C++实现简单贪吃蛇游戏

    我大概在一个多月前把自己上学期写的c代码的贪吃蛇游戏push到csdn上,并且说c风格的贪吃蛇写起来有些麻烦(贪吃蛇游戏的c语言实现),准备用面向对象的c++再写一遍.现在我们专业恰好刚教完了c++, ...

  7. Unity实现简单贪吃蛇

    贪吃蛇 游戏是一款经典的手机游戏,既简单又耐玩.通过控制蛇头方向吃蛋,使得蛇变长,从而获取积分. 代码下载 蛇头的实现: 制作一个红色cube立方体,控制着蛇的运动方向,以及遇到食物吃掉食物的功能. ...

  8. java 简单贪吃蛇

    说了是简单版贪吃蛇... 就3个类+方向枚举变量(本来想写贪吃蛇斜着走的..想象我的蛇是矩形 斜着难看就没写) 上下左右键控制移动 空格暂停 SnackClient类 package com.xynu ...

  9. python成长记:写一个自己的超简单贪吃蛇游戏

    本人系python小白,这是我的第一篇博客,一路摸爬滚打,终于入了门.花了两天琢磨,写了这个超简单的容易理解的贪吃蛇游戏,给大家分享自己的理解吧. 简介: 1,老方法用pygame库来画背景,蛇,食物 ...

最新文章

  1. 2021年大数据Flink(十三):流批一体API Sink
  2. 它又来了!C**HashMap是如何保证线程安全的?会用不就完了?
  3. KnifeCMSV1.0Beta测试版发布
  4. 关于Swing窗体有时候要放大缩小边框才能显示问题?
  5. js判断是否是ie浏览器且给出ie版本
  6. 常见数据库的Connection URL
  7. C#关于事件的几个好例子
  8. [LeetCode]题解(python):058-Length of Last Word
  9. ZooKeeper管理员指南 部署和管理指南
  10. 软件交互性友好性_您应该知道的8个环境友好的开放软件项目
  11. QT5开发及实例学习之十七Qt5双缓冲机制
  12. Android——手机系统重装的备忘笔记
  13. php图片滑动代码,基于mootools 1.3框架下的图片滑动效果代码_Mootools
  14. 3个框框带你理解EventLoop
  15. 把prn文件输出到网络打印机
  16. mysql+hive+建表语句,在Oracle、MySQL中执行sql脚本生成hive建表语句
  17. cesium 经纬度绘制点_Cesium搜索经纬度并标点
  18. 上海十大it外包公司
  19. 同心拼图(concentric mosaics)
  20. CISSP 报名保姆级教程

热门文章

  1. springboot实现小程序授权登录功能
  2. uva 10586 - Polynomial Remains(数论)
  3. Matlab生成黑白条纹
  4. deliphi 字符串分割_Delphi中 分割字符串(两种方法)
  5. 好编剧的春天不到,好演员的春天能来吗?
  6. 产品经理都在用哪些软件绘制路线图?10大工具软件
  7. 如何沿着某一直线绘制特定物理场(高程、负荷场)剖面(Arcgis\GMT\MATLAB)
  8. Linux服务篇:CentOS 6.9搭建NTP服务器
  9. todo list也需要科学的设计,才能达到理想的效果
  10. 【8-13】手势传感器PAJ7620U2测试 实现手势控制无人机