俄罗斯方块实验报告

合集下载

C语言编写俄罗斯方块实验报告

C语言编写俄罗斯方块实验报告

C语言编写俄罗斯方块实验报告实验报告一、实验目的实践C语言的基本语法和操作,测试自己对C语言的熟练程度,实现俄罗斯方块游戏的基本功能。

二、实验步骤1.定义游戏界面:使用二维数组定义游戏界面,用字符来表示方块的状态(空白、正在下落的方块、已经固定的方块)。

2.实现方块的生成和选择:定义方块的类型,通过随机数生成下一个方块,用一个变量来保存下一个方块的类型,并在游戏界面上进行展示。

3.实现方块的下落和移动:方块可以通过用户的操作左右移动和旋转,同时也会自动下落,每当方块到达底部或者碰到已经固定的方块时,就会停止下落。

4.实现方块的旋转:将方块表示为二维数组,通过改变数组元素的位置实现方块的旋转。

5.实现方块的消除:当一行方块被填满时,该行会消除,并且上面的方块会下落填充空缺。

三、实验结果成功实现了俄罗斯方块的基本功能,可以进行游戏的开始、暂停、重新开始、结束等操作。

在游戏过程中,方块可以通过键盘的方向键左右移动,通过按下空格键进行快速下落,通过旋转方向键进行方块的旋转。

当方块都不能下落时,游戏结束,会提示游戏结束的信息,并显示最终得分。

四、实验总结通过本次实验,我进一步了解了C语言的基本语法和操作,也体验到了编程的乐趣。

通过这个实验,我对C语言有了更深入的理解,在实现俄罗斯方块的过程中锻炼了自己的逻辑思维能力和编程能力。

同时,我也学会了如何进行代码的调试和优化,使得程序的运行更加流畅和高效。

在后续的学习中,我将更加深入地学习C语言的高级特性,不断提升自己的编程水平。

通过不断的实践和练习,我相信我可以在C语言编程方面取得更进一步的进展,完成更加复杂和有挑战性的任务。

总体而言,本次实验收获颇多,不仅提高了我的编程能力,也为我的学习之路打下了良好的基础。

我相信在今后的学习和工作中,这些经验将会成为我不断进步的动力和宝贵的财富。

(完整word版)Java俄罗斯方块游戏实验报告

(完整word版)Java俄罗斯方块游戏实验报告

嘉应学院计算机学院实验报告课程名称:JAVA课程设计开课学期:2011—2012年第一学期班级:093指导老师:项目题目:俄罗斯方块学生姓名:学号:提交时间:2011-11—13一、概述了解开始使用Jigloo 并进而使用其高级功能(例如可视化继承)使用XML、XML Schema 和JAXB熟悉事件处理程序和数据绑定的UI 编程概念了解AWT/Swing 或SWT3)图形用户界面设计;4)AWT组件库。

教师提出的要求:在实现程序应该有的功能至上再扩充一些功能。

3。

课程设计的主要设计思想俄罗斯方块应有如下功能:1、在二维的平面里用各种随即产生的方块堆积木,每填满一行消去一行,当到达顶部时,游戏结束。

2、玩家能通过方向键来控制方块的转动,左移,右移和直落。

3、每种类型的方块都有颜色.游戏有预览的功能,能告诉玩家下一个将出现什么类型的方块。

4、游戏能够在玩的过程中,给出玩家的分数,分数是由随即方块的类型决定的,每堆一个方块,就将分数累加到总分中。

5、游戏有暂停、开始和结束、游戏规则、游戏说明等控制。

二、类模块设计通过对功能要求的分析,将俄罗斯方块游戏的功能划分为2个类模块,它们是:Tetris类:该类包含main方法,应为应用程序的主类.该类用来创建游戏的用户界面,整个程序从该类的main方法开始执行。

Tetrisblok类:用来设计游戏界面.游戏界面显示在由Tetrisblok类创建的整个用户界面的中(Center)区,游戏的即时分数、堆积木的二维平面即时效果图及方块的预览功能都在整个类里面实现。

用来封装俄罗斯小方块。

一个方块的属性是由方块1位置即x和y的坐标、颜色决定的。

三、详细设计1、Tetris类的设计Tetris类中包含main方法,为主类.在主类中创建了JFrame窗口类的一个实例,设计如下:成员变量:成员方法:2、Tetrisblok类的设计Tetrisblok类用来设计游戏的用户界面。

