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

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协议)

我们手工编写了一个测试计划&#xff0c;现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似&#xff1a;让5个用户在2s内登录webtour&#xff0c;然后进入 页面进行查看。 目录 一.性能测试脚本录制的原理 二、性能测试脚本录制的实操&#…...

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.用栈实现队列

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…...

单元测试实战(二)Service 的测试

为鼓励单元测试&#xff0c;特分门别类示例各种组件的测试代码并进行解说&#xff0c;供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战&#xff08;一&#xff09;Controller 的测试 单元测试实战&#xff08;二&#xff09;Service 的测试 单元测试实战&#x…...

LabVIEW和NIUSRP硬件加快了认知无线电开发

LabVIEW和NIUSRP硬件加快了认知无线电开发 对于电视频谱&#xff0c;主用户传输有两种类型&#xff1a;广播电视和节目制作和特殊事件(PMSE)设备。广播塔的位置已知&#xff0c;且覆盖电视传输塔&#xff08;复用器&#xff09;附近的某个特定地理区域&#xff08;称为排除区域…...

嵌入式软件工程师面试题——2025校招社招通用(十六)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…...

白盒测试之测试用例设计方法

白盒测试之测试用例设计方法 什么是白盒测试白盒测试的特点白盒测试的设计方法静态设计方法动态设计方法语句覆盖分支(判定)覆盖条件覆盖判定条件覆盖组合覆盖路径覆盖总结 什么是白盒测试 按照测试方法分类&#xff0c;测试可以分为白盒测试和黑盒测试两种。 白盒测试也称结构…...

在CentOS 7上关闭SELinux

要在CentOS 7上关闭SELinux&#xff0c;可以按照以下步骤进行操作&#xff1a; 临时关闭SELinux&#xff08;不建议使用&#xff09;&#xff1a; setenforce 0但是这种方式只对当前启动有效&#xff0c;重启系统后会失效。 2. 永久关闭SELinux&#xff1a; vi /etc/selinux…...

基于单片机温湿度PM2.5报警系统

**单片机设计介绍&#xff0c; 基于单片机温湿度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):解放代码责任链,提升灵活性与可维护性

在软件开发中&#xff0c;我们经常面临处理请求或事件的情况。有时候&#xff0c;我们需要将请求或事件依次传递给多个对象进行处理&#xff0c;但又不确定哪个对象最终会处理它。这时候&#xff0c;职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;就能派上…...

通过制作llama_cpp的docker镜像在内网离线部署运行大模型

对于机器在内网&#xff0c;无法连接互联网的服务器来说&#xff0c;想要部署体验开源的大模型&#xff0c;需要拷贝各种依赖文件进行环境搭建难度较大&#xff0c;本文介绍如何通过制作docker镜像的方式&#xff0c;通过llama.cpp实现量化大模型的快速内网部署体验。 一、llam…...

JavaScript 异步编程

异步的概念 异步&#xff08;Asynchronous, async&#xff09;是与同步&#xff08;Synchronous, sync&#xff09;相对的概念。 在我们学习的传统单线程编程中&#xff0c;程序的运行是同步的&#xff08;同步不意味着所有步骤同时运行&#xff0c;而是指步骤在一个控制流序…...

linux课程第一课------命令的简单的介绍

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…...

XLua热更新框架原理和代码实战

安装插件 下载Xlua插件&#xff1a;https://github.com/Tencent/xLua 下载完成后&#xff0c;把Asset文件夹下的文件拖入自己的工程Asset中&#xff0c;看到Unity编辑器上多了个Xlua菜单&#xff0c;说明插件导入成功 Lua启动代码 新建一个空场景&#xff0c;场景中什么都不…...

Hive客户端hive与beeline的区别

hive与beeline简介 1、背景2、hive3、beeline4、hive与beeline的关系 1、背景 Hive的hive与beeline命令都可以为客户端提供Hive的控制台连接。两者之间有什么区别或联系吗&#xff1f; Hive-cli(hive)是Hive连接hiveserver2的命令行工具&#xff0c;从Hive出生就一直存在&…...

<MySQL> 什么是数据库索引?数据库索引的底层结构是什么?

目录 一、什么是数据库索引? 1.1 索引的概念 1.2 索引的特点 1.3 索引的适用场景 1.4 索引的使用 1.4.1 创建索引 1.4.2 查看索引 1.4.3 删除索引 二、数据库索引的底层结构是什么&#xff1f; 2.1 数据库中的 B树 长啥样&#xff1f; 2.2 B树为什么适合做数据库索…...

