游戏软件开发与设计报告
学 学
号
游戏开发与设计课程报告
课程名称
游戏开发与设计
题 题
目
黄金矿工游戏的设计报告
学 学
部
信息工程学部
专 专
业
17 软件工程
班 班
级
姓 姓
名
课程 教师
2020 年 10 月 23 日
目 录
1. 需求分析 ................................................................................................. 1
1.2 问题分析 ............................................................................................. 2
2 2 系统总体设计 ............................................................................................ 3
2.1 功能模块图 ......................................................................................... 3
2.2 系统流程图 ......................................................................................... 4
3 系统实现 ................................................................................................... 5
3.1 开始功能 ............................................................................................. 5
3.2 计时计步功能 ..................................................................................... 5
3.3 金额记录功能 ..................................................................................... 6
3.4 游戏功能 ............................................................................................. 7
4 关键程序代码 ........................................................................................... 8
5 总结 ......................................................................................................... 12
参考文献 ..................................................................................................... 14
1 1. 需求分析 黄金矿工游戏是非常经典的益智类游戏,目的在于训练你的敏捷能力,游戏中,玩家需要操纵上方的挖矿小人抓取地下的宝藏,每关游戏都会有一个目标金额,游戏中你需要看准时机出钩子勾取金子或者砖石来获得金钱的累加,达到一定的金钱数才能够闯关成功,这里要注意的是,如果抓上较重或者昂贵的物品时,钩子速度会变慢并且必须在指定时间内完成目标金额,否则游戏结束。休闲之时来两把,可以放松心情释放压力。强烈推荐大家休闲玩这款游戏。该类游戏能在我们的生活中带来无限的乐趣,提升我们的思维能力,开发我们的智慧。可以说,这种益智类游戏给这个社会的各个群体带来了快乐,即使老人和小孩也能轻松上手,有助于少年的成长和帮助老年人预防老年痴呆。黄金矿工游戏包含如下功能:
(1)能够实现鼠标操作的功能
在点击鼠标后即可开始游戏,游戏主界面中摆线来回摆动,玩家需要关注游戏界面中摆钩的方向,根据玩家想要的东西所在方向确定摆钩所要停止的方向,然后当摆钩摆动到所需位置时通过点击鼠标左键释放摆线抓取所需物品。
(2)游戏是否通关判断功能
在游戏中,游戏右上角会有金额记录器,当玩家每抓取一样物品时计数器就会自动更新金额,直到玩家抓取到的物品总价值达到关卡的通关价值时,玩家取得胜利,顺利通过当前游戏关口。如果玩家在指定时间内无法达到所需总价值,则玩家失败,将回到该关卡的初始界面。
(3)计时计分功能
在游戏主界面上方位置会出现一行游戏值,计步器主要是用来记录玩家从游戏开始到当前状态所走的步数,计时器用来记录距离游戏结束时间,当游戏开始后计时器和计步器就开始计录,当时间已经用完而目标金额没有达到时,玩家游戏失败退出游戏。
2 1.2 问题分析 (1)关于达到金额后出现提示功能实现
当玩家所抓取的物品达到指定的目标金额或者超出目标金额时,需要弹出一个提示界面用来告诉玩家已经达到目标不需要继续抓取,而在本游戏中在玩家达到目标后只能停留在当前页面无法进行提示显示。
(2)关于游戏的计时以及步数记录功能的实现
当玩家开始游戏就开始计时,游戏中的人物每走一步就会有记录并且超过指定的时间就会自动结束游戏。
(3)关于关口的选择问题
玩家可以在通关游戏中任意选择自己想要重新开始的关卡对于那些没有通关的关卡处于上锁状态无法选择。并且当玩家点击菜单中的下一关,上一关按钮时进行关卡的调节,对于关卡的难度应该是一关比一关难度升级,这样可以提高玩家的兴趣。
3 2 系统总体设计 此游戏主要是娱乐大众以及锻炼思维,让游戏者有好的游戏体验。首先,游戏界面尽量使用深色背景,游戏界面简单,操作起来要足够容易适合各个年龄段,在玩的游戏过程中还可以锻炼玩家的灵敏程度,同时又要富有一定挑战性,提高玩家的兴趣。系统总界面错综分布着各个物品,运行程序进入游戏,上方会出现一系列记录玩家游戏指标的记录板,分别是计步器,计时器,已达金额和目标金额,每一关的时间会随着关卡的难度日益减少,玩家必须在有限的时间内完成目标金额,目标金额的获取是通过玩家所抓取的各种物品的价值所决定的,其中金子价值是 20,钻石价值是 50,石头价值为 10,玩家可以利用摆钩来抓取想要的物品,最终达到目标值,在此过程中可以选择是否结束当前关卡。
2.1 功能模块图 黄金矿工游戏主要功能如下:
(1)初始化模块:在游戏初始时通过点击鼠标即开始游戏,对游戏界面进行初始化操作,包括界面切换。
(2)功能实现模块:主要是对游戏各个环节进行设计,设计出游戏场景,游戏中所有文字提示信息以及游戏中的背景的实现。
(3)游戏设计模块:实现玩家控制摆钩的操作,使之能够达到关卡所要求的目标值即可完成系统任务。
(4)游戏规则模块:主要是记录玩家在游戏过程中的时间以及步数让玩家知道自己需要在多长时间内完成多大金额的目标,否则无法通关。
图 2.1 系统模块图
4 2.2 系统流程图
首先进入游戏界面后,在无操作的条件下,始终保持游戏界面,当点击鼠标后,游戏接收到鼠标的点击事件,然后就读取鼠标所点击的信息开始相应的关卡,此时计时器开始倒计时,计步器开始计步数,摆绳开始摆动,当摆线到达相应位置后点击鼠标即可抓取物品金额会随之增多,最后判断时间是否用尽,如果时间用尽则游戏结束;如果金额在时间未用尽时达到则顺利通关回到游戏初始界面。
图 2.2 系统流程图
5 3 系统实现
3.1 开始功能 单击鼠标进入游戏,将钩子碰到的物品抓取过来,金块,钻石,石头,小猪的位置都是随机的,在没有任何操作的前提下,摆钩是随意摆动的,此时矿工是静止的,摆钩循环往复来回摆动。
图 3.1 开始功能图 3.2 计时计步功能 当单击鼠标开始游戏之后,玩家进入游戏 ,从进入游戏那一刻计时器开始倒计时,计步器在玩家点击鼠标进行第一次抓取后开始记录。游戏步数与游戏没有直接关系,但是当时间用尽,游戏视为失败玩家结束本关游戏回到初始界面。
6
图 3.2 计时计步功能图 3.3 金额记录功能 玩家每次点击鼠标操作摆线时,所抓取到的物品所值的价格加入到原有的金额中,这样直到玩家所抓取的所有物品的价值量在时间充足的情况下达到每个关卡的目标金额或者超过目标后,则玩家顺利通过此关卡。
图 3.3 金额记录功能
7 3.4 游戏功能 当钩子摆动到一定角度,玩家可以单击鼠标控制矿工伸出摆线,抓取金子,抓到一个金子加 20 分,钻石加 50 分,且拉回速度变慢,石头加 5 分拉回速度变慢,抓到炸弹不加分且炸弹爆炸,此时矿工向下转动转轴,获取到金子往回拉后,矿工不断转动转轴,直到金子拉到转轴初始处,矿工恢复静止,钩子继续左右摆动,直到玩家再次单击鼠标,如果钩子没有触碰到任何物品而是左右和下胡边界,则钩子保持原来的速度往回收。
图 3.4 游戏功能图
8 4 关键程序代码
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class CheckObjects : MonoBehaviour {
public void OnTriggerEnter2D(Collider2D other)
{
other.transform.parent = transform;
transform.root.GetComponent<GameManage>().GetState = State.Shorten;
for (int i = 0; i < transform.childCount; i++)
{
transform.GetChild(i).GetComponent<Collider2D>().enabled = false;
}
transform.GetComponent<Collider2D>().enabled = false;
} }
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public enum State//状态 {
Rock,//摇摆
Stretch,//拉伸
Shorten//缩短 }
public class GameManage : MonoBehaviour {
private State state;
private Vector3 dir;
private Transform rope;
private Transform ropeCord;
private float length;
private int grade;
private float times;
public Text timeText;
public Text gradeText;
public State GetState
9
{
set { state = value; }
get { return state ; }
}
void Start () {
state = State.Rock;
dir = Vector3.back;
rope = transform.GetChild(0);
ropeCord = rope.GetChild(0);
length = 1;
times = 30;
grade = 0;
}
void Update () {
if (times <= 0) { times = 0; UnityEditor.EditorApplication.isPlaying = false; return; }
if (state == State.Rock)
{
Rock();
if (Input.GetMouseButtonDown(0)) state = State.Stretch;
}
else if (state == State.Stretch)
{
Stretch();
}
else if (state == State.Shorten)
{
Shorten();
}
times -= Time.deltaTime;
timeText.text = ((int)times).ToString();
gradeText.text = grade.ToString();
}
private void Rock()
{
if (rope.localRotation.z <= -0.5f)
dir = Vector3.forward;
else if (rope.localRotation.z >= 0.5f)
dir = Vector3.back;
rope.Rotate(dir * 60 * Time.deltaTime);
}
private void Stretch()
{
10
if (length >= 7.5f) { state = State.Shorten; return; }
length += Time.deltaTime;
rope.localScale = new Vector3(rope.localScale.x, length, rope.localScale.z);
ropeCord.localScale = new Vector3(ropeCord.localScale.x, 1 / length, ropeCord.localScale.z);
}
private void Shorten()
{
if (length <= 1)
{
length = 1;
state = State.Rock;
if (0 != ropeCord.childCount)
{
grade += GetGrade(ropeCord.GetChild(0).tag);
Destroy(ropeCord.GetChild(0).gameObject);
}
ropeCord.GetComponent<Collider2D>().enabled = true;
return;
}
length -= Time.deltaTime;
rope.localScale = new Vector3(rope.localScale.x, length, rope.localScale.z);
ropeCord.localScale = new Vector3(ropeCord.localScale.x, 1 / length, ropeCord.localScale.z);
}
private int GetGrade(string tag)//每次得到的分数
{
int num = 0;
switch (tag)
{
case "Rock":
num = 10;
break;
case "SmallGold":
num = 50;
break;
case "Gold":
num = 100;
break;
case "BigGold":
num = 200;
break;
case "Mouse":
11
num = -1000;
break;
case "Diamond":
num = 500;
break;
}
return num;
} }
12 5 总结 游戏开发与设计是本学期新开设的一门课程,在此之前我从来没有接触过有关游戏的任何课程,以前只是在电脑上玩各种小游戏也没有想过游戏是怎样设计的,现在自己学了这门课之后知道了里面的各种门道,也对这门课产生了很大的热情,一个游戏从场景的搭建到一步...
上一篇:审计法实践报告
下一篇:工作作风个人自查自纠报告