俄罗斯方块实习报告

俄罗斯方块实习报告

俄罗斯方块实习报告一、实习背景俄罗斯方块是一款经典的益智游戏,通过控制四种不同形状的方块,将其摆放在游戏界面上,使得完整的一行被填满并消除。

这款游戏上线多年来一直备受玩家喜爱,不仅仅是因为它的简单易上手,还因为它能够锻炼玩家的反应能力、空间想象力和逻辑思维能力。

由于对俄罗斯方块游戏深感兴趣,我通过实习来了解和研究这款经典游戏的玩法和设计。

二、实习过程在实习期间,我对俄罗斯方块的游戏机制和设计进行了深入研究。

首先,我从理论上学习了俄罗斯方块的基本原则和规则,包括方块的形状和旋转规则、游戏结束的条件、分数的计算等等。

接着,我开始学习如何使用编程语言来开发俄罗斯方块游戏。

我使用了Python编程语言,并利用pygame库搭建游戏的基本框架。

在具体的实践过程中,我先从最基础的功能入手,实现了游戏的界面设计和方块的下落和旋转功能。

我通过编写代码使得游戏界面可以正确显示,并能够通过键盘的操作来控制方块的移动和旋转。

然后,我添加了一个计分系统,使得玩家在每次消除一行方块时能够得到相应的分数奖励并更新分数的显示。

接下来,我对游戏进行了细节的完善和优化。

我增加了游戏音效和背景音乐,以提升游戏的乐趣和氛围。

我还优化了游戏的操作体验,使得玩家在游戏过程中更加顺畅和流畅。

此外,为了增加游戏的可玩性,我实现了多个游戏难度选项,包括方块下落速度的调整和游戏界面的尺寸变化。

最后,我对游戏进行了全面测试,修复了一些bug,并且添加了游戏的开始和结束界面,提供更好的用户体验。

三、实习成果通过这次实习,我不仅仅了解了俄罗斯方块的游戏机制和设计,还学到了如何使用Python编程语言和pygame库来实现一个小型游戏的开发。

我成功地开发出一个基于俄罗斯方块的游戏,并且完成了一系列的优化和功能增加。

我深感自己在编程能力和逻辑思维方面有了很大的提升,并且更加明确了自己在游戏开发方面的兴趣和发展方向。

四、实习总结通过这次实习,我对俄罗斯方块的游戏机制和设计有了更深入的理解,并成功地开发了一个基于俄罗斯方块的小型游戏。

俄罗斯方块实验报告

俄罗斯方块实验报告

俄罗斯方块实验报告编写“俄罗斯方块”游戏1、问题分析。

编写俄罗斯方块游戏,首先是界面问题,要有一个相对美观的游戏界面,可以有很多种解决的方法,可以用DOS的界面,也可以用MFC做。

界面做好后,最重要的就是七个方块如何存放,翻转,显示等等一系列问题,首先,我们要把这七个方块用一种数据结构存储起来;其次,在游戏中将这七个方块随机挑选出来并显示在屏幕上,根据键盘事件进行旋转;最后,判断到达底部的方块是简单叠加还是引发消除事件。

普通俄罗斯方块游戏中,只有七个基本方块:|,Z,N,L,7,|-,O,方块都可以画在一个4*4的方格中。

于是就有两个方法:一个是只存储七个方块,在游戏运行的时候计算旋转后的方块形状;另一个是将所有的方块全部存储起来,在游戏运行的时候计算取其中的哪个方块。

另外,考虑到4*4是16,而一个int正好是16位(TC2是16位,其他的是32位),所以可以把一个方块存储在一个int数据中,取出的时候,判断它的每个bit位,为1处有小方块,为0处是空白。

所以可以分别用二维数组和bit的方法来表示这些方块。

对于二维数组而言,其控制旋转的操作会很简单,就是控制数组的行列以决定到底该取出哪一种方块,所以程序中我会采用这种方法。

如何控制方块的下落速度,如何让实现左移,右移,下落,如何销行,如何计分,又如何加速等等都是需要考虑的问题。

