人工智能答辩材料-107035003

更新时间:2024-05-24 06:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2008级数字媒体技术移动设备程序设计

期末课题项目报告

题目 姓名 学号 涉及课程 AI 生死逃亡 项目分工 论文章节 球的随机运动 碰撞研究 得分 张霄 107035003 张光虹 108028020 AI 边界研究 游戏结束界面 菜单系统 徐浩 108028017 AI 游戏状态 后台音效

二○一一 年 一 月十四

目录

第1章 需求分析 ......................................................................................................... - 1 -

1.1 背景 ................................................................................................................ - 1 - 1.2 主要功能 ........................................................................................................ - 2 - 第2章 系统设计 ......................................................................................................... - 3 - 2.1 系统设计 ................................................................................................................ - 3 - 2.2 关键技术点介绍 .................................................................................................... - 3 -

2.2.1 随机运动的实现: ............................................................................. - 3 - 2.2.2 键盘控制运动的实现: ..................................................................... - 3 - 2.2.3开机选择菜单后过若干秒后开始游戏: .......................................... - 3 - 2.2.4猫碰到内壁会有提示音: .................................................................. - 3 - 2.2.5球不会超过屏幕边界: ...................................................................... - 4 - 2.2.5当猫体力为0时游戏结束: .............................................................. - 4 -

第3章 系统实现 ......................................................................................................... - 5 - 3.1 系统主要功能的实现 .................................................................................... - 5 -

3.1.1 随机运动的实现: ............................................................................. - 5 - 3.1.2 键盘控制运动的实现: ..................................................................... - 5 - 3.1.3开机选择菜单后过若干秒后开始游戏: .......................................... - 5 - 3.1.4猫碰到内壁时会有提示音: .............................................................. - 6 - 3.1.5球不会超过屏幕边界: ...................................................................... - 7 - 3.1.6猫的体力为0时游戏结束: .............................................................. - 7 - 3.2 系统关键代码实现 ........................................................................................ - 8 -

3.2.1 updateball函数 .................................................................................. - 9 - 3.2.2 延时开始函数 .................................................................................... - 9 - 3.2.3 键盘控制函数 ..................................................................................... - 9 - 3.2.4 包围盒检验函数 ............................................................................... - 10 - 3.2.5 边界检验函数 ................................................................................... - 10 -

第4章 总结与展望 ................................................................................................... - 11 -

4.1 总结 .............................................................................................................. - 11 - 4.2 展望 .............................................................................................................. - 11 - 附录 源代码 ............................................................................................................... - 12 -

3.2.1 updateball函数 ................................................................................ - 12 - 3.2.2 延时开始函数 .................................................................................. - 12 - 3.2.3 键盘控制函数 ................................................................................... - 12 -

2008级数字媒体技术 《移动设备程序设计》

第1章 需求分析

1.1 背景

通过学习的xna插件的案例使用,将平时所学整合到一个整体的课程之中。

游戏的灵感来自浙大数媒展中的一个游戏,联想到和自己课题相似,就决定用自己的方法写出算法。

主场景中的小猫是玩家所控制的,而小猫周围的气泡回随机的运动,玩家所要做的就是要尽量将小猫控制在气泡之内。否则体力将会下降,当体力降到0的时候游戏则会结束。

通过控制各种函数的调用实现此游戏。

- 1 -

1.2 主要功能

系统载入图片后,图片载入一个菜单主要控制键位为方向键的上下左右。确定为enter,退出键位为esc。在系统载入时候会显示菜单,玩家需要选择相应的难度进入模式,系统会根据所选的难度设置相应的速度。

作为有人性化的设置在进入难度的几十秒内气泡不会运动而在时间到了的时候会开始调用update函数。而当小猫和边缘接触的时候,系统会扣除小猫的血量,如果小猫的血量为0的时候,则游戏结束。

- 2 -

第2章 系统设计

2.1 系统设计

本人主要负责气泡的随机运动和菜单的相关修改。首先在draw函数中绘制主要的场景,显示菜单,背景,而currentMenu的值是决定了菜单中所选项的返回值。返回值包括简单,一般,困难和退出,退出键为关闭当前窗口。定义3个float 类型的maxspeed,minspeed ,normalspeed。分别设置3个速度用来调整对应的难度。当currentMenu的值分别为0,1,2,3时候,分别对应

minspeed,normalspeed,maxspeed和esc退出。并且在这个判断语句中,修改游戏的状态gamemod,分别为game menu和esc。通过定义Updateman和updateball分别设置对应的人和球的运动。通过在判断语句中的判断调用updateman或者updateball函数,同时设置当前游戏模式以便于在update函数中开始调用,从而避免了函数一开始气泡就开始运动的情况。

2.2 关键技术点介绍

