java--贪吃蛇
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;public class Snake extends JFrame implements KeyListener, ActionListener, MouseListener {int slong = 2;//蛇当前长度//蛇坐标int[] Snakex = new int[100];int[] Snakey = new int[100];int fx = 1;//蛇的方向 0-左 1-右 2-上 3-下Timer timer = new Timer(100, this);//设置定时器,每100毫秒一次//食物位置int foodx;int foody;Random random = new Random();//随机数,随机位置生成食物int started = 0;//游戏信息 0-未开始 1-开始 2-结束//---------------------------------------------------------------------------------------------------------------------//窗体public void myJFrame() {this.setTitle("贪吃蛇"); //标题this.setSize(800, 600); //窗口大小this.setResizable(false); //窗口是否可以改变大小=否this.setDefaultCloseOperation(Snake.EXIT_ON_CLOSE); //窗口关闭方式为关闭窗口同时结束程序int width = Toolkit.getDefaultToolkit().getScreenSize().width; //获取屏幕宽度int height = Toolkit.getDefaultToolkit().getScreenSize().height; //获取屏幕高度
// System.out.println("宽度:"+width);//测试
// System.out.println("高度:"+height);//测试this.setLocation((width - 800) / 2, (height - 600) / 2); //设置窗口默认位置以屏幕居中this.setFocusable(true);this.addKeyListener(this);this.setVisible(true); //窗口是否显示=是// 蛇的初识位置Snakex[0] = 60;Snakey[0] = 100;Snakex[1] = 40;Snakey[1] = 100;// 随机食物的初识位置foodx = random.nextInt(39);foody = random.nextInt(22);foodx = foodx * 20;foody = foody * 20 + 80;System.out.println(foodx + "," + foody);}//---------------------------------------------------------------------------------------------------------------------//覆写paint方法,绘制界面public void paint(Graphics g) {
// 绘制背景g.setColor(Color.LIGHT_GRAY);g.fillRect(0, 0, 800, 600);//绘制游戏区域g.setColor(Color.black);g.fillRect(0, 80, 800, 520);//绘制蛇for (int i = 0; i < slong; i++) {g.setColor(Color.CYAN);g.fillRect(Snakex[i], Snakey[i], 20, 20);}// 绘制食物g.setColor(Color.yellow);g.fillOval(foodx, foody, 20, 20);if (started == 0) {g.setColor(Color.BLACK);//设置画笔颜色g.setFont(new Font("微软雅黑", 10, 20)); //设置字体g.drawString("按下“空格键”开始游戏", 300, 65); //绘制字符} else if (started == 1) {g.setColor(Color.BLACK);//设置画笔颜色g.setFont(new Font("微软雅黑", 10, 20)); //设置字体g.drawString("当前分数为:", 300, 65); //绘制字符g.drawString(String.valueOf(slong - 2), 420, 65); //绘制字符} else if (started == 2) {g.setColor(Color.BLACK);//设置画笔颜色g.setFont(new Font("微软雅黑", 10, 20)); //设置字体g.drawString("游戏结束-", 250, 65); //绘制字符g.drawString("最终分数为:", 350, 65); //绘制字符g.drawString(String.valueOf(slong - 2), 470, 65); //绘制字符}}// 操作监听——控制蛇的不断移动@Overridepublic void actionPerformed(ActionEvent e) {
// 判断游戏是否开始if (started == 1) {
// 通过循环控制蛇移动for (int i = slong - 1; i > 0; i--) {Snakex[i] = Snakex[i - 1];Snakey[i] = Snakey[i - 1];}// 判断蛇移动的方向if (fx == 0) {Snakex[0] = Snakex[0] - 20;} else if (fx == 1) {Snakex[0] = Snakex[0] + 20;} else if (fx == 2) {Snakey[0] = Snakey[0] - 20;} else if (fx == 3) {Snakey[0] = Snakey[0] + 20;}// 判断蛇是否撞到墙外if (Snakex[0] < 0 || Snakex[0] > 780 || Snakey[0] < 80 || Snakey[0] > 580) {started = 2;}// 判断蛇是否吃到了食物if (Snakex[0] == foodx && Snakey[0] == foody) {slong++;foodx = random.nextInt(39);foody = random.nextInt(22);foodx = foodx * 20;foody = foody * 20 + 80;System.out.println(foodx + "," + foody);}// 判断是否吃到了自己for (int i = 1; i < slong; i++) {if (Snakex[0] == Snakex[i] && Snakey[0] == Snakey[i]) {started = 2;}}// 判断食物是否随机在了蛇身上for (int i = 0; i < slong; i++) {if (foodx == Snakex[i] && foody == Snakey[i]) {// 随机食物的初识位置foodx = random.nextInt(39);foody = random.nextInt(22);foodx = foodx * 20;foody = foody * 20 + 80;System.out.println(foodx + "," + foody);}}repaint();}timer.start();}// 输入@Overridepublic void keyTyped(KeyEvent e) {}// 键盘按下——控制游戏的开始以及蛇的移动方向@Overridepublic void keyPressed(KeyEvent e) {
// 获取从键盘输入的键int key = e.getKeyCode();
// 判断是否为空格if (key == KeyEvent.VK_SPACE) {if (started == 0) {started = 1;} else if (started == 1) {started = 0;} else if (started == 2) {started = 0;slong = 2;//蛇当前长度// 蛇的初识位置Snakex[0] = 60;Snakey[0] = 100;Snakex[1] = 40;Snakey[1] = 100;// 随机食物的初识位置foodx = random.nextInt(39);foody = random.nextInt(22);foodx = foodx * 20;foody = foody * 20 + 80;// 初始化方向fx = 1;}repaint();timer.start();// 左} else if (key == KeyEvent.VK_LEFT) {if (fx != 1) {fx = 0;}
// 右} else if (key == KeyEvent.VK_RIGHT) {if (fx != 0) {fx = 1;}
// 上} else if (key == KeyEvent.VK_UP) {if (fx != 3) {fx = 2;}
//下} else if (key == KeyEvent.VK_DOWN) {if (fx != 2) {fx = 3;}}}// 弹起@Overridepublic void keyReleased(KeyEvent e) {}// 点击@Overridepublic void mouseClicked(MouseEvent e) {}// 按下@Overridepublic void mousePressed(MouseEvent e) {}// 抬起@Overridepublic void mouseReleased(MouseEvent e) {}// 进入@Overridepublic void mouseEntered(MouseEvent e) {}// 离开@Overridepublic void mouseExited(MouseEvent e) {}
}