对于控制方块的下落速度,首先应该现弄明白方块是怎样下落的,目前最常用的就是每隔一定得时间进行重新绘图,就像动画片一样,当很多副相关的画面不断在人眼前播放,由于人眼的掩蔽效应就会形成动着的画面,看起来就是物体在那里移动,于此原理相同,当改变方块在画面上的位置,再以一定得时间间隔进行重新刷图,其效果看起来就是方块在移动;也就是说控制方块下落速度的其实就是控制重新绘图的时间间隔,控制时间的函数有以下几种:a)调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200毫秒的时间间隔。

C#俄罗斯方块实验报告

C#俄罗斯方块实验报告

4.游戏逻辑架构
俄4.罗
游戏逻辑架构
斯方块游戏














退







5. 主要功能模块
开始游戏:
点击后游戏开始执行;
退出游戏:
点击后退出游戏;
暂停游戏:
点击后游戏暂停在即时状态;
加快速度、减慢速度: 落速度的快慢;
用于控制方块下
游戏成绩: 游戏速度:
显示当前游戏成绩; 显示当前方块下落速度;
俄罗斯方块实验报
一、 实验课题概述 1. 实验课题描述 俄罗斯方块是一个经典的小游戏,简单而有趣,但俄罗斯方块的设计 工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形 界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程 中,必将运用到各方面的知识,这对于 C#语言设计者而言,是个很 好的锻炼机. 2. 课题主要任务 设计者首先要对游戏窗口进行合理规划和设计,尽量做到美观实用 (颜色搭配以及各个模块的位置),其次,也是最重要的,就是设计 者对整个程序代码的编辑,以实现游戏应有的功能。 3. 课题基本要求 不仅要求设计出的游戏能实现功能而且要使游戏的操作方便界面赏 心悦目。 4. 自己主要任务 设计者的主要任务就是完成对游戏窗口的设计和程序代码的编辑。 二、 实验课题设计 1. 课题需求分析 首先,设计者必须对俄罗斯方块有一定的了解,熟悉游戏的内容;再 者,设计者必须熟练掌握 C#语言并且熟悉 Visual Studio 2008(2010 也 可以)的开发环境,能够处理好各个类之间的集成关系和继承机制,

俄罗斯方块实验报告

俄罗斯方块实验报告

邮电大学通达学院算法与数据结构设计报告(2016/ 2017学年第二学期)专业软件工程嵌入式学号姓名学号姓名学号姓名指导教师指导单位计算机学院计算机科学与技术系日期2017-5-26目录课题容---------------------------------------1算法设计与分析---------------------------------1 算法实现---------------------------------------9测试数据及结果分析----------------------------38 调试过程中的问题------------------------------40 总结------------------------------------------41俄罗斯方块一、课题容实现俄罗斯方块游戏。

主要功能为游戏界面显示、上下左右键响应以及当前得分统计。

通过该课题全面熟悉数组、字符串等的使用。

掌握设计的基本方法及友好界面的设计。

课题要求:1、游戏界面显示:下落方块和方块堆、左右移动、旋转、删除行等特效以及得分。

2、动作选择:上下左右键对应于旋转、加速、左右移动的功能。

3、得分统计判断:判定能否消除行、并统计得分总数等。

扩展要求:1、用户数据管理。

2、游戏玩法:由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。

这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。

没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。

基本规则1、一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为10,列高为20,以每个小正方形为单位。

2、一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。

C++俄罗斯方块实验报告(附实验体会)

C++俄罗斯方块实验报告(附实验体会)

程序设计综合实验设计文档惠州学院HUIZHOUUNIVERSITY课程名称:程序设计综合实验姓名:实验名称:俄罗斯方块学号:任课教师:专业:计算机科学与技术班级:计算机科学与技术1班实验时间:第一周至第十二周实验成绩:批阅教师签字:综合实验项目:俄罗斯方块游戏1、问题需求(1)游戏等级:游戏分为1-10十个等级,等级越高,方块下落速度越快;(2)由方向键控制游戏:上键控制方块变形、下键控制方块下移并判断是否有消行、左键控制方块左移、右键控制方块右移;(3)游戏积分:一次性消的行数越多加的分数越多,当消行每超过30行自动提高一个游戏等级。

