Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)

项目链接:Java-AI-贪吃蛇-课程设计-论文-其他文档类资源-CSDN下载

Java-贪吃蛇AI-课程设计(源码+文档)_人工智能课程设计-其他文档类资源-CSDN下载项目描述:https://blog.csdn.net/qq_34060370/article/det人工智能课程设计更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_34060370/72373889

一、简介

  1. 发文目的:这个小项目算是我目前写得最满意的一个项目,想分享一下自己做的小成果,以及怀念当初写小游戏的痛苦并快乐的时光
  2. 项目时间:2019年12月大二上学期JAVA课程设计
  3. 项目亮点:BFS算法实现电脑AI、编辑修改地图
  4. 主要功能
  • 地图管理:添加、修改、编辑、删除地图
  • 游戏相关:选关卡、操作蛇、AI电脑蛇、粒子特效、音效
  • 游戏管理:暂停/开始、退出
  • 关卡管理:添加、删除、修改穿越节点、障碍物、蛇初始坐标、关卡显示
  • 排行榜 :显示排行榜、玩家生成成绩
  • 设置管理:音乐开关、控制电脑数量
  • 其它功能:跳转界面
  • 知识点:BFS算法实现AI、IO流

        5.视频链接:[JAVA贪吃蛇]自动寻路,关卡设计_哔哩哔哩_bilibili

二、课程设计文档

设计报告目录

一、项目目的及意义...................................................................................................... 1

1.1项目设计目的............................................................................................................ 2

1.2项目设计意义.............................................................................................................. 3

二、相关技术及工具...................................................................................................... 4

2.1 Java............................................................................................................................ 5

2.2 BFS算法..................................................................................................................... 6

2.3 Eclipse......................................................................................................................... 7

三、系统设计及功能...................................................................................................... 8

3.1功能需求.................................................................................................................... 9

3.2系统总体设计........................................................................................................... 10

3.3概要设计.................................................................................................................. 11

3.4模块设计.................................................................................................................. 12

3.5程序流程图.............................................................................................................. 13

四、系统实现及关键代码分析...................................................................................... 14

4.1 程序运行................................................................................................................. 15

4.2 程序模块细分.......................................................................................................... 15

4.3 主要功能关键代码分析........................................................................................... 16

五、收获和体会............................................................................................................ 17

5.1 总结......................................................................................................................... 18

5.2 收获与体会............................................................................................................. 19

附件1:源程序

一、项目目的及意义

1.1项目设计目的    

1.复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握。

2.为我提供一个动手动脑,独立实践的机会,将课本上的知识和实际应用有机结合起来,锻炼分析我实际解决问题的能力。

3.提高我面对对象分析与设计能力以及实际项目进行综合开发能力。

1.2项目设计意义    

我开发的这个项目是贪吃蛇,对我个人来说想再追忆儿时诺基亚上玩的贪吃蛇游戏,基于基础功能代码开发JAVA 版本,完善和创新新玩法,美化界面,引入AI。虽然是小游戏,但目标是做成完整的游戏,有游戏的许多要素,开发也是以工程为目的的开发模式,系统模块分明,功能完善。

二、相关技术及工具   

2.1 Java     

       Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

       我实现这个项目,使用了Java挺多内容,并且有一些高级内容,具体有用IO流来实现游戏地图的存储读取、用多线程来实现游戏的粒子散开效果和蛇AI自动寻路、用面向对象思想使项目结构分明。

2.2 BFS算法

       BFS算法全称是宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

       我将BFS算法带入游戏中,使用在电脑蛇自动行动寻找食物,原理就是根据蛇位置不断搜索地图中存在食物的坐标,然后保存在List中再读取路线从而达到寻路AI功能。

2.3 Eclipse

       Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

       采用Eclipse作为编辑器工具是因为界面友好,结构分明,比myeclipse轻,对我来说比IDEA简单点。

三、系统设计及功能

3.1功能需求

  • 操作模式
  1. 用户键盘按下释放跳入选择的面板
  2. 用户键盘与鼠标并用

  • 大体功能
  1. 单人过关:玩家可以选择一个人游戏,直至通过所有关卡
  2. 双人对战:玩家可以选择双人对战,通过对比分数来决定输赢
  3. vs电脑:玩家可以选择和电脑对战,通过对比分数来对待输赢
  4. 编辑地图:玩家可以发挥想象力创作有趣的地图
  5. 设置游戏参数:玩家可以设置音效开关、电脑数量

  • 游戏规则

