C语言C程序员编程新手入门基础系列俄

这篇文章主要为大家详细介绍了C语言实现俄罗斯方块小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1.要先下载一个graphics.h的头文件来绘图。2.初始化窗口:initgraph(x,y);这是先创建一个窗口的函数,以左上角为(0,0),向右为x轴,向下为y轴,其中x表示长x个单位,y表示宽y个单位。3.关闭图像窗口:closegraph();结束时用来关闭用的。4.按任意键继续:getch();这个就和getchar();差不多,为了防止以运行完就关了,这样能停顿一下,他的头文件是:conio.h。5.画线:line(x1,y1,x2,y2);在你创建的那么窗口里以(x1,y1)和(x2,y2)为两个端点画线。6.画矩形:rectangle(x1,y1,x2,y2);以(x1,y1)和(x2,y2)为对角画一个矩形。7.画圆:circle(x,y,r);以(x,y)为圆点,r为半径画圆。8.颜色:setcolor(x);用来设置颜色的,其中x是你要设置的颜色,可以填这16种:黑BLACK、蓝BLUE、绿GREEN、青CYAN、红RED、紫MAGENTA、棕BROWN、浅灰LIGHTGRAY、深灰DARKGRAY、亮蓝LIGHTBLUE、亮绿LIGHTGREEN、亮青LIGHTCYAN、亮红LIGHTRED、亮紫LIGHTMAGENTA、黄YELLOW、白WHITE;当然,你也可以根据光的三原色来调自己喜欢的颜色,方法是:setcolor(RGB(x,y,z));其中RGB分别代表红绿蓝,对应的x,y,z是你选的该颜色的多少,范围是[0,]。

#includestdio.h#includewindows.h#includeconio.h#includetime.h//游戏窗口#defineFrameX4//游戏窗口左上角的X轴坐标#defineFrameY4//游戏窗口左上角的Y轴坐标#defineFrame_height20//游戏窗口的高度#defineFrame_width18//游戏窗口的宽度//定义全局变量inti,j,temp,temp1,temp2;//temp,temp1,temp2用于记住和转换方块变量的值inta[80][80]={0};//标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案intb[4];//标记4个"口"方块:1表示有方块,0表示无方块//声明俄罗斯方块的结构体structTetris{intx;//中心方块的x轴坐标inty;//中心方块的y轴坐标intflag;//标记方块类型的序号intnext;//下一个俄罗斯方块类型的序号intspeed;//俄罗斯方块移动的速度intcount;//产生俄罗斯方块的个数intscore;//游戏的分数intlevel;//游戏的等级};//函数原型声明//光标移到指定位置voidgotoxy(HANDLEhOut,intx,inty);//制作游戏窗口voidmake_frame();//随机产生方块类型的序号voidget_flag(structTetris*);//制作俄罗斯方块voidmake_tetris(structTetris*);//打印俄罗斯方块voidprint_tetris(HANDLEhOut,structTetris*);//清除俄罗斯方块的痕迹voidclear_tetris(HANDLEhOut,structTetris*);//判断是否能移动,返回值为1,能移动,否则,不动intif_moveable(structTetris*);//判断是否满行,并删除满行的俄罗斯方块voiddel_full(HANDLEhOut,structTetris*);//开始游戏voidstart_game();voidmain(){//制作游戏窗口make_frame();//开始游戏start_game();}/******光标移到指定位置**************************************************************/voidgotoxy(HANDLEhOut,intx,inty){COORDpos;pos.X=x;//横坐标pos.Y=y;//纵坐标SetConsoleCursorPosition(hOut,pos);}/******制作游戏窗口******************************************************************/voidmake_frame(){HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);//定义显示器句柄变量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+19);printf("空格:暂停游戏");gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);printf("Esc:退出游戏");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;i2*Frame_width-2;i+=2){gotoxy(hOut,FrameX+i,FrameY);printf("═");//打印上横框}for(i=2;i2*Frame_width-2;i+=2){gotoxy(hOut,FrameX+i,FrameY+Frame_height);printf("═");//打印下横框a[FrameX+i][FrameY+Frame_height]=2;//记住下横框有图案}for(i=1;iFrame_height;i++){gotoxy(hOut,FrameX,FrameY+i);printf("║");//打印左竖框a[FrameX][FrameY+i]=2;//记住左竖框有图案}for(i=1;iFrame_height;i++){gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);printf("║");//打印右竖框a[FrameX+2*Frame_width-2][FrameY+i]=2;//记住右竖框有图案}}/******制作俄罗斯方块********************************************************************/voidmake_tetris(structTetris*tetris){a[tetris-x][tetris-y]=b[0];//中心方块位置的图形状态:1-有,0-无switch(tetris-flag)//共6大类,19种类型{case1://田字方块{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;}case2://直线方块:----{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;}case3://直线方块:

{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;}case4://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;}case5://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;}case6://T字顺时针转度方块{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;}case7://T字顺时针转度方块{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;}case8://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;}case9://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;}case10://Z字顺时针转度方块{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;}case11://Z字顺时针转度方块{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;}case12://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;}case13://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;}case14://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;}case15://7字顺时针转度方块{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;}case16://倒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;}case17://倒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;}case18://倒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;}case19://倒7字顺时针转度方块{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;}}}//******判断是否可动*************************************************************************/intif_moveable(structTetris*tetris){if(a[tetris-x][tetris-y]!=0)//当中心方块位置上有图案时,返回值为0,即不可移动{return0;}else{if(//当为田字方块且除中心方块位置外,其他"口"字方块位置上无图案时,返回值为1,即可移动(tetris-flag==1(a[tetris-x][tetris-y-1]==0a[tetris-x+2][tetris-y-1]==0a[tetris-x+2][tetris-y]==0))

//或为直线方块且除中心方块位置外,其他"口"字方块位置上无图案时,返回值为1,即可移动(tetris-flag==2(a[tetris-x-2][tetris-y]==0a[tetris-x+2][tetris-y]==0a[tetris-x+4][tetris-y]==0))

(tetris-flag==3(a[tetris-x][tetris-y-1]==0a[tetris-x][tetris-y-2]==0a[tetris-x][tetris-y+1]==0))

(tetris-flag==4(a[tetris-x-2][tetris-y]==0a[tetris-x+2][tetris-y]==0a[tetris-x][tetris-y+1]==0))

(tetris-flag==5(a[tetris-x][tetris-y-1]==0a[tetris-x][tetris-y+1]==0a[tetris-x-2][tetris-y]==0))

(tetris-flag==6(a[tetris-x][tetris-y-1]==0a[tetris-x-2][tetris-y]==0a[tetris-x+2][tetris-y]==0))

(tetris-flag==7(a[tetris-x][tetris-y-1]==0a[tetris-x][tetris-y+1]==0a[tetris-x+2][tetris-y]==0))

(tetris-flag==8(a[tetris-x][tetris-y+1]==0a[tetris-x-2][tetris-y]==0a[tetris-x+2][tetris-y+1]==0))

(tetris-flag==9(a[tetris-x][tetris-y-1]==0a[tetris-x-2][tetris-y]==0a[tetris-x-2][tetris-y+1]==0))

(tetris-flag==10(a[tetris-x][tetris-y-1]==0a[tetris-x-2][tetris-y-1]==0a[tetris-x+2][tetris-y]==0))

(tetris-flag==11(a[tetris-x][tetris-y+1]==0a[tetris-x+2][tetris-y-1]==0a[tetris-x+2][tetris-y]==0))

(tetris-flag==12(a[tetris-x][tetris-y-1]==0a[tetris-x][tetris-y+1]==0a[tetris-x-2][tetris-y-1]==0))

(tetris-flag==13(a[tetris-x-2][tetris-y]==0a[tetris-x-2][tetris-y+1]==0a[tetris-x+2][tetris-y]==0))

(tetris-flag==14(a[tetris-x][tetris-y-1]==0a[tetris-x][tetris-y+1]==0a[tetris-x+2][tetris-y+1]==0))

(tetris-flag==15(a[tetris-x-2][tetris-y]==0a[tetris-x+2][tetris-y-1]==0a[tetris-x+2][tetris-y]==0))

(tetris-flag==16(a[tetris-x][tetris-y+1]==0a[tetris-x][tetris-y-1]==0a[tetris-x+2][tetris-y-1]==0))

(tetris-flag==17(a[tetris-x-2][tetris-y]==0a[tetris-x-2][tetris-y-1]==0a[tetris-x+2][tetris-y]==0))

(tetris-flag==18(a[tetris-x][tetris-y-1]==0a[tetris-x][tetris-y+1]==0a[tetris-x-2][tetris-y+1]==0))

(tetris-flag==19(a[tetris-x-2][tetris-y]==0a[tetris-x+2][tetris-y+1]==0a[tetris-x+2][tetris-y]==0))){return1;}}return0;}/******随机产生俄罗斯方块类型的序号**********************************************************/voidget_flag(structTetris*tetris){tetris-count++;//记住产生方块的个数srand((unsigned)time(NULL));//初始化随机数if(tetris-count==1){tetris-flag=rand()%19+1;//记住第一个方块的序号}tetris-next=rand()%19+1;//记住下一个方块的序号}/******打印俄罗斯方块**********************************************************************/voidprint_tetris(HANDLEhOut,structTetris*tetris){for(i=0;i4;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]==1jFrameY){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);}预览时标签不可点收录于合集#个上一篇下一篇

转载请注明:http://www.aierlanlan.com/tzrz/378.html