【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断

news/2025/2/28 6:16:41/

GUI编程

04 贪吃蛇小游戏

4.4 第四步:食物及成绩判断

首先,添加食物与分数的数据定义:

	//食物的坐标int foodX;int foodY;Random random = new Random();//积分面板数据结构int score;

在初始化方法中,添加(画出)食物与分数:

		//将食物随机分布于游戏界面foodX = 25 + 25 * random.nextInt(34);foodY = 75 + 25 * random.nextInt(24);score = 0;  //定义初始得分

绘制静态面板中,画出积分面板、食物,并增加游戏失败设定显示的语句:

		//画出积分面板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 (!isStart) {g.setColor(Color.white);g.setFont(new Font("宋体", Font.BOLD, 40));g.drawString("按下空格开始游戏", 270, 300);}if (isFail) {g.setColor(Color.red);g.setFont(new Font("宋体", Font.BOLD, 40));g.drawString("游戏失败,按下空格重新开始", 220, 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 && !direction.equals("D")) {direction = "U";} else if (keyCode == KeyEvent.VK_DOWN && !direction.equals("U")) {direction = "D";} else if (keyCode == KeyEvent.VK_LEFT && !direction.equals("R")) {direction = "L";} else if (keyCode == KeyEvent.VK_RIGHT && !direction.equals("L")) {direction = "R";}}

游戏事件的监听中,添加是否吃到食物与游戏失败的判定:

		   //判断蛇头是否吃到食物if (snakeX[0] == foodX && snakeY[0] == foodY) {length++;foodX = 25 + 25 * random.nextInt(34);foodY = 75 + 25 * random.nextInt(24);score += 10;}//失败判定for (int i = 1; i < length; i++) {if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {isFail = true;break;}}

运行结果:

游戏默认界面:

图1

游戏运行中:

图2

游戏失败:

图3

至此,简单的贪吃蛇小游戏已全部编写完毕。



http://www.ppmy.cn/news/1234723.html

相关文章

【NLP】GPT 模型如何工作

介绍 2021 年&#xff0c;我使用 GPT 模型编写了最初的几行代码&#xff0c;那时我意识到文本生成已经达到了拐点。我要求 GPT-3 总结一份很长的文档&#xff0c;并尝试了几次提示。我可以看到结果比以前的模型先进得多&#xff0c;这让我对这项技术感到兴奋&#xff0c;并渴望…

用于 syslog 收集的协议:TCP、UDP、RELP

系统日志是从 Linux/Unix 设备和其他网络设备&#xff08;如交换机、路由器和防火墙&#xff09;生成的日志 可以通过将 syslog 聚合到称为 syslog 服务器、syslog 守护程序或 syslogd 的服务器来集中 syslog。在TCP、UDP和RELP协议的帮助下&#xff0c;系统日志从设备传输到系…

MacOS 成为恶意软件活动的目标

Malwarebytes 警告称&#xff0c;一个针对 Mac 操作系统 (OS) 的数据窃取程序正在通过虚假的网络浏览器更新分发给毫无戒心的目标。 Atomic Stealer&#xff0c;也称为 AMOS&#xff0c;是 Mac OS 上流行的窃取程序。 Atomic Stealer (AMOS) 恶意软件最近被发现使用“ClearFa…

力扣第462题 最小操作次数使数组元素相等 II C++ 排序基础 附Java代码

题目 462. 最小操作次数使数组元素相等 II 中等 相关标签 数组 数学 排序 给你一个长度为 n 的整数数组 nums &#xff0c;返回使所有数组元素相等需要的最小操作数。 在一次操作中&#xff0c;你可以使数组中的一个元素加 1 或者减 1 。 示例 1&#xff1a; 输入&a…

浅谈WPF之各种Template

前几天写了一篇文章【浅谈WPF之控件模板和数据模板】&#xff0c;有粉丝反馈说这两种模板容易弄混&#xff0c;不知道什么时候该用控件模块&#xff0c;什么时候该用数据模板&#xff0c;以及template和itemtemplate之间的关系等&#xff0c;今天专门写一篇文章&#xff0c;简述…

【rust:tauri-app踩坑记录】dangerousRemoteDomainIpcAccess 不适用于IP地址,临时解决方案

找到一个临时解决方案&#xff1a; 修改依赖包的源代码 找到 C:\Users%USER_HOME%.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-1.4.1\src\scope\ipc.rs 修改 函数 remote_access_for 将 155 行中的 matches_domain 删除掉&#xff0c;去掉校验 if matches_w…

RT-Thread 线程间同步【信号量、互斥量、事件集】

线程间同步 一、信号量1. 创建信号量2. 获取信号量3. 释放信号量4. 删除信号量5. 代码示例 二、互斥量1. 创建互斥量2. 获取互斥量3. 释放互斥量4. 删除互斥量5. 代码示例 三、事件集1. 创建事件集2. 发送事件3. 接收事件4. 删除事件集5. 代码示例 简单来说&#xff0c;同步就是…

FlinkCDC实现主数据与各业务系统数据的一致性(瀚高、TIDB)

文章末尾附有flinkcdc对应瀚高数据库flink-cdc-connector代码下载地址 1、业务需求 目前项目有主数据系统和N个业务系统,为保障“一数一源”,各业务系统表涉及到主数据系统的字段都需用主数据系统表中的字段进行实时覆盖,这里以某个业务系统的一张表举例说明:业务系统表Ta…