基于JAVA实现的塔防游戏

Schoolleave

发布日期: 2018-11-23 17:46:29 浏览量: 5942
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1 项目概述

塔防游戏主要代表一类通过在游戏地图上装置炮塔,阻止敌人进攻的策略型游戏。本游戏是在地图上的特定地点装置多种能力不同的炮台以抵御多种怪兽的入侵。同时玩家每场战斗将拥有多种道具让玩家防守更加轻松。游戏原型是【保卫萝卜】和【皇城守卫】,总体设计风格和游戏背景音乐音效向【皇城守卫】靠拢,而游戏机制是参照了【保卫萝卜】。

1.1 项目目标

该项目是要创造出一个界面设计良好,运行流畅,游戏体验较好的一款单机塔防类游戏。游戏风格偏向卡通,游戏难度较为困难,需要玩家合理使用道具和防御塔。

1.2 项目任务

  • 游戏中的炮塔创建,怪兽移动,炮塔攻击特色,玩家的特殊道具等功能的实现

  • 背景音乐的开启和关闭,关卡和地图选择,用户帮助文档,重新开始等功能的存在

  • 不同界面之间的切换良好,用户不会感到阻塞

2 需求分析

本游戏能够实现正常塔防游戏的基础功能,并且我们在游戏机制上是综合了保卫萝卜和皇城守卫两款游戏。本款游戏将实现如下功能:

  • 防御塔的创建、售卖、攻击

  • 怪兽的攻击、移动

  • 合理的金币获得设计、获取量设计

  • 道具的设计

  • BGM的关闭,游戏音效的实现

详细将由下图给出:

3 系统设计

本游戏因为组员资源收集能力有限并未找到相应源码进行参考,所以游戏的核心代码全是组员之间相互讨论得出。

3.1 开发环境及技术手段

  • jre1.8.162

  • Java语言

3.2 系统技术架构

本程序主要采用多线程处理问题,包含线程的有游戏界面类,防御塔类,怪兽类。在新建一座防御塔时就会让防御塔启动线程,而所有线程结束的判断条件都是玩家的血量是否为零。线程所做的事情是将自我特定属性进行改变,让主线程的paint调用每个类的paint方法,然后主线程不停的重绘,这样就能达到动画效果。

3.3 系统流程设计

在等待界面,关卡选择界面,游戏界面都是实现了简单的mouse listener事件,而在进入游戏界面时会启动游戏界面的线程,只要玩家血量不为零并且怪兽没有被全部消灭线程就不会终结。但是在游戏界面有事件可以暂停游戏,返回开始界面。本游戏并没有设计退出按钮,玩家想结束游戏是可以在任何界面关闭窗体达到退出游戏效果。

3.3.1 游戏流程图

本游戏通过鼠标事件在不同的就jpanel之间进行切换,其中有游戏界面,关卡选择界面,帮助界面,开始界面。判断条件就是玩家选择哪个界面。

3.3.2 开始界面

开始界面中含有转换到帮助界面,关卡选择界面的鼠标事件,同时鼠标事件还能实现提示效果。即鼠标触碰到固定区域或者按钮时会有提示音效和图片改变效果。

3.3.3 帮助界面

帮助界面将有不同的图片指引玩家更好的进行该游戏,帮助界面只能返回开始界面,且只能在开始界面访问帮助界面。

3.3.4 关卡选择界面

关卡选择界面与开始界面设计大致相同,不同旗子的click事件将会让玩家进入到新的游戏界面。

3.3.5 游戏界面

当进入到游戏界面时游戏界面线程就开始启动并进入循环。只有玩家胜利、失败或者返回开始界面时,游戏线程才会结束。同时只要玩家处在这个界面就能够响应其鼠标事件

3.3.6 游戏界面鼠标监听

游戏界面的鼠标监听主要分为两个部分,游戏结束时监听、游戏运行时监听。游戏时监听分为防御塔空地监听,系统按钮监听。游戏结束监听即是执行游戏结束函数,因为在游戏结束函数中加入了判定游戏是否结束,所以只要将该函数放在首位即可。

3.3.7 游戏界面线程