2、总体设计:(1)用数组存放方块(2)输出地图(3)在地图里面输出方块(4)开始游戏(5)方块的旋转(6)方块是否能下落(7)判断方块是否能下落(8)提示下一个即将下落的方块(9)控制方块的下落速度(10)分成10等级,等级越高方块下落得更快(11)消行处理(12)游戏结束3、详细设计设计说明:本程序运行代码如下:#include <conio.h>#include <stdlib.h>#include <windows.h>#include "colorConsole.h"#define SQUARE_COLOR FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY //方块的颜色#define up 72#define down 80#define left 75#define right 77#define esc 27#define MAPW 12 //地图的宽度#define MAPH 20 //地图的高度BOOL isavailable(int a[],int x,int y,int w,int h); //判定是否能放下void turn(int a[][4],int w,int h,int *x,int y); //转动int * create(); //创建方块void init(); //初始化工作void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors); void clearcache(); //清除键盘缓冲区void end();void clearsquare(int *a,int w,int h,int x,int y);void gameover();void deletemap(int m[][MAPW],int row,int w,int h); //消除一行int dx=30,dy=5; //屏幕上的偏移量int score=0,level=0;int map[MAPH][MAPW];int a1[4][4]={{1},{1,1,1}};int a2[4][4]={{0,1},{1,1,1}};int a3[4][4]={{1,1},{0,1,1}};int a4[4][4]={{0,0,1},{1,1,1}};int a5[4][4]={{0,1,1},{1,1}};int a6[4][4]={{1,1,1,1}};int a7[4][4]={{1,1},{1,1}};int a[4][4];int main(){init();int *b=NULL;b=create(); //预创建方块int q=0;int sign,blank,x,y;while(1){for(int i=0;i<4;i++) //复制方块for(int j=0;j<4;j++)if(a[i][j]=*(b+i*4+j)) blank=i;y=1-blank;x=4;clearsquare(&a[0][0],4,4,13,13);b=create();HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_INTENSITY };drawblocks(b,4,4,13,13,wColors,1);wColors[0]=SQUARE_COLOR;drawblocks(&a[0][0],4,4,x,y,wColors,1);clearcache();char string[5];wColors[0]=FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,26+dx,5+dy,wColors,1,itoa(score,string,10));textout(handle,26+dx,9+dy,wColors,1,itoa(level,string,10));sign=1;while(sign){int delay=0,max_delay=100-10*level; //延迟量while(delay<max_delay){if(_kbhit()) //用if避免按住键使方块卡住{int draw=0;int key=_getch();switch (key){case up:clearsquare(&a[0][0],4,4,x,y);turn(a,4,4,&x,y);draw=1;break;case down:delay=max_delay;break;case left:if(isavailable(&a[0][0],x-1,y,4,4)){clearsquare(&a[0][0],4,4,x,y);x--;draw=1;}break;case right:if(isavailable(&a[0][0],x+1,y,4,4)){clearsquare(&a[0][0],4,4,x,y);x++;draw=1;}break;case esc:end();break;}if(draw){HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1);draw=0;}}_sleep(8);delay++;}if(isavailable(&a[0][0],x,y+1,4,4)) //判断是否能下移{clearsquare(&a[0][0],4,4,x,y);y++;HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1);}else{sign=0; //标记,使跳出while(sign) 循环,产生新方块if(y<=1) gameover(); //是否结束for(int i=0;i<4;i++) //放下方块for(int j=0;j<4;j++)if(a[i][j]&&((i+y)<MAPH-1)&&((j+x)<MAPW-1))map[i+y][j+x]=a[i][j];int full,k=0;for(i=y;i<min(y+4,MAPH-1);i++){full=1;for(int j=1;j<11;j++)if(!map[i][j]) full=0;if(full) //消掉一行{deletemap(map,i,MAPW,MAPH);k++;q++;score=score+k;level=min(q/30,9);}}}}}return EXIT_SUCCESS;}BOOL isavailable(int a[],int x,int y,int w,int h){for(int i=max(y,1);i<y+h;i++)for(int j=x;j<x+w;j++)if(map[i][j]&&a[w*(i-y)+j-x])return 0;return 1;}int * create(){int * a=NULL;int c=rand()%7;switch(c){case 0:a=&a1[0][0];break;case 1:a=&a2[0][0];break;case 2:a=&a3[0][0];break;case 3:a=&a4[0][0];break;case 4:a=&a5[0][0];break;case 5:a=&a6[0][0];break;case 6:a=&a7[0][0];break;}return a;}void init() //初始化工作{for(int i=0;i<20;i++){map[i][0]=-2;map[i][11]=-2;}for(i=0;i<12;i++){map[0][i]=-1;map[19][i]=-1;}map[0][0]=-3;map[0][11]=-3;map[19][0]=-3;map[19][11]=-3;HANDLE handle;handle=initiate();WORD wColors[1]={ FOREGROUND_GREEN|FOREGROUND_INTENSITY};textout(handle,26+dx,3+dy,wColors,1,"分数");textout(handle,26+dx,7+dy,wColors,1,"等级");textout(handle,26+dx,11+dy,wColors,1,"下一个方块提示");wColors[1]=FOREGROUND_RED|FOREGROUND_INTENSITY;drawblocks(&map[0][0],12,20,0,0,wColors,1);textout(handle,dx,dy,wColors,1,"◇══════════◇");wColors[0]= FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-16,dy,wColors,1,"按任意键开始");wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY ;textout(handle,dx-15,dy+3,wColors,1,"制作者");wColors[0]=FOREGROUND_BLUE| FOREGROUND_GREEN|FOREGROUND_INTENSITY ;textout(handle,dx-15,dy+5,wColors,1,"赵强");int x=_getch();srand(x);textout(handle,dx-16,dy,wColors,1," ");}void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors){HANDLE handle;handle = initiate();int temp;for(int i=0;i<h;i++)for(int j=0;j<w;j++)if((temp=a[i*w+j])&&y+i>0){if(temp==-3)textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,"◆");else if(temp==-2)textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,"║");else if(temp==-1)textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,"═");else if(temp==1)textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,"■");}}void clearcache(){while(_kbhit()){_getch();}}void end(){exit(EXIT_SUCCESS);}void turn(int a[][4],int w,int h,int *x,int y){int b[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};int sign=0,line=0;for(int i=h-1;i>=0;i--){for(int j=0;j<w;j++)if(a[i][j]){b[j][line]=a[i][j];sign=1;}if(sign){line++;sign=0;}}for(i=0;i<4;i++)if(isavailable(&b[0][0],*x-i,y,w,h)){*x-=i;for(int k=0;k<h;k++)for(int j=0;j<w;j++)a[k][j]=b[k][j];break;}}void clearsquare(int *a,int w,int h,int x,int y){HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};for(int i=0;i<h;i++)for(int j=0;j<w;j++)if(a[i*w+j]&&i+y>0)textout(handle,2*(x+j)+dx,y+i+dy,wColors,1," "); }void gameover(){HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| FOREGROUND_GREEN};textout(handle,7+dx,10+dy,wColors,1,"游戏结束");clearcache();_getch();exit(EXIT_SUCCESS);}void deletemap(int m[][MAPW],int row,int w,int h){HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};textout(handle,2+dx,row+dy,wColors,1,"﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌");_sleep(100);for(int i=row;i>1;i--){clearsquare(&m[i][1],MAPW-2,1,1,i);for(int j=1;j<MAPW-1;j++)m[i][j]=m[i-1][j];drawblocks(&m[i][1],MAPW-2,1,1,i,wColors,1);}for(i=1;i<MAPW-1;i++)m[1][i]=0;}HANDLE initiate(){HANDLE hOutput;hOutput = GetStdHandle(STD_OUTPUT_HANDLE);return hOutput;}BOOL textout(HANDLE hOutput,int x,int y,WORD wColors[],int nColors,LPTSTR lpszString){DWORD cWritten;BOOL fSuccess;COORD coord;coord.X = x; // start at first cellcoord.Y = y; // of first rowfSuccess = WriteConsoleOutputCharacter(hOutput, // screen buffer handlelpszString, // pointer to source stringlstrlen(lpszString), // length of stringcoord, // first cell to write to&cWritten); // actual number writtenif (! fSuccess)cout<<"error:WriteConsoleOutputCharacter"<<endl;for (;fSuccess && coord.X < lstrlen(lpszString)+x; coord.X += nColors){fSuccess = WriteConsoleOutputAttribute(hOutput, // 屏幕缓存处理wColors, // pointer to source stringnColors, // length of stringcoord, // first cell to write to&cWritten); // actual number written }if (! fSuccess)cout<<"error:WriteConsoleOutputAttribute"<<endl;return 0;}4、程序运行结果截图:按任意键游戏开始方块左移方块右移下一个方块开始下落方块变形消一行,增加1分成功消多行消多行后分数增加更多消完30行后,提升一个等级方块叠到顶端后游戏结束5、程序使用说明:(1)按任意键开始游戏(2)控制方块下落位置进行消行处理(3)成功消行后加分,当消30行之后等级升一级,最高达到10等级(4)当产生的新方块不能再下落时,游戏结束。

