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

Java贪吃蛇小游戏

Java贪吃蛇小游戏

在这里插入图片描述

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.LinkedList;
import java.util.Random;public class SnakeGame extends JFrame implements ActionListener, KeyListener {private static final long serialVersionUID = 1L;// 游戏区域的格子数和每个格子的大小private static final int GRID_SIZE = 20;private static final int CELL_SIZE = 20;// 蛇的坐标集合,食物的坐标,蛇的移动方向,计时器private LinkedList<Point> snake;private Point food;private char direction;private Timer timer;// 游戏窗口的构造函数public SnakeGame() {setTitle("Snake Game");  // 设置窗口标题setSize(GRID_SIZE * CELL_SIZE, GRID_SIZE * CELL_SIZE);  // 设置窗口大小setResizable(false);  // 设置窗口不可调整大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 设置默认关闭操作setLocationRelativeTo(null);  // 设置窗口居中显示// 初始化蛇的起始位置,方向为向右snake = new LinkedList<>();snake.add(new Point(GRID_SIZE / 2, GRID_SIZE / 2));direction = 'R';// 生成初始食物spawnFood();// 设置计时器,用于触发蛇的移动timer = new Timer(100, this);timer.start();// 添加键盘事件监听器addKeyListener(this);setFocusable(true);}// 生成食物的方法public void spawnFood() {Random rand = new Random();int x = rand.nextInt(GRID_SIZE);int y = rand.nextInt(GRID_SIZE);food = new Point(x, y);// 确保食物不会生成在蛇的身体上while (snake.contains(food)) {x = rand.nextInt(GRID_SIZE);y = rand.nextInt(GRID_SIZE);food.setLocation(x, y);}}// 移动蛇的方法public void move() {Point head = snake.getFirst();Point newHead = new Point(head);switch (direction) {case 'U':newHead.translate(0, -1);break;case 'D':newHead.translate(0, 1);break;case 'L':newHead.translate(-1, 0);break;case 'R':newHead.translate(1, 0);break;}// 检查碰撞if (newHead.equals(food)) {snake.addFirst(food);spawnFood();} else {snake.addFirst(newHead);// 如果蛇没吃到食物,则移除尾部,否则保持尾部snake.removeLast();}// 检查蛇是否撞到自己if (snake.size() > 1 && snake.subList(1, snake.size()).contains(newHead)) {gameOver();}// 检查蛇是否撞到墙壁if (newHead.x < 0 || newHead.x >= GRID_SIZE || newHead.y < 0 || newHead.y >= GRID_SIZE) {gameOver();}}// 游戏结束的方法public void gameOver() {timer.stop();JOptionPane.showMessageDialog(this, "Game Over", "Game Over", JOptionPane.INFORMATION_MESSAGE);System.exit(0);}// 画图的方法,用于绘制蛇、食物和网格public void paint(Graphics g) {super.paint(g);// 绘制蛇g.setColor(Color.GREEN);for (Point point : snake) {g.fillRect(point.x * CELL_SIZE, point.y * CELL_SIZE, CELL_SIZE, CELL_SIZE);}// 绘制食物g.setColor(Color.RED);g.fillRect(food.x * CELL_SIZE, food.y * CELL_SIZE, CELL_SIZE, CELL_SIZE);// 绘制网格线g.setColor(Color.BLACK);for (int i = 0; i < GRID_SIZE; i++) {g.drawLine(i * CELL_SIZE, 0, i * CELL_SIZE, GRID_SIZE * CELL_SIZE);g.drawLine(0, i * CELL_SIZE, GRID_SIZE * CELL_SIZE, i * CELL_SIZE);}}// 主函数,创建SnakeGame对象并显示窗口public static void main(String[] args) {SwingUtilities.invokeLater(() -> {SnakeGame game = new SnakeGame();game.setVisible(true);});}// 计时器触发的事件处理@Overridepublic void actionPerformed(ActionEvent e) {move();repaint();}// 键盘按下事件处理@Overridepublic void keyPressed(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_UP:if (direction != 'D') direction = 'U';break;case KeyEvent.VK_DOWN:if (direction != 'U') direction = 'D';break;case KeyEvent.VK_LEFT:if (direction != 'R') direction = 'L';break;case KeyEvent.VK_RIGHT:if (direction != 'L') direction = 'R';break;}}// 未使用的键盘事件处理方法@Overridepublic void keyTyped(KeyEvent e) {}// 未使用的键盘事件处理方法@Overridepublic void keyReleased(KeyEvent e) {}
}

相关文章:

Java贪吃蛇小游戏

Java贪吃蛇小游戏 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.LinkedList; import java.util.Random;publi…...

Linux:系统基本信息扫描(1)

#系统基本信息: uname -a #Linux发行版信息: lsb_release -a #内核与发行版信息: cat /proc/version #linux 用户 cat /etc/passwd #Linux 组查询 cat /etc/group #CPU详细信息:lscpu -a #获取CPU模式: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling\_governor #per…...

VR全景打造亮眼吸睛创意内容:三维模型、实景建模