游戏界面线程主要工作就是在游戏没有结束时不停的刷新页面。在游戏结束时调用结束函数去结束防御塔和怪兽的线程。因为结束函数的关系,玩家可以选择不反悔开始页面重新进行本关卡。当让如果想返回开始界面可以在点击游戏界面后点击返回按钮返回开始界面。

3.3.8 游戏结束函数

游戏结束函数只要作用是让玩家胜利或者失败是停止游戏并播放相应的BGM,在界面中画出相应的失败胜利标志。同时在鼠标事件中提示玩家重新开始。玩家如果不想继续游戏可以在游戏界面点解返回按钮返回开始界面

3.4 接口和包的设计

3.5 类图设计

3.6 类表

4 系统简介

游戏能够正常的进行防御塔建立,怪兽死亡,胜利,失败,道具使用。项目目标中的功能基本全部实现。

开始界面

关卡选择界面

游戏界面一

游戏界面二

胜利画面

失败画面

道具释放画面一

道具释放画面二

5 总结

本次实践项目完成度良好。同学们在本次实践项目中掌握了不仅熟练掌握了Java语言的基础语法,对于特定的属性方法也有所掌握,如Jpanel的布局方式,线程的实际应用等。除开语言本身的熟练,队员们对于面向对象的思想,以及如何完整,有组织,有纪律的完成一个项目的方法也有了一定的接触。这也显示着我们正在逐步变成一个有着良好习惯的程序员。虽然本次游戏基本实现了项目目标,但是在实践过程中还是出现了很多的失误。

  • 因为时间和外部环境的制约,本次实践没有使用GitHub等实用的代码管理工具,代码之间的整合基本靠U盘和网络发送

  • 虽然初期准备了很多,整个项目的大致方向基本确立,但是缺少核心代码的讨论,一致于组员在初期的第一次整合代码阶段出现了严重的失误,导致组员又要聚集在一起重新讨论游戏的核心实现代码,时间也浪费的较多

  • 任务时间分工执行并不彻底,因为组员代码编写能力有限,常常会出想某个同学等另一个同学的情况,但是等待的同学并没有做他自己剩余的其他任务,这样就导致了没有充分利用工作时间的问题

  • 在游戏完成之后,再次查看自己编写的代码发现其中存在很多重复,没有用到的代码,这种问题的存在说明初期对象设计的失误,在初期自己设计整个代码是没有考虑到后期的延展性

除开上述我们组员出现的失误,组员也展示了自己的专业素养:

  • 基本实现面向对象思想,在初期分类的时候大家都集体整合了接口相关的问题,而后期实现时基本不会存在类中有类的现象,并且出现bug时能够快速的知道是哪个类出现了问题

  • 游戏基础功能运行良好,初期设立的项目目标基本实现。UI界面设计良好,游戏动画效果基本无卡顿现象

  • 在代码编写阶段时组员都编写了良好可用的注释,让其他组员可以独立自主的查看代码

  • 大家都很积极的参与到项目的完成工作之中,在代码编写阶段,出现了小bug时都能在极短的时间内找到相应代码编写者进行调试解决,从而保证了代码良好的运行,提高了工作效率

上传的附件 cloud_download 基于JAVA实现的塔防游戏.7z ( 53.18mb, 121次下载 )
error_outline 下载需要11点积分

keyboard_arrow_left上一篇 : 基于Qt实现的P2P聊天程序 基于QT实现的图的遍历演示 : 下一篇keyboard_arrow_right



Schoolleave
2018-11-14 16:40:36
仿【保卫萝卜】和【皇城守卫】,使用JAVA进行开发
337477044
2019-01-02 22:07:41
谢谢楼主,十分有用
Fmy
2019-02-21 01:47:36
很棒啊啊啊
meishiapo
2020-04-29 15:04:23
xiexie
46714671
2020-06-11 12:41:16
可以可以的
黑马程序员
2020-11-22 15:51:03
谢谢楼主,十分有用
747、
2020-11-22 17:24:53
谢谢楼主,十分有用

发送私信

人生就像马拉松,获胜的关键不在于瞬间的爆发

8
文章数
20
评论数
最近文章
eject