对对碰算法设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计文档题目:

作者:

2011年 5 月浙江温州

目录

第1章项目概述 (1)

1.1项目背景 (1)

1.2任务概述 (1)

1.3项目开发计划 (2)

第2章算法分析 (3)

2.1算法描述 (3)

2.2交换、消除、填补算法 (3)

第3章构造阶段 (8)

3.1核心代码 (8)

3.2系统测试 (9)

第4章用户手册 (13)

4.1系统主要功能 (13)

4.2运行环境要求 (13)

4.3系统安装与初始化 (13)

4.4运行说明 (13)

第5章算法设计小结 (16)

参考文献 (17)

第1章项目概述

1.1 项目背景

电子游戏的发展已经经过了很长的时间,从FC红白机到现在的PC、GBA、PSP,无论在游戏质量还是在游戏平台上都有了很大的飞跃。作为日常重要的通讯工具来说,手机游戏的发展有待看好。其中最为重要的是手机平台和手机网络的先决条件,将决定手机游戏成为下一代的游戏产业链中焦点。一代代的高端手机不断的突破原本的功能平台,在手机的硬件上,显然已经超过了几年前的微机(386时代前的计算机)。S60、手机操作系统的出现更是把手机这一载体推向了另一个高度。部分手机已经拥有高速的存储读取速度和高容量的存储盘,甚至可以达到1G的大小。其功能上已经可以和掌上电脑所媲美,由此可见,手机是一个合格的游戏载体,它的发展速度并不亚于计算机,很难说在几年后手机平台将会是一个什么样的状况。不过从电脑的发展不难看出,从P3到P4的时间短得让人咋舌。

身为一款移动通讯设备,手机是一个合格的网络传输工具,3G时代即将来临,从手机网络来看,现在已然实现流畅的在手机平台上看即时的电视广播。GPRS的传输速度现在已经可以达到modem拨号56K的两倍,预计在3G时代来临时会和目前的电脑互联网的速度持平(在不考虑手机终端硬件条件的情况下)

考虑这两个条件,手机的确是一个不错的游戏载体。就平台的便携性来讲,电脑就永远达不到手机的水平。而其他的优势,如:运行速度、网络速度、画面效果、音乐效果、操作系统等,手机平台也会在近几年内有望赶超电脑。

唯一的缺陷就是手机屏幕过小,和手机键盘不便操作。但是只要把握好手机游戏的开发思路,开发符合小屏幕并且操作简单的游戏便可解决这一缺陷。

对对碰游戏向来受到人们的爱戴,在QQ游戏中对对碰更是玩家最多相当热门的游戏,知名度高,版本类型多。不过问题就存在于大多数版本都是基于WINDOWS平台的所以开发一个基于移动平台的对对碰是目前所需要的,具有非常好的市场前景

1.2 任务概述

1.配置操作:背景音乐、音效开关。

2.开始游戏操作:生成模块,游戏开始。

3.游戏操作:左键点击图片,再点击另张相邻图片,如果图片交换后横(竖)相同图片大于或等于3的消除这些图片,否则不交换

1.3 项目开发计划

任务分配

编 码

内容

测 试

内容

报 告

内容

第2章算法分析

2.1 算法描述

分析一下,交换一般分为三种情况:

情况1:交换后,消除的头像是竖排的。

情况2:交换后,消除的头像是横排的。

情况3:交换后,消除的头像横竖排都存在

过程就是点击两个图样,先检查是否是同一图样,再检查是否在同一直线,再检查是否是一个折点,再是两个折点,如果都不是则返回无解,如果是,返回TRUE,记录折点,用直线连接折点和连接点并消除两个图样,这个点的值变为0。

2.2 交换、消除、填补算法

【代码】:

private void play_MouseDown(object sender, MouseEventArgs e)

{

if (first)

{

label1.Text = (MousePosition.X / 30).ToString();

label2.Text = (MousePosition.Y / 30 - 2).ToString();

first = false;

second = false;

x1 = MousePosition.X / 30;

y1 = MousePosition.Y / 30 - 2;

}

else

{

label3.Text = (MousePosition.X / 30).ToString();

label4.Text = (MousePosition.Y / 30 - 2).ToString();

first = true;

second = true;

x2 = MousePosition.X / 30;

y2 = MousePosition.Y / 30 - 2;

}

if (Math.Abs(x1 - x2) + Math.Abs(y1 - y2) == 1 && second == true)

{

label5.Text = "Yes";

}

else

{

label5.Text = "No";

}

if (Math.Abs(x1 - x2) + Math.Abs(y1 - y2) == 1 && label5.Text == "Yes" && first == true)

{

Change(x1, y1, x2, y2);

check();

if (f==true)

{

for (int i = 0; i < N; i++)

{

for (int j = 0; j < N; j++)

{

if (sz[i, j] == 0)

{

fill();

}

}

}

progressBar1.Value = progressBar1.Value - 2;

this.Invalidate();

reDraw();

f = false;

CC();

}

else

{

Change(x1, y1, x2, y2);

}

}

}

//消除、填补

public void fill()

{

for (int i = 0; i < N; i++) //每列

{

if (empty[i] > 0)

{

for (int j = 0; j < N; j++) //每行

{

while (sz[j, i] == 0)

{

if (j < N - 1)

{//空格之后的所有图片向前移一位

for (int n = j + 1; n < N; n++)

down(i, n);

}

//填充最后一位

相关文档
最新文档