Java贪吃蛇全代码

article/2025/10/15 12:21:20

用Java编写精典小游戏——贪吃蛇!

前言

  我想贪吃蛇应该是不少90后和00后的童年(我本人是01年的),回想起从前偷偷拿着我爹的诺基亚在被窝里玩贪吃蛇,不禁感慨万分,时间飞逝,没想到10年后的我也可以自己做一个贪吃蛇了。
  
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  
该程序主要实现了以下功能:
  1.按空格开始游戏、暂停游戏或重新开始游戏。
  2.方向键控制蛇移动的方向。
  3.蛇吃掉食物可以增长,并增加游戏分数(不会加快游戏速度)。
  4.蛇咬到自己会结束游戏。
  5.蛇撞到游戏区域外会结束游戏。
  
  接下来放出源码,为了让初学者也能够理解,我尽量将大部分代码写了注释:
  

测试类

public class Test {public static void main(String[] args) {Snake snake = new Snake();snake.myJFrame();}
}

  

Snake类

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) {}
}

  

结束语

  
  测试的次数不多,不知道还有多少隐藏BUG,但我平常玩的时候是没有问题的,如果你在玩的时候发现了BUG欢迎来私聊我,如果能带着解决方法来的话那就更好了。
  
  我一直坚持“分享知识”的原则,免费透明的将代码公开展示,如果帮到了你,请顺手点个赞吧(#^.^#)。
  


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

相关文章

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;一个做为从设备。另外进行蓝…

Android经典蓝牙开发全流程

一、基本介绍 所谓蓝牙(Bluetooth)技术&#xff0c;实际上是一种短距离无线电技术&#xff0c;最初是由爱立信公司公司发明的。技术始于爱立信公司 1994 方案&#xff0c;它是研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的通讯创造一…

Android - 蓝牙开发

文章目录 科普SIG类型制式选择逻辑链路控制适配协议 (L2CAP)L2CAP的功能 蓝牙框架和 RFCOMM 协议蓝牙安全白名单机制 编程蓝牙权限Classic BluetoothBluetooth Low Energy术语角色 & 职能查找 BLE 设备连接设备上的 GATT 服务器绑定服务蓝牙设置连接到设备连接到 GATT 服务…

Android 蓝牙开发 uuid,Android蓝牙开发之 UUID

UUID&#xff1a;全球唯一标识符 在蓝牙中&#xff0c;每个Service和Characteristic都唯一地由"全球唯一标识符" (UUID)来校验&#xff0c;主要是保证他们的唯一性。 UUID可分为&#xff1a;16位、32位、128 位UUID Bluetooth_Base_UUID&#xff1a;蓝牙UUID基数 UUI…

Android 低功耗蓝牙开发简述

低功耗蓝牙简述 一、什么是低功耗蓝牙&#xff1f;二、怎么做低功耗蓝牙应用&#xff1f;① 之前有没有接触Android蓝牙开发&#xff1f;② 蓝牙设备固件是公司自己的吗&#xff1f;③ 有没有蓝牙固件和蓝牙应用的文档和Demo&#xff1f;④ 具体的业务功能需求明确吗&#xff1…

Android蓝牙开发

题引&#xff1a; 最近项目上涉及与硬件相关的功能&#xff0c;需要通过蓝牙进行消息收发。项目已完成&#xff0c;这里做下记录。 通信步骤&#xff1a; 1.初始化BluetoothAdapter.getDefaultAdapter()获取BluetoothAdapter对象 2.判断蓝牙是否开启bluetoothAdapter.isEnab…