2.2.1 随机运动的实现:

球的随机运动在屏幕中间随着时间流逝球会呈现不规律的运动

2.2.2 键盘控制运动的实现:

控制器(包括键盘和手柄)通过获得电子信号返回到程序中,从而达到控制小猫运动的目的。

2.2.3开机选择菜单后过若干秒后开始游戏:

在点击开始按钮后,不是立即开始游戏,而是在过了10多秒之后才开始游戏。显得更加人性化。

2.2.4猫碰到内壁会有提示音:

若玩家操作不好,会碰到球的内壁,这是会发出“滴滴”的声音。

- 3 -

2.2.5球不会超过屏幕边界:

当球运动到边界处时,球的运动速度会反向,就会又回到屏幕内。

2.2.6当猫体力为0时游戏结束:

当小猫接触内壁的次数过多时,游戏结束,球停止运动,哭脸弹出。

2.2.7系统菜单的实现:

整个游戏的菜单主要是难度程度的选择,分为简单,一般,困难三个级

别,还有就是退出。在实现菜单选择的时候,选中则显示黄色,每个选项都有对应一个矩形区域,通过这个区域去触发。所以真个菜单是一张图片,在实现的同时,调整好每个区域范围是关键,如果没有很好的分配,菜单就会错乱。

2.2.8后台音效:

音效主要是背景音乐和碰撞音效,添加音效必须先将系统中的using Microsoft.Xna.Framework.Media;引用

- 4 -

第3章 系统实现

3.1 系统主要功能的实现

3.1.1 随机运动的实现:

通过定义一个新的vector2 为ballMovement,并且设置参数为(0,0) 然后通过设置ballMovement的.x和.y的值,设置渐变量为MathHelper.lerp,范围为-.55f和.55的一个随机double类型。从而控制随机运动的

3.1.2 键盘控制运动的实现:

获取手柄和键盘的状态,并且当按下方向键的时候分别给manmovement中加入一个相应方向的渐变量。

3.1.3开机选择菜单后过若干秒后开始游戏:

通过调用updatetime,运用判断语句来确定updatetime是否超过了十五秒(此时间是自定)。由于update函数为系统内置的函数在系统运行时反复调用而udpatetime则记录下经历的时间。当函数事件大于15秒后和gamemode为game时候,才开始调用,从而实现功能.如图3-1、图3-2:

- 5 -

图3-1 游戏开始界面

图3-2 游戏界面

3.1.4猫碰到内壁时会有提示音:

先用rectangle建立猫和球的包围盒,但由于球是内包围盒,所以我用了四个矩形的包围盒围成一周。并用personHit检验两个包围盒是否有接触。若此判断为ture,则定义的k增大,表示猫的体力下降。如图3-3:

- 6 -

图3-3 碰到气泡边界

3.1.5球不会超过屏幕边界:

Update函数内还有一个检验球是否过界的判断语句,分辨判断球的四个坐标极限是否超过规定范围。若否,则使速度反向。

3.1.6猫的体力为0时游戏结束:

猫每次接触内壁,会使k值增大,当超过一定值时,游戏模式进入gameover,如图3-4:

- 7 -

图3-5 游戏结束界面

3.1.7菜单选择属性:

菜单选中时为黄色,可以上下循环选择。选择的同时有音效,选中三个级别中的任意一个就可以直接进入游戏,没有二级菜单,此时定义 int currentMenuItem 用1,2,3表示此时选中的级别。确定后就进入游戏状态中。

- 8 -

3.2 系统关键代码实现 3.2.1 updateball函数

private void Updateball(float speed) {

Vector2 ballMovement = new Vector2(0, 0);

ballMovement.X -= MathHelper.Lerp(-.55f, .55f, (float)random.NextDouble()); ballMovement.Y += MathHelper.Lerp(-.55f, .55f, (float)random.NextDouble()); ballMovement.X += MathHelper.Lerp(-.55f, .55f, (float)random.NextDouble()); ballMovement.Y -= MathHelper.Lerp(-.55f, .55f, (float)random.NextDouble());

ballPosition += ballMovement * speed;

}

3.2.2 延时开始函数

if (gameMode == GameMode.Game && myString >= 15 && currentMenuItem == 1) {

Updateball(nomalspeed); }

if (gameMode == GameMode.Game && myString >= 15 && currentMenuItem == 2) {

Updateball(maxspeed); }

3.2.3 键盘控制函数

if (gamepadState.IsConnected) {

velocity = gamepadState.ThumbSticks.Left; velocity.Y *= -1; }

if (keyState.IsKeyDown(Keys.Left)) velocity.X = -1.0f;

if (keyState.IsKeyDown(Keys.Right)) velocity.X = 1.0f;

- 9 -

