//包含头文件#include<stdio.h>#include<Windows.h>#include<conio.h>#include<graphics.h>#include<time.h>#include "Tetris.h"//int score=0;//int lever=1;//char scores[10];//char levers[10];/*enum cmd{round, //旋转方块left, //左移方块right, //右移方块down, //下一方块bottom, //方块沉底quit //离开游戏};//定义绘制方块的状态的枚举类型enum draw{show, //显示方块hide //抹掉方块};//定义俄罗斯方块的结构体struct block{int dir[4]; //方块的四个旋转的状态int color; //方块的颜色}*/static T_TrsBlockStyle gz_tBlockStyleTab[7] ={/* 口口口口口口口口口口口口口口口口*/{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 blockinfo{int id; //7中方块中的哪一种byte dir:2; //1种方块中四个方向中的哪个char x,y; //方块的坐标(不是屏幕中的而是自己设置的游戏区域中的)}curblock,nextblock;*/// 定义游戏区//unsigned char area[width][high] = {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 <GSCRN_HIGHT_CL;jLoop++){pMe->m_uiArea[iLoop][jLoop]=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("游戏结束。