JAVA-贪吃蛇(源代码)

 

游戏界面:

8a9665310a5f4f8abb8afd430c3dbda4.png

 图片素材:

背景图片 蛇身 食物 蛇头 标题

e0a34af10e804a1fb58f641265eaeb5a.png5b1f227ea2c84a0ab0efcbaab0e0feee.pngf39dd16b3e0c41b1acbdd580385210f2.png3714d7467ace45d4b1b454682f5d75e8.pngd6fdf4d18e6845c189224076a0ce2423.pngcae11e7cf05c42199be18d03d7ae2bcd.pngc6542ef074474d02b2170fa54ab583dd.png1ef43ff0cd0245799805ce07dda6a34a.png

源代码:

运行界面

package com.snake.game;public class snakeApp {public static void main(String[] args) {//添加界面new snakeJFrame();}
}

游戏界面类JFrame

package com.snake.game;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 snakeJFrame extends JPanel implements KeyListener, ActionListener {//不太懂private static final Component This=null;//添加分数int score=0;//创建小蛇的长度int length=0;//设置蛇头方向String fx;//创建食物的坐标int foodX=0;int foodY=0;//公开创建JFrame,Random的类JFrame jFrame=new JFrame();Random r=new Random();//创建小蛇的坐标int[] dateX=new int[22];int[] dateY=new int[24];//检测游戏是否开始boolean isStart=false;Timer timer=new Timer(1000,this);//创建空参构造public snakeJFrame(){//初始化界面initJFrame();//添加鼠标监听this.addKeyListener(this);//添加鼠标点击事件this.setFocusable(true);}//初始化蛇和食物的位置private void initAddress(){length=3;fx="R";//初始化小蛇的位置dateX[0]=56;dateY[0]=55;dateX[1]=31;dateY[1]=55;dateX[2]=6;dateY[2]=55;foodX=6+25*r.nextInt(23);foodY=55+25*r.nextInt(21);System.out.println(foodX);System.out.println(foodY);//创建定时器,实现小蛇的不断移动timer.start();}//界面设置private void initJFrame(){//设置页面大小jFrame.setSize(625,630);//设置游戏标题jFrame.setTitle("贪吃蛇游戏 -- v1.0");//设置游戏关闭模式jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//将页面居中jFrame.setLocationRelativeTo(null);//改变界面颜色jFrame.getContentPane().setBackground(Color.white);//取消图片的默认居中,图片才能按照xy排列jFrame.setLayout(null);//初始化坐标initAddress();//添加图片initImage();//将页面显示出来jFrame.setVisible(true);}//放置图片protected void initImage(){//添加标题ImageIcon title=new ImageIcon("D:\\idea.java\\Snake\\title.png");JLabel titlejLabel=new JLabel(title);titlejLabel.setBounds(6,0,600,50);jFrame.getContentPane().add(titlejLabel);JLabel fontScore=new JLabel("score:"+score);fontScore.setBounds(0,0,50,20);jFrame.getContentPane().add(fontScore);//添加蛇头图片ImageIcon head=null;if(fx=="R"){head=new ImageIcon("D:\\idea.java\\Snake\\headright.png");}else if(fx=="L"){head=new ImageIcon("D:\\idea.java\\Snake\\headleft.png");}else if(fx=="U"){head=new ImageIcon("D:\\idea.java\\Snake\\headup.png");}else if(fx=="D"){head=new ImageIcon("D:\\idea.java\\Snake\\headdown.png");}JLabel headjLabel=new JLabel(head);headjLabel.setBounds(dateX[0],dateY[0],25,25);jFrame.getContentPane().add(headjLabel);//添加身体for(int i=1;i<length;i++){ImageIcon body=new ImageIcon("D:\\idea.java\\Snake\\body.png");JLabel bodyjLabel=new JLabel(body);bodyjLabel.setBounds(dateX[i],dateY[i],25,25);jFrame.getContentPane().add(bodyjLabel);}if(isStart){JLabel font=new JLabel("点击空格,重新开始游戏");font.setForeground(Color.yellow);jFrame.getContentPane().add(font);}//添加食物图片ImageIcon food=new ImageIcon("D:\\idea.java\\Snake\\food.png");JLabel foodjLabel=new JLabel(food);foodjLabel.setBounds(foodX,foodY,25,25);jFrame.getContentPane().add(foodjLabel);//添加背景图片,只有背景图片放在最后,才能将其图片显示出来,因为背景图片太大了ImageIcon backGround=new ImageIcon("D:\\idea.java\\Snake\\background.png");JLabel bgjLabel=new JLabel(backGround);bgjLabel.setBounds(6,55,600,600);jFrame.getContentPane().add(bgjLabel);}@Overridepublic void keyTyped(KeyEvent e) {}//鼠标按下@Overridepublic void keyPressed(KeyEvent e) {int keyCode=e.getKeyCode();//按住空格小蛇停止移动if(keyCode==KeyEvent.VK_SPACE){isStart=!isStart;}//改变蛇头位置if(isStart){if(keyCode==KeyEvent.VK_LEFT&&fx!="R"){fx="L";}else if(keyCode==KeyEvent.VK_RIGHT&&fx!="L"){fx="R";}else if(keyCode==KeyEvent.VK_UP&&fx!="D"){fx="U";}else if(keyCode==KeyEvent.VK_DOWN&&fx!="U"){fx="D";}repaint();}}//鼠标松开public void keyReleased(KeyEvent e) {}@Overridepublic void actionPerformed(ActionEvent e) {if (isStart) {for (int i = 1; i < length; i++) {dateX[i] = dateX[i - 1];dateY[i] = dateY[i - 1];}if (fx.equals("R")) {dateX[0] = dateX[0] + 25;if (dateX[0] > 588) {dateX[0] = 6;}}if (fx.equals("L")) {dateX[0] = dateX[0] - 25;if (dateX[0] < 6) {dateX[0] = 588;}}if (fx.equals("U")) {dateY[0] = dateY[0] - 25;if (dateY[0] < 55) {dateY[0] = 555;}}if (fx.equals("D")) {dateY[0] = dateY[0] - 25;if (dateY[0] >= 580) {dateY[0] = 55;}}}if (dateX[0] == foodX && dateY[0] == foodY) {length++;score += 10;if (score == 100) {isStart = !isStart;}foodX = 6 + 25 * r.nextInt(23);foodY = 55 + 25 * r.nextInt(21);}initImage();repaint();timer.start();}}

感谢大家的观看,相互支持!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——模型融合:Stacking算法

机器学习——模型融合&#xff1a;Stacking算法 在机器学习中&#xff0c;模型融合是一种常用的方法&#xff0c;它可以提高模型的泛化能力和预测性能。Stacking算法&#xff08;又称为堆叠泛化&#xff09;是一种强大的模型融合技术&#xff0c;它通过组合多个基本分类器的预…

如何正确使用数字化仪前端信号调理?(二)

在上期文章如何正确使用数字化仪前端信号调理&#xff1f;&#xff08;一&#xff09;中&#xff0c;我们为大家介绍了数字化仪前端电路所需的特性以及使用过程中需要的输入抗阻和输入耦合&#xff0c;本期文章将为您介绍数字化仪前端信号调理的使用过程中所需的输入电压范围&a…

C# 关于进程回收管理的一款工具设计与分享

目录 设计初衷 开发运行环境 Craneoffice ProcessGC 运行主界面 管理任务与策略 其它设置 移动存储设备管理 核心代码-计时器监控 小结 设计初衷 在使用 COM 模式操作 OFFICE 组件的开发过程中&#xff0c;当操作完相关文档后&#xff0c;在某些情况下仍然无法释放掉…

内网渗透-Windows内网渗透

内网渗透-Windows内网渗透 文章目录 内网渗透-Windows内网渗透前言一、信息收集 1.1、SPN1.2、端口连接1.3、配置文件1.4、用户信息1.6、会话收集1.7、凭据收集 navicat&#xff1a;SecureCRT&#xff1a;Xshell&#xff1a;WinSCP&#xff1a;VNC: 1.8、DPAPI1.9、域信任1.10、…

视频编辑软件pitivi基本功之安装篇

视频编辑软件pitivi基本功之安装篇 台式机的系统是openSUSE-Leap-15.5-DVD-x86_64 应用程序——工具——终端&#xff0c;切换到root用户 ruhonglocalhost:~> su - 密码&#xff1a; localhost:~ # zypper search pitivi localhost:~ # zypper install pitivi ruhonglocalho…

PINet车道线检测+YOLOv8视频目标检测

前言&#xff1a; 本文主要目的是实现在PINet车道线检测的代码中嵌入YOLOv8的目标检测模块&#xff0c;具体效果如图所示&#xff1a; 在学习和使用YOLOv8进行目标检测时&#xff0c;感觉可以和最近研究的车道线检测项目结合起来&#xff0c;形成一套如上图所示的视频效…

c++的学习之路:4、入门(3)

摘要 本章将介绍一下auto、for和指针空值&#xff0c;文章末附上入门的所有代码。 目录 摘要 一、auto 二、for 三、指针空值 四、代码 五、思维导图 一、auto 这个关键字是c提出的&#xff0c;可以自动识别变量的类型&#xff0c;可以看出下方图片&#xff0c;auto自…

亚马逊、沃尔玛自养号测评技术解析:如何降低潜在风险

亚马逊等电商平台在全球范围内迅速扩张&#xff0c;竞争愈发激烈。为提升产品排名和销量&#xff0c;众多卖家选择采用自养号测评的策略。然而&#xff0c;自养号测评技术并非完美无缺&#xff0c;它存在着一定的技术局限性。由于缺乏对自养号原理及底层环境搭建的深入理解&…

三个截然不同的爆仓案例,值得每个交易者反思

用铜做镜子&#xff0c;能端正衣冠&#xff1b;以史为镜可知兴&#xff1b;以人为镜能明得与失得。”做买卖&#xff0c;需要以他人的得失为鉴&#xff0c;这样才会不断地反思持续地提高持续地进步。在这篇文章中&#xff0c;我们会分享3个完全不同的爆仓案例给交易者一个“与明…

ELK-Kibana 部署

目录 一、在 node1 节点上操作 1.1.安装 Kibana 1.2.设置 Kibana 的主配置文件 1.3.启动 Kibana 服务 1.4.验证 Kibana 1.5.将 Apache 服务器的日志&#xff08;访问的、错误的&#xff09;添加到 ES 并通过 Kibana 显示 1.6. 浏览器访问 二、部署FilebeatELK&…

密码学 | 椭圆曲线 ECC 密码学入门(三)

目录 7 这一切意味着什么&#xff1f; 8 椭圆曲线密码学的应用 9 椭圆曲线密码学的缺点 10 展望未来 ⚠️ 原文地址&#xff1a;A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面&#xff1a;本文属搬运博客&#xff0c;自己留…

特氟龙(PFA)实验室器具有哪些?

PFA 是被称为塑料王&#xff0c;具有出众的化学耐受性&#xff0c;并且可在出色的温度范围内执行工作。 PFA 呈半透明&#xff0c;柔韧&#xff0c;并且由于其高密度重量有点重。PFA 具有惰性和低粘合性&#xff0c;溶出物和痕量金属含量较低。它具有较宽的含氟聚合物温度范围…

【gdb调试】在ubuntu环境使用gdb调试一棵四层二叉树的数据结构详解

目录 &#x1f31e;1. 整体思路 &#x1f31e;2. 准备内容 &#x1f33c;2.1 配置.c文件 &#x1f33c;2.2 准备测试程序 &#x1f33c;2.3 GDB调试基础 &#x1f31e;3. GDB调试四层二叉树 &#x1f33c;3.1 测试程序分析 &#x1f33c;3.2 gdb分析 &#x1f33b;1. …

这些矛盾点不搞清楚,私域怎么做得起来!

最近不少人都在问&#xff0c;私域做不起来怎么办&#xff1f;有很多企业砸了不少钱&#xff0c;有些还做了好几年&#xff0c;依旧没有起色。 有些企业觉得私域做不起来的阻碍有运营方面的原因&#xff0c;比如文案写不好&#xff0c;社群不知道怎么管理&#xff1b;有团队方…

Apache Zeppelin 命令执行漏洞复现(CVE-2024-31861)

0x01 产品简介 Apache Zeppelin 是一个让交互式数据分析变得可行的基于网页的开源框架&#xff0c;Zeppelin提供了数据分析、数据可视化等功能&#xff0c; 0x02 漏洞概述 Apache Zeppelin 中代码生成控制不当&#xff08;“代码注入”&#xff09;漏洞。攻击者可以使用 She…

Vitis HLS 学习笔记--硬件卷积加速 Filter2DKernel

目录 加速器功能 Window2D()函数 实现代码 变量解释 ARRAY_PARTITION DEPENDENCE LOOP_TRIPCOUNT ramp_up 更新Window 更新LineBuffer Filter2D()函数 ARRAY_PARTITION window_stream.read() 计算过程 备注 加速器功能 硬件加速单元从全局内存&#xff08;DDR&a…

Centos7配置IP地址

1、找到网卡名字 使用root用户登陆&#xff0c;输入命令 ifconfig 2、打开配置文件 输入命令&#xff0c;打开配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 3、添加IP地址 3.1修改BOOTPROTO 将“BOOTPROTOdhcp” 改为 “BOOTPROTOstatic” 3.2添加IP地址 在配…

D365开发-在视图按钮的js里,引用别的js里的公共方法

公共方法写法&#xff1a; "use strict"; var JJMC window.JJMC || {}; JJMC.SamMCommon JJMC.SamMCommon || {}; (function () { this.cloneRecord function (excludeAttrbuteNames){ / } }).call(JJMC.SamMCommon); 然后在需要调方法的command里面&#xff0c;之…

解读《算者生存:商业分析的方法与实践》:构建企业经营分析框架的必备指南

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

Java:定时任务无法正常执行(scheduling + ShedLock)

目录 一、场景二、代码片段三、排查四、原因五、解决 一、场景 1、使用定时任务(scheduling) 分布式锁(ShedLock)定期执行一段代码 2、configureTasks()对于任务执行周期的更新是正常的 3、但任务方法无法被执行 二、代码片段 三、排查 1、确认Trigger没有问题 2、查看red…