if (keyState.IsKeyDown(Keys.Up)) velocity.Y = -1.0f;

if (keyState.IsKeyDown(Keys.Down)) velocity.Y = 1.0f; }

3.2.4 包围盒检验函数

Rectangle manRectangle = new Rectangle((int)cat.Position.X, (int)cat.Position.Y, 132, 127);

Rectangle ballRectangle = new Rectangle((int)ballposition.X - 120, (int)ballposition.Y, 1, 127);

Rectangle ballRectangle1 = new Rectangle((int)ballposition.X + 250, (int)ballposition.Y, 1, 127);

Rectangle ballRectangle2 = new Rectangle((int)ballposition.X, (int)ballposition.Y - 70, ballTexture.Width, 1);

Rectangle ballRectangle3 = new Rectangle((int)ballposition.X, (int)ballposition.Y + 300, ballTexture.Width, 1);

personHit = false;

if (ballRectangle.Intersects(manRectangle) || ballRectangle1.Intersects(manRectangle) || ballRectangle2.Intersects(manRectangle) || ballRectangle3.Intersects(manRectangle)) { personHit = true; }

3.2.5 边界检验函数

if (ballposition.Y < 200 ||

ballposition.Y > 504 || ballposition.X > 704 || ballposition.X < 104) {

minspeed = -minspeed; }

3.2.6 菜单的形成

- 10 -

第4章 总结与展望

4.1 总结

通过这次软件开发让我更进一步理解了xna的编程的种种方法以及对各种事件全自动处理判断提供了依据,让自己从中锻炼了如何进一步运用所学,发现问题,提出问题,解决问题。提高了自己的学习水平。遇到问题时是困扰的,解决问题时是欣慰的。不断的解决自己遇到的问题,自己的能力也在不断提高。

4.2 展望

目前所开发的随机运动是通过直接更改坐标而不是更改方向和速度,目前所用是坐标更改*速度的模式,对后面的包围盒和其他项目有点不方便,希望在以后能有所改进。还有游戏时间的累计也没有很好的实现,希望能够找到自定义的游戏累计时间计算方法。

- 11 -

附录 源代码

3.2.1 updateball函数

private void Updateball(float speed) {

Vector2 ballMovement = new Vector2(0, 0);

ballMovement.X -= MathHelper.Lerp(-.55f, .55f, (float)random.NextDouble()); ballMovement.Y += MathHelper.Lerp(-.55f, .55f, (float)random.NextDouble()); ballMovement.X += MathHelper.Lerp(-.55f, .55f, (float)random.NextDouble()); ballMovement.Y -= MathHelper.Lerp(-.55f, .55f, (float)random.NextDouble());

ballPosition += ballMovement * speed;

}

3.2.2 延时开始函数

if (gameMode == GameMode.Game && myString >= 15 && currentMenuItem == 1) {

Updateball(nomalspeed); }

if (gameMode == GameMode.Game && myString >= 15 && currentMenuItem == 2) {

Updateball(maxspeed); }

3.2.3 键盘控制函数

if (gamepadState.IsConnected) {

velocity = gamepadState.ThumbSticks.Left; velocity.Y *= -1; }

if (keyState.IsKeyDown(Keys.Left)) velocity.X = -1.0f;

if (keyState.IsKeyDown(Keys.Right)) velocity.X = 1.0f;

if (keyState.IsKeyDown(Keys.Up)) velocity.Y = -1.0f;

if (keyState.IsKeyDown(Keys.Down)) velocity.Y = 1.0f; }

- 12 -

3.2.4 包围盒检验函数

Rectangle manRectangle = new Rectangle((int)cat.Position.X, (int)cat.Position.Y, 132, 127);

Rectangle ballRectangle = new Rectangle((int)ballposition.X - 120, (int)ballposition.Y, 1, 127);

Rectangle ballRectangle1 = new Rectangle((int)ballposition.X + 250, (int)ballposition.Y, 1, 127);

Rectangle ballRectangle2 = new Rectangle((int)ballposition.X, (int)ballposition.Y - 70, ballTexture.Width, 1);

Rectangle ballRectangle3 = new Rectangle((int)ballposition.X, (int)ballposition.Y + 300, ballTexture.Width, 1);

personHit = false;

if (ballRectangle.Intersects(manRectangle) || ballRectangle1.Intersects(manRectangle) || ballRectangle2.Intersects(manRectangle) || ballRectangle3.Intersects(manRectangle)) { personHit = true; }

3.2.5 边界检验函数

if (ballposition.Y < 200 ||

ballposition.Y > 504 || ballposition.X > 704 || ballposition.X < 104) {

minspeed = -minspeed; }

- 13 -

本文来源:https://www.bwwdw.com/article/gfo7.html

Top