惩罚:End:结束 e1:复活 e2:减分 e3:减节 e4:减速

撞墙

咬自己

一条蛇咬另一条蛇

蛇头相撞

单人模式

End

End

双人模式

E1,e2,e3,e4

E2,e3,e4

被咬的:e2,e3,e4

E1,e2,e3,e4

vs电脑

E1,e2,e3,e4

E2,e3,e4

被咬的:e2,e3,e4

E1,e2,e3,e4

  • 玩家操纵蛇
  1. 有速度快慢
  2. 有蛇节数量
  3. 吃食物加速度和增加蛇节
  4. 可以根据用户操作移动
  5. 碰到障碍物,移动障碍物死亡

  • 食物
  1. 普通食物
  2. 特殊食物
  3. 有毒食物
  4. 不出现障碍物中
  5. 被吃了可以再生成

  • 关卡
  1. 关卡从地图文件读取
  2. 达到一定分数过关
  3. 过关时线程从左到右刷新

  • 分数面板
  1. 当玩家操纵的蛇吃到了食物,进行加分
  2. 加分是先以粒子效果从中心往周围散发许多黑色小点,像是原来分数的数字炸裂开来一样。增加美感

  • 电脑蛇AI
  1. 电脑自动行走,寻找最近食物并吃食
  2. 行走时不会撞墙,不撞移动障碍物,不咬自己
  3. 当新出食物更近选择这个,放弃原本想去吃的
  4. 没食物的时候攻击玩家
  5. 避免自己被对方攻击

  • 比赛结果的面板
  1. 根据模式,再比较分得出结果
  2. 用户输入姓名,输出到排行榜文件,保存姓名、分数、时间

  • 障碍物
  1. 普通障碍物墙
  2. 移动障碍物
  3. 移动障碍物可以一直往复一个方向来回,像角色扮演游戏中怪物往返一个范围巡逻

  • 穿越节点
  1. 当蛇头进入一端 蛇头会穿越到另一端

  • 地图操作
  1. 可以对原本的地图编辑 删除
  2. 新建地图操作完输出可以保存到文件夹下
  3. 可以设置墙,移动障碍物,蛇出生位置,穿越节点

3.2系统总体设计

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第1张图片

3.3概要设计

1. 贪吃蛇游戏的基本玩法功能

2. 创新地方:穿越节点,移动障碍

3. 粒子:分数散开的效果

4. 编辑地图:设计多样的地图

5. 声音

6. 细节:过关的延迟美观,界面的美观,地图预览,地图信息

7. 随机地图

8. 游戏设置,调整游戏界面大小,语言切换

3.4模块设计

 Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第2张图片

3.5程序流程图

1.面板跳转流程:

 Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第3张图片

2.游戏流程:

 Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第4张图片

3.电脑AI流程

 

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第5张图片 

四、系统实现及关键代码分析

4.1程序运行

1.进入游戏主界面

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第6张图片

主界面是以白色背景黑色文字展示出选择各项子菜单,输入数字1,2,3进行相应菜单进入

2.按下1键进入单人模式

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第7张图片

单人模式界面的构图与双人模式与电脑对战的构图一样,分为3大块,左边的是关卡列表,右边上面的是地图预览,右边下面的是地图信息。在关卡列表中可以按上下方向键进行关卡选择,然后按下enter键进入游戏或者点击界面的按钮“开始游戏”进入游戏界面。

3.进入游戏界面

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第8张图片

此界面中,分为两块,最上面一层黄色的是分数面板,下面一层是地图面板。如图所示,此时操纵的蛇就快吃到食物。

4.吃完食物后的效果

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第9张图片

吃完食物后可见,蛇增长一节,并且分数也变为10,当分数达到要求时会进入下一关卡,进入下一关卡前有一个预绘制下一地图关卡的效果。

5.预绘制下一关卡效果

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第10张图片

此时界面把下一关关卡和当前关卡重合在一起,左边的是预绘制好下一个关卡的地图,右边是暂未绘制完的地图,预绘制效果是从左完右的动画效果

6.绘制完关卡

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第11张图片

7.主角即将死亡

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第12张图片

主角在最地图下面,即将碰到橙色的墙,碰到后进入结束界面

8.游戏结束界面

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第13张图片

游戏结束界面会统计分数,并且提示输入姓名,以保存成绩在排行榜中。

接下来输入ESC重回主界面并看双人模式

9.双人模式

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第14张图片