对于koa中间件的理解

洋葱模型 大家都知道koa是洋葱模型&#xff0c;先一层一层通过next往下&#xff0c;之后再回去执行next后面的内容&#xff0c;next即使没写&#xff0c;最后也会进入下一个中间件。 那么什么是ctx呢&#xff0c;ctx顾名思义就是上下文&#xff0c;也就是上一层传给下一层的东…...

分页文件pagefile.sys引出的疑问

现象描述&#xff1a; 磁盘中显示无任何文件&#xff0c;却占用5GB左右的磁盘空间&#xff1b;格式化D盘时提示【此驱动器正在使用中。另一个程序或进程正在使用此驱动器。是否仍要对其进行格式化&#xff1f;】&#xff0c;点击【是】提示【Windows 无法完成格式化。】&#…...

【开题报告】疫苗在线预约小程序的设计与实现

1.选题背景 &#xff08;1&#xff09;新冠疫情下的疫苗接种挑战&#xff1a; 针对当前全球范围内的新冠疫情&#xff0c;疫苗接种成为控制疫情蔓延的重要手段。然而&#xff0c;大规模疫苗接种也带来了接种排队、人群聚集等管理难题&#xff0c;为了更好地组织和管理疫苗接种…...

【深度学习实验】注意力机制(二):掩码Softmax 操作

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 理论介绍a. 认知神经学中的注意力b. 注意力机制&#xff1a; 1. 注意力权重矩阵可视化&#xff08;矩阵热图&#xff09;2. 掩码Softmax 操作a. 导入必要的库b. masked_softmaxc. 实验结果 ​ …...

idea运行项目之后一直卡在Writing classes… 解决方案

最近遇到idea里直接运行一个Spring boot项目后&#xff0c;idea一直慢悠悠的parsing java&#xff0c;然后就writing classes&#xff0c;然后就一直卡着不动了&#xff0c;运气好10几分钟能把项目启动起来。 多年的摸鱼经验告诉我&#xff0c;事出反常必有妖&#xff0c;赶紧…...

CentOS7 安装mysql8(离线安装)postgresql14(在线安装)

注&#xff1a;linux系统为vmware虚拟机&#xff0c;和真实工作环境可能有出入&#xff0c;不过正因如此我暴露了NAT转出的IP也没什么大碍 引言 postgresql与mysql目前都是非常受人欢迎的两大数据库&#xff0c;其各有各的优势&#xff0c;初学者先使用简单一张图来说明两者区…...

使用vant list实现订单列表,支持下拉加载更多

在公司项目开发时&#xff0c;有一个需求是实现可以分页的订单列表&#xff0c;由于是移动端项目&#xff0c;所以最好的解决方法是做下拉加载更多。 1.在页面中使用vant组件 <van-listv-model"loading":finished"finished"finished-text"没有更…...

OpenCV快速入门:图像形态学操作

文章目录 前言一、图像形态学基础1.1 背景介绍1.2 像素距离1.2.1 什么是像素距离&#xff1f;1.2.2 常见的像素距离度量方法1.2.3 计算像素距离的代码实现 1.3 图像连通性1.3.1 什么是图像连通性&#xff1f;1.3.2 连通类型1.3.3 连通组件标记1.3.4 连通性在图像处理中的应用 1…...

Scrapy----Scrapy简介

文章目录 概述与应用背景架构和组件功能和特点社区生态概述与应用背景 Scrapy,一个高效、灵活、且强大的Web爬取框架,被广泛应用于数据抓取和网页内容的结构化提取。它是用Python编写的,支持多平台运行,适用于数据挖掘、在线零售信息收集、历史数据存档等多种场景。Scrapy…...

基环树(pseudotree)入门

目录 无向基环树找环&#xff0c;[题目](https://www.luogu.com.cn/problem/P8655)拓扑排序找环并查集找环dfs找环 内向基环树[2876. 有向图访问计数](https://leetcode.cn/problems/count-visited-nodes-in-a-directed-graph/description/)[2127. 参加会议的最多员工数](https…...

nrm的安装以及使用

1&#xff0c;什么是nrm nrm 是一个 npm 源管理器&#xff0c;允许你快速地在 npm源间切换。 什么意思呢&#xff0c;npm默认情况下是使用npm官方源&#xff08;使用npm config ls命令可以查看&#xff09;&#xff0c;在国内用这个源肯定是不靠谱的&#xff0c;一般我们都会…...