当前位置: 首页 > news >正文

GUI:贪吃蛇

以上是准备工作

Data


import javax.swing.*;
import java.net.URL;public class Data {public static URL headerURL=Data.class.getResource("static/header.png");public static ImageIcon header =new ImageIcon(headerURL);public static URL upURL=Data.class.getResource("static/up.png");public static URL downURL=Data.class.getResource("static/down.png");public static URL leftURL=Data.class.getResource("static/left.png");public static URL rightURL=Data.class.getResource("static/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=Data.class.getResource("static/body.png");public static ImageIcon body =new ImageIcon(bodyURL);public static URL foodURL=Data.class.getResource("static/food.png");public static ImageIcon food =new ImageIcon(foodURL);
}

GamePanel


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;//蛇的长度// 蛇的x,y坐标int[]snakeX=new int[600];int[]snakeY=new int[500];String fx;//游戏当前的状态:开始,停止boolean isStart=false;//默认是不开始boolean isFail=false;//游戏结果的状态int score;int foody,foodx;Random  random=new Random();//定时器 ms为单位 1000ms=1sTimer timer=new Timer(100,this);//构造器public GamePanel(){init();//获得焦点和键盘事件this.setFocusable(true);this.addKeyListener(this);timer.start();//游戏qidong}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";//inti向右//随机分布foodfoodx=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,30);g.drawString("积分 "+score,750,55);//画食物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]);//蛇头初始化向L}else if(fx.equals("U")){Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向UP}else if(fx.equals("D")){Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向down}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,30));g.drawString("Pressed the Blank Key Begin Game",300,300);}//游戏结束if(isFail){g.setColor(Color.RED);g.setFont(new Font("微软雅黑",Font.BOLD,30));g.drawString("The Game Is Failed",250,300);}}@Overridepublic void keyPressed(KeyEvent e) {int keyCode=e.getKeyCode();//获得键盘参数//空格开始if(keyCode==KeyEvent.VK_SPACE){if(isFail){isFail=false;}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";}//走向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;}//边界判断}}@Overridepublic void actionPerformed(ActionEvent e) {if(isStart&&isFail==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(fx.equals("R")){snakeX[0] = snakeX[0]+25;   //头部右移25个单位(即一格)if(snakeX[0]>850){  //边界判断:如果蛇右移到了边界,则回到左边snakeX[0] = 25;}}else if(fx.equals("L")){snakeX[0] = snakeX[0]-25;           //头部左移25个单位(即一格)if(snakeX[0]<25){snakeX[0] = 850;}  //边界判断}else if(fx.equals("U")){snakeY[0] = snakeY[0]-25;           //向上移动应该是-25if(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;init();}}repaint();}timer.start();}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}
}

StartGame


