JAVA 实现《贪吃蛇大作战》游戏|CSDN创作打卡

article/2025/10/15 8:02:51

前言

贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃东西,从而使得蛇变得越来越长。

本程序是通过java的swing来实现《贪吃蛇大作战》这款游戏。

主要需求

1、通过上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,蛇的身体会变长

2、蛇头碰到自己的身体,则算失败

主要设计

1、设置swing的窗体大小

2、随机初始化蛇的位置和食物的位置,且食物不能落在蛇的身体上。

4、添加键盘监听器,监听上下左右的方向键,来控制蛇的上下左右运动

5、蛇运行时,头向前走一步,增加一个头部节点,去掉尾部节点。

6、蛇吃了一个食物后,蛇的尾部节点添加一个节点,食物消失。

7、食物每次被蛇吃掉后,要随机再次生成一个新的食物节点。

8、有个计数器,统计蛇的长度和积分,吃一个食物,蛇的长度+1,积分+10

9、通过按空格开始/暂停游戏

功能截图

image-202201209711002

image-202201209605729

image-2022012091821465

代码实现

启动类

public class StartGame {public static void main(String[] args) {JFrame jf=new JFrame("贪吃蛇大作战");jf.setBounds(100, 100, 905, 720);jf.setResizable(false);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.add(new GamePanel());jf.setVisible(true);}}

游戏核心类