随着VR技术在不同行业之间应用落地&#xff0c;市场规模也在快速扩大&#xff0c;VR全景这种全新的视觉体验为我们生活中的许多方面都带来了无限的可能。更加完整的呈现出一个场景或是物体的所有细节&#xff0c;让浏览者感受到自己仿佛置身于现场一般&#xff1b;其次&#xf…...

ProTable高级表格获取表单数据

隐藏高级表格中的收起按钮 手动控制高级表格中的搜索按钮 获取高级表格中的表单数据 Forminstance 引入 然后在代码中定义 const refForm useRef(); 使用 refForm.current.getFileDsValue();...

力扣刷题第二十七天--二叉树

前言 题目大同小异&#xff0c;按要求来即可。 内容 一、二叉树的右视图 199.二叉树的右视图 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 广度优先搜索 取每层最后一个…...

一个快递包裹的跨国之旅

事情要从今年三月份说起&#xff0c;一位爱尔兰的同事在6月份结婚&#xff0c;团队同事准备了中国风的丝绸画轴、领带、丝巾作为礼物。3月份开始邮寄&#xff0c;4月初爱尔兰方面收件&#xff0c;5月份因为文件不足、不完整、不正确等原因被取消进口&#xff0c;7月份退回到大连…...

qsort函数使用方法总结

目录 一、qsort函数原型 二、compar参数 三、各种类型的qsort排序 1. int 数组排序 2. 结构体排序 3. 字符串指针数组排序 4. 字符串二维数组排序 四、回调函数 1. 什么是回调函数 2. 为什么要用回调函数&#xff1f; 3. 怎么使用回调函数&#xff1f; 4.下面是…...

机器学习介绍与分类

随着科学技术的不断发展&#xff0c;机器学习作为人工智能领域的重要分支&#xff0c;正逐渐引起广泛的关注和应用。本文将介绍机器学习的基本概念、原理和分类方法&#xff0c;帮助读者更好地理解和应用机器学习技术。 一、机器学习的基本概念 机器学习是一种通过从数据中学…...

linux控制台命令

进入root sudo su root 浏览当前文件夹列表 ll ls 查看文件 vim test.txt :q 退出查看模式 上传 sudo rz rz 覆盖上传 rz -y 修改文件名&#xff1a; mv 旧文件名 新文件名 修改文件权限 sudo chmod ar xxx.txt sudo chmod 777 test.txt 7 4 2 1 读写运行权限…...

快时尚品牌Halara登上TikTok美国小店榜Top 5,运动健身风靡TikTok

TikTok Shop美国电商数据周榜&#xff08;11/06-12&#xff09;已出&#xff0c;具体信息如下&#xff1a; 上周总GMV达到5850万美元&#xff0c;日均出单840万美元&#xff1b;单日出单最高达2110万美元&#xff0c;是当前美国单日最高销售额&#xff1b; 截至11月12日&…...

Docker 安装 Oracle Database 23c

目录 访问 Oracle 官方网站 使用 Docker 运行 Oracle Database 23c 免费容器映像 创建并运行 Oracle Database 23c 容器 查看已下载的镜像 列出正在运行的容器 进入容器 sqlplus 命令 访问 Oracle 官方网站 Database Software Downloads | Oracle 中国 使用 Docker 运行…...

什么是美国服务器,有哪些优势,适用于什么场景?

​  在互联网发展的过程中&#xff0c;服务器扮演着至关重要的角色。而美国作为全球信息技术的中心&#xff0c;其服务器在全球范围内受到广泛关注。  美国服务器是指在美国本土机房搭建并运行的服务器。其拥有带宽大、优质硬件、售后运维好、位置优越、数据安全性高以及免备…...

TeXLive 2023安装教程

TeXLive 2023安装教程 本文介绍最新TeX发行版——TeXLive 2023的安装步骤。如果你想用LaTeX进行写作&#xff0c;那么需要搭建LaTeX环境&#xff1a;可以选择下面两种方案之一进行安装&#xff1a;(1)TeXLive 2023TeXStudio或者(2)TeXLive 2023WinEdt 11。其中TeXLive 2023是由…...

uniapp中swiper 轮播带左右箭头,点击切换轮播效果demo(整理)

可以点击箭头左右切换-进行轮播 <template><view class"swiper-container"><swiper class"swiper" :current"currentIndex" :autoplay"true" interval"9000" circular indicator-dotschange"handleSw…...

网络连接Android设备

参考&#xff1a;https://blog.csdn.net/qq_37858386/article/details/123755700 二、网络adb调试开启步骤 1、把Android平板或者手机WiFi连接到跟PC机子同一个网段的网络&#xff0c;在设置-系统-关于-状态 下面查看设备IP,然后查看PC是否可以ping通手机的设备的IP。 2、先…...

Redis(位图Bitmap和位域Bitfield)

位图&#xff1a; 位图是字符串类型的扩展。 Redis中的位图是一种特殊的数据结构&#xff0c;用于表示一系列位的集合。它可以存储大量的布尔值数据&#xff0c;每个位代表一个布尔值&#xff08;0或1&#xff09;&#xff0c;并且可以对这些位进行各种位运算操作。位图通常用…...

