//游戏主启动类
public class StartGame1 {public static void main(String[] args) {JFrame jFrame = new JFrame();jFrame.setBounds(10,10,900,720);jFrame.setResizable(true);jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//正常的游戏界面都在面板panle上面jFrame.add(new Panel1());jFrame.setVisible(true);}
}
//游戏面板
public class Panel1 extends JPanel implements KeyListener, ActionListener {//定义蛇的数据结构int length;int[] snakex = new int[600];int[] snakey = new int[500];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毫秒执行一次@Override //固定时间刷新,比如1秒10次public void actionPerformed(ActionEvent e) {if (isStart&& isFail==false){ //如果游戏是开始状态,就让小蛇移动//吃食物if (snakex[0]==foodx && snakey[0] == foody){length++; //长度+1//分数加10score = 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 Panel1() {  //构造器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);GameData01.header1.paintIcon(this,g,25,11); //头部广告栏g.fillRect(20,75,850,600); //默认游戏界面//画积分g.setColor(Color.WHITE);g.setFont(new Font("微软雅黑",Font.BOLD,18));g.drawString("长度"+length,750,35);g.drawString("分数"+score,750,50);GameData01.food.paintIcon(this,g,foodx,foody); //食物画上去//把小蛇画上去if (fx.equals("R")){GameData01.right.paintIcon(this,g,snakex[0],snakey[0]); //蛇头初始化向右,需要通过方向来判断}else if (fx.equals("L")){GameData01.left.paintIcon(this,g,snakex[0],snakey[0]);}else if (fx.equals("U")){GameData01.up.paintIcon(this,g,snakex[0],snakey[0]);}else if (fx.equals("D")){GameData01.down.paintIcon(this,g,snakex[0],snakey[0]);}for (int i = 1; i < length; i++) {GameData01.body1.paintIcon(this,g,snakex[i],snakey[i]); //身体的坐标}//游戏状态if (isStart==false){g.setColor(Color.WHITE);//设置字体g.setFont(new Font("微软雅黑",Font.BOLD,50));g.drawString("按下空格开始游戏",250,300);}//画上失败提示if (isFail){g.setColor(Color.RED);//设置字体g.setFont(new Font("微软雅黑",Font.BOLD,50));g.drawString("李洋牺牲了",250,300);}}@Override  //键盘监听public 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";}}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}
}
//数据中心
public class GameData01  {//相对路径//绝对路径public static URL headerURL = GameData01.class.getResource("make.png");public static ImageIcon header1 = new ImageIcon(headerURL);public static URL upURL = GameData01.class.getResource("statics/snaku.png");public static URL downURL = GameData01.class.getResource("statics/snakd.png");public static URL leftURL = GameData01.class.getResource("statics/snakl.png");public static URL rightURL = GameData01.class.getResource("statics/snak1.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 = GameData01.class.getResource("statics/snak2.png");public static ImageIcon body1 = new ImageIcon(bodyURL);public static URL foodURL = GameData01.class.getResource("statics/food.png");public static ImageIcon food = new ImageIcon(foodURL);
}

2021-06-0贪吃蛇练习相关推荐

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

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

  2. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  3. C语言实现贪吃蛇小游戏1.0

    C语言实现贪吃蛇小游戏1.0 贪吃蛇游戏要有三个东西:边框.蛇.食物 还有两个灵魂的东西:光标的移动与按键监控 一.光标的移动 在我看来在控制台上移动光标画图是实现这个小游戏的灵魂了,在这之前我一直以 ...

  4. linux环境下Ncurses实现贪吃蛇游戏

    游戏说明: linux环境下基于Ncurses图形库的C语言小游戏. Ncurses介绍: Ncurses(new curses)是一套编程库,它提供了一系列的函数以便使用者调用它们去生成基于文本的用 ...

  5. JavaScript+ Canvas开发趣味小游戏《贪吃蛇》

    一.效果展示 二.<贪吃蛇>基本实现思路 蛇头部分+蛇身体部分:采用对象形式来存储坐标,并将每个坐标对象放到一个snake数组中,方便使用.设置每个方格宽度30px,高度30px,画布高度 ...

  6. c语言实战项目之一 贪吃蛇(源码免费开放)

    朋友们,经过我的c语言前十章的知识,大家应该已经入门了,我个人认为学习c语言最好的方法就是造轮子,写项目就是最好的提高方法,可以把我们学过的知识串联起来. 源码如下: #include<stdi ...

  7. 重力感应贪吃蛇(C51 MPU6050 8*8LED点阵)

    重力感应贪吃蛇(C51 MPU6050 8*8LED点阵) 本文讲述如何从无到有用C51做一个重力感应的贪吃蛇,包括元件选型.原理图PCB绘制和代码编写. 重力感应贪吃蛇(C51 MPU6050 8* ...

  8. c++ 实现贪吃蛇(含技术难点解析和完整代码)

    文章目录 0.参考资料 1 技术难点 1.1 关于光标的移动 1.2 关于蛇的移动 1.2.1 从键盘上读取输入 1.2.2 蛇的移动 1.3 食物的生成 2.完整代码 0.参考资料 借鉴了这位大佬的 ...

  9. python编写贪吃蛇游戏

    关于编写游戏,是博主非常向往的东西(博主喜爱游戏),编写游戏得一步一步的走!今天我简单的编写一下非常经典的游戏贪吃蛇!!!! 效果图: 首先引入pygame模块 pip install pygame ...

  10. Linux学习篇——基于C语言使用结构体、链表实现贪吃蛇

    基于Linux下,通过c语言.链表.结构体下实现--贪吃蛇小项目 一.需要用的头文件以及Linux图形库函数.数据初始化 (1)关于curses.h图形库函数 二.地图制作 三.蛇身链表的初始化生成 ...

最新文章

  1. 六、springboot整合swagger
  2. hbuilder能断点吗_知乎点赞破4万!这些PPT小秘密你知道吗?
  3. 互联网协议 — HTTP/3 超文本传输协议第 3 版
  4. 将STM32的标准库编译成lib
  5. java 网络(socket)
  6. [zz]HDFS文件操作
  7. WSDM 2022 | 基于元学习的多场景多任务商家建模
  8. Java面试准备:15个Java面试问题
  9. html和jsp的差异
  10. python生成4位验证码random_python 生成验证码很简单:random和srting的方法
  11. 想要定位其中的iframe并切进去的定位方法
  12. apache的源代码编译安装
  13. 【视频异常检测综述-论文阅读】Deep Video Anomaly Detection: Opportunities and Challenges
  14. 运营商精准大数据获客 网站APP访客实时截流
  15. 摊牌了,做为前端,我经常在用的15个国外网站
  16. 【解决方法(最详细)】WIN10系统使用Teamviewer远程连接时被检测出商业用途
  17. 音视频开发大厂面试题(快手、百度、字节)
  18. 模拟IC设计——反相器
  19. 完美的word转pdf
  20. Blue Indian's Puzzler Keygenme

热门文章

  1. 网络风险成为中国企业新挑战
  2. lintcode:Add Binary 二进制求和
  3. OpenShift免费空间绑定顶级域名(图文教程)
  4. sqlmap注入语句整理
  5. 一款原型设计软件——墨刀的介绍
  6. nodejs - 服务端管理 - PM2
  7. 第三方魔兽金币交易平台的影响力会很快地褪去
  8. android settings的八个问题
  9. 各种应用程序错误,xx内存地址不能read等报错可能的原因与解决方案
  10. Win32 SDK创建ListView控件