俄罗斯方块课程设计报告Word文档格式.docx
- 文档编号:21979718
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:28
- 大小:96.52KB
俄罗斯方块课程设计报告Word文档格式.docx
《俄罗斯方块课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块课程设计报告Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
各项目组完成系统层次图、用户界面设计、数据库表设计、报表设计,完成《设计说明书》
程序编写和测试
7天
根据方案进行现场编程、调试。
编写设计文档
完成软件测试以及《用户操作手册》的编写。
文档提交、答辩
1天
各小组提交文档,教师根据情况选择是否答辩及答辩方式(抽样答辩或全员答辩)。
设计说明
游戏区模块
控制区模块
系统流程图
开始
设置初始级别
创建游戏区
游戏开局
随机选择方块类型
是否到顶部
方块下落一行
游戏结束
是
否
模块简介
1.功能模块
(1)游戏区模块(创建游戏区,处理玩家操作,显示操作结果)
(2)游戏控制模块(开始,暂停继续,提高等级,降低等级,停止,新游戏,帮助)
系统操作界面
游戏打开界面
游戏进行中界面
源代码编码
#include<
>
#definetrue1
#definefalse0
#defineBoardWidth12
#defineBoardHeight23
#define_INNER_HELPER/*innerhelpermethod*/
/*ScanCodesDefine*/
enumKEYCODES
{
K_ESC=0x011b,
K_UP=0x4800,/*upwardarrow*/
K_LEFT=0x4b00,
K_DOWN=0x5000,
K_RIGHT=0x4d00,
K_SPACE=0x3920,
K_P=0x1970
};
/*thedatastructureoftheblock*/
typedefstructtagBlock
charc[4][4];
/*cellfillinfoarray,0-empty,1-filled*/
intx;
/*blockpositioncx[0,BoardWidht-1]*/
inty;
/*blockpositioncy[-4,BoardHeight-1]*/
charcolor;
/*blockcolor*/
charsize;
/*blockmaxsizeinwidthorheight*/
charname;
/*blockname(theblock'
sshape)*/
}Block;
/*game'
sglobalinfo*/
intFrameTime=1300;
intCellSize=18;
intBoardLeft=30;
intBoardTop=30;
/*nextblockgrid*/
intNBBoardLeft=300;
intNBBoardTop=30;
intNBCellSize=10;
/*scoreboardposition*/
intScoreBoardLeft=300;
intScoreBoardTop=100;
intScoreBoardWidth=200;
intScoreBoardHeight=35;
intScoreColor=LIGHTCYAN;
/*infortextpostion*/
intInfoLeft=300;
intInfoTop=200;
intInfoColor=YELLOW;
intBorderColor=DARKGRAY;
intBkGndColor=BLACK;
intGameRunning=true;
intTopLine=BoardHeight-1;
/*topemptyline*/
intTotalScore=100;
charinfo_score[20];
charinfo_help[255];
charinfo_common[255];
/*ourboard,Board[x][y][0]-isFilled,Board[x][y][1]-fillColor*/
unsignedcharBoard[BoardWidth][BoardHeight][2];
charBufferCells[4][4];
/*usedtojudgeifcanrotateblock*/
BlockcurBlock;
/*currentmovingblock*/
BlocknextBlock;
/*nextBlocktoappear*/
/*functionlist*/
intGetKeyCode();
intCanMove(intdx,intdy);
intCanRotate();
intRotateBlock(Block*block);
intMoveBlock(Block*block,intdx,intdy);
voidDrawBlock(Block*block,int,int,int);
voidEraseBlock(Block*block,int,int,int);
voidDisplayScore();
voidDisplayInfo(char*text);
voidGenerateBlock(Block*block);
voidNextBlock();
voidInitGame();
intPauseGame();
voidQuitGame();
/*GetKeyCode*/
int_INNER_HELPERGetKeyCode()
intkey=0;
if(bioskey
(1))
{
key=bioskey(0);
}
returnkey;
}
/*displaytext!
*/
void_INNER_HELPERDisplayInfo(char*text)
setcolor(BkGndColor);
outtextxy(InfoLeft,InfoTop,info_common);
strcpy(info_common,text);
setcolor(InfoColor);
/*createanewblockbykeynumber,
*theblockanchortothetop-leftcornerof4*4cells
*/
void_INNER_HELPERGenerateBlock(Block*block)
intkey=(random(13)*random(17)+random(1000)+random(3000))%7;
block->
size=3;
/*becausemostblocks'
size=3*/
memset(block->
c,0,16);
switch(key)
case0:
name='
T'
;
color=RED;
c[1][0]=1;
c[1][1]=1,block->
c[2][1]=1;
c[1][2]=1;
break;
case1:
L'
color=YELLOW;
c[1][1]=1;
c[1][2]=1,block->
c[2][2]=1;
case2:
J'
color=LIGHTGRAY;
c[0][2]=1;
case3:
z'
color=CYAN;
c[0][0]=1,block->
case4:
5'
color=LIGHTBLUE;
c[1][0]=1,block->
c[2][0]=1;
c[0][1]=1,block->
case5:
o'
color=BLUE;
size=2;
case6:
I'
color=GREEN;
size=4;
c[1][3]=1;
/*getnextblock!
voidNextBlock()
/*copythenextBlocktocurBlock*/
=;
=(BoardWidth-4)/2;
memcpy,,16);
/*generatenextBlockandshowit*/
EraseBlock(&
nextBlock,NBBoardLeft,NBBoardTop,NBCellSize);
GenerateBlock(&
nextBlock);
=1,=0;
DrawBlock(&
/*rotatetheblock,updatetheblockstructdata*/
int_INNER_HELPERRotateCells(charc[4][4],charblockSize)
chartemp,i,j;
switch(blockSize)
temp=c[0][0];
c[0][0]=c[2][0],c[2][0]=c[2][2],c[2][2]=c[0][2],c[0][2]=temp;
temp=c[0][1];
c[0][1]=c[1][0],c[1][0]=c[2][1],c[2][1]=c[1][2],c[1][2]=temp;
/*only'
blockarivedhere!
c[1][0]=1-c[1][0],c[1][2]=1-c[1][2],c[1][3]=1-c[1][3];
c[0][1]=1-c[0][1],c[2][1]=1-c[2][1],c[3][1]=1-c[3][1];
/*judgeiftheblockcanmovetowardthedirection*/
intCanMove(intdx,intdy)
inti,j,tempX,tempY;
for(i=0;
i<
i++)
for(j=0;
j<
j++)
if[i][j])
/*cannotmoveleftwardorrightward*/
tempX=+i+dx;
if(tempX<
0||tempX>
(BoardWidth-1))returnfalse;
/*makesurexisvalid!
/*cannotmovedownward*/
tempY=+j+dy;
if(tempY>
(BoardHeight-1))returnfalse;
/*yisonlycheckedlowerbound,maybenegative!
!
/*thecellalreadyfilled,wemustcheckY'
supperboundbeforecheckcell!
=0&
&
Board[tempX][tempY][0])returnfalse;
returntrue;
/*judgeiftheblockcanrotate*/
intCanRotate()
/*updatebuffer*/
memcpy(BufferCells,,16);
RotateCells(BufferCells,;
if(BufferCells[i][j])
tempX=+i;
tempY=+j;
(BoardWidth-1))
returnfalse;
(BoardHeight-1))
Board[tempX][tempY][0])
/*drawtheblock*/
void_INNER_HELPERDrawBlock(Block*block,intbdLeft,intbdTop,intcellSize)
inti,j;
setfillstyle(SOLID_FILL,block->
color);
block->
size;
if(block->
c[i][j]&
(block->
y+j)>
=0)
floodfill(
bdLeft+cellSize*(i+block->
x)+cellSize/2,
bdTop+cellSize*(j+block->
y)+cellSize/2,
BorderColor);
/*Rotatetheblock,ifsuccess,returntrue*/
intRotateBlock(Block*block)
intb_success;
size==2)
if((b_success=CanRotate()))
EraseBlock(block,BoardLeft,BoardTop,CellSize);
memcpy,BufferCells,16);
DrawBlock(block,BoardLeft,BoardTop,CellSize);
returnb_success;
/*eraseablock,onlyfillthefilledcellwithbackgroundcolor*/
void_INNER_HELPEREraseBlock(Block*block,intbdLeft,intbdTop,intcellSize)
setfillstyle(SOLID_FILL,BkGndColor);
y+j>
=0))
/*movebythedirectionifcan,donothingifcannot
*returnvalue:
true-success,false-cannotmovetowardthisdirection
intMoveBlock(Block*block,intdx,intdy)
intb_canmove=CanMove(dx,dy);
if(b_canmove)
+=dx;
+=dy;
returnb_canmove;
/*droptheblocktothebottom!
intDropBlock(Block*block)
while(CanMove(0,1))
++;
return0;
/*returnvalueisassigntotheblock'
salive*/
/*initthegraphicsmode,drawtheboardgrid*/
voidInitGame()
inti,j,gdriver=DETECT,gmode;
structtimesysTime;
/*drawboardcells*/
memset(Board,0,BoardWidth*BoardHeight*2);
memset,0,16);
strcpy(info_help,"
P:
PauseGame.--byhoodlum1980"
);
initgraph(&
gdriver,&
gmode,"
"
setcolor(BorderColor);
=BoardWidth;
line(BoardLeft+i*CellSize,BoardTop,BoardLeft+i*CellSize,BoardTop+BoardHeight*CellSize);
=BoardHeight;
line(BoardLeft,BoardTop+i*CellSize,BoardLeft+BoardWidth*CellSize,BoardTop+i*CellSize);
/*drawboardouterborderrect*/
rectangle(BoardLeft-CellSize/4,BoardTop-CellSize/4,
BoardLeft+BoardWidth*CellSize+CellSize/4,
BoardTop+BoardHeight*CellSize+CellSize/4);
/*drawnextblockgrids*/
=4;
line(NBBoardLeft+i*NBCellSize,NBBoardTop,NBBoardLeft+i*NBCellSize,NBBoardTop+4*NBCellSize);
line(NBBoardLeft,NBBoardTop+i*NBCellSize,NBBoardLeft+4*NBCellSize,NBBoardTop+i*NBCellSize);
/*drawscorerect*/
rectangle(ScoreBoardLeft,ScoreBoardTop,ScoreBoardLeft+ScoreBoardWidth,ScoreBoardTop+ScoreBoardHeight);
DisplayScore();
/*setnewseed!
gettime(&
sysTime);
srand*3600+*60+;
NextBlock();
/*createfirstblock
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 课程设计 报告