public class GamePanel extends JPanel implements KeyListener,ActionListener{//蛇的数据结构static int i=0;int length;int[] snakex=new int[600];int[] snakey=new int[600];String fx;boolean isStart=false;boolean isfail=false;int lx,ly;//吃食物后多出来一个的坐标//目标的数据结构int foodx,foody;//随机数Random random =new Random();//计时器Timer timer=new Timer(100, this);int score;public GamePanel(){init();//添加键盘监听器this.addKeyListener(this);//必须设置可以获得焦点才能监听到键盘事件this.setFocusable(true);timer.start();}public void init(){score=0;length=3;snakex[0]=100;snakey[0]=100;snakex[1]=75;snakey[1]=100;snakex[2]=50;snakey[2]=100;fx="R";foodx=25+25*random.nextInt(850/25);foody=75+25*random.nextInt(600/25);}protected void paintComponent(Graphics g) {super.paintComponent(g);//清屏,这样不会闪烁this.setBackground(Color.white);Data.headicno.paintIcon(this, g, 25, 11);g.setColor(new Color(104,197,107));g.fillRect(25, 75, 850, 600);//蛇头的绘制if(fx.equals("U")){Data.upicno.paintIcon(this, g, snakex[0], snakey[0]);}else if(fx.equals("D")){Data.downicno.paintIcon(this, g, snakex[0], snakey[0]);}else if(fx.equals("L")){Data.lefticno.paintIcon(this, g, snakex[0], snakey[0]);}else if(fx.equals("R")){Data.righticno.paintIcon(this, g, snakex[0], snakey[0]);}//蛇身体绘制for(int i=1;i<length;++i){Data.bodyicno.paintIcon(this, g, snakex[i], snakey[i]);}//食物的绘制Data.foodicon.paintIcon(this, g, foodx, foody);//暂停开始状态的绘制if(isStart==false){g.setFont(new Font("微软雅黑",Font.BOLD,40));g.setColor(Color.WHITE);g.drawString("按空格开始/暂停游戏", 275, 350);}//失败情况的绘制if(isfail==true){g.setFont(new Font("微软雅黑",Font.BOLD,40));g.setColor(Color.red);g.drawString("失败!按空格重新开始", 275, 350);}//积分的绘制g.setColor(Color.PINK);g.setFont(new Font("微软雅黑", Font.ITALIC, 15));g.drawString("长度: "+length, 800, 30);g.drawString("积分: "+score, 800, 55);}//实现键盘监听的接口方法@Overridepublic void keyPressed(KeyEvent e) {int keycode=e.getKeyCode();//空格键暂停或者重开if(keycode==KeyEvent.VK_SPACE){if(isfail==true){System.out.println(1);init();isfail=false;}else{System.out.println(2);isStart=!isStart;repaint();}}//上下左右if(keycode==KeyEvent.VK_UP){fx="U";}else if(keycode==KeyEvent.VK_DOWN){fx="D";//System.out.println("down");}else if(keycode==KeyEvent.VK_LEFT){fx="L";}else if(keycode==KeyEvent.VK_RIGHT){fx="R";}}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e){}@Overridepublic void actionPerformed(ActionEvent e) {if(isStart==true&&isfail==false){//身体移动lx=snakex[length-1];ly=snakey[length-1];for(int i=length-1;i>0;--i){snakex[i]=snakex[i-1];snakey[i]=snakey[i-1];}//头移动if(fx=="U"){snakey[0]-=25;if(snakey[0]<75)snakey[0]=650;}else if(fx=="D"){snakey[0]+=25;if(snakey[0]>650)snakey[0]=75;}else if(fx=="L"){snakex[0]-=25;if(snakex[0]<25)snakex[0]=850;}else if(fx=="R"){snakex[0]+=25;if(snakex[0]>850)snakex[0]=25;}//失败判定for(int i=1;i<length;++i){if(snakex[i]==snakex[0]&&snakey[i]==snakey[0]){isfail=true;}}//吃食物if(snakex[0]==foodx&&snakey[0]==foody){length++;score+=10;snakex[length-1]=lx;snakey[length-1]=ly;foodx=25+25*random.nextInt(850/25);foody=75+25*random.nextInt(600/25);}repaint();}}}

总结

通过此次的《贪吃蛇大作战》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。

源码获取

源码下载地址:传送门------->

可关注博主后,私聊博主免费获取
需要技术指导,写项目程序,等更多服务请联系博主

今天是持续写作的第 1 / 100 天。
可以关注我,点赞我、评论我、收藏我啦。


http://chatgpt.dhexx.cn/article/xHBNjjJn.shtml

相关文章

java贪吃蛇源码

欢迎访问我的个人博客 https://jialaner.cn/​​​​​​​ java是一种面向对象的语言&#xff0c;有着其中不用质疑的优点。学习java将近三个月了&#xff0c;一直在琢磨着“万物皆对象”的意义&#xff0c;却总是只知其表不知其意&#xff0c;做完这个java贪吃蛇后才有了那么…

贪吃蛇 java实现超简单的贪吃蛇(附源代码)

贪吃蛇游戏 贪吃蛇是个非常经典的游戏&#xff0c;希望对初学Java的小伙伴有一定帮助。希望大家喜欢&#xff0c;因为写得简单&#xff0c;希望大家都能看得懂。 游戏界面&#xff08;游戏背景素材不喜欢的话可以自己换&#xff0c;就别在乎我选的素材&#xff08;&#x1f9…

java实现贪吃蛇小游戏(源码+注释)

一.工程文件 二.Main.java package com.company;import javax.swing.*;public class Main {public static void main(String[] args) {//创建窗体对象JFrame frame new JFrame();//创建窗体参数&#xff08;&#xff09;frame.setBounds(10,10,900,720);//设置不允许更改大小…

使用Java实现一个简单的贪吃蛇小游戏

基于java实现贪吃蛇小游戏&#xff0c;主要通过绘制不同的图片并以一定速度一帧一帧地在窗体上进行展示。 开发工具&#xff1a;eclipse java工具包&#xff1a;jdk1.8 一、创建新项目 创建一个新的项目&#xff0c;并命名。创建一个名为images的文件夹用来存放游戏相关图片…

Java贪吃蛇全代码

用Java编写精典小游戏——贪吃蛇&#xff01; 前言 我想贪吃蛇应该是不少90后和00后的童年&#xff08;我本人是01年的&#xff09;&#xff0c;回想起从前偷偷拿着我爹的诺基亚在被窝里玩贪吃蛇&#xff0c;不禁感慨万分&#xff0c;时间飞逝&#xff0c;没想到10年后的我也可…

JAVA小项目(四)—— 贪吃蛇【轻松入门,附源码】

目录 &#xff08;一&#xff09;效果图 &#xff08;二&#xff09;代码实现 &#xff08;1&#xff09;将图片加载到程序中 &#xff08;2&#xff09;创建窗体 &#xff08;3&#xff09;创建面板 &#xff08;4&#xff09;绘制静态的小蛇 &#xff08;5&#xff09; 加入监…

Java贪吃蛇大作战

作为Java新手小白&#xff0c;渴望学习一些好玩有趣的java程序 废话不多说&#xff0c;接下来我会一步一步实现java小程序&#xff1a;贪吃蛇大作战哦&#xff01; 实现 Java贪吃蛇一共分四个步骤&#xff1a; 1、画出窗体对象 2、绘制静态ui 3、使用鼠标监听器事件和定时器事…

Java简易小游戏贪吃蛇(Java实战)

这个版本的贪吃蛇我是跟着“黑马程序员”写的。小伙伴们可以跟着视频试着做一下&#xff0c;同时视频也会更详细。 B站学习链接&#xff1a;【黑马】两个小时带你用Java语言写一个贪吃蛇游戏【配套源码笔记】_哔哩哔哩_bilibili 相对于新手而言&#xff0c;贪吃蛇应该算是一个…

JAVA实现贪吃蛇游戏

本文实现的功能有: 1.绘制静态窗口 2.绘制游戏面板 3.绘制静态小蛇 4.通过键盘控制小蛇移动 5.吃食物 6.积分系统和失败判定 最近在学GUI&#xff0c;然后又有读者希望我写一下相关的实战。刚好博主在b站漫无目的的寻找着题材的时候看到了一个写贪吃蛇游戏的视频&#xff0c;于…

Java实现贪吃蛇大作战小游戏(完整版)

大家好&#xff0c;今天尝试用swing技术写一个贪吃蛇大作战小游戏&#xff0c;供大家参考。 效果展示 目录 效果展示 一、游戏界面 二、得分情况 项目介绍 项目背景 总体需求 实现过程 代码展示 主类 &#xff1a;Demo类 MyPanel类 ①构造方法 ②初始化方法 ③绘制方法…

用java写一个贪吃蛇小游戏(源码在最后)

一、引入 涉及技能&#xff1a; 循环、分支方法的抽取数组的使用面向对象继承&#xff0c;子类方法的重写接口&#xff0c;接口的实现GUI&#xff08;图像化界面编程&#xff09; GUI中的组件&#xff1a; 7.1 窗口 7.2 弹窗 7.3 面板 7.4 文本框 7.5 列表框 7.6 按钮 7.7 图…

安卓蓝牙开发总结(一)—蓝牙开启与关闭

蓝牙开启与关闭 1、引言2、布局文件3、蓝牙打开与关闭  3.1 通过对按钮监听方法  3.2 通过设置点击事件 4、结果展示及总结5、参考链接 1、引言 最近在学习如何在安卓手机上对蓝牙进行操控&#xff0c;作为初学者发现大多数博客对安卓开发的初学者极为不友好&#xff0c;特…

【Bluetooth|蓝牙开发】二、蓝牙开发入门

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 【所有文章汇总】 1、蓝牙基础概念 蓝牙&#xff0c;是一种利用低功率无线电&#xff0c;支持设备短距离…

nimble 蓝牙开发一:BLE 蓝牙 Host 规范概述

目录 nimble 蓝牙开发一&#xff1a;概述一、BLE 简介二、BLE 基础知识蓝牙设备地址BLE 广播类型标准广播数据 三、BLE 工作概述BLE 常见的操作有&#xff1a;BLE 常见的工作流程&#xff1a; 四、BLE 使用的协议规范GAP1. GAP 工作角色2. GAP 工作模式3. GAP 工作流程4. GAP 工…

ESP32 蓝牙开发

1. 低功耗蓝牙&#xff08;BLE&#xff09;协议栈 低功耗蓝牙协议是蓝牙通信协议的一种&#xff0c;BLE协议栈就是实现低功耗蓝牙协议的代码 1.1 层次协议 蓝牙协议规定了两个层次的协议&#xff0c;分别为蓝牙核心协议&#xff08;Bluetooth Core&#xff09;和蓝牙应用层协…

Android蓝牙开发 — 经典蓝牙BLE蓝牙

一&#xff0c;前期基础知识储备 1&#xff09;蓝牙是一种支持设备之间短距离通信的无线电技术&#xff08;其他还包括红外&#xff0c;WIFI&#xff09;&#xff1b; 支持移动电话、笔记本电脑、无线耳机等设备之间进行信息的交换&#xff1b; Android支持的蓝牙协议栈&…

Android 蓝牙开发——概述(一)

一、蓝牙简介 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。 其中将1.x~3.0之间的版本称之为经典蓝牙,4.x开始的蓝牙称之为低功耗蓝牙,也就是蓝牙BLE。 1、蓝牙协议介绍…

低功耗蓝牙开发入门概念科普

一、概述 1、缘起 低功耗蓝牙起源于Bluetooth4.0版本&#xff0c;至今已发展到5.3 4.0 bluetooth low enerngy 这个阶段低功耗蓝牙的基础框架已经稳定成型&#xff0c;后面版本主要退出新特性和扩展特性&#xff0c;同时保证和4.0的原生兼容性 4.1 multi role&#xff08;主从…

ESP32开发三_蓝牙开发

蓝牙开发 交流QQ: 1048272975 QQ交流群: 636564526 蓝牙是一种不断创新发展的无线通信技术标准&#xff0c;采用了2.4G ISM频段&#xff0c;在音频传输、数据传输、位置服务、设备组网这些场景有着广泛的应用。 1. 蓝牙概述 蓝牙技术分经典蓝牙(Classic BT)和低…

iOS 蓝牙开发实现文件传输

这是一篇旧文&#xff0c;三年前就写过了&#xff0c;一直没有时间分享出来&#xff0c;最近简单整理了下&#xff0c;希望能帮到有需要的人。   由于我这里没有相关的蓝牙设备&#xff0c;主要用了两个手机&#xff0c;一个作为主设备&#xff0c;一个做为从设备。另外进行蓝…