课程论文.docx

上传人:b****0 文档编号:9037005 上传时间:2023-05-16 格式:DOCX 页数:10 大小:44.80KB
下载 相关 举报
课程论文.docx_第1页
第1页 / 共10页
课程论文.docx_第2页
第2页 / 共10页
课程论文.docx_第3页
第3页 / 共10页
课程论文.docx_第4页
第4页 / 共10页
课程论文.docx_第5页
第5页 / 共10页
课程论文.docx_第6页
第6页 / 共10页
课程论文.docx_第7页
第7页 / 共10页
课程论文.docx_第8页
第8页 / 共10页
课程论文.docx_第9页
第9页 / 共10页
课程论文.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

课程论文.docx

《课程论文.docx》由会员分享,可在线阅读,更多相关《课程论文.docx(10页珍藏版)》请在冰点文库上搜索。

课程论文.docx

课程论文

 

《图形与游戏程序设计》

 

游戏:

俄罗斯方块

 

姓名王志强

学号1320410217

班级计算机2班

分院  信息分院

 

2015年12月25日

俄罗斯方块

摘要:

本文是一篇关于俄罗斯方块游戏功能模块实现与设计的报告,本文以俄罗斯方块逻辑流程图,功能流程图,主要功能算法为切入点,清晰的表达出俄罗斯方块游戏如何实现,把抽象的函数具体的表达出来。

最终完成了游戏的实现

关键字:

俄罗斯方块逻辑流程图算法函数

1.引言

随着现代科技的高速发展短短几十年,电脑游戏得到迅猛发展。

电脑游戏充分利用多媒体网络优势,拓宽了传统游戏的界限,给人们带来全新的体验。

在这些游戏中,FLASH游戏以其好看的动画,绚丽的声光效果,高度的通畅性,及很强的可玩性,而受到广大青少年的青睐。

本文就俄罗斯方块的FLASH游戏的设计和实现进行分析和阐述。

该游戏主要使用AdobeFlashProfessionalCS5.5软件进行游戏的设计,是一款操作简单、休闲益智的小游戏。

游戏主角是不停下落的方块组合,当一个方块组合落地后另一个方块组合开始下落,当它们在场景中铺满一整行时,会消去那铺满的那一行。

键盘的上下左右键可以控制游戏主角的旋转下落速度移动方向。

当方块落地时的行高度,超出场景设置的行高度时,游戏就会失败,只要消行得分大于前100就能进入排行榜,留下自己的名字和成绩。

 

2.游戏介绍

游戏规则:

合理的进行方块叠加,一行填充满时进行并获得相应的分数,当方块的高度超过给定的场景高度,则游戏结束。

使用方法:

用键盘进行操作,“↑”键为旋转,“→”为向右移动,“←”为向左移动,“↓”为加速下落。

 

3.游戏的设计

3.1类的设计

privatevarside:

Number=20;//边长

privatevarnumRows:

int;//行数

privatevarnumCols:

int;//列数

privatevarsceneArr:

Array;//场景(格子的世界)

privatevarbrickArr:

Array;//砖头数组

privatevarbrickX:

int;//砖头的坐标(格子世界数组下标)

privatevarbrickY:

int;

privatevardownSpeed:

int=1;//向下移动速度

privatevarxSpeed:

int=1;

privatevarticker:

Timer;//计时器

privatevarmoveType:

String="down";//移动类型

privatevarcanMove:

Array=newArray();//该方向上可否移动数组索引012分别表示为左右下,。

 

3.2整体框架

3.3算法设计

砖块数组的里的1更新到场景里的算法

PrivatefunctionupdateToScene():

void

{

for(vari:

int=blankU;i<4-blankD;i++)

{

for(varj:

int=blankL;j<4-blankR;j++)

{

if(brickArr[i][j]==1)

{

sceneArr[brickY+i][brickX+j]=brickArr[i][j];

}

}

}

}

 

旋转矩阵的算法

privatefunctionroll(oldArr:

Array):

Array

{

varnewArr:

Array=newArray();

for(vari:

int=0;i<4;i++)

{

newArr[i]=newArray(4);

for(varj:

int=0;j<4;j++)

{

newArr[i][j]=oldArr[j][3-i];

}

}

returnnewArr;

}

 

检测空白行数的算法

privatefunctiongetblankD():

int

{

varblankD:

int=0;

for(vari:

int=3;i>1;i--)

{

for(varj:

int=0;j<4;j++)

{

if(brickArr[i][j]==1)

{

returnblankD;

}

}

blankD++;

}

 

碰撞检测的算法

publicfunctioncheckHit(moveType:

String):

void

{

canMove=[1,1,1];//先初始化1,全能移动。

哪个方向检测到将碰撞,则该方向为0

for(vari:

int=blankU;i<4-blankD;i++)

{

for(varj:

int=blankL;j<4-blankR;j++)

{

if(brickArr[i][j]==1)

{//检测砖块里1的单元格附近的单元格

switch(moveType)

{

case"left":

varhitL:

Boolean=checkCell(brickY+i,brickX+j-1,"hitL");//左

break;

case"right":

varhitR:

Boolean=checkCell(brickY+i,brickX+j+1,"hitR");//右

break;

case"down":

varhitD:

Boolean=checkCell(brickY+i+1,brickX+j,"hitD");//下

break;

default:

break;

}

if(hitL)

{

canMove[0]=0;

}//左只要砖块中有一个说左不能走,就不能走

if(hitR)

{

canMove[1]=0;

}//右

if(hitD)

{

canMove[2]=0;

}//下

}

}

}

}

 

消行的算法

privatefunctioncheckLine():

void

{

for(vari:

int=numRows-1;i>=0;i--)

{

varcanClear:

Boolean=true;

for(varj:

int=0;j

{

if(sceneArr[i][j]!

=2)

{

canClear=false;//这行只要有个不是2,则不消,全是2才消行

}

}

if(canClear)

{

clearLine(i);

i++;//这个i++很必要,这行被消,上面那行下来,必须重新检测这行

}

}

}

4.游戏的实现

privatefunctioninit()//初始化数据

functionRecords(Points)//得分统计

functiononclick(e:

MouseEvent)//初始化世界

privatefunctioninitScene():

void//刷新场景

privatefunctioncreateBrick():

void

{

brickArr=newArray();

varrandNum:

Number=Math.random();

brickArr=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];

}//创建方块

privatefunctionKeyDown(ev:

KeyboardEvent):

void//键盘按下控制方向

privatefunctionmoveBrick(moveType:

String):

void//移动砖块

privatefunctionupdateToScene():

void//方块数组里的1更新到场景里

privatefunctionclearBrick():

void//清楚移动前的方块

privatefunctionroll(oldArr:

Array):

Array//旋转矩阵

privatefunctiongetblankD():

int//检测空白行数

publicfunctioncheckHit(moveType:

String):

void//碰撞检测

privatefunctioncheckLine():

void

{

for(vari:

int=numRows-1;i>=0;i--)

{

varcanClear:

Boolean=true;

for(varj:

int=0;j

{

if(sceneArr[i][j]!

=2)

{

canClear=false;//这行只要有个不是2,则不消,全是2才消行

}

}

if(canClear)

{

clearLine(i);

i++;//这个i++很必要,这行被消,上面那行下来,必须重新检测这行

}

}

}//行检测,检测出哪些行要消并进行消行

privatefunctioncheckLose():

void//游戏结束

 

附:

分工情况表

分工情况表

游戏名称:

俄罗斯方块

姓名

完成部分

王志强

AS3.0代码及相关文档

邱天奇

游戏测试及问题反馈

吴威

游戏界面美化

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2