【ArcGIS】批量对栅格图像按要素掩膜提取

要把一张大的栅格图裁成分省或者分县市的栅格集&#xff0c;一般是用ArcGIS里的按掩膜提取。 但是有的时候所要求的栅格集量非常大&#xff0c;所以用代码来做批量掩膜&#xff08;按字段&#xff09;会非常方便。 import arcpy , shutil , os from arcpy import env from ar…...

二进制安装minio 并实现主从同步

二进制安装minio 并实现主从同步 一、安装部署minio1.1、创建minio目录并下载minio1.2、授予执行权限1.3、创建存储目录和日志目录1.4、在目录下创建一个启动脚本1.5、设置minio开机启动 二、minio主从配置2.1、从服务器安装过程同《一》2.2、从服务器下载mc2.3、配置同步2.4、…...

React中封装echarts图表组件以及自适应窗口变化

文章目录 前言环境代码接口使用效果后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;…...

鸿蒙:使用Stack、ContentTable、Flex等组件和布局实现一个显示界面

效果展示 一.概述 跟随官网继续HarmonyOS学习 本篇博文实现一个食物详情页的开发Demo 通过这个开发过程学习如何使用容器组件Stack、Flex和基本组件Image、Text&#xff0c;构建用户自定义组件&#xff0c;完成图文并茂的食物介绍 二.构建Stack布局 1.食物名称 创建Stack…...

CANN/hixl LLM集群信息文档

LLMClusterInfo 【免费下载链接】hixl HIXL&#xff08;Huawei Xfer Library&#xff09;是一个灵活、高效的昇腾单边通信库&#xff0c;面向集群场景提供简单、可靠、高效的点对点数据传输能力。 项目地址: https://gitcode.com/cann/hixl 产品支持情况 产品是否支持A…...

CANN驱动带外通道状态查询

dcmi_get_device_outband_channel_state 【免费下载链接】driver 本项目是CANN提供的驱动模块&#xff0c;实现基础驱动和资源管理及调度等功能&#xff0c;使能昇腾芯片。 项目地址: https://gitcode.com/cann/driver 函数原型 int dcmi_get_device_outband_channel_s…...

AI公平性实践指南:AIF360、LiFT与WIT三大开源工具解析

1. 项目概述&#xff1a;当AI需要“公平”的标尺最近几年&#xff0c;AI模型在招聘、信贷、司法等关键领域的应用越来越深入&#xff0c;一个老问题也随之被放大&#xff1a;算法真的公平吗&#xff1f;我们训练模型用的数据&#xff0c;本身就带着人类社会固有的偏见&#xff…...

无标签数据下的模型评估:SUDO方法与可靠性-完整性曲线实战指南

1. 项目概述&#xff1a;当数据没有“标准答案”时&#xff0c;我们如何评价模型&#xff1f;在机器学习项目的实际落地中&#xff0c;我们常常会陷入一个尴尬的境地&#xff1a;模型训练好了&#xff0c;但用来评估它性能的“黄金标准”测试集&#xff0c;要么不存在&#xff…...

孤骑day25

...

如何成为全栈Web开发者:HTML/CSS/JavaScript三件套终极入门指南 [特殊字符]

如何成为全栈Web开发者&#xff1a;HTML/CSS/JavaScript三件套终极入门指南 &#x1f680; 【免费下载链接】Become-A-Full-Stack-Web-Developer Free resources for learning Full Stack Web Development 项目地址: https://gitcode.com/gh_mirrors/be/Become-A-Full-Stack-…...

终极指南:NHSE - 深度解析《动物森友会》存档编辑器的技术实现与实战应用

终极指南&#xff1a;NHSE - 深度解析《动物森友会》存档编辑器的技术实现与实战应用 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE&#xff08;Animal Crossing: New Horizons Save Editor…...

LangChain实战指南:从零构建生成式AI应用的核心架构与优化

1. 项目概述&#xff1a;当LangChain遇上生成式AI&#xff0c;我们能构建什么&#xff1f;最近在GitHub上看到一个挺有意思的项目&#xff0c;benman1/generative_ai_with_langchain。光看名字&#xff0c;就能猜到它的核心&#xff1a;用LangChain这个框架来玩转生成式AI。这其…...

自适应可解释AI:从SHAP到多受众科学传播的工程实践

1. 项目概述&#xff1a;当AI需要向“外行”解释自己“可解释AI”这个概念&#xff0c;在技术圈里已经吵了好几年。我们这些做算法、搞模型的&#xff0c;一提到它&#xff0c;脑子里蹦出来的往往是SHAP值、LIME、注意力热图这些工具。我们习惯于在Jupyter Notebook里&#xff…...

AdGuardHomeRules自动化更新机制详解:如何保持规则库始终最新

AdGuardHomeRules自动化更新机制详解&#xff1a;如何保持规则库始终最新 【免费下载链接】AdGuardHomeRules 高达百万级规则&#xff01;由我原创&整理的 AdGuardHomeRules ADH广告拦截过滤规则&#xff01;打造全网最强最全规则集 项目地址: https://gitcode.com/gh_mi…...