All Projects → nullxjx → Snake

nullxjx / Snake

Licence: other
用Java语言开发的AI贪吃蛇

Programming Languages

java
68154 projects - #9 most used programming language

Labels

Projects that are alternatives of or similar to Snake

3dsnakear
Well known game Snake written in Swift using ARKit.
Stars: ✭ 453 (+630.65%)
Mutual labels:  snake
Snake
Artificial intelligence for the Snake game.
Stars: ✭ 1,241 (+1901.61%)
Mutual labels:  snake
3dstool
An all-in-one tool for extracting/creating 3ds roms.
Stars: ✭ 246 (+296.77%)
Mutual labels:  snake
Android Snake Menu
imitate Tumblr's menu, dragging animations look like a snake
Stars: ✭ 584 (+841.94%)
Mutual labels:  snake
Tastysnake
A two-player (Bluetooth) game on Android.
Stars: ✭ 61 (-1.61%)
Mutual labels:  snake
Dotnet Console Games
Game examples implemented in .NET console applications primarily for educational purposes.
Stars: ✭ 157 (+153.23%)
Mutual labels:  snake
Space Snake
A Desktop game built with Electron and Vue.js.
Stars: ✭ 289 (+366.13%)
Mutual labels:  snake
Wortuhr ESP8266
Wortuhr mit ESP8266 WeMos D1 mini und NeoPixel WS2812B LEDs mit mp3 Sounds, Animationen, Transitions, Events und Spiele
Stars: ✭ 33 (-46.77%)
Mutual labels:  snake
Snake
🐍🎮 Snake game made with Expo & PIXI.js 👾 iOS, Android, and Web
Stars: ✭ 67 (+8.06%)
Mutual labels:  snake
Case
String case utitility: convert, identify, flip, extend
Stars: ✭ 237 (+282.26%)
Mutual labels:  snake
Snake
使用Snake,Android也可以轻松实现类iOS侧滑返回效果
Stars: ✭ 605 (+875.81%)
Mutual labels:  snake
Team Snake
A Discord bot that lets you play Snake with your friends
Stars: ✭ 20 (-67.74%)
Mutual labels:  snake
Slither.io Clone
Learn how to make Slither.io with JavaScript and Phaser! This game clones all the core features of Slither.io, including mouse-following controls, snake collisions, food, snake growth, eyes, and more. Progress through each part of the source code with our Slither.io tutorial series.
Stars: ✭ 168 (+170.97%)
Mutual labels:  snake
Snake
🚀thinkphp5.1 + layui 实现的带rbac的基础管理后台,方便快速开发法使用
Stars: ✭ 526 (+748.39%)
Mutual labels:  snake
Cpp-Snake
A simple snake game written in c++
Stars: ✭ 35 (-43.55%)
Mutual labels:  snake
Snake Go
Snake game made in Go! 🐍
Stars: ✭ 292 (+370.97%)
Mutual labels:  snake
Sharedfonttool
3DS SharedFontTool
Stars: ✭ 140 (+125.81%)
Mutual labels:  snake
go-snake-telnet
Snake Game over telnet protocol in Go
Stars: ✭ 22 (-64.52%)
Mutual labels:  snake
snake-server
Snake-Server is a pure Go implementation of the famous arcade game 🐍
Stars: ✭ 31 (-50%)
Mutual labels:  snake
Snek
🐍 ‎ A terminal-based Snake implementation written in JavaScript.
Stars: ✭ 210 (+238.71%)
Mutual labels:  snake

Snake

这是XJX用Java语言实现的一个贪吃蛇游戏。

1st version

  • 游戏总的代码行数差不多是700行。
  • 游戏中贪吃蛇的头部是一个红色方块,贪吃蛇的身体结点是渐变色的方块。食物是绿色的圆形。
  • 您可以通过键盘上的方向键或者WASD键来控制蛇的移动。
  • 在游戏界面按ESC键可以直接重新开始游戏,按空格键可以实现暂停和开始。
  • 菜单栏的设置菜单可以设置网格以及边框是否可见。游戏界面右边会显示你的当前长度和当前所花时间。
  • 吃到食物和死亡时都会有相应的音效。
  • 右边会显示你的当前长度和所花时间。
  • 游戏界面的宽度(横向的格子数)和高度(纵向的格子数)分别可以通过 Scene 类中的 width 和 height变量来设置,默认两者都是20。

截图如下:

demo1 demo2 demo3

2nd version

  • 此版本更换了蛇的外形,包括蛇头以及蛇身。
  • 加入了多种食物,每种食物对应的得分不同,不同分值的食物产生的概率不同,原则是分值越高的食物产生的概率越低。加入了记分功能。
  • 每种食物在产生5秒时间内如果没有被吃掉就会自动移动或者消失。

