1. 需求分析

本次实验设计主要是对普通飞行器进行简化设计。保留了它大多数的基本功能。但是添加了道具功能,这是亮点所在。

基本需求:

首先,飞行棋游戏是一个在棋盘 上进行的游戏。所以其需要用一个总体棋盘来表示飞机的轨道,在该棋盘上主要对飞机进行游戏规则限定,其次,飞行棋玩家本次设计主可以为2-3-4人玩家。故在这里需要设计4个大本营来代表玩家的角色;还需要设计显示游戏玩家所摇出来的数字以模拟骰子。最后,游戏需要有一个终点,当玩家的飞机抵达终点时进行判断游戏是否终止。详细游戏规则如下:

飞机出动规则:

首先由玩家A点击摇骰子,显示数字6,当显示的数字6时才允许出动一架飞机,如果没有摇到数字6则由玩家B进行相同的操作。轮流操作,直到有飞机从基地中出发。当某个基地中存在一架飞机时,游戏玩家通过鼠标选择飞机进行游戏,例如:当摇出的数字为非6时,可以选择已经出动的飞机进行游戏,数字为几就前进几步;若为数字为6时可以选择未出动的飞机,使飞机出基地。当基地中不存在飞机时,摇出数字后玩家通过鼠标选择希望前进的飞机进行游戏,数字为几就前进几步。

飞机在地图中前进时的规则:

点击“骰子”按钮,数字显示后,通过鼠标选择需要前进的飞机,数字为几就前进几步。当飞机在地图上前进时,若两个玩家的飞机均落在了同一个地点,那么后去的飞机将把前一个落在该地点的飞机弹回~飞机本来的基地中,被弹回的飞机需要玩家根据“飞机出动规则”再次出动飞机。如果碰见道具就实现道具所对应的功能。

飞机到达目的地规则:

玩家需要将自己基地中的飞机通过指定的路线进入目的地,在到达目的地之前,如果摇出的数字刚好使得飞机进入目的地,则该飞机成功完成任务。如果摇出的数字M多出飞机到达目的地本应该对应的数字N时,则飞机从目 的地倒退M-N步,直到某个玩家的飞机全部到达终点,该玩家获胜,直到场上游戏玩家剩余1人时候游戏结束。

2.功能结构图:

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋

3. 本人任务

负责登录页面GUI设计,游戏过程中GUI 的设计,以及背景音乐的设计等。

负责类的类图:

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_02

4.负责的主要功能展示与代码分析

LoginScreen:这个类中主要是登录页面,创建窗口,设计按钮,和监听器等。

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_03


java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_04

mouse监听:

java 飞行棋 Java飞行棋游戏项目背景_登录页面_05


java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_06

效果图:

java 飞行棋 Java飞行棋游戏项目背景_登录页面_07

MusicPlayer,SimplePlayer类:主要实现音乐播放,使用了多线程,可循环开启。

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_08

效果图:效果体现在登录页面:

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_09

ArtButton类:游戏开始后所有GUI的按钮艺术字体效果和监听效果由这个类定义。

java 飞行棋 Java飞行棋游戏项目背景_登录页面_10


java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_11

BasciEndFrame和BasciFrame,BasciPanel类是基础面板,用来承载画布背景图片。

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_12


java 飞行棋 Java飞行棋游戏项目背景_登录页面_13

EndPanel类:游戏结束后弹窗,是否退出游戏,可以重新开始。

java 飞行棋 Java飞行棋游戏项目背景_登录页面_14


java 飞行棋 Java飞行棋游戏项目背景_java_15


java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_16

效果图:游戏结束弹出:

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_17

GamePanel类:承载游戏开始后的面板GUI,以及2个按钮:返回和结束游戏。

java 飞行棋 Java飞行棋游戏项目背景_ci_18

效果图:

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_19

MenuPanel类:菜单类,设计了开始游戏规则和退出按钮。代码和上面类类似。

java 飞行棋 Java飞行棋游戏项目背景_ci_20

效果图:

java 飞行棋 Java飞行棋游戏项目背景_ci_21

RulePanel类:游戏规则,展示游戏规则和一个返回按钮。代码和上面类似。

java 飞行棋 Java飞行棋游戏项目背景_java_22

效果图:

java 飞行棋 Java飞行棋游戏项目背景_java_23

StartPanel类:开始游戏前的选择模式,设计了6个按钮,并且都需要监听。

java 飞行棋 Java飞行棋游戏项目背景_登录页面_24


java 飞行棋 Java飞行棋游戏项目背景_登录页面_25

效果图:

java 飞行棋 Java飞行棋游戏项目背景_登录页面_26

5. 测试、改进与感想。

GUI的bug不多,主要是调节坐标,和按钮位置,按钮的监听是一个循环的过程,逻辑上面要需要连贯。本游戏很多按钮涉及到返回进行的切换,按钮的设计需要严谨。

主要的bug:

(1):登录页面调用show方法时候不知道如何判断成功后在开始游戏。仅仅就在show的下面开始下面的进程,发现不行,因为需要在登录成功后在调出接下来的游戏,如果登录不成功不能开始游戏,而且show方法中的按钮监听器是独立画布的,在LoginScreen 中设一个flag的值,用来判断,这种按钮内部的承接上需要使用一点技巧。因为不能够让show方法停止,因为还没有登录,没有使用到监听器,无法给flag赋值,起不到判断作用。

java 飞行棋 Java飞行棋游戏项目背景_登录页面_27

改进:使用了一个最基础的办,强制show方法不停止。

java 飞行棋 Java飞行棋游戏项目背景_登录页面_28

用status的值来结束show方法,而status的值在登录成功后改变,这个时候就结束while循环,show方法停止了,flag的值也监听到了。登录成功,status的值改变,flag的值改变。达到判断是否登录成功。

java 飞行棋 Java飞行棋游戏项目背景_java 飞行棋_29

音乐播放循环的问题,点开始音乐后,关闭后,不能再次开启。这是一个不切实际的问题,需要改进成可以随意开启关闭。

定义choose变量做为开关去重复开启关闭线程。开启就是new一个新线程。

java 飞行棋 Java飞行棋游戏项目背景_ci_30


java 飞行棋 Java飞行棋游戏项目背景_java_31

6.总结:

经过这一周对java面向对象程序设计的学习,让我更加了解到java学习的重要性。
在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一-体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。希望自己在以后的学习中能够不断充实java知识,为今后的每个方向奠定基础。