C语言课程设计俄罗斯方块.docx

上传人:b****5 文档编号:11957959 上传时间:2023-04-16 格式:DOCX 页数:19 大小:81.17KB
下载 相关 举报
C语言课程设计俄罗斯方块.docx_第1页
第1页 / 共19页
C语言课程设计俄罗斯方块.docx_第2页
第2页 / 共19页
C语言课程设计俄罗斯方块.docx_第3页
第3页 / 共19页
C语言课程设计俄罗斯方块.docx_第4页
第4页 / 共19页
C语言课程设计俄罗斯方块.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C语言课程设计俄罗斯方块.docx

《C语言课程设计俄罗斯方块.docx》由会员分享,可在线阅读,更多相关《C语言课程设计俄罗斯方块.docx(19页珍藏版)》请在冰豆网上搜索。

C语言课程设计俄罗斯方块.docx

C语言课程设计俄罗斯方块

实训报告

实训名称:

C语言课程设计(俄罗斯方块)

院系:

计算机科学与工程学院

专业:

物联网工程

班级:

152

学号:

*********

*************

*******

开课时间:

2015至2016学年短学期

一、需求分析

1.1需求概述

1.11市场需求:

俄罗斯方块游戏是一个经典的小游戏,由于它操作简单,上到老人、下到小孩都可以玩,曾广受人们欢迎。

现在游戏之风盛行,一款款画面精美、音乐动听的大型游戏就在我们身边,但需要投入大量的人力、物力去开发,还需要发大量的精力去玩,而且特别容易上瘾。

现在的人,也许大都不屑于玩俄罗斯方块这种“弱智”的游戏,但仔细观察,我们身边还是有人玩这个的。

俄罗斯方块也确实是一个很不错的休闲游戏。

1.12对功能需求:

功能界面:

游戏开始,音乐响起,让人感觉到是一种享受,这时,由计算机随机产生所定义的图形,记录所产生的图形的形状的数目,无操作时,方块竖直缓慢下落,图形在接触障碍物之前,

可以由键盘控制向左右下移动,向下加速或翻转,可以进行暂停,当某一行被下落的方块填满后消

除并计分。

1.2功能简介

1.21.随机产生俄罗斯方块图形

1.22.方向键和wasdrz实现下落方块的左移、右移、加速下落、变形、交换等基本操作

1.23.正确判断游戏结束

1.24.对游戏成绩进行记分

注:

运行环境windows7控制台(80*43);

二、总体设计

2.1开发环境与工具

开发环境:

CodeBlocks工具:

prosesson

2.2游戏总模块流程图(见图2.2)

图2.2游戏总模块流程图

 

三、详细设计

3.1模块介绍(创建,预览下一个方块和删除方块模块)

3.11开始动画和文字显示(见图3.11)

图3.11开始动画

在本模板下,首先在界面底部会同时出现两个简单的小人迎面相遇,接着,过程中会等待按键

触发,等待过程中Tetris字样会进行颜色变化,实现闪动效果,按任意键即可开始游戏。

3.12随机创建方块的代码

函数名:

intcreat_block()

函数描述:

制作方块函数

函数功能:

实现俄罗斯方块制作方块的功能

入:

NULL

出:

NULL

注:

实现方块的制作

在本模块下,我们要完成当前方块的创建和下一个方块的提前创建与预览。

 

函数名:

intdelete_block(intx,inty,intshape,intstatus)

函数描述:

在指定位置消除指定方块函数

函数功能:

实现俄罗斯方块消除方块的功能

入:

x,y,shape,status

出:

NULL

注:

实现消除方块,为下面的消行做铺垫

在本模块下,我们要根据操作者对方块发出的移动指令,对之前位置的方块做正确的删除。

3.14结束界面

当操作者在按下N(n)键之后,屏幕上会出现lose字幕和一堆由1与0两个数字组成的乱码,表明游戏已经结束,最后按任意键退出整个游戏界面。

3.2核心代码

3.21随机创建方块的代码

intcreat_block()

{

shape=block_next_shape;

status=block_next_status;

block_colour=block_next_colour;

block_x=17;

block_y=1;

next_block();

block_xj(shape);

}

intnext_block()

{

delete_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_next_shape,block_next_status);

block_next_colour=rand()%(0x10);

block_next_shape=rand()%7;

block_next_status=rand()%4;

if(block_next_colour==OxOO)

{

block_next_colour=OxOf;

}

printf_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_next_shape,block_next_status,block_next_colour);

}

3.22删除方块的代码

intdelete_block(intx,inty,intshape,intstatus)

{

inti,j;

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

cursor(j+x,i+y);

if(blocks[shape][status][i][j]==1)

{

SetConsoleTextAttribute(handle,0x00);printf("■”);

}

}

3.23开始动画以及开始文字

intdh()

{

intk1=0,k2=0,k3=0,k4=0;clock_tnow3;clock_tIast3;last3=clock();

intk5=0,k6=0,k7=0,k8=0;clock_tnow4;clock_tlast4;last4=clock();

inti=0;

while(i<7)

{

now3=clock();

while(now3-last3>0.35f*CLOCKS_PER_SEC)

{

now3=clock();

while(now3-last3<0.01f*CLOCKS_PER_SEC)

{

now3=clock();

}

last3=clock();

cursor(7+1+k1,16-k1);SetConsoleTextAttribute(handle,0x00);printf("");k1++;

cursor(7+1+k2,17-k2);SetConsoleTextAttribute(handle,0x00);printf("");k2++;cursor(6+1+k3,18-k3);SetConsoleTextAttribute(handle,0x00);printf("

");k3++;

cursor(6+1+k4,19-k4);SetConsoleTextAttribute(handle,0x00);printf("

");k4++;

cursor(7+1+k1,16-k1);SetConsoleTextAttribute(handle,0x0a);printf("-");cursor(7+1+k2,17-k2);SetConsoleTextAttribute(handle,0x0a);printf("0");

cursor(6+1+k3,18-k3);SetConsoleTextAttribute(handle,0x0a);printf("");cursor(6+1+k4,19-k4);SetConsoleTextAttribute(handle,0x0a);printf("//\");cursor(7+2+18-k5,16-k5);SetConsoleTextAttribute(handle,0x00);printf("");k5++;cursor(7+2+18-k6,17-k6);SetConsoleTextAttribute(handle,0x00);printf("");k6++;cursor(6+2+18-k7,18-k7);SetConsoleTextAttribute(handle,0x00);printf("

");k7++;

cursor(6+2+18-k8,19-k8);SetConsoleTextAttribute(handle,0x00);printf("

");k8++;

cursor(7+2+18-k5,16-k5);SetConsoleTextAttribute(handle,0x0b);printf("-");cursor(7+2+18-k6,17-k6);SetConsoleTextAttribute(handle,0x0b);printf("0");cursor(6+2+18-k7,18-k7);SetConsoleTextAttribute(handle,0x0b);printf("");cursor(6+2+18-k8,19-k8);SetConsoleTextAttribute(handle,0x0b);printf("\\\\");

i++;

if(i==7)

{break;

}

}

}

}

intgame_star()

{

dh();

clock_tclock_now,clock_last;

clock_last=clock();

while

(1)

{

{

clock_now=clock();

if(clock_now-clock_last<0.33f*CLOCKS_PER_SEC)

{

SetConsoleTextAttribute(handle,(rand()%(0x10)));

printf("■■■■■

cursor(3,3);

■■■■■

■■■

■■■■

■■■■■

■■■■■

■");

■");

cursor(3,5);printf("■

■■■■■

■■■■■

■■■■

cursor(3,7);printf("■

■■■■■

■■

■■■

■■■■

■");

cursor(5,4);printf("■");

cursor(5,6);printf("■");

cursor(9,4);printf("■");

cursor(9,6);printf("■”);

cursor(17,4);printf("■");

cursor(17,6);printf("■");

cursor(21,4);printf("■");

cursor(25,4);printf("■");

cursor(21,6);printf("■");

cursor(24,6);printf("■");

cursor(29,4);printf("■");

cursor(29,6);printf("■");

cursor(33,4);printf("■");

cursor(37,6);printf("■");

SetConsoleTextAttribute(handle,0x0e);clock_last=clock_now;

}

{

SetConsoleTextAttribute(handle,(rand()%(0x10)));cursor(15,17);

printf(”按任意键开始");

}

if(_kbhit())

{getch();clear_p();return0;

}

}

}

3.24游戏结束

intgameover()

{

inti;

handle=GetStdHandle(STD_OUTPUT_HANDLE);

clock_ttime_now,time_last;

time_last=clock();

for(i=700;i>=0;i--)

{

while(i)

{

time_now=clock();

if(time_now-time_last>0.45F*CLOCKS_PER_SEC)

{

SetConsoleTextAttribute(handle,0x0a);cursor(rand()%84,rand()%25);

printf("0");

SetConsoleTextAttribute(handle,0x0a);cursor(rand()%84,rand()%25);

printf("1");

SetConsoleTextAttribute(handle,0x0a);cursor(rand()%84,rand()%25);

printf("0");

SetConsoleTextAttribute(handle,0x0a);cursor(rand()%84,rand()%25);

printf("1");

SetConsoleTextAttribute(handle,(rand()%(0x10)));cursor(4,4);printf(“■");cursor(4,5);printf(“■");

cursor(4,6);printf("■");cursor(4,7);printf("■”);cursor(4,8);printf("■");cursor(4,9);printf("■");

cursor(5,9);printf("■■■");cursor(10,4);printf("■");

cursor(10,5);printf("cursor(10,6);printf("cursor(10,8);printf("cursor(11,4);printf("cursor(13,5);printf("cursor(13,7);printf("cursor(13,9);printf("cursor(17,4);printf("cursor(17,6);printf("cursor(20,8);printf("cursor(18,4);printf("cursor(17,9);printf("cursor(26,7);printf("cursor(25,4);printf("cursor(25,6);printf("cursor(25,8);printf("

■");

■");cursor(10,7);printf(”■");

■");cursor(10,9);printf("■");

■■■");cursor(13,4);printf("■");

■");cursor(13,6);printf("

■");cursor(13,8);printf("

■");cursor(11,9);printf("

■");cursor(17,5);printf("

■");cursor(20,7);printf("

■");cursor(20,9);printf("

■");

■");

■■■");

■");

■");

■");

■■■");cursor(17,7);printf("■■■");

■■■");cursor(26,4);printf("■■■");

■■■");cursor(26,9);printf("■■■");

■");cursor(25,5);printf("

■");cursor(25,7);printf("

■");cursor(25,9);printf("

■");

■");

■");

cursor(15,17);printf("按任意键关闭屏幕");

i--;

}

 

 

四、运行结果

运行结果(一一)

控制方向

Author:

姚锋

□等级

XXXXXXXXXXXXXXXxxxxxxMr

B暮觀柱二警上键齟」以回空

十★

000000010001

运行结果(—二)

 

 

运行结果

(二)

01010L1

■■■■0

■101110

■311IBIS

■■■■B

01

01

1

013101

Bl■■

fill

BlIS

110

113011

110101

Bitaiei

01mil0101

10111001

0100111100

011BlllBBll

0110如

■■01

10111110

■■31108

anmiQi101B11031B13BIB

B1S119L0B61

10111QIQI

1

110101

1

@1011

013001111001

1

1

000010101Q10111M011131101

000************01

101

133****111111101311010130010131001

01131tlfl31B11HI0111

HBill

01001lflfi

tocontinue.B1ltl10001101011IB0119111

1L1

10

0100110191010111

011111109111

10301Q191

0BS

10009

aiai

3

11Q1

1011

1

1831

I113

S10311

111B1011BQ

■■■■31

1J1U1

&09911101

11

010119

fil

016

1011100

01101010131

HR1R1

01

01B11

P1

0111101

.1內

Qisiai

'ressanvkey

1

31100

'rocess

1011011010010011001

1001011011肮盹按任意键关闭屏幕01011110011310101

returned0<0x0>executiontime:

52.561si1010013

1LQ01

010011013110

111011111

09910900101

010

01

1

QI1009111

01»11

01

091010

101IL

1010101Q1010

01O101L010109111

0LQ

1Q

01

110(dlQ

0011

11010ML0110101110110101

010101101

0130101

101

0101010i1

011001010

10illDID丄丄103

11101011101110

01ti丄丄

01

iltiiiiiluiiaiyt)丄丄unyiuyin丄丄

0MB101111

0J11U

an

10

110110m1LULU

询0

1

181

1311301L1F»10e110110001

18311011

01001Bl811

R1R031

0

0

0

010(11

10101011101

100301001101I011101111110tll31011010111

叢疹命方拱墨诉,

运行结果(四)

&11

IS|1111

B1811111B1I

1B10

QI3

91113

11

100

■ill

■0

■3

 

五、总结

在编这项项目的过程中,我发现了很多问题,课堂上学得那些知识并不牢固,一实践和检验的时候往往会出现这样和那样的错误,所以要想真正掌握这门知识,光靠记忆和在深入理解也是远远

不够的,必须上机多敲键盘,多打代码,遇到错误,要冷静的分析和修改,但经常很多问题不是我们个人能解决的,有时我们只是局限于一角,忽略其他的方块隐藏的潜在简单的错误,可能一个局

外人一眼就可以发现了,有时可能我们是真的停留在程序表面,所以运用经常出错,因此必须把知识和实践相结合,凭一己之力不能解决的事千千万,我们要与他人团结合作,发挥团队的强大性。

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

当前位置:首页 > 工程科技 > 能源化工

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

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