C语言俄罗斯方块试验报告,包括源程序

C语言俄罗斯方块试验报告,包括源程序

stopL()检测方块可左移则方块向左移一小格,向右方向键并且 stopR()检测方块可右移则方块向右移一
小格,向下方向键则方块向下移一小格,空格键则直接下移。
D. 消行与计分模块
当一个方块不能移动时需调用本模块 clrLine()。本模块将从该方块的最下面小方格所在行开始到最
上面小方格所在行结束,从左到右判断每一行是否满行;若满行则消行并且下移该行以上的已填充的小
(以下简称窗口M),高为 210 像素,宽为 120 像素,即由 252(21x12)个 10X10 的小方格组成。右
下的小窗口为绿色,主要显示游戏所用的时间、所得分数、所属级别。
2.方块的实现
首先说一下函数 fangKuai()与函数 clrFangKuai()。函数 fangKuai()在指定位置产生边框为蓝色用白
级,300 分到 700 分为 1 级,依此类推,1800 分到 2500 分为 4 级,超过 2500 分为 5 级。可以看到,除
了每一级要求的分数都比上一级多 100 分外,方块的自动下移速度也加快(0 级的 1/13)以增加游戏的
挑战性。
E. 计时模块
本模块主要是计算游戏所用的时间,由函数 coutTime()完成。游戏开始后,首先用 time(0)取得当前
色 WHITE 填充 的小 方格。 函数 clrFangKuai() 在指 定位 置产生 边框 与填充 色都 是窗口 M的 背景色
DARKGRAY 的小方格。
其次说方块的产生与清除。各方块及其顺时针旋转变换而来的方块统一在 16(=4X4)个小方格的
窗口(以下简称窗口L)中用4个小方格表示,建立基于窗口L的坐标系:窗口L左上角的小方格为
实验内容 游戏程序----俄罗斯方块
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

邮电大学通达学院算法与数据结构设计报告(2016/ 2017学年第二学期)专业软件工程嵌入式学号姓名学号姓名学号姓名指导教师指导单位计算机学院计算机科学与技术系日期2017-5-26目录课题容---------------------------------------1算法设计与分析---------------------------------1 算法实现---------------------------------------9测试数据及结果分析----------------------------38 调试过程中的问题------------------------------40 总结------------------------------------------41俄罗斯方块一、课题容实现俄罗斯方块游戏。

主要功能为游戏界面显示、上下左右键响应以及当前得分统计。

通过该课题全面熟悉数组、字符串等的使用。

掌握设计的基本方法及友好界面的设计。

课题要求:1、游戏界面显示:下落方块和方块堆、左右移动、旋转、删除行等特效以及得分。

2、动作选择:上下左右键对应于旋转、加速、左右移动的功能。

3、得分统计判断:判定能否消除行、并统计得分总数等。

扩展要求:1、用户数据管理。

2、游戏玩法:由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。

这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。

没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。

基本规则1、一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为10,列高为20,以每个小正方形为单位。

2、一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。

I:一次最多消除四层J(左右):最多消除三层,或消除二层L:最多消除三层,或消除二层O:消除一至二层S(左右):最多二层,容易造成孔洞Z (左右):最多二层,容易造成孔洞T:最多二层(1)部分游戏有单格方块,可以穿透固定的方块到达最下层空位。

其他的改版中出现更多特别的造型。

方块会从区域上方开始缓慢继续落下。

(2)玩家可以做的操作有:以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。

(3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。

(4)当区域中某一列横向格子全部由方块填满,则该列会消失并成为玩家的得分。

同时删除的列数越多,得分指数上升。

(5)当固定的方块堆到区域最上方而无法消除层数时,则游戏结束。

(6)一般来说,游戏还会提示下一个要落下的方块,熟练的玩家会计算到下一个方块,评估要如何进行。

由于游戏能不断进行下去对商业用游戏不太理想,所以一般还会随着游戏的进行而加速提高难度。

二、算法设计与分析I、俄罗斯方块游戏需要解决的问题包括(1)、随机产生方块并自动下移(2)、用(3)、用键和Q退出,按space暂停II、俄罗斯方块游戏需要设计的功能函数包括(1)、声明俄罗斯方块的结构体(2)、函数原型声明(3)、制作游戏窗口(4)、制作俄罗斯方块(5)、判断是否可动(6)、随机产生俄罗斯方块类型序号(7)、判断是否满行并删除满行的俄罗斯方块(8)暂停,继续功能(9)新游戏创建(10)用户的创建,分数用户名的保存,查看分数类之间的关系Tetris类(主要类)该类包含m a i n方法,应为应用程序的主类。

该类用来创建游戏的用户界面,事件处理功能和menu餐单,用户信息的存储。

整个程序从该类的m a i n方法开始执行。

成员变量:String userName;构造方法:TetrisuserName=JOptionPane.showInputDialog(null, "输入你的名字");if(userName==null||userName.equals("")){userName="无名氏";}//如果没有命名就定义为无名氏部类:Members,TetrisblockTetrisblok类:用来设计游戏界面。

游戏界面显示在由Tetrisblok类创建的整个用户界面的中(Center)区,游戏的即时分数、方块的效果图及方的预览功能都在整个类里面实现。

用来封装俄罗斯小方块。

一个方块的属性是由方块1位置即x和y的坐标、颜色决定的。

成员变量private int blockType;Timer timer=null;private int turnState;private int x;private int y;private int i = 0;int j = 0;static int score = 0;int flag = 0;int delay=1000;// 定义已经放下的方块x=0-12,y=0-22;int[][] map = new int[14][24];// 方块的形状第一组代表方块类型有S、Z、L、J、I、O、T 7种第二组代表旋转几次第三四组为方块矩阵private final int shapes[][][]成员方法:public void newblock()public void drawwall()public void newmap()public void newgame()public void turn();public void left();public void right(); public void down() ;public int blow(int x, int y, int blockType, int turnState);public void delline() ; public int gameover(int x, int y); public void add(int x, int y, int blockType, int turnState); public void paintComponent(Graphics g); public void keyPressed(KeyEvent e); public void keyTyped(KeyEvent e)Members类:用来创建io流,在D盘中查找username.txt文件,如果没有就创建。

并且在username 和score中间用:隔开,方便以后用split对其进行分割。

成员变量:private FileWriter fw=null;private BufferedWriter bw=null;private FileReader fr=null;private BufferedReader br=null;Tetris tt=null;boolean vip=true;//如果有usernametxt这个文件的话就返回true并且允许查看分数判断是否有用户已经创建了ArrayList<NameScore> al=new ArrayList<NameScore>();成员方法:getMembers()saveMembers()getpaint()GetMembers()方法获取username.txt 的File对象NameScore类:private String username;private String score;public String getUsername() {public String getUsername() {public void setUsername(String username) {public String getScore() {每一个用户的分数和存到一个对象NameScore类。

ScorePanel类;Vector col=null;Vector rol=null;JTable jt;public ScorePanel(ArrayList<NameScore> al) throws IOException{这个是用来接收Tetris类中传递过来的储存NameScore对象的ArrayList集合,然后把用迭代器将集合中的每一个对象的username和score取出来然后放到Vector中。

然后添加到JTable中。

三、算法实现1.0 Tetris类(主要类)Tetris类功能该类包含main方法,应为应用程序的主类。

该类用来创建游戏的用户界面,事件处理功能和menu餐单,用户信息的存储。

整个程序从该类的main方法开始执行。

成员变量:String userName;构造方法:Tetris实现在初始化的时候进行弹框如果没有输入值则就将username命名为无名氏public Tetris() throws IOException{userName=JOptionPane.showInputDialog(null, "输入你的名字");if(userName==null||userName.equals("")){userName="无名氏";}//如果没有命名就定义为无名氏final JMenuItem pause;final JMenuItem goon;final JMenuItem getscore;final JMenuItem exit;final JMenuItem saveexit;newgame.addActionListener(new ActionListener(){pause.addActionListener(new ActionListener(){goon.addActionListener(new ActionListener(){getscore.addActionListener(new ActionListener(){exit.addActionListener(new ActionListener(){saveexit.addActionListener(new ActionListener(){high.addActionListener(new ActionListener() 2.Tetrisblok 类Tetrisblok 类功能:用来设计游戏界面。

游戏界面显示在由Tetrisblok 类创建的整个用户界面的中(Center )区,游戏的即时分数、方块的效果图及方的预览功能都在整个类里面实现。

相关文档
最新文档