flash俄罗斯方块项目说明_第1页
flash俄罗斯方块项目说明_第2页
flash俄罗斯方块项目说明_第3页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、hJ数学与计算机学院课程设计说明书课程名称:Flash游戏程序设计课程代码:题目:俄罗斯方块年级/专业/班:2012 级计科开始时间:2015年月 2 日 完成时间:2015年_月 4 日 课程设计成绩:学习态度 及平时成 绩(20)技术水平 与实际能 力(20)完成 情况(20)创新(5)说明书(计算书、图纸、 分析报告)撰写质量(35)总分(100)目录系统分析与总体设计2.1需求分析2.2总体设计2.7.系统实现与调试1算法分析三、程序代码四、总结.五、分工.1321错误!未定义书签。一、系统分析与总体设计1需求分析俄罗斯方块是一个比较简单的游戏。它游戏过程仅需要玩家将不断下落的各 种形

2、状的方块移动、翻转,如果某一行被方块充满了,那就将些行消掉;而当窗 口中无法再容纳下落的方块时,就宣告游戏的结束。游戏的需求分析如下:界面设计需求:(1) 实验功能需求虽需要的按钮(2) 显示积分和等级的文本(3) 下一个方块下落提示界面,需要用不同的颜色表示(4) 游戏运行界面功能需求:(1) 实现各种方块的生产,包括形状和颜色等信息;(2) 实现各个方块的上下左右移动和旋转的功能(鼠标操作和键盘操作)。(3) 实现消行的功能;(4) 实现得分的统计功能;(5) 实现开始,暂停,结束等功能;2总体设计2.1系统总体功能设计首先需要对俄罗斯方块的设计和功能需求进行详细的了解和分析,一个具有功能

3、完全满足基本需要的系统需要包括以下几个功能模块。如图1-1所示是俄罗 斯方块总体设计功能图俄罗斯方块游戏设计系统说明系统帮助说明操作设计游戏界面设计游戏帮助积分等级设计消行设计转换设计开始结束设计方块设计界面分布设计图1-1俄罗斯方块总体设计功能图2.2游戏界面设计游戏界面设计包括:游戏界面的布局,包括开始界面,游戏显示界面,下一 个方块下落是界面,积分和等级记录界面等。如图1-2所示,游戏界面设计图:文畔的现粤理)控刮(G週试(Dj文畔(F)现势.V)控制调应D)图1-2游戏界面设计图2.3操作设计操作设计包括: 游戏开始结束暂停操作设计:在游戏开始界面上有开始按钮,用鼠标操作, 选择是否要

4、进入游戏。 方块形状转换操作:良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、 田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针 或逆时针变形,一般为逆时针。如表 1-1所示俄罗斯方块定位点设置表俄罗斯方块定位点设置,以黑色点为(0,0 )坐标状态类型123411!2田13FH=145id-J6m由7申表1-1俄罗斯方块方块形状图键盘处理事件:方块下落时,可通过键盘方向键(上、下、左、右键)对该 方块进行向上(变形),向下(加速)、向左、向右移动。 消行操作: 当方块落到游戏界面最底部并且铺满最后一行, 就能消去所在这一行, 积分 增加 10分,消

5、2行30分,消 3行60分,消 4行100分,而积分增加到一定数 值时,玩家等级增加。 积分等级记录设计: 随着玩家对游戏的熟悉程度, 对游戏的掌握程度, 当玩家进行操作所消的行 数越多,积分增加得越多,玩家等级也随之增加。2.4 流程图- 系统实现与调试1.方块产生代码/ 先建立180个小方块角色备用下降一个单位for (i=0; i180; i+) _root.attachMovie(Block, b+i, i);/ 定义方块边长var blockWidth = 16;/ 存放各种旋转角度及各种方块形状的数组 var BlockSet = new Array();/* 长条形 TempAr

6、ray = new Array(); TempArray.push(-2, 0, -1, 0, 0, 0, 1, 0); TempArray.push(0, -2, 0, -1, 0, 0, 0, 1); TempArray.push(-1, 0, 0, 0, 1, 0, 2, 0); TempArray.push(0, -1, 0, 0, 0, 1, 0, 2); / 将长条形数据推入 BlockSet 数组 BlockSet.push(TempArray);/ * 田字形TempArray = new Array();TempArray.push(0, 0, 1, 0, 0, 1, 1,

7、1); TempArray.push(0, 0, 1, 0, 0, 1, 1, 1); TempArray.push(0, 0, 1, 0, 0, 1, 1, 1); TempArray.push(0, 0, 1, 0, 0, 1, 1, 1); BlockSet.push(TempArray);/ T 字形TempArray = new Array(); TempArray.push(0, -1, -1, 0, 0, 0, 1, 0); TempArray.push(0, -1, 0, 0, 1, 0, 0, 1); TempArray.push(-1, 0, 0, 0, 1, 0, 0,

8、1); TempArray.push(0, -1, -1, 0, 0, 0, 0, 1); BlockSet.push(TempArray);/* 反 L 字形 TempArray = new Array(); TempArray.push(-1, -1, -1, 0, 0, 0, 1, 0); TempArray.push(0, -1, 1, -1, 0, 0, 0, 1); TempArray.push(-1, 0, 0, 0, 1, 0, 1, 1); TempArray.push(0, -1, 0, 0, -1, 1, 0, 1); BlockSet.push(TempArray);/

9、 *L 字形TempArray = new Array();TempArray.push(1, -1, -1, 0, 0, 0, 1, 0);TempArray.push(0, -1, 0, 0, 0, 1, 1, 1);TempArray.push(-1, 0, 0, 0, 1, 0, -1, 1);TempArray.push(-1, -1, 0, -1, 0, 0, 0, 1);BlockSet.push(TempArray);/ *Z 字形TempArray = new Array();TempArray.push(-1, 0, 0, 0, 0, 1, 1, 1);TempArray.

10、push(0, -1, -1, 0, 0, 0, -1, 1);TempArray.push(-1, -1, 0, -1, 0, 0, 1, 0);TempArray.push(1, -1, 0, 0, 1, 0, 0, 1);BlockSet.push(TempArray); / * 反 Z 字形 TempArray = new Array();TempArray.push(0, 0, 1, 0, -1, 1, 0, 1); TempArray.push(-1, -1, -1, 0, 0, 0, 0, 1);TempArray.push(0, -1, 1, -1, -1, 0, 0, 0);

11、TempArray.push(0, -1, 0, 0, 1, 0, 1, 1);BlockSet.push(TempArray);2. 系统运行的结果(1) 游戏开始: 点击游戏界面上的开始按钮, 玩家就可以进行游戏的一系列 操作。如图 3-1 所示(2) 方块转换及下一个方块提示:按键盘上向上或空格键的按钮,都会使当 前方块变换形式。图3-2方块下落视图(3) 消行及积分累加等级变化操作:当当方块落到游戏界面最底部并且铺满 最后一行,就能消去所在这一行,积分增加10分。f卜ur”严回彳|文伴俛图拄制训贰Q图3-3消除后得积分(4)游戏结束:当方块累计顶到游戏运行界面上方边缘的时候,就结束游戏

12、图3-4游戏结束图三、程序代码stop();/先建立180个小方块角色备用for (i=0; i180; i+) _root.attachMovie(Block, b+i, i);/定义方块边长var blockWidth = 16;/存放各种旋转角度及各种方块形状的数组var BlockSet = new Array();/* 长条形TempArray = new Array();TempArray.push(-2, 0, -1, 0, 0, 0, 1, 0);TempArray.push(0, -2, 0, -1, 0, 0, 0,1);TempArray.push(-1, 0, 0, 0

13、, 1, 0, 2, 0); TempArray.push(0, -1, 0, 0, 0, 1, 0, 2); / 将长条形数据推入 BlockSet 数组 BlockSet.push(TempArray);/ * 田字形TempArray = new Array();TempArray.push(0, 0, 1, 0, 0, 1, 1, 1); TempArray.push(0, 0, 1, 0, 0, 1, 1, 1); TempArray.push(0, 0, 1, 0, 0, 1, 1, 1); TempArray.push(0, 0, 1, 0, 0, 1, 1, 1); Block

14、Set.push(TempArray);/ T 字形TempArray = new Array();TempArray.push(0, -1, -1, 0, 0, 0, 1, 0); TempArray.push(0, -1, 0, 0, 1, 0, 0, 1); TempArray.push(-1, 0, 0, 0, 1, 0, 0, 1); TempArray.push(0, -1, -1, 0, 0, 0, 0, 1); BlockSet.push(TempArray);/* 反 L 字形 TempArray = new Array();TempArray.push(-1, -1, -1

15、, 0, 0, 0, 1, 0); TempArray.push(0, -1, 1, -1, 0, 0, 0, 1); TempArray.push(-1, 0, 0, 0, 1, 0, 1, 1); TempArray.push(0, -1, 0, 0, -1, 1, 0, 1); BlockSet.push(TempArray);/ *L字形TempArray = new Array();TempArray.push(1, -1, -1, 0, 0, 0, 1, 0); TempArray.push(0, -1, 0, 0, 0, 1, 1, 1); TempArray.push(-1,

16、0, 0, 0, 1, 0, -1, 1); TempArray.push(-1, -1, 0, -1, 0, 0, 0, 1); BlockSet.push(TempArray);/ *Z 字形TempArray = new Array();TempArray.push(-1, 0, 0, 0, 0, 1, 1, 1);TempArray.push(0, -1, -1, 0, 0, 0, -1, 1);TempArray.push(-1, -1, 0, -1, 0, 0, 1, 0);TempArray.push(1, -1, 0, 0, 1, 0, 0, 1);BlockSet.push(

17、TempArray);/ * 反 Z 字形TempArray = new Array();TempArray.push(0, 0, 1, 0, -1, 1, 0, 1);TempArray.push(-1, -1, -1, 0, 0, 0, 0, 1);TempArray.push(0, -1, 1, -1, -1, 0, 0, 0);TempArray.push(0, -1, 0, 0, 1, 0, 1, 1);BlockSet.push(TempArray);/ 建立用来记录方块堆放情形的数组var troughMap = new Array();for (i=0; i20; i+) /

18、每行可放十个方块TempArray = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0); troughMap.push(TempArray);/ 使用的方块指示数值var blockPointer = -4;/ 起始分数var score = 0;/ 第一关var level = 1;/ 下一个方块组var nextBlock = random(BlockSet.length);/* 建立键盘侦听者 myKeyListener = new Object(); myKeyListener.onKeyDown = function() / 取得按下的键码kd = K

19、ey.getCode();/ 若按下的是“向右”if (kd = Key.RIGHT) barrier = false;for (i=0; i4; i+) x = fallingSetorientSeti0+xCenter; y = fallingSetorientSeti1+yCenter; if (x9 & troughMapyx+1 != 0) barrier = true;if (x = 9) barrier = true;if (barrier = false) xCenter+; else if (kd = Key.LEFT) / 若按下的是“向左”barrier = false;

20、for (i=0; i0 & troughMapyx-1 != 0) barrier = true;if (x = 0) barrier = true;if (barrier = false) xCenter-; else if (kd = Key.UP) / 若按下的是“向上” barrier = false;ori = (orientSet+1)%4;for (i=0; i4; i+) x = fallingSetorii0+xCenter;y = fallingSetorii1+yCenter;if (x9 | y19 | troughMapyx != 0) barrier = true

21、;if (barrier = false) orientSet = ori; else if (kd = Key.SPACE) / 若按下的是“空格键”barrier = false;ori = (orientSet+3)%4;for (i=0; i4; i+) x = fallingSetorii0+xCenter;y = fallingSetorii1+yCenter;if (x9 | y19 | troughMapyx != 0) barrier = true;if (barrier = false) orientSet = ori; else if (kd = Key.DOWN) /

22、若按下的是“向下”barrier = false;for (i=0; i4; i+) x = fallingSetorientSeti0+xCenter;y = fallingSetorientSeti1+yCenter;if (x19 & troughMapy+1x != 0) barrier = true;if (y = 19) barrier = true; if (barrier = false) yCenter+;/ 更新方块组的位置 for (i=0; i4; i+) j = fallingSetorientSeti0; k = fallingSetorientSeti1; wit

23、h (eval(b+(i+blockPointer) _x = blockAreaX+(j+xCenter)*blockWidth; _y = blockAreaY+(k+yCenter)*blockWidth; gotoAndStop(blockStyle+2); ;/ 将侦听者注册成侦听键盘 Key.addListener(myKeyListener);/ 先设定方块组尚未叠在某个方块上 barrier = false;for (i=0; i=20) barrier = true;/ 若方块叠在某个方块上 if (troughMapkj != 0) barrier = true;/* 若方

24、块组还可以往下掉一格if (barrier = false) / 往下掉一格yCenter+;/ 移动方块组for (i=0; i4; i+) j = fallingSetorientSeti0;k = fallingSetorientSeti1;with (eval(b+(i+blockPointer) _x = blockAreaX+(j+xCenter)*blockWidth;_y = blockAreaY+(k+yCenter)*blockWidth; gotoAndStop(blockStyle+2); else if (yCenter = 0) /* 若方块组不能再往下移,且方块区

25、已满 gotoAndStop(gameOver); else /* 若方块组不能再往下移,但未满/ 将方块位置记录下来for (i=0; i4; i+) j = fallingSetorientSeti0+xCenter;k = fallingSetorientSeti1+yCenter; troughMapkj = blockStyle+2;/ 预设填满的列数为 0fullNum = 0;for (i=0; i20; i+) / 预设该列为填满full = true;for (name in troughMapi) if (troughMapiname = 0) / 若有一格为空,表示未填满full = false;/ 若某行填满if (full = true) / 删除该行troughMap.splice(i, 1);TempArray = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0); / 由上方补上新行 troughMap.unshift(Tem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论