import javax.swing.*;public class StartGame {public static void main(String[] args) {JFrame frame=new JFrame();frame.setBounds(10,10,900,720);//窗口设置大小固定frame.setResizable(false);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//正常游戏界面都应该在面上frame.add(new GamePanel());frame.setVisible(true);}
}

相关文章:

GUI:贪吃蛇

以上是准备工作 Data import javax.swing.*; import java.net.URL;public class Data {public static URL headerURLData.class.getResource("static/header.png");public static ImageIcon header new ImageIcon(headerURL);public static URL upURLData.class.getR…...

leaflet:个性化配置,利用Leaflet-Geoman绘制多种图形(136)

第136个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中个性化配置,利用Leaflet-Geoman绘制多种图形。 灵活地配置Leaflet-Geoman的属性,可以产生各种美妙的绘图效果。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方…...

【Shell脚本8】Shell printf 命令

Shell printf 命令 printf 命令模仿 C 程序库&#xff08;library&#xff09;里的 printf() 程序。 printf 由 POSIX 标准所定义&#xff0c;因此使用 printf 的脚本比使用 echo 移植性好。 printf 使用引用文本或空格分隔的参数&#xff0c;外面可以在 printf 中使用格式化…...

CSAPP第4章:RISC和CISC指令集

RISC和CISC指令集 IA32被称为复杂指令集计算机(CISC)&#xff0c;与精简指令集计算机(RISC)相对。 从历史上看&#xff0c;先出现了CISC机器&#xff0c;计算机不断发展使指令集非常大。 RISC设计理念在80年代早期发展&#xff0c;使用更简单的指令集产生高效的代码。 许多加…...

【LeetCode】每日一题 2023_11_9 逃离火灾(bfs 练习)

文章目录 刷题前唠嗑题目&#xff1a;最长平衡子字符串题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 嗯&#xff1f;什么&#xff1f;今天是 hard&#xff1f;陷入沉思。。。先看看题吧 题目&#xff1a;最长平…...

flink1.18.0 自适应调度器 资源弹性缩放 flink帮你决定并行度

jobmanager.scheduler Elastic Scaling | Apache Flink 配置文件修改并重启flink后,webui上会显示调整并行度的按钮,他可以自己调整,你也可以通过webUI手动调整: 点击 之后: 调整完成后:...

如何设计vue项目的权限管理?

权限管理的重要性及必要性 数据安全&#xff1a;权限管理可以确保只有具有相应权限的用户能够访问和操作特定的数据。这可以保护敏感数据不被未授权的用户访问&#xff0c;从而提高数据的安全性。功能控制&#xff1a;权限管理可以根据用户的角色和权限设置&#xff0c;控制用户…...

HBase学习笔记(2)—— API使用

对HBase中常用的API操作进行简单的介绍 对应HBase学习笔记&#xff08;1&#xff09;—— 知识点总结-CSDN博客中介绍的HBase Shell常用操作 更多用法请参考官网&#xff1a;Apache HBase ™ Reference Guide 依赖导入 <dependencies><dependency><groupId>o…...

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发004:游戏核心消息处理 - 玩家类的实现

文章目录 0 代码仓库1 需求2 AOI设计2.1 AOI算法简介2.2 AOI数据结构及实现2.2.1 玩家2.2.2 网格对象2.2.3 游戏世界矩形2.2.4 获取周围玩家的实现2.2.5 代码测试 2.3 GameRole结合AOI创建玩家2.3.1 创建游戏世界全局对象-GameRole继承AOIWorld的Player2.3.2 把玩家到游戏世界的…...

Python Selenium元素定位方法详解

引言 在Web自动化测试中&#xff0c;元素定位是一项非常重要的技术。Python Selenium提供了各种元素定位方法&#xff0c;可以帮助我们定位页面上的元素并与之交互。本文将详细介绍Python Selenium中常用的元素定位方法&#xff0c;并提供实例代码。 1. ID定位 ID是元素在HT…...

分布式事务,你了解多少?(上)

本文主要是讲述分布式事务的理论及常用的技术方案&#xff0c;主要源自各类学习和工作总结&#xff0c;如有不妥之处&#xff0c;还望指正。分布式事务的其他基础请自行查阅资料。 一、分布式事务产生的原因 分布式事务的产生&#xff0c;源自互联网、电商等的发展&#xff0c…...

ClickHouse主键索引最佳实践

在本文中&#xff0c;我们将深入研究ClickHouse索引。我们将对此进行详细说明和讨论&#xff1a; ClickHouse的索引与传统的关系数据库有何不同ClickHouse是怎样构建和使用主键稀疏索引的ClickHouse索引的最佳实践 您可以选择在自己的机器上执行本文给出的所有Clickhouse SQL…...

Flink 基础 -- 应用开发(项目配置)

1、概述 本节中的指南将向您展示如何通过流行的构建工具(Maven, Gradle)配置项目&#xff0c;添加必要的依赖项(即连接器和格式&#xff0c;测试)&#xff0c;并涵盖一些高级配置主题。 每个Flink应用程序都依赖于一组Flink库。至少&#xff0c;应用程序依赖于Flink api&…...

空间曲面@常见曲面方程

文章目录 曲面的基本问题特殊曲面球面方程球的标准形方程一般形方程例 柱面柱面方程不同维度下同方程的图形常见柱面方程 旋转曲面旋转曲面的方程旋转情况分类以yOz上的曲线绕 z z z轴旋转为例 旋转曲面的方程常见旋转曲面方程 锥面其他曲面 曲面的基本问题 根据曲面(点的几何…...

unity 接收和发送Udp消息

因为需要用到unity和其他的程序交互&#xff0c;其他程序可以提供Udp消息&#xff0c;因此找了合适的相互连接方法。这里直接上代码。 工具类&#xff1a; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Net; u…...

机器学习股票大数据量化分析与预测系统 - python 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果UI界面设计web预测界面RSRS选股界面 3 软件架构4 工具介绍Flask框架MySQL数据库LSTM 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器学习股票大数据量化分析与预测系统 该项目较为新颖&am…...

架构描述语言(ADL)

1.架构描述语言&#xff08;ADL) 架构描述语言&#xff08;Architecture Description Language, ADL&#xff09;是一种为明确说明软件系统的概念架构和对这些概念架构建模提供功能的语言。 2.ADL基本构成要素 ADL即架构描述语言&#xff0c;其基本构成要素包括&#xff1a;…...

GZ038 物联网应用开发赛题第2套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第2套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评人员反映,不得扰乱赛场秩序; 3、遵守赛场纪律,尊重考评人员,…...

Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

Go 接口&#xff1a;Go中最强大的魔法,接口应用模式或惯例介绍 文章目录 Go 接口&#xff1a;Go中最强大的魔法,接口应用模式或惯例介绍一、前置原则二、一切皆组合2.1 一切皆组合2.2 垂直组合2.2.1 第一种&#xff1a;通过嵌入接口构建接口2.2.2 第二种&#xff1a;通过嵌入接…...

Vue3全局共享数据

目录 1&#xff0c;Vuex2&#xff0c;provide & inject2&#xff0c;global state4&#xff0c;Pinia5&#xff0c;对比 1&#xff0c;Vuex vue2 的官方状态管理器&#xff0c;vue3 也是可以用的&#xff0c;需要使用 4.x 版本。 相对于 vuex3.x&#xff0c;有两个重要变…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...