![[计算机]俄罗斯方块程序代码.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-1/5/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c1.gif)
![[计算机]俄罗斯方块程序代码.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-1/5/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c2.gif)
![[计算机]俄罗斯方块程序代码.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-1/5/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c3.gif)
![[计算机]俄罗斯方块程序代码.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-1/5/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c4.gif)
![[计算机]俄罗斯方块程序代码.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-1/5/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c/3a4fb871-f2b6-4c6a-89aa-6a5ffc87800c5.gif)
已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/包含头文件#include#include#include#include#include#include Tetris.h/int score=0;/int lever=1;/char scores10;/char levers10;/*enum cmdround, /旋转方块left, /左移方块right, /右移方块down, /下一方块bottom, /方块沉底quit /离开游戏;/定义绘制方块的状态的枚举类型enum drawshow, /显示方块hide /抹掉方块;/定义俄罗斯方块的结构体struct blockint dir4; /方块的四个旋转的状态int color; /方块的颜色*/static T_TrsBlockStyle gz_tBlockStyleTab7 = /* 口 口 口口口口 口 口口口口 口 口 口口 口*/0x0F00, 0x4444, 0x0F00, 0x4444, RED,/* 口口 口口 口口 口口 口口 口口 口口 口口 */0x0660, 0x0660, 0x0660, 0x0660, BLUE,/* 口 口 口 口口 口口口 口口 口口口 口 口 口 */0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA,/* 口 口 口口口 口口 口 口口 口 口 口口口 口 */0x2260, 0x0E20, 0x0644, 0x0470, YELLOW,/* 口 口 口口 口口 口口 口口 口口 口 口口 口 */0x0C60, 0x2640, 0x0C60, 0x2640, CYAN,/* 口 口 口口 口口 口口 口口 口口 口 口口 口 */0x0360, 0x4620, 0x0360, 0x4620, GREEN,/* 口 口 口口口口 口口 口口口 口口 口 口 口 */0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN;/*/定义俄罗斯方块的信息的结构体struct blockinfoint id; /7中方块中的哪一种byte dir:2; /1种方块中四个方向中的哪个char x,y; /方块的坐标(不是屏幕中的而是自己设置的游戏区域中的)curblock,nextblock;*/ 定义游戏区/unsigned char areawidthhigh = 0;/函数声明bool TRS_AppCreate(void * ppUser,void * pFunc);static void TRS_Init(void *pUser);static void TRS_DrawBackground(void *pUser);static void TRS_GameOver(void *pUser);static void TRS_Quit(void *pUser);static void TRS_ScoreShow(void *pUser);static void TRS_NewGame(void *pUser);static AEEEvent TRS_GetMsg(PCTetrisApp pMe);static bool TRS_TetrisHandle(void *pUser, DWORD evt, WORD w,DWORD dw);static void TRS_Newblock(void *pUser);static void TRS_DrawBlock(void *pUser,T_TrsBlockInfo tCurBlck,EDrawStyle eStyle);static bool TRS_Checkblock(void *pUser, T_TrsBlockInfo tCurBlck);static void TRS_HRound(void *pUser);static void TRS_HLeft(void *pUser);static void TRS_HRight(void *pUser);static void TRS_HDown(void *pUser);static void TRS_HBottom(void *pUser);/*-函数名称:main功能说明:主函数参数说明:作 者:时 间:-*/void main()PCTetrisApp pMe;AEEEvent eMsg;/init();TRS_AppCreate(void *)&pMe,NULL);/*while(true) scoreshow();c=getcmd();discmd(c);if (c = quit)HWND wnd = GetHWnd();if (MessageBox(wnd, _T(您要退出游戏吗?), _T(提醒), MB_OKCANCEL | MB_ICONQUESTION) = IDOK)Quit();*/bool TRS_AppCreate(void * ppUser,void * pFunc); PCTetrisApp pMe;new(pMe);*ppUser = pMe;pMe-m_iScore=0;pMe-m_iLever=0;memset(pMe-m_iScores,0,sizeof(int)*10);memset(pMe-m_iLevers,0,sizeof(int)*10);for(iLoop = 0;iLoop GSCRN_WIDTH_CL;iLoop+)for(jLoop=0;jLoop m_uiAreaiLoopjLoop=0;pMe-m_dwOldTime = 0;pMe-m_dwNewTime = 0; return true;static bool TRS_TetrisHandle(void *pUser, DWORD evt, WORD w,DWORD dw)switch(evt)case EVT_ROUND :TRS_HRound(pUser); break;case EVT_LEFT :TRS_HLeft(pUser); break;case EVT_RIGHT :TRS_HRight(pUser); break;case EVT_DOWN :TRS_HDown(pUser); break;case EVT_BOTTOM:TRS_HBottom(pUser); break;case EVT_QUIT :HWND wnd = GetHWnd();if (MessageBox(wnd, _T(您要退出游戏吗?), _T(提醒), MB_OKCANCEL | MB_ICONQUESTION) = IDOK)TRS_Quit(pUser);break;default:return false;return true;/初始化函数static void TRS_Init(void *pUser)PCTetrisApp pMe =(PCTetrisApp)pUser;initgraph(SCREEN_HIGHT,SCREEN_WIDTH); /初始化屏幕大小srand(unsigned)time(NULL); /以当前时间作为随机种子TRS_NewGame();static void TRS_DrawBackground(void *pUser);PCTetrisApp pMe =(PCTetrisApp)pUser;setfont(TRS_GUIDE_FONT_SIZE,0,TRS_GUIDE_FONT_TYPE); /定义字体宋体,字高16,字宽比例自动适应outtextxy(TRS_OPERATION_TITLE_X,TRS_OPERATION_TITLE_Y,操作提示:);outtextxy(TRS_MLEFT_X,TRS_MLEFT_Y,a:左移);outtextxy(TRS_MRIGHT_X,TRS_MRIGHT_Y,d:右移);outtextxy(TRS_MDOWN_X,TRS_MDOWN_Y,s:下移);outtextxy(TRS_ROTATION_X,TRS_ROTATION_Y,w:变形);outtextxy(TRS_MBOTTOM_X,TRS_MBOTTOM_Y,空格:沉底);outtextxy(TRS_EXIT_X,TRS_EXIT_Y,ESC:退出);setfont(50,0,黑体);outtextxy(460,160,Tetris);setfont(22,0,宋体);outtextxy(20,20,得分:);outtextxy(20,80,等级:);setorigin(220,20); /设置坐标原点setfillstyle(WHITE); /设置填充颜色为白色/画游戏的边框bar3d(-21,-1,-6,GSCRN_HIGHT_CL * CELL_WIDTH,5,1);bar(-21,GSCRN_HIGHT_CL * CELL_WIDTH,GSCRN_WIDTH_CL * CELL_WIDTH,GSCRN_HIGHT_CL * CELL_WIDTH+20);bar3d(GSCRN_WIDTH_CL * CELL_WIDTH,-1,GSCRN_WIDTH_CL * CELL_WIDTH+15,GSCRN_HIGHT_CL * CELL_WIDTH+20,5,1);/画预览方块区域的边框rectangle(GSCRN_WIDTH_CL + 2) * CELL_WIDTH - 1, -1, (GSCRN_WIDTH_CL + 6) * CELL_WIDTH, 4 * CELL_WIDTH);/ 退出游戏static void TRS_Quit(void *pUser)PCTetrisApp pMe =(PCTetrisApp)pUser;closegraph();/释放应用空间free(pMe);exit(0);/ 结束游戏static void TRS_GameOver(void *pUser)HWND wnd = GetHWnd();if (MessageBox(wnd, _T(游戏结束。n您想重新来一局吗?), _T(游戏结束), MB_YESNO | MB_ICONQUESTION) = IDYES)TRS_NewGame();elseTRS_Quit();/游戏得分显示static void TRS_ScoreShow(void *pUser)sprintf(scores,%d,score); /将的分转化为字符outtextxy(-140,20,scores); /将得分显示到屏幕上sprintf(levers,%d,lever); /将等级转化为字符outtextxy(-140,80,levers); /将等级显示到屏幕上 /开始新游戏static void TRS_NewGame(void *pUser)PCTetrisApp pMe =(PCTetrisApp)pUser;setfillstyle(BLACK); /选定黑色填充bar(0,0,GSCRN_WIDTH_CL*CELL_WIDTH-1,GSCRN_HIGHT_CL*CELL_WIDTH-1); /将游戏区域清空ZeroMemory(area,GSCRN_WIDTH_CL*GSCRN_HIGHT_CL); /将游戏区域用0填满/随机生成下一个方块nextblock.id=rand()%7;nextblock.dir =rand()%4;nextblock.x=GSCRN_WIDTH_CL+2;nextblock.y=GSCRN_HIGHT_CL-1;TRS_NewBlock(pMe); /生成新的方块/获取控制命令函数static AEEEvent TRS_GetMsg(PCTetrisApp pMe) while(1) /没有按键到了500ms以后自动下落一格pMe-m_dwNewTime =GetTickCount(); /得到系统到现在所经过的毫秒数储存到newtime中if(pMe-m_dwNewTime - pMe-m_dwOldTime=550-50*pMe-m_iLever) /如果时间过去500mspMe-m_dwOldTime=pMe-m_dwNewTime ; return EVT_DOWN; /返回下落按键/有按键的话,返回对应的按键if(kbhit()switch(getch()case w:case W: return EVT_ROUND;case a: case A: return EVT_LEFT;case d: case D: return EVT_RIGHT;case s:case S: return EVT_DOWN;case : return EVT_BOTTOM;case 27 : return EVT_QUIT;/*static void TRS_Discmd(void *pUser,cmd c)switch(c)case round:hround();break;case left:hleft();break;case right:hright(); break;case down:hdown();break;case bottom:hbottom();break;case quit:break;*/把新方块信息传给旧方块并再生成新方块static void TRS_NewBlock(void *pUser)PCTetrisApp pMe =(PCTetrisApp)pUser;/新方块的数据传给旧方块curblock.id=nextblock.id; curblock.dir=nextblock.dir;/定义新方块的坐标curblock.x=(GSCRN_WIDTH_CL-4)/2;curblock.y=GSCRN_HIGHT_CL+2;/再随机生产成新的方块nextblock.id=rand()%7;nextblock.dir=rand()%4;drawblock(curblock); /调用画方块 函数画方块curblock/在方块预览中画出下一个方块setfillstyle(BLACK);bar(GSCRN_WIDTH_CL+2)*CELL_WIDTH,0,(GSCRN_WIDTH_CL+6)*CELL_WIDTH-1,4*CELL_WIDTH-1);drawblock(nextblock);oldtime=GetTickCount(); /设置计时器/画方块函数static void TRS_DrawBlock(void *pUser,T_TrsBlockInfo tCurBlck,EDrawStyle eStyle)int b= gz_tBlockStyleTabtCurBlck.m_iStyle.m_izStatustCurBlck.m_iStatID; /取出block中block.dir数组里面的值赋给bint i,x,y; int color;switch(d)/决定方块形状和状态对应的颜色case show: color=blockc.id.color;break; case hide: color=BLACK;break;setfillstyle(color); /决定填充的颜色for(i=0;i16;i+) /控制循环一共十六次if(b&0x8000) /让b和0x8000按位与,用来找出16个小方块中哪一些是1,哪一些是0x=c.x+i%4; /值是1的小方块x轴的坐标y=c.y-i/4; /值是1的小方块y轴的坐标if(yGSCRN_HIGHT_CL)if (d!= hide)bar3d(x*CELL_WIDTH+2,(GSCRN_HIGHT_CL-y -1)*CELL_WIDTH+2,(x+1)*CELL_WIDTH-4,(GSCRN_HIGHT_CL-y)*CELL_WIDTH-4,3,1);elsebar(x*CELL_WIDTH,(GSCRN_HIGHT_CL-y-1)*CELL_WIDTH,(x+1)*CELL_WIDTH-1,(GSCRN_HIGHT_CL-y)*CELL_WIDTH-1);b=1;/检测方块是否可以下落static bool TRS_CheckBlock(void *pUser,blockinfo c)int b=blockc.id.dirc.dir; /取出block中block.dir数组里面的值赋给bint i,x,y;for(i=0;i16;i+) /控制循环一共十六次if(b&0x8000) /让b和0x8000按位与,用来找出16个小方块中哪一些是1,哪一些是0x=c.x+i%4; /值是1的小方块x轴的坐标y=c.y-i/4; /值是1的小方块y轴的坐标/如果小方块超出界限或者与下面相碰if(x=GSCRN_WIDTH_CL)|(y0)return false;if(yGSCRN_HIGHT_CL)&(areaxy)return false;b=1;return true;/旋转方块static void TRS_HRound(void *pUser)blockinfo a=curblock;a.dir+;if(checkblock(a)drawblock(curblock,hide);curblock.dir+;drawblock(curblock,show);elsereturn;/左移方块static void TRS_HLeft(void *pUser)blockinfo a=curblock;a.x-;if(checkblock(a)drawblock(curblock,hide);curblock.x-;drawblock(curblock,show);elsereturn;/右移方块static void TRS_HRight(void *pUser)blockinfo a=curblock;a.x+;if(checkblock(a)drawblock(curblock,hide);curblock.x+;drawblock(curblock,show);elsereturn;/下移方块static void TRS_HDown(void *pUser)blockinfo a=curblock;a.y-;if(checkblock(a)drawblock(curblock,hide);curblock.y-;drawblock(curblock,show);elsehbottom();/ 沉底方块static void TRS_HBottom(void *pUser)/连续下移方块int i,j=0,x,y;drawblock(curblock,hide); /去掉方块blockinfo a=curblock; a.y-; while(checkblock(a)curblock.y-;a.y-;drawblock(curblock,show); /画出方块/ 固定方块在游戏区int b=blockcurblo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国镀膜平板玻璃行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国铝酸锶粉末行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国铝冶炼行业消费规模与未来营销推广模式分析研究报告
- 2025-2030中国铁路电气设备行业供需趋势及投资风险研究报告
- 2025-2030中国钢丝缠绕工具行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国金融管理行业市场深度调研及竞争格局与投资发展潜力研究报告
- 2025-2030中国软木制品行业市场发展现状及发展趋势与投资前景研究报告
- 2025-2030中国车载扫街车行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国西尼罗河病毒感染药物行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国衬氟泵行业市场发展趋势与前景展望战略研究报告
- 驱动桥毕业设计
- 2023机关公文写作与处理PPT模板
- 基坑支护、降水及土方开挖专项施工方案
- 幼儿数字1-100字帖练习
- 细胞生物学-7细胞信号转导课件
- 搅拌站安全培训试卷
- 茶叶市场营销讲义
- 走进中国传统节日 详细版课件
- API SPEC 5DP-2020钻杆规范
- 乙肝两对半ppt课件
- 锅炉空气预热器拆除安装方案
评论
0/150
提交评论