在双人模式中,可见有两个主角,红色的蛇和绿色的蛇,并且分数面板中也显示了两个主角的分数。双人模式的游戏结束条件是通过最后一个关卡以统计谁的分数最高。

10.双人模式游戏结束界面

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第15张图片

此游戏结束界面不同于单人模式游戏结束界面,有胜者和分数显示。

接下来重回主界面并选择编辑地图

11.编辑地图选择界面

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第16张图片

此界面与选关界面有些相似,也由3大块组成,不同的是,新建地图、修改地图、删除地图按钮。我们点击新建地图

12.新建地图。

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第17张图片

界面分两块,左边是待编辑的地图,右边是相对编辑的按钮。简单编辑地图后显示

13.编辑地图后

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第18张图片

我们往中间一小部分变为墙,编辑地图还有很多功能在此略过。编辑完点击保存并退出。

我们返回到主界面并且选择与电脑对战,在关卡列表的最后一行,可见刚刚新增的关卡

14.与电脑对战的关卡选择中可以看到新增的关卡

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第19张图片

此界面与单人与双人模式的一点区别是在关卡预览中可以看见4个主角。1个是玩家,3个都是电脑。

15.进入与电脑对战显示

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第20张图片

分数面板变了,截图中可以看到,两条电脑蛇分别向着同一个食物前进。这个模式的游戏结束是根据退出后的分数判断输赢。

16.与电脑对战游戏结束

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第21张图片

会显示出胜者与分数。

17.回到主界面进入排行榜界面

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第22张图片

可见我们刚刚输入的姓名,分数会保存在这,并且是倒序。

18.在主界面继续按esc会弹框是否退出

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第23张图片

4.2程序模块细分

1.实体类的模块包

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第24张图片

2.电脑AI类的模块包

3.游戏配置参数的模块包

4.修改地图类的模块包

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第25张图片

5.游戏各个界面的模块包

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第26张图片

6.输入输出地图、排行榜类的模块包

7.游戏实际运行类的模块包

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第27张图片

4.3主要功能关键代码分析

1.玩家操纵蛇功能

主要类在GsnMainGameJPanel.java中

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第28张图片

这是主要代码,通过监听,获取玩家输入的健值,匹配到相应的流程,更改newdir方向属性,然后再绘图中根据相应方向更改蛇的位置。

2.界面跳转功能

主要类在GsnBottomLayerInterface.java中

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第29张图片

在其它面板类中有按键监听,当按下esc时就执行这里的几个方法,思路就是把用户进入的面板用stack栈保存起来,然后返回上一个就推出栈顶就回到上一个界面了。

3.电脑AI功能

主要在GsnSnakeComputerPlayer.java类中

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第30张图片

这个类是一个线程类,一直运行,根据状态而执行不同操作,涉及到有限状态机概念,当0状态就是闲逛中要去判断是否有食物生成并设为1状态,1状态是通过bfs算法计算路线list,2状态是根据路线list而去执行路线。具体看上面流程图和diam。

4.输入输出数据功能

主要在GsnInputAndOut.java类中

Java-课程设计-贪吃蛇(BFS算法AI | 编辑地图)_第31张图片

这类使用的是字符缓冲输入输出流,对txt文件进行读取和修改从而进行达到保存数据的效果。

五、收获与体会      

5.1 项目总结     

1. 完成度80%,大体完善

2. 有许多改进和增加功能方向,比如增加声音,游戏界面大小,美工。AI完成度不够,没有攻击玩家和躲避攻击功能。

3. 充分利用多线程完成各种效果,如粒子效果,ai效果

4. 利用面向对象思想 使类划分细明,更容易实现效果

5. 采用了一点点mvc模式,bean代表model模型

6. 使用文件保存地图数据,保存游戏设置

5.2 收获与体会

  1. 开发程序必须要有设计,设计游戏存在的对象,提取出属性和行为,再关联各个类之间的关系,才能写出高效和可扩展的代码
  2. 知识面太窄,需要多学习,才能扩展思维,实现更好的游戏或程序
  3. 算法以及数据结构很重要
  4. 提高写代码的效率,不能写代码10分钟,找bug1小时,太耗时间,应该先有思路再写,可在本子上先验算下
  5. 特别注意数组是引用类型的问题
  6. 提高找bug的精确性,先要理清思路,逐步跟踪,特别是可以利用eclipse中的调试功能 一步一步下去。

附件1:源程序

你可能感兴趣的:(Web和安卓源码,游戏,java,算法,数据结构)