西工大C++大作业第合集.docx

上传人:b****8 文档编号:10736252 上传时间:2023-02-22 格式:DOCX 页数:27 大小:107.61KB
下载 相关 举报
西工大C++大作业第合集.docx_第1页
第1页 / 共27页
西工大C++大作业第合集.docx_第2页
第2页 / 共27页
西工大C++大作业第合集.docx_第3页
第3页 / 共27页
西工大C++大作业第合集.docx_第4页
第4页 / 共27页
西工大C++大作业第合集.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

西工大C++大作业第合集.docx

《西工大C++大作业第合集.docx》由会员分享,可在线阅读,更多相关《西工大C++大作业第合集.docx(27页珍藏版)》请在冰豆网上搜索。

西工大C++大作业第合集.docx

西工大C++大作业第合集

 

作业名称:

俄罗斯方块小游戏

学院:

自动化学院

班级:

学号:

姓名:

团体组成:

 

西北工业大学

2021年7月12日

请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。

1、问题与背景(描述程序所要处理问题或应用背景)

1.1游戏需求

给出不一样形状(长条形、Z字形、反Z字形、田字形、7字形、反7字形、T字形)下落填充给定区域,若填满一条便消掉,若在游戏中个形状填满了给定区域就判定输,弹出对应提醒。

1.2游戏界面需求

良好用户界面,有相关操作方法(如速度、分数以及下一步要落下形状等)。

让方块在一定区域内运动和变形,该区域用一个颜色表明,即用一个颜色作为背景,本游戏背景为黑色。

还需用另外一个颜色把黑色围起来,宽度适中,要实现美感。

而不一样方块在本游戏中一律用灰色填充后,从而使界面愈加清楚有条理。

1.3游戏方块需求

良好方块设计,绘制七种常见基础图形(长条形、Z字形、反Z形、田字形、L字形、反L形、T字形)以及另外本程序加入点形方块,哥哥方块要能实现它变形,本游戏设置为逆时针变形。

1.4游戏控制需求

游戏控制分为多个方面,包含画面绘制,控制命令分配、控制命令处理,方块绘制,方块移动,方块旋转,方块下落和消层以及计分等。

对各个命令合理处理和综合控制十分关键,一旦犯错可能造成整个程序瓦解,所以设计要十分小心。

2、开发工具(列出所使用开发工具和第3方开发库)

Code:

:

block

DEV-C++

3、关键功效(具体说明程序功效)

这个游戏实现了1中四个游戏需求,完成了以下功效:

(1)给出不一样形状(长条形、Z字形、反Z字形、田字形、7字形、反7字形、T字形)下落填充给定区域,并能完成消除以及结束判定。

(2)用户界面,有相关提醒(如速度、分数以及下一步要落下形状等)。

(3)绘制七种常见基础图形(长条形、Z字形、反Z形、田字形、L字形、反L形、T字形)以及点图形。

(4)操作上用上下左右按键控制

4、设计内容(具体描述处理问题原理和方法、算法、数据结构等)

1、程序步骤图

2、定义方块数据结构

方块是本游戏基础要素,对于方块设计,本游戏采取矩阵画出来在对应位置用‘1’和‘0’表示,以实现多种方块形状。

3、方块变形

方块要实现变形,其实就是经过Exchange俩画出不谈图形来实现,当然乱画是不行,而要控制其改变情况,必需设定对应图形描述,本程序是使用不一样图形不一样ID码表示方法来实现方块描述。

能经过接收键盘指令(即向上键),将所得信号传输给接收函数,再经过信号处理函数改变目前方块ID值,最终依据新ID值打印出新图形,从而实现了方块变形。

4、定时处理机制

为了提升游戏易控性和制动性,定时机制是很有必需。

经过定时器设置后,这里经过利用控制程序跳到定时器时间处理函数去实现,当固定时间片间隔抵达后,先检测目前下坠物是否已经抵达了底部,不是则进行下坠物向下移动一个单位操作,是则到底后产生一个新“下坠物”并替换旧,将原先旧“下坠物”用作目前激活状态下正在使用下坠物,并对使用后部分状态进行分析检测:

是否立即下沉到底部,是则进行销毁操作:

是否在抵达底部同时抵达游戏区顶部,从而判定游戏是否因违规而结束,弹出对应对话框供用户选择是否继续重新开始。

 

5、程序文件与工程名称(标出程序中全部文件名、工程名称及其说明)

(1)俄罗斯.cpp

(2)俄罗斯.exe

6、函数模块(程序中各个函数原型申明及其说明)

(1)/**********设置光标位置**********/

voidSetCursor(intx,inty)

(2)/**************初始化图**************/

voidINITMAP()

(3)/********右上方提前显示方块******/

nodebl[5];

voidFormer_Print_block(intn)

(4)/*********获取不一样方块,出现在中间***********/

nodeblock[5];//全局使用关键!

!

!

voidprint_block(intn)

(5)/*************按上键旋转*************/

voidExchange(intm)

(6)/*********清除目前方块**********/

voidclear_cube(node*block)

(7)/*******打印目前方块*********/

voidprintt_cube(node*block)

(8)/**********按键***********/

voidMove(intm,intn)

(9)/******判定是否能够向左移动*****/

intIf_Can_Left(node*block)

(10)/******判定是否能够向右移动********/

intIf_Can_Right(node*block)

(11)/*********打印图**********/

voidprint_map()

(12)/*******下降一格*******/

voidcube_drop(node*block)

(13)/*****抵达底部返回1*******/

intis_at_botton(node*block)

(14)/******抵达底部map赋值为1*****/

voidprint_map(node*block)

(15)/******是否能够消去并消去**********/

intCan_It_Cut()

(16)/********是否GameOver********/

intis_gameover(intnum)

(17)/*******游戏结束,再来一局,清理屏幕******/

voidClear_map()

(18)/*******main函数程序入口******/

intmain()

7、使用说明(运行程序小型说明书)

游戏操作说明:

↑控制方块在要求区域内逆时针改变形状

↓控制方块在要求区域内下沉到底部

←控制方块在要求区域内向左移动

→控制方块在要求区域内向又移动

Esc退出游戏

Enter继续游戏

8、程序开发总结(简明叙述编写本作业收获与思索)

此次C++课程设计前期准备阶段,设想部分构想和关键任务;后期这是具体功效私实现。

这次设计中我碰到了不少困难,原来想设计实现双人版对战,美化界面等但因为时间仓促最终没有完成,心里不免有些遗憾,但在实现类封装和类继承和多态性时,也碰到了不少问题,经过和同学们一起讨论和分析,问题最终都得到了处理。

经过这次课程设计,是我知道了不少东西。

我们在日常学习中应该注意对所学知识进行实践利用,在学习时应该进行深入了解,体会知识,这对我们以后学习和工作都会有很大帮助。

经过此次时间,我体会到学以致用乐趣,收获了很多。

9、运行截图(附上程序运行截图画面,最少有1幅,截图越翔实得分越高)

Windows中抓取目前活动窗口:

Alt+PrintScreen,抓取全屏:

PrintScreen。

或者使用HyperSnap等软件(baidu搜索)。

游戏运行中截图:

游戏结束截图:

10、源程序(附上程序源代码,若是多个文件,标出文件名)

#include

#include

#include

#include

#include

#include

usingnamespacestd;

#defineme(a)memset(a,0,sizeof(a))

#definejudge(bl,ok)for(i=0;i<5;i++)if(bl[i].x&&map[bl[i].x][bl[i].y])ok=0

#defineis_pure(node,ok)if(map[node.x][node.y])ok=0

constintHEIGHT=24,LENGTH=40,SIDE=22;

charINIT_MAP[HEIGHT+1][LENGTH+1];

intmap[HEIGHT][SIDE];

structnode{intx,y;intcolor;};

constintTIME_DWELL=1000;

intstate=0;

/**********获取句柄**********/

HANDLEOutput=GetStdHandle(STD_OUTPUT_HANDLE);

HANDLEInput=GetStdHandle(STD_INPUT_HANDLE);

/**********设置光标位置**********/

voidSetCursor(intx,inty){

COORDcd={x,y};

SetConsoleCursorPosition(Output,cd);

}

/**************初始化图**************/

voidINITMAP()

