C++俄罗斯方块实验报告(附实验体会)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计综合实验
设计文档
惠州学院
HUIZHOU
UNIVERSITY
课程名称:程序设计综合实验姓名:
实验名称:俄罗斯方块学号:
任课教师:专业:计算机科学与技术班级:计算机科学与技术1班
实验时间:第一周至第十二周
实验成绩:
批阅教师签字:
综合实验项目:俄罗斯方块游戏
1、问题需求
(1)游戏等级:游戏分为1-10十个等级,等级越高,方块下落速度越快;
(2)由方向键控制游戏:上键控制方块变形、下键控制方块下移并判断是否有消行、左键控制方块左移、右键控制方块右移;
(3)游戏积分:一次性消的行数越多加的分数越多,当消行每超过30行自动提高一个游戏等级。
2、总体设计:
(1)用数组存放方块
(2)输出地图
(3)在地图里面输出方块
(4)开始游戏
(5)方块的旋转
(6)方块是否能下落
(7)判断方块是否能下落
(8)提示下一个即将下落的方块
(9)控制方块的下落速度
(10)分成10等级,等级越高方块下落得更快
(11)消行处理
(12)游戏结束
3、详细设计设计说明:本程序运行代码如下:
#include
#include
#include
#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 { 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: