课程论文.docx
- 文档编号:9037005
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:10
- 大小:44.80KB
课程论文.docx
《课程论文.docx》由会员分享,可在线阅读,更多相关《课程论文.docx(10页珍藏版)》请在冰点文库上搜索。
课程论文
《图形与游戏程序设计》
游戏:
俄罗斯方块
姓名王志强
学号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代码及相关文档 邱天奇 游戏测试及问题反馈 吴威 游戏界面美化
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程 论文