{

for(inti=0;i

for(intj=0;j

if(i==0||i==HEIGHT-1||j==0||j==SIDE-1)map[i][j]=1;

elsemap[i][j]=0;

}

}

/********右上方提前显示方块******/

nodebl[5];

voidFormer_Print_block(intn)

{

inti;

for(i=0;i<5;i++){bl[i].x=bl[i].y=0;}

if(n==0){

bl[0].x=3,bl[0].y=28;bl[1].x=3,bl[1].y=30;

bl[2].x=4,bl[2].y=30;bl[3].x=4,bl[3].y=32;

}

if(n==1){

bl[0].x=3,bl[0].y=32;bl[1].x=3,bl[1].y=30;

bl[2].x=4,bl[2].y=30;bl[3].x=4,bl[3].y=28;

}

if(n==2){

bl[0].x=3,bl[0].y=30;bl[1].x=4,bl[1].y=28;

bl[2].x=4,bl[2].y=30;bl[3].x=4,bl[3].y=32;

}

if(n==3){

bl[0].x=3,bl[0].y=27;bl[1].x=3,bl[1].y=29;

bl[2].x=3,bl[2].y=31;bl[3].x=3,bl[3].y=33;

}

if(n==4){

bl[0].x=3,bl[0].y=29;bl[1].x=3,bl[1].y=31;

bl[2].x=4,bl[2].y=29;bl[3].x=4,bl[3].y=31;

}

if(n==5){

bl[0].x=3,bl[0].y=28;bl[1].x=4,bl[1].y=28;

bl[2].x=4,bl[2].y=30;bl[3].x=4,bl[3].y=32;

}

if(n==6){

bl[0].x=3,bl[0].y=32;bl[1].x=4,bl[1].y=28;

bl[2].x=4,bl[2].y=30;bl[3].x=4,bl[3].y=32;

}

for(i=0;i<5;i++){

SetCursor(bl[i].y,bl[i].x);

printf("■");

}

}

/*********获取不一样方块,出现在中间***********/

nodeblock[5];//全局使用关键!

!

!

voidprint_block(intn)

{inti;

for(i=0;i<5;i++){block[i].x=block[i].y=0;}

if(n==0){

block[0].x=1,block[0].y=7;block[1].x=1,block[1].y=9;

block[2].x=2,block[2].y=9;block[3].x=2,block[3].y=11;

}

if(n==1){

block[0].x=1,block[0].y=11;block[1].x=1,block[1].y=9;

block[2].x=2,block[2].y=9;block[3].x=2,block[3].y=7;

}

if(n==2){

block[0].x=1,block[0].y=9;block[1].x=2,block[1].y=7;

block[2].x=2,block[2].y=9;block[3].x=2,block[3].y=11;

}

if(n==3){

block[0].x=1,block[0].y=7;block[1].x=1,block[1].y=9;

block[2].x=1,block[2].y=11;block[3].x=1,block[3].y=13;

}

if(n==4){

block[0].x=1,block[0].y=9;block[1].x=1,block[1].y=11;

block[2].x=2,block[2].y=9;block[3].x=2,block[3].y=11;

}

if(n==5){

block[0].x=1,block[0].y=7;block[1].x=2,block[1].y=7;

block[2].x=2,block[2].y=9;block[3].x=2,block[3].y=11;

}

if(n==6){

block[0].x=1,block[0].y=11;block[1].x=2,block[1].y=7;

block[2].x=2,block[2].y=9;block[3].x=2,block[3].y=11;

}

for(i=0;i<5;i++){

SetCursor(block[i].y,block[i].x);

printf("■");

}

}

/*************按上键旋转*************/

voidExchange(intm)

{

inti,ok=1;

nodeblo[5];

for(i=0;i<5;i++)blo[i]=block[i];

if(m==0){

if(state==0){

blo[0].x+=1;blo[0].y+=2;blo[2].x-=1;blo[2].y+=2;blo[3].x-=2;

judge(blo,ok);

if(map[blo[0].x][blo[0].y-2])ok=0;

if(ok){for(i=0;i<5;i++)block[i]=blo[i];state=1;}

}

else{

blo[0].x-=1;blo[0].y-=2;blo[2].x+=1;blo[2].y-=2;blo[3].x+=2;

judge(blo,ok);

if(map[blo[1].x-1][blo[1].y])ok=0;

if(ok){for(i=0;i<5;i++)block[i]=blo[i];state=0;}

}

}

elseif(m==1){

if(state==0){

blo[0].x-=1;blo[0].y-=2;blo[2].x-=1;blo[2].y+=2;blo[3].y+=4;

judge(blo,ok);

if(map[blo[1].x][blo[1].y-2])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=1;}

}

else{

blo[0].x+=1;blo[0].y+=2;blo[2].x+=1;blo[2].y-=2;blo[3].y-=4;

judge(blo,ok);

if(map[blo[0].x-1][blo[0].y])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=0;}

}

}

elseif(m==2)

{

if(state==0)

{

blo[0].x+=1;blo[0].y-=2;blo[1].x+=1;blo[1].y+=2;blo[3].x-=1;blo[3].y-=2;

judge(blo,ok);

if(map[blo[0].x+1][blo[0].y]||map[blo[0].x-1][block[0].y]||map[blo[3].x][blo[3].y+2])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=1;}

}

elseif(state==1)

{

blo[0].x+=1;blo[0].y+=2;blo[1].x-=1;blo[1].y+=2;blo[3].x+=1;blo[3].y-=2;

judge(blo,ok);

if(map[blo[0].x][blo[0].y+2]||map[blo[0].x][blo[0].y-2]||map[blo[3].x-1][blo[3].y])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=2;}

}

elseif(state==2)

{

blo[0].x-=1;blo[0].y+=2;blo[1].x-=1;blo[1].y-=2;blo[3].x+=1;blo[3].y+=2;

judge(blo,ok);

if(map[blo[0].x+1][blo[0].y]||map[blo[0].x-1][blo[0].y]||map[blo[3].x][blo[3].y-2])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=3;}

}

else{

blo[0].x-=1;blo[0].y-=2;blo[1].x+=1;blo[1].y-=2;blo[3].x-=1;blo[3].y+=2;

judge(blo,ok);

if(map[blo[0].x][blo[0].y+2]||map[blo[0].x][blo[0].y-2]||map[blo[3].x+1][blo[1].y])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=0;}

}

}

elseif(m==3)

{

if(state==0){

blo[0].x+=1;blo[0].y+=2;blo[2].x-=1;blo[2].y-=2;blo[3].x-=2;blo[3].y-=4;

judge(blo,ok);

if(map[blo[0].x][blo[0].y-2]||map[blo[2].x][blo[2].y+2])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=1;}

}

else{

blo[0].x-=1;blo[0].y-=2;blo[2].x+=1;blo[2].y+=2;blo[3].x+=2;blo[3].y+=4;

judge(blo,ok);

if(map[blo[0].x+1][blo[0].y]||map[blo[2].x-1][blo[2].y])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=0;}

}

}

elseif(m==5)

{

if(state==0)

{

blo[0].x+=2;blo[1].x+=1;blo[1].y+=2;blo[3].x-=1;blo[3].y-=2;

judge(blo,ok);

if(map[blo[3].x][blo[3].y+2])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=1;}

}

elseif(state==1)

{

blo[0].y+=4;blo[1].x-=1;blo[1].y+=2;blo[3].x+=1;blo[3].y-=2;

judge(blo,ok);

if(map[blo[3].x-1][blo[3].y])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=2;}

}

elseif(state==2)

{

blo[0].x-=2;blo[1].x-=1;blo[1].y-=2;blo[3].x+=1;blo[3].y+=2;

judge(blo,ok);

if(map[blo[3].x][blo[3].y-2])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=3;}

}

else{

blo[0].y-=4;blo[1].x+=1;blo[1].y-=2;blo[3].x-=1;blo[3].y+=2;

judge(blo,ok);

if(map[blo[3].x+1][blo[3].y])ok=0;

if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=0;}

}

}

elseif(m==6)

{

if(state==0)

{

blo[0].y-=4;blo[1].x+=1;blo[1].y+=2;blo[3].x-=1;blo[3].y-=2;

judge(blo,ok);

if(map[blo[1].x][

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

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1