纯c实现的俄罗斯方块(加了一点c++的priority queue)

来源:互联网 发布:pdf编辑软件免费版 编辑:程序博客网 时间:2024/06/04 20:14
#include <stdio.h>#include <windows.h>#include <conio.h>#include <time.h>#include <iostream>#include <queue>#include <cstring>//游戏窗口#define FrameX 4   //游戏窗口左上角的X轴坐标#define FrameY 4   //游戏窗口左上角的Y轴坐标#define Frame_height  40 //游戏窗口的高度#define Frame_width   20 //游戏窗口的宽度using namespace std;//定义全局变量int i,j,temp,temp1,temp2; //temp,temp1,temp2用于记住和转换方块变量的值int a[80][80]= {0};  //标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;int b[4];     //标记4个"口"方块:1表示有方块,0表示无方块//声明俄罗斯方块的结构体struct Tetris{int x;     //中心方块的x轴坐标int y;     //中心方块的y轴坐标int flag;    //标记方块类型的序号int next;    //下一个俄罗斯方块类型的序号int speed;    //俄罗斯方块移动的速度int count;    //产生俄罗斯方块的个数int score;    //游戏的分数int level;    //游戏的等级};struct data{char name[15];int score;data(char *n,int b){strcpy(name,n);score = b;}};struct cmp1{bool operator()(data a,data b){return a.score<b.score;}};//函数原型声明//光标移到指定位置void gotoxy(HANDLE hOut, int x, int y);//制作游戏窗口void make_frame();//随机产生方块类型的序号void get_flag(struct Tetris *);//制作俄罗斯方块void make_tetris(struct Tetris *);//打印俄罗斯方块void print_tetris(HANDLE hOut,struct Tetris *);//清除俄罗斯方块的痕迹void clear_tetris(HANDLE hOut,struct Tetris *);//判断是否能移动,返回值为1,能移动,否则,不动int if_moveable(struct Tetris *);//判断是否满行,并删除满行的俄罗斯方块void del_full(HANDLE hOut,struct Tetris *);//开始游戏void start_game();//开始界面void StartMenu();//结束界面void GameOver(struct Tetris *);//隐藏光标void Hide();//设置窗口大小void SetWindowsSize(int w,int h);//改变文字颜色void SetColor();//传入排名信息&提取排名信息void Ranking(struct Tetris *);//get用户名字void GetName();unsigned char ch;int isLong;char name[15];void StartMenu(){printf("\n\n\n");printf("\t\t╔---------------------------------------------╗\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                  俄罗斯方块                 ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎               按任意键开始游戏              ◎\n");printf("\t\t◎             ********************            ◎\n");printf("\t\t◎           ps:每500分会升级结束奖励         ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t╚---------------------------------------------╝\n");ch = getch();}void GameOver(struct Tetris *tetris){system("cls");printf("\n\n\n");printf("\t\t╔---------------------------------------------╗\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                    恭喜你                   ◎\n");printf("\t\t◎                  Game Over                  ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎             ********************            ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t◎                                             ◎\n");printf("\t\t╚---------------------------------------------╝\n");Sleep(1000);Ranking(tetris);Sleep(1000);if(tetris->score<=500)system("first.jpg");else if(tetris->score<=1000)system("second.jpg");else if(tetris->score<=1500)system("third.jpg");else if(tetris->score<=2000)system("fourth.jpeg");else if(tetris->score<=2500)system("fifth.jpg");else system("sixth.jpg");//ch = getch();}/**************隐藏光标****************/void Hide(){HANDLE hout;hout = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO info = {1,0};SetConsoleCursorInfo(hout,&info);}/*********设置窗口大小***********/void SetWindowsSize(int w,int h){HANDLE hout;/*标准输入输出句柄*/COORD size = {w,h};/*控制窗口大小*/hout = GetStdHandle(STD_OUTPUT_HANDLE);SMALL_RECT rc = {0,0,w-1,h-1};SetConsoleWindowInfo(hout,TRUE,&rc);SetConsoleScreenBufferSize(hout,size);}/**********改变文字颜色*********/void SetColor(){HANDLE hOut;hOut = GetStdHandle(STD_OUTPUT_HANDLE);srand((unsigned)time(NULL));  //初始化随机数int a = rand()%7+1;switch(a){case 1:SetConsoleTextAttribute(hOut,FOREGROUND_RED | FOREGROUND_INTENSITY);break;case 2:SetConsoleTextAttribute(hOut,FOREGROUND_GREEN | FOREGROUND_INTENSITY);break;case 3:SetConsoleTextAttribute(hOut,FOREGROUND_BLUE | FOREGROUND_INTENSITY);break;case 4:SetConsoleTextAttribute(hOut,FOREGROUND_RED | FOREGROUND_GREEN| FOREGROUND_INTENSITY);break;case 5:SetConsoleTextAttribute(hOut,FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);break;case 6:SetConsoleTextAttribute(hOut,FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);break;case 7:SetConsoleTextAttribute(hOut,FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);break;}}/*****排名信息的传入&提取********/void Ranking(struct Tetris *tetris){system("cls");FILE *fp;fp = fopen("Ranking.txt","a+");if(fp == NULL){printf("can not open");}fprintf(fp,"%s %d\n",name,tetris->score);char namet[15];int mid;fp = fopen("Ranking.txt","r");priority_queue<data,vector<data>,cmp1> Q;while(fscanf(fp,"%s %d",namet,&mid)!=EOF){Q.push(data(namet,mid));}int flag = 1;while(!Q.empty()){printf("%d:   %s    %d\n",flag++,Q.top().name,Q.top().score);Q.pop();}}/*******get用户name*********/void GetName(){system("cls");printf("请输入您的姓名:");scanf("%s",name);}int main(){SetWindowsSize(150,60);system("Color 0F");Hide();StartMenu();GetName();//制作游戏窗口make_frame();//开始游戏start_game();return 0;}/******光标移到指定位置**************************************************************/void gotoxy(HANDLE hOut, int x, int y){COORD pos;pos.X = x;  //横坐标pos.Y = y;  //纵坐标SetConsoleCursorPosition(hOut, pos);}/******制作游戏窗口******************************************************************/void make_frame(){HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量system("cls");gotoxy(hOut,FrameX+Frame_width-5,FrameY-2);   //打印游戏名称printf("俄罗斯方块");gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);  //打印选择菜单printf("**********下一个方块:");gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);printf("**********");gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);printf("↑键:变形");gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+21);printf("空格:时空禁锢");gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);printf("Esc :原地爆炸");gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);printf("长按方向键加速");gotoxy(hOut,FrameX,FrameY);       //打印框角并记住该处已有图案printf("╔");gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);printf("╗");gotoxy(hOut,FrameX,FrameY+Frame_height);printf("╚");gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);printf("╝");a[FrameX][FrameY+Frame_height]=2;a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;for(i=2; i<2*Frame_width-2; i+=2){gotoxy(hOut,FrameX+i,FrameY);printf("═");         //打印上横框}for(i=2; i<2*Frame_width-2; i+=2){gotoxy(hOut,FrameX+i,FrameY+Frame_height);printf("═");         //打印下横框a[FrameX+i][FrameY+Frame_height]=2;    //记住下横框有图案}for(i=1; i<Frame_height; i++){gotoxy(hOut,FrameX,FrameY+i);printf("║");         //打印左竖框a[FrameX][FrameY+i]=2;       //记住左竖框有图案}for(i=1; i<Frame_height; i++){gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);printf("║");         //打印右竖框a[FrameX+2*Frame_width-2][FrameY+i]=2;   //记住右竖框有图案}}/******制作俄罗斯方块********************************************************************/void make_tetris(struct Tetris *tetris){a[tetris->x][tetris->y]=b[0];    //中心方块位置的图形状态:1-有,0-无switch(tetris->flag)      //共6大类,19种类型{case 1:         //田字方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x+2][tetris->y-1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}case 2:         //直线方块:----{a[tetris->x-2][tetris->y]=b[1];a[tetris->x+2][tetris->y]=b[2];a[tetris->x+4][tetris->y]=b[3];break;}case 3:         //直线方块: |{a[tetris->x][tetris->y-1]=b[1];a[tetris->x][tetris->y-2]=b[2];a[tetris->x][tetris->y+1]=b[3];break;}case 4:         //T字方块{a[tetris->x-2][tetris->y]=b[1];a[tetris->x+2][tetris->y]=b[2];a[tetris->x][tetris->y+1]=b[3];break;}case 5:         //T字顺时针转90度方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x][tetris->y+1]=b[2];a[tetris->x-2][tetris->y]=b[3];break;}case 6:         //T字顺时针转180度方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x-2][tetris->y]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}case 7:         //T字顺时针转270度方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x][tetris->y+1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}case 8:         //Z字方块{a[tetris->x][tetris->y+1]=b[1];a[tetris->x-2][tetris->y]=b[2];a[tetris->x+2][tetris->y+1]=b[3];break;}case 9:         //Z字顺时针转90度方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x-2][tetris->y]=b[2];a[tetris->x-2][tetris->y+1]=b[3];break;}case 10:        //Z字顺时针转180度方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x-2][tetris->y-1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}case 11:        //Z字顺时针转270度方块{a[tetris->x][tetris->y+1]=b[1];a[tetris->x+2][tetris->y-1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}case 12:        //7字方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x][tetris->y+1]=b[2];a[tetris->x-2][tetris->y-1]=b[3];break;}case 13:        //7字顺时针转90度方块{a[tetris->x-2][tetris->y]=b[1];a[tetris->x-2][tetris->y+1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}case 14:        //7字顺时针转180度方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x][tetris->y+1]=b[2];a[tetris->x+2][tetris->y+1]=b[3];break;}case 15:        //7字顺时针转270度方块{a[tetris->x-2][tetris->y]=b[1];a[tetris->x+2][tetris->y-1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}case 16:        //倒7字方块{a[tetris->x][tetris->y+1]=b[1];a[tetris->x][tetris->y-1]=b[2];a[tetris->x+2][tetris->y-1]=b[3];break;}case 17:        //倒7字顺指针转90度方块{a[tetris->x-2][tetris->y]=b[1];a[tetris->x-2][tetris->y-1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}case 18:        //倒7字顺时针转180度方块{a[tetris->x][tetris->y-1]=b[1];a[tetris->x][tetris->y+1]=b[2];a[tetris->x-2][tetris->y+1]=b[3];break;}case 19:        //倒7字顺时针转270度方块{a[tetris->x-2][tetris->y]=b[1];a[tetris->x+2][tetris->y+1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;}}}//******判断是否可动*************************************************************************/int if_moveable(struct Tetris *tetris){if(a[tetris->x][tetris->y]!=0)//当中心方块位置上有图案时,返回值为0,即不可移动{return 0;}else{if( //当为田字方块且除中心方块位置外,其他"口"字方块位置上无图案时,返回值为1,即可移动    ( tetris->flag==1  && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||    //或为直线方块且除中心方块位置外,其他"口"字方块位置上无图案时,返回值为1,即可移动    ( tetris->flag==2  && ( a[tetris->x-2][tetris->y]==0   &&                            a[tetris->x+2][tetris->y]==0 && a[tetris->x+4][tetris->y]==0 ) )   ||    ( tetris->flag==3  && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x][tetris->y-2]==0 && a[tetris->x][tetris->y+1]==0 ) )   ||    ( tetris->flag==4  && ( a[tetris->x-2][tetris->y]==0   &&                            a[tetris->x+2][tetris->y]==0 && a[tetris->x][tetris->y+1]==0 ) )   ||    ( tetris->flag==5  && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y]==0 ) )   ||    ( tetris->flag==6  && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x-2][tetris->y]==0 && a[tetris->x+2][tetris->y]==0 ) )   ||    ( tetris->flag==7  && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) )   ||    ( tetris->flag==8  && ( a[tetris->x][tetris->y+1]==0   &&                            a[tetris->x-2][tetris->y]==0 && a[tetris->x+2][tetris->y+1]==0 ) ) ||    ( tetris->flag==9  && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x-2][tetris->y]==0 && a[tetris->x-2][tetris->y+1]==0 ) ) ||    ( tetris->flag==10 && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x-2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||    ( tetris->flag==11 && ( a[tetris->x][tetris->y+1]==0   &&                            a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||    ( tetris->flag==12 && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y-1]==0 ) ) ||    ( tetris->flag==13 && ( a[tetris->x-2][tetris->y]==0   &&                            a[tetris->x-2][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||    ( tetris->flag==14 && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x][tetris->y+1]==0 && a[tetris->x+2][tetris->y+1]==0 ) ) ||    ( tetris->flag==15 && ( a[tetris->x-2][tetris->y]==0   &&                            a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||    ( tetris->flag==16 && ( a[tetris->x][tetris->y+1]==0   &&                            a[tetris->x][tetris->y-1]==0 && a[tetris->x+2][tetris->y-1]==0 ) ) ||    ( tetris->flag==17 && ( a[tetris->x-2][tetris->y]==0   &&                            a[tetris->x-2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||    ( tetris->flag==18 && ( a[tetris->x][tetris->y-1]==0   &&                            a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y+1]==0 ) ) ||    ( tetris->flag==19 && ( a[tetris->x-2][tetris->y]==0   &&                            a[tetris->x+2][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ){return 1;}}return 0;}/******随机产生俄罗斯方块类型的序号**********************************************************/void get_flag(struct Tetris *tetris){tetris->count++;     //记住产生方块的个数srand((unsigned)time(NULL));  //初始化随机数if(tetris->count==1){tetris->flag = rand()%19+1;  //记住第一个方块的序号}tetris->next = rand()%19+1;   //记住下一个方块的序号}/******打印俄罗斯方块**********************************************************************/void print_tetris(HANDLE hOut,struct Tetris *tetris){SetColor();for(i=0; i<4; i++){b[i]=1;         //数组b[4]的每个元素的值都为1}make_tetris(tetris);      //制作俄罗斯方块for( i=tetris->x-2; i<=tetris->x+4; i+=2 ){for(j=tetris->y-2; j<=tetris->y+1; j++){if( a[i][j]==1 && j>FrameY ){gotoxy(hOut,i,j);printf("□");     //打印边框内的方块}}}//打印菜单信息gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+1);printf("level : %d",tetris->level);gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+3);printf("score : %d",tetris->score);gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+5);printf("speed : %dms",tetris->speed);}/******清除俄罗斯方块的痕迹****************************************************************/void clear_tetris(HANDLE hOut,struct Tetris *tetris){for(i=0; i<4; i++){b[i]=0;         //数组b[4]的每个元素的值都为0}make_tetris(tetris);      //制作俄罗斯方块for( i=tetris->x-2; i<=tetris->x+4; i+=2 ){for(j=tetris->y-2; j<=tetris->y+1; j++){if( a[i][j]==0 && j>FrameY ){gotoxy(hOut,i,j);printf("  ");     //清除方块}}}}/******判断是否满行并删除满行的俄罗斯方块****************************************************/void del_full(HANDLE hOut,struct Tetris *tetris){//当某行有Frame_width-2个方块时,则满行int k,del_count=0;  //分别用于记录某行方块的个数和删除方块的行数的变量for(j=FrameY+Frame_height-1; j>=FrameY+1; j--){k=0;for(i=FrameX+2; i<FrameX+2*Frame_width-2; i+=2){if(a[i][j]==1) //竖坐标依次从下往上,横坐标依次由左至右判断是否满行{k++;  //记录此行方块的个数if(k==Frame_width-2){for(k=FrameX+2; k<FrameX+2*Frame_width-2; k+=2){//删除满行的方块a[k][j]=0;gotoxy(hOut,k,j);printf("  ");Sleep(1);}for(k=j-1; k>FrameY; k--){//如果删除行以上的位置有方块,则先清除,再将方块下移一个位置for(i=FrameX+2; i<FrameX+2*Frame_width-2; i+=2){if(a[i][k]==1){a[i][k]=0;gotoxy(hOut,i,k);printf("  ");a[i][k+1]=1;gotoxy(hOut,i,k+1);printf("□");}}}j++;   //方块下移后,重新判断删除行是否满行del_count++; //记录删除方块的行数}}}}tetris->score+=100*del_count; //每删除一行,得100分if( del_count>0 && ( tetris->score%1000==0 || tetris->score/1000>tetris->level-1 ) ){//如果得1000分即累计删除10行,速度加快20ms并升一级tetris->speed-=20;tetris->level++;}}/******开始游戏******************************************************************************/void start_game(){HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量struct Tetris t,*tetris=&t;       //定义结构体的指针并指向结构体变量//unsigned char ch;         //定义接收键盘输入的变量tetris->count=0;      //初始化俄罗斯方块数为0个tetris->speed=600;      //初始移动速度tetris->score=0;      //初始游戏的分数为0分tetris->level=1;      //初始游戏为第1关while(1){//循环产生方块,直至游戏结束get_flag(tetris);     //得到产生俄罗斯方块类型的序号temp=tetris->flag;     //记住当前俄罗斯方块序号//打印下一个俄罗斯方块的图形(右边窗口)tetris->x=FrameX+2*Frame_width+6;tetris->y=FrameY+10;tetris->flag = tetris->next;print_tetris(hOut,tetris);tetris->x=FrameX+Frame_width;  //初始中心方块x坐标tetris->y=FrameY-1;     //初始中心方块y坐标tetris->flag=temp;     //取出当前的俄罗斯方块序号while(1){//控制方块方向,直至方块不再下移label:print_tetris(hOut,tetris);//打印俄罗斯方块if(isLong == 0)Sleep(tetris->speed);   //延缓时间else Sleep(10);clear_tetris(hOut,tetris);  //清除痕迹temp1=tetris->x;    //记住中心方块横坐标的值temp2=tetris->flag;    //记住当前俄罗斯方块序号if(kbhit()){isLong = 0;//判断是否有键盘输入,有则用ch↓接收ch=getch();if(kbhit()){Sleep(10);isLong = 1;}if(ch == 27){GameOver(tetris);return;}if(ch == 80){tetris->y++;if(if_moveable(tetris)==0)tetris->y--;}if(ch==75)     //按←键则向左动,中心横坐标减2{tetris->x-=2;}if(ch==77)     //按→键则向右动,中心横坐标加2{tetris->x+=2;}if(ch==72)     //按↑键则变体即当前方块顺时针转90度{if( tetris->flag>=2 && tetris->flag<=3 ){tetris->flag++;tetris->flag%=2;tetris->flag+=2;}if( tetris->flag>=4 && tetris->flag<=7 ){tetris->flag++;tetris->flag%=4;tetris->flag+=4;}if( tetris->flag>=8 && tetris->flag<=11 ){tetris->flag++;tetris->flag%=4;tetris->flag+=8;}if( tetris->flag>=12 && tetris->flag<=15 ){tetris->flag++;tetris->flag%=4;tetris->flag+=12;}if( tetris->flag>=16 && tetris->flag<=19 ){tetris->flag++;tetris->flag%=4;tetris->flag+=16;}}if(ch==32)     //按空格键,暂停{print_tetris(hOut,tetris);while(1){if(kbhit())   //再按空格键,继续游戏{ch=getch();if(ch==32){goto label;}}}}if(if_moveable(tetris)==0) //如果不可动,上面操作无效{tetris->x=temp1;tetris->flag=temp2;}else      //如果可动,执行操作{print_tetris(hOut,tetris);goto label;}}tetris->y++;     //如果没有操作指令,方块向下移动if(if_moveable(tetris)==0)  //如果向下移动且不可动,方块放在此处{tetris->y--;print_tetris(hOut,tetris);del_full(hOut,tetris);break;}}for(i=tetris->y-2; i<tetris->y+2; i++){//游戏结束条件:方块触到框顶位置if(i==FrameY){j=0;      //如果游戏结束,j=0}}if(j==0){GameOver(tetris);break;}//清除下一个俄罗斯方块的图形(右边窗口)tetris->flag = tetris->next;tetris->x=FrameX+2*Frame_width+6;tetris->y=FrameY+10;clear_tetris(hOut,tetris);}}

阅读全文
0 0
原创粉丝点击