该程序主要实现了以下功能:
1.按空格开始游戏、暂停游戏或重新开始游戏。
2.方向键控制蛇移动的方向。
3.蛇吃掉食物可以增长,并增加游戏分数(不会加快游戏速度)。
4.蛇咬到自己会结束游戏。
5.蛇撞到游戏区域外会结束游戏。
相关文章:
java--贪吃蛇
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random;public class Snake extends JFrame implements KeyListener, ActionListener, MouseListener {int slong 2;//蛇当前长度//蛇坐标int[] Snakex new int[100];int[] Snakey new…...
录制第一个jmeter性能测试脚本2(http协议)
我们手工编写了一个测试计划,现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似:让5个用户在2s内登录webtour,然后进入 页面进行查看。 目录 一.性能测试脚本录制的原理 二、性能测试脚本录制的实操&#…...
pip命令大全
pip命令手册 原版 Usage: pip <command> [options]Commands:install Install packages.download Download packages.uninstall Uninstall packages.freeze Output installed packages…...
Redis篇---第二篇
系列文章目录 文章目录 系列文章目录前言一、为什么 使用 Redis 而不是用 Memcache 呢?二、为什么 Redis 单线程模型效率也能那么高?三、说说 Redis 的线程模型前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…...
【LeetCode刷题日志】232.用栈实现队列
🎈个人主页:库库的里昂 🎐C/C领域新星创作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:LeetCode 刷题日志🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,…...
单元测试实战(二)Service 的测试
为鼓励单元测试,特分门别类示例各种组件的测试代码并进行解说,供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战(一)Controller 的测试 单元测试实战(二)Service 的测试 单元测试实战&#x…...
LabVIEW和NIUSRP硬件加快了认知无线电开发
LabVIEW和NIUSRP硬件加快了认知无线电开发 对于电视频谱,主用户传输有两种类型:广播电视和节目制作和特殊事件(PMSE)设备。广播塔的位置已知,且覆盖电视传输塔(复用器)附近的某个特定地理区域(称为排除区域…...
嵌入式软件工程师面试题——2025校招社招通用(十六)
说明: 面试群,群号: 228447240面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但…...
白盒测试之测试用例设计方法
白盒测试之测试用例设计方法 什么是白盒测试白盒测试的特点白盒测试的设计方法静态设计方法动态设计方法语句覆盖分支(判定)覆盖条件覆盖判定条件覆盖组合覆盖路径覆盖总结 什么是白盒测试 按照测试方法分类,测试可以分为白盒测试和黑盒测试两种。 白盒测试也称结构…...
在CentOS 7上关闭SELinux
要在CentOS 7上关闭SELinux,可以按照以下步骤进行操作: 临时关闭SELinux(不建议使用): setenforce 0但是这种方式只对当前启动有效,重启系统后会失效。 2. 永久关闭SELinux: vi /etc/selinux…...
基于单片机温湿度PM2.5报警系统
**单片机设计介绍, 基于单片机温湿度PM2.5报警设置系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 单片机温湿度PM2.5报警设置系统是一种智能化的环境检测与报警系统。它主要由单片机、传感器、液晶显示屏、蜂鸣器…...
OpenHarmony系统编译环境
1. 推荐系统Ubuntu 2204 2. 必须安装的软件 apt-get install curl build-essential gcc g make ninja-build cmake libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev binutils binutils-dev libdwarf-dev u-boot-tools mtd-utils cpio de…...
二十三种设计模式全面解析-职责链模式(Chain of Responsibility Pattern):解放代码责任链,提升灵活性与可维护性
在软件开发中,我们经常面临处理请求或事件的情况。有时候,我们需要将请求或事件依次传递给多个对象进行处理,但又不确定哪个对象最终会处理它。这时候,职责链模式(Chain of Responsibility Pattern)就能派上…...
通过制作llama_cpp的docker镜像在内网离线部署运行大模型
对于机器在内网,无法连接互联网的服务器来说,想要部署体验开源的大模型,需要拷贝各种依赖文件进行环境搭建难度较大,本文介绍如何通过制作docker镜像的方式,通过llama.cpp实现量化大模型的快速内网部署体验。 一、llam…...
JavaScript 异步编程
异步的概念 异步(Asynchronous, async)是与同步(Synchronous, sync)相对的概念。 在我们学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序…...
linux课程第一课------命令的简单的介绍
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
XLua热更新框架原理和代码实战
安装插件 下载Xlua插件:https://github.com/Tencent/xLua 下载完成后,把Asset文件夹下的文件拖入自己的工程Asset中,看到Unity编辑器上多了个Xlua菜单,说明插件导入成功 Lua启动代码 新建一个空场景,场景中什么都不…...
Hive客户端hive与beeline的区别
hive与beeline简介 1、背景2、hive3、beeline4、hive与beeline的关系 1、背景 Hive的hive与beeline命令都可以为客户端提供Hive的控制台连接。两者之间有什么区别或联系吗? Hive-cli(hive)是Hive连接hiveserver2的命令行工具,从Hive出生就一直存在&…...
<MySQL> 什么是数据库索引?数据库索引的底层结构是什么?
目录 一、什么是数据库索引? 1.1 索引的概念 1.2 索引的特点 1.3 索引的适用场景 1.4 索引的使用 1.4.1 创建索引 1.4.2 查看索引 1.4.3 删除索引 二、数据库索引的底层结构是什么? 2.1 数据库中的 B树 长啥样? 2.2 B树为什么适合做数据库索…...
对于koa中间件的理解
洋葱模型 大家都知道koa是洋葱模型,先一层一层通过next往下,之后再回去执行next后面的内容,next即使没写,最后也会进入下一个中间件。 那么什么是ctx呢,ctx顾名思义就是上下文,也就是上一层传给下一层的东…...
上线前最后一道防线,DeepSeek代码审查如何帮你拦截87%的CVE类缺陷?
更多请点击: https://intelliparadigm.com 第一章:上线前最后一道防线,DeepSeek代码审查如何帮你拦截87%的CVE类缺陷? 在软件交付生命周期末期,传统人工代码审计与通用SAST工具常因误报率高、上下文理解弱而漏检高危漏…...
【python】ImportError: DLL load failed while importing QtWidgets: 找不到指定的程序。重新安装后搞定
文章目录前言一、PyQt6引用后报错二、使用步骤总结前言 想做个好看的界面,引用了PyQt6,却产生了新问题。 pip install pyqt6-tools,优先做这个动作进行修复。 一、PyQt6引用后报错 python里引用: from PyQt6.QtWidgets import…...
别只盯着主控芯片!拆解STM32最小系统板:电源、时钟、复位三大支柱电路深度解析
STM32最小系统板设计进阶:电源、时钟与复位电路的工程实践 在嵌入式系统开发中,我们常常将注意力集中在主控芯片的功能实现上,却忽略了支撑系统稳定运行的三大基础电路——电源、时钟和复位。这些看似简单的电路模块,实则是整个系…...
MNE-Python 第9天学习笔记:源定位基础
一、什么是源定位? 1.1 通俗理解 到目前为止,我们分析的是"头皮上的脑电":头皮电极 → 记录头皮表面的电位↓这就像在地球表面测量地震波我们想知道的是:震源在哪里?多深?源定位 从头皮电位反推…...
白嫖Codex!一行代码不花接入国产DeepSeek-v4-pro,从此告别ChatGPT月费
Codex 如何接入国产模型 DeepSeek-v4-pro 保姆级教程 使用 Claude Code、Codex 已经好几个月了,不得不感叹现在的 AI 工具真的太强大了。目前市面上很多 Claude Code 如何接入大模型的教程,但 Codex 却比较少,一方面因为 Codex 需要 ChatGPT …...
收藏干货|2026年程序员转型大模型指南,8个高薪岗位小白也能入局
分享一则身边真实职场经历,想必能戳中当下不少陷入职业迷茫的开发从业者。 同窗老友深耕Java后端开发整整六年,常年扎根业务开发模块,算得上行业内经验老道的技术老手。可从去年年初开始,他的职业焦虑感愈发强烈。传统业务开发同质…...
VMnet8 的8到底是什么意思?
它的本质是:8 仅仅是一个 内部标识符 (Internal Identifier) 或 数组索引 (Array Index),用于在 VMware 的虚拟化网络栈中唯一标识 NAT 模式 对应的虚拟交换机实例。它没有任何数学、物理或协议层面的特殊含义(如端口号、版本号或二进制位&am…...
别再只用JSON了!用Protobuf给Go微服务接口性能提升10倍(附完整代码)
别再只用JSON了!用Protobuf给Go微服务接口性能提升10倍(附完整代码) 在微服务架构中,接口性能往往是决定系统吞吐量的关键因素。许多开发者习惯性地使用JSON作为数据交换格式,却不知道这可能在无形中成为性能瓶颈。本…...
UI-TARS Desktop 深度解析:字节跳动 34K Star 的多模态 AI Agent 栈
🖥️ UI-TARS Desktop 深度解析:字节跳动 34K Star 的多模态 AI Agent 栈 字节跳动 Bytedance 出品 | 34.3K GitHub Stars | Apache 2.0 | 超越 Claude Computer Use 🔥 前言:当 AI 学会操作电脑 2025 年 1 月,字节跳…...
保姆级教程:用UE4/UE5的WebUI插件,把Web页面嵌入数字孪生项目
虚幻引擎WebUI插件实战:数字孪生项目中无缝嵌入Web页面的完整指南在数字孪生项目的开发过程中,将实时数据可视化的Web页面嵌入到虚幻引擎场景中已成为提升用户体验的关键技术。本文将以UE4/UE5的WebUI插件为核心工具,手把手演示如何将Web前端…...