3rd version

  • 本次对程序结构进行了一定的调整,调整后所有源程序在同一个包xjx下。

  • 原来的SnakeDemo.java文件基本保持不变,做了一些修改。

  • 主界面写在了另外一个源文件MainWindow.java中。

  • 程序主界面进行了重大改变

    • 蛇的活动范围增大了一些
    • 加入了设置菜单,可以设置游戏背景,蛇身体,蛇头部,速度。
    • 加入了背景图片,为了让背景显得简洁一点,可以选择是否显示网格。
    • 菜单栏加入了游戏使用说明,以及关于游戏。

4th version

  • 此版本相对上一版本加入了障碍物,障碍物随机产生,每隔一段时间自动随机移动,障碍物的长度也随机,排列也随机。
  • 经过本人的相关测试,不排除游戏开始时障碍物出现在你面前导致来不及躲的情况,以及你加速中障碍物改变位置时也可能出现在你面前,所以加速不像上个版本那样,此版本加速有风险。
  • 为了配合障碍物的出现,游戏加入了蛇发射子弹击毁前进道路上的障碍物的技能。目前每次只能发射一个子弹,不能连续发射多枚子弹。
  • 子弹通过吃特定的食物获得,食物样子为一把枪。吃得枪每次增加一颗子弹,不增加得分,增加长度。
  • 子弹产生的概率在所有食物中最低。按Shift键发射子弹。

5th version

  • 对代码进行了一次重构。
  • 修复部分bug。

6th version

  • 代码量2000行左右。
  • 对代码进行了一次彻底重构。
  • 修复更换图片后,游戏界面刷新不及时的问题
  • 修复打开“设置背景图片”面板时间比较长的问题
  • 移除长按加速
  • 移除食物自动刷新
  • 移除障碍物自动刷新
  • 加入AI🐍
  • 游戏现在有三种模式
    • 仅玩家蛇
    • 仅AI蛇
    • 玩家蛇和AI蛇同时存在
  • 游戏地图从map目录下读取,你可以按照目录下的txt文件格式设计自己的地图,目录里面已经包含了三个地图
    • 注意,每行的每个字符后面都有一个\t字符,不能包含任何空行。
    • 其中,0表示这个位置是路,3表示是障碍物,不能有其他数字。
    • 示例地图请参考 example map >

截图如下:

demo1 demo2 demo3

注意:

  • 由于AI蛇目前使用的是静态寻路算法,所以为了避免玩家蛇故意挡在AI蛇前面造成AI蛇死亡,游戏中允许AI蛇碰到玩家蛇,但是不允许玩家蛇头部碰到AI蛇。
  • 如果玩家蛇吃掉了AI蛇的目标食物,AI蛇会自动寻找下一个距离它最近的食物,然后去吃掉。
  • 目前AI蛇只有在2种情况下会死
    • 进入一个凹形区域去吃里面的食物,然后发现出不来了。(玩家蛇可以使用子弹击毁障碍物出来,AI不可以发射子弹)
    • 自己身体把自己的头包围起来了,然后也找不到出去的路了。
    • AI蛇和玩家蛇死了游戏都会自动结束,按Esc键可以重新开始。

比如下面这种情况就是AI蛇进入凹形区域后发现出不来了,然后就只有选择goDie了🤣

before after

7th version

  • 程序结构调整
  • AI寻路策略优化

调整之后的AI寻路策略为

void move(){
    1.获取AI头部坐标head

    2.获取界面上所有食物坐标food_pos_sets

    3.判断从head出发,是否存在一条能够安全达到某个食物的路径(安全暂时定义为虚拟蛇吃完这个食物后还能找到自己的尾巴)
        3.1如果存在多条这样的路径,则选其中最短的一条,让AI沿着这条路移动一步
        3.2如果不存在这样的路径,则寻找一条能够到达自己尾巴的最长路径
            3.2.1如果存在这样的路径,则沿着这条路移动一步
            3.2.2如果不存在这样的路径,则死亡
}

如果你想设置自己的游戏地图,只需要按照上面的说明新建一个txt文件,例如demo.txt,然后修改下面的一个地方即可:

//主函数入口
public static void main(String[] args) {
    System.out.println("Application starting...\t" + Util.getSysTime());

    Scene game = new Scene();
    game.mapFile = "demo.txt";//唯一需要修改的地方,如果你想更换地图的话
    game.gameMode = 1;
    game.loadGameMap(game.mapFile);//加载游戏地图

    Util.PrintMap(game.getMap(),"debug//map.txt");//此处不需要修改

    game.initUI();//初始化游戏界面
    game.run();//开始游戏
    System.out.println("\nGame start...\t" + Util.getSysTime());
}

有问题通过本人邮件联系我

[email protected]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].