c俄罗斯方块课程设计报告刘阳文档格式.docx
《c俄罗斯方块课程设计报告刘阳文档格式.docx》由会员分享,可在线阅读,更多相关《c俄罗斯方块课程设计报告刘阳文档格式.docx(35页珍藏版)》请在冰点文库上搜索。
![c俄罗斯方块课程设计报告刘阳文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/415135aa-eb08-414a-90f1-5f5dae9738f0/415135aa-eb08-414a-90f1-5f5dae9738f01.gif)
第三章设计实现过程5
第四章调试运行及结果分析6-7
第五章测试及问题探讨8
第六章课设总结及体会9
第七章致谢10
第八章参考文献11
第九章附录12-36
第一章课程设计目的
俄罗斯方块家喻户晓,他能动态进行显示和判断方块位置,能对程序的综合设计有更深入的了解,同时对程序的综合开发,创新了思路,增长了开发经验。
俄罗斯流传范围较广,游戏体验也比较丰富,这对开发来说增加了开发信心,俄罗斯游戏考验人的反应应变能力,对其开发能深入了解开发者思想,体会开发者心得。
对于这样经典的创造于在创造都是非常好的学习机会。
对程序设计初学者能更好的整合综合开发能力,对过去所学的零散的知识汇总。
对开发者耐心,细心程度都有很大提升。
在开发的过程中也能对以往玩过的各个版本的俄罗斯方块能取长补短,这是开发其它小程序很难获得的。
第二章设计方案的论证
该程序采用数组与图形显示相结合的办法,数组用来进行方块位置判断,图形部分则根据数组所包含的数据进行显示,使程序生动,更具有可玩性。
判断函数
利用该函数可以判断是否满足消除和分数判断要求
主函数
主函数里面负责图形驱动初始化、分数、及随机函数和清除函数和显示函数和键盘缓冲区清除和全局显示函数初始化化
第三章设计实现过程
设计首先对游戏UI进行的草图的绘制,设计出游戏UI的大小和方位。
通过合理的设置游戏UI界面,会给游戏体验着带来更加愉悦的游戏体验,并留下深刻的印象。
UI初步绘制完成之后就是结构化程序比较重要的一步了,那就是算法的合理选择,一个程序的好坏不能单单对其UI的评价,而是算法是否合理,程序资源调配时否达到最优化的程度等。
本程序采用数组与UI界面相结合的方法进行游戏规则判断。
由于采用TC编译平台。
不能提供丰富的预定义函数。
所以所有函数除部分头文件均由后期编写。
这样一来相比使用方便的VC++编译平台,更具有实际操作能力。
更具有意义。
但同时要牺牲开发效率。
UI后期游戏中的绘制是根据数组中值的不断变化而绘制。
UI和算法均设计完毕后。
便进入了最后的调试阶段。
在调试阶段,通过对程序的调试,发现了很多严重的问题,经过不计其数的修改,最后程序还是比较接近预期设计效果。
由于设计能力有限部分游戏功能没有得以体现这是设计者表示比较遗憾的。
在以后的学习中会不断完善,谢谢。
第四章调试运行及结果分析
游戏加载界面
该界面可以给玩家一定准备时间,做好一定的缓冲,不会让玩家措手不及
游戏加载完成
游戏运行界面
结果接近预期效果,由于开发时间紧张,方块旋转函数没有涉及,所以降低了游戏的可玩性。
这点比较遗憾。
TC下无法输出中文,所以所有提示都采用英文,这一点也是比较遗憾。
第五章测试及问题探讨
测试发现,游戏运行流畅度不是很完美,因为所采用的延时函数不是很好,所以运行起来有卡顿延时现象。
发现问题有方块穿越边界的情况,这点后期对判断值左、右、下均增加了5处判断值,与先期的一处判断值相比,能够早期判断,由于穿越边界主要是由于移动按键造成的,按键函数下每调用一次为多增加30像素值的移动,加上本次的10像素值,一共为40像素值,所以,采用50个像素值进行判断比较稳定,虽然说采用比5处更多的判断值会更加稳定,但是会减慢游戏的运行速度,所以采用50像素值进行判断。
同时左右移动有时也会存在穿越其他方块的情况,这点只要在正常延时时不会存在,由于TC下暂停时间过长,再次继续有一段时间延迟会改变,所以左右穿越方块只会在这段时间出现,如果有机会日后会完善。
第六章课设总结与体会
课设期间时间充分利用,分配合理,完成度接近95%,总体满意。
通过课程设计体验到了软件开发的过程,从设计到完成,完整的开发过程。
同时对所涉及的各个学科有了更深入的了解。
增加了实践经验。
为今后的其他平台开发打下了坚实的基础,同时也为即将结束的大一生活留下了美好的一抹油彩,
然大一生活更加值得怀念。
第七章致谢
在此特别感谢帮助和支持开发工作的相关人员,感谢吉林工程技术师范学院所提供的场地和环境。
感谢XX搜索引擎提供的相关数据搜索,感谢男寝201全体成员。
感谢相关书籍和文献的撰写人员和出版发行社。
感谢TC该编译平台。
感谢Microsoft所有相关支持软件。
在此特别鸣谢以上公司和个人。
第八章参考文献
[1]C语言程序设计刘国成科学出版社
[2]C程序设计谭浩强1991年7月
[3]从问题到程序裘宗燕北京大学出版社
[3]计算机二级教程刘瑞挺南开大学出版社
[4]C语言程序设计基础教程陈朔鹰,兵器工业出版社
[5]C语言程序设计姜仲秋南京大学出版社
附录
#include<
stdio.h>
bios.h>
conio.h>
dos.h>
graphics.h>
math.h>
#defineha25/*kuansuchangliang*/
#definegs150+ha*10+30/*chengjixianshipinyiliang*/
#definehh350/*^^*/
intxb11,xb12,xb21,xb22,xb31,xb32,xb41,xb42;
intqdx1,qdy1,qdx2,qdy2,qdx3,qdy3,qdx4,qdy4;
intui=150,bi=40,mbh=0,jz=2,key,stop=0,y11;
intsz[40][ha]={{0}},qckey,n;
intbxh=0,sxh=0,zfs=0;
intns[4]={0,0,0,0};
voidkc()
{
inti1,j1=0,k1;
ints211[10]={100,100,200,100,200,200,100,200,100,100};
intsd211[14]={450,100,410,200,450,200,350,360,420,220,380,220,450,100};
sleep
(1);
for(k1=0;
k1<
320;
k1++)
{
j1++;
i1+=6;
setcolor(i1);
setfillstyle(i1,i1);
drawpoly(8,sd211);
setfillstyle(1,i1);
/*kaichangdonghuajiazai*/
floodfill(420,210,i1);
drawpoly(5,s211);
floodfill(180,180,i1);
setcolor
(2);
setlinestyle(0,2,3);
line(150,450,150+j1,450);
outtextxy(300,435,"
loding"
);
if(i1>
15)
{i1=0;
}
delay(1000);
}
settextstyle(0,0,3);
outtextxy(480,430,"
Go"
sleep
(2);
cleardevice();
voidsj()
srand(time(0));
mbh=(rand()%5);
ui=150+(rand()%(ha-6))*10;
/*weifangkuaitigongchushiweizhidesuijizhi*/
/*weifangkuaizhongleitigongchushizhi*/
voidshow()
intiii,j=10;
for(iii=0;
iii<
4;
iii++)/*youyuTCbunengzhengchangxianshishuzi*/
{/*gaihanshutigongdefenchengjisuoxushuzi*/
switch(ns[iii])
case0:
setlinestyle(0,2,0x0f);
line(gs+3+j,3+hh,gs+3+j,21+hh);
line(6+j+gs,hh+4,16+j+gs,4+hh);
line(19+j+gs,hh+3,19+j+gs,21+hh);
line(3+j+gs,hh+24,3+j+gs,42+hh);
line(19+j+gs,hh+24,19+j+gs,42+hh);
line(6+j+gs,hh+41,16+j+gs,41+hh);
break;
case1:
line(gs+19+j,hh+3,gs+19+j,hh+21);
line(gs+19+j,hh+24,gs+19+j,hh+42);
case2:
line(gs+6+j,hh+4,gs+16+j,hh+4);
line(gs+6+j,hh+23,gs+16+j,hh+23);
line(gs+3+j,hh+24,gs+3+j,hh+42);
line(gs+6+j,hh+41,gs+16+j,hh+41);
case3:
case4:
line(gs+3+j,hh+3,gs+3+j,hh+21);
case5:
case6:
case7:
case8:
case9:
default:
break;
/*shuxianhanshu*/
j+=30;
voiddisplayer()
inti,j,x,y;
for(i=0;
i<
40;
i++)
{
for(j=0;
j<
ha;
j++)
{
if(sz[i][j]==1)
{x=150+j*10;
y=40+i*10;
bar(x,y,x+10,y+10);
}
}
}/*gaihanshuweizhengtixianshihanshu*/
voidqc()
inti,j;
++bxh;
for(i=39;
i>
0;
i--)
for(j=0;
sz[i][j]=sz[i-1][j];
}/*gaihanshuweizhengtiyiweihanshu*/
voidclear()
inti,j,k=0;
=0;
if(sz[i][j]==1)
{k++;
if(k==ha)
qckey=1;
k=0;
i=39;
delay(100000);
qc();
else
{k=0;
}/*gaihanshuweiqingchuzhenghangfangkuai*/
intpd()
if(sz[xb12/10-4][xb11/10-15]==1
||sz[xb22/10-4][xb21/10-15]==1
||sz[xb32/10-4][xb31/10-15]==1
||sz[xb42/10-4][xb41/10-15]==1
||xb12==440||xb22==440||xb32==440||xb42==440)
sz[qdy1/10-4][qdx1/10-15]=1;
sz[qdy2/10-4][qdx2/10-15]=1;
sz[qdy3/10-4][qdx3/10-15]=1;
sz[qdy4/10-4][qdx4/10-15]=1;
xb12=0;
xb22=0;
xb32=0;
xb42=0;
stop=1;
zfs+=2;
clear();
}/*gaihanshuweipanduanhanshu*/
voidbk()
line(147,37,153+ha*10,37);
line(147,37,147,443);
line(153+ha*10,37,153+ha*10,443);
line(147,443,153+ha*10,443);
}/*gaihanshuweichengxubiankuanghanshu*/
intzx(inty,intz)
inti=z/10-4,k=0;
for(;
if(sz[i][y/10-15]==0)
k++;
returnk;
}/*gaihanshuweijifenhanshutigongchushizhi*/
voidtext()
setcolor(0x0f);
outtextxy(437,300,"
score"
settextstyle(0,0,2);
setcolor(0x0e);
outtextxy(430,40,"
ESC~EXIT"
outtextxy(430,60,"
RIGHT~D"
outtextxy(430,80,"
LEFT~A"
outtextxy(430,100,"
DOWN~S"
settextstyle(0,1,2);
outtextxy(140,90,"
Tetris"
}/*gaihanshushuchitishiwenzi*/
voiddisplay()/*gaihanshuweifangkuaiyidonghanshu*/
intx11=0,x21=0,y21=0,x12=0,y12=0,x22=0,y22=0,x13=0,y13=0,x23=0,y23=0;
intx14=0,y14=0,x24=0,y24=0;
intx=10,y=12,i,m,ww;
/*fangkuaixianshi*/
pd();
bi=40;
switch(mbh)
case0:
for(n=1;
n<
38;
n++)
key=bioskey
(1);
if(key==283)/*shifouanESC*/
{exit(0);
bk();
pd();
show();
text();
/*xianshiwaiguan*/
if(stop==1)/*ruguomanzuxiaochutiaojianjitiaochu*/
{break;
kbhit();
)
{/*anjianjianceduan*/
if(kbhit())/*youyumeizhongfangkuaigeyoubutong*/
{/*suoyibuzuodanduhanshu*/
key=bioskey(0);
if(key==7777
&
&
sz[y11/10-4][x11/10-16]==0
sz[y12/10-4][x12/10-16]==0
sz[y14/10-4][x14/10-16]==0)
if(ui>
150)
{ui-=10;
if(key==8292
sz[y11/10-3][x11/10-14]==0
sz[y13/10-3][x13/10-14]==0
sz[y14/10-3][x14/10-14]==0)
if(ui<
130+ha*10)
{ui+=10;
if(key==8051)
if((bi>
400)
(sz[xb12/10-4][ui/10]==0)
(sz[xb22/10-4][ui/10]==0)
(sz[xb32/10-4][ui/10]==0)
(sz[xb42/10-4][ui/10]==0))
{break;
if(
sz[y22/10+1][x12/10-15]==1
||sz[y24/10+1][x14/10-15]==1
||sz[y22/10][x12/10-15]==1
||sz[y24/10][x14/10-15]==1
||sz[y22/10-1][x12/10-15]==1
||sz[y24/10-1][x14/10-15]==1
||sz[y22/10-2][x12/10-15]==1
||sz[y24/10-2][x14/10-15]==1
||sz[y22/10-3][x12/10-1