首页 > 前端 > 问答 > 俄罗斯方块代码C语言,C语言写了一个俄罗斯方块

俄罗斯方块代码C语言,C语言写了一个俄罗斯方块

来源:整理 时间:2024-05-19 19:11:54 编辑:黑码技术 手机版

本文目录一览

1,C语言写了一个俄罗斯方块

I/O本来就是开销很大的操作 ,你这样反复的清屏重写肯定很卡的,文本界面做游戏没什么好的解决办法,用图形界面可以就可以借助一些技术手段来优化卡顿了

C语言写了一个俄罗斯方块

2,c语言编写俄罗斯方块

俄罗斯方块C源代码#include <stdio.h>#include <windows.h>#include <conio.h>#include <time.h>#define ZL 4 //坐标增量, 不使游戏窗口靠边#define WID 36 //游戏窗口的宽度#define HEI 20 //游戏窗口的高度int i,j,Ta,Tb,Tc; // Ta,Tb,Tc用于记住和转换方块变量的值int a[60][60]=int b[4]; //标记4个"口"方块:1有,0无,类似开关int x,y, level,score,speed; //方块中心位置的x,y坐标,游戏等级、得分和游戏速度int flag,next; //当前要操作的方块类型序号,下一个方块类型序号void gtxy(int m, int n); //以下声明要用到的自编函数void gflag( ); //获得下一方块序号void csh( ); //初始化界面void start( ); //开始部分void prfk ( ); //打印方块void clfk( ); //清除方块void mkfk( ); //制作方块void keyD( ); //按键操作int ifmov( ); //判断方块能否移动或变体void clHA( ); //清除满行的方块void clNEXT( ); //清除边框外的NEXT方块int main( ) while(1) //开始部分 while(1) Sleep(speed); //延时 clfk( ); Tb=x;Tc=flag; //临存当前x坐标和序号,以备撤销操作 keyD( ); y++; //方块向下移动 if (ifmov( )==0) //不可动放下,删行,跨出循环 } for(i=y-2;i<y+2;i++)//方块触到框顶 if (j==0) 游戏结束!"); getch(); break; } clNEXT( ); //清除框外的NEXT方块 } return 0;}void gtxy(int m, int n) //控制光标移动 pos.X = m; //横坐标 pos.Y = n; //纵坐标 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }void csh( ) //初始化界面 gtxy(ZL+WID+3,ZL+7); printf("******* NEXT:"); //打印菜单信息 gtxy(ZL+WID+3,ZL+13); printf("**********"); gtxy(ZL+WID+3,ZL+15); printf("Esc :退出游戏");gtxy(ZL+WID+3,ZL+17); printf("↑键:变体"); gtxy(ZL+WID+3,ZL+19); printf("空格:暂停游戏"); gtxy(ZL,ZL); printf("╔"); gtxy(ZL+WID-2,ZL); printf("╗"); //打印框角 gtxy(ZL,ZL+HEI); printf("╚"); gtxy(ZL+WID-2,ZL+HEI); printf("╝");a[ZL][ZL+HEI]=2; a[ZL+WID-2][ZL+HEI]=2; //记住有图案 for(i=2;i<WID-2;i+=2) for(i=2;i<WID-2;i+=2) for(i=1;i<HEI;i++) for(i=1;i<HEI;i++) CONSOLE_CURSOR_INFO cursor_info= SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); level=1; score=0; speed=400; gflag( ); flag=next; //获得一个当前方块序号}void gflag( ) //获得下一个方块的序号void start( ) //开始部分 x=ZL+WID+6; y=ZL+10; prfk( ); //给x,y赋值,在框外打印出下一方块 flag=Ta; x=ZL+WID/2; y=ZL-1; //取回当前方块序号,并给x,y赋值}void prfk ( ) //打印俄罗斯方块 mkfk ( ); //制作俄罗斯方块 for( i= x-2; i<=x+4; i+=2 ) //打印方块 gtxy(ZL+WID+3,ZL+1); printf("level : %d",level); //以下打印菜单信息 gtxy(ZL+WID+3,ZL+3); printf("score : %d",score); gtxy(ZL+WID+3,ZL+5); printf("speed : %d",speed);}void clfk( ) //清除俄罗斯方块 mkfk ( ); //制作俄罗斯方块 for( i=x-2; i<=x+4; i+=2 ) //清除方块 }void mkfk( ) //制作俄罗斯方块 switch(flag) //共6大类,19种小类型 case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: }}void keyD( ) //按键操作 key=getch(); if (key==224) if (key==75) if (key==77) if (key==72) //按下向上方向键,方块变体 if ( flag>=4 && flag<=7 ) if (flag>=8 && flag<=11 ) if (flag>=12 && flag<=15 ) if ( flag>=16 && flag<=19 ) } if (key==32) //按空格键,暂停 if (ifmov( )==0) else }}int ifmov( ) //判断能否移动 else (flag==2 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x+4][y]==0 ) ) || (flag==3 && ( a[x][y-1]==0 && a[x][y-2]==0 && a[x][y+1]==0 ) ) || (flag==4 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x][y+1]==0 ) ) || (flag==5 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y]==0 ) ) || (flag==6 && ( a[x][ y-1]==0 && a[x-2][y]==0 && a[x+2][y]==0 ) ) || (flag==7 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y]==0 ) ) || (flag==8 && ( a[x][y+1]==0 && a[x-2][y]==0 && a[x+2][y+1]==0 ) ) || (flag==9 && ( a[x][y-1]==0 && a[x-2][y]==0 && a[x-2][y+1]==0 ) ) || (flag==10 && ( a[x][y-1]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) || (flag==11 && ( a[x][y+1]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) || (flag==12 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y-1]==0 ) ) || ( flag==13 && ( a[x-2][y]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) || ( flag==14 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y+1]==0 ) ) || (flag==15 && ( a[x-2][y]==0 && a[x-2][y+1]==0 && a[x+2][y]==0 ) ) || (flag==16 && ( a[x][y+1]==0 && a[x][y-1]==0 && a[x+2][y-1]==0 ) ) || ( flag==17 && ( a[x-2][y]==0 && a[x+2][y+1]==0 && a[x+2][y]==0 ) ) || (flag==18 && ( a[x][y-1]==0 &&a[x][y+1]==0 && a[x-2][y+1]==0 ) ) || (flag==19 && ( a[x-2][y]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) ) } return 0; //其它情况返回0}void clNEXT( ) //清除框外的NEXT方块void clHA( ) //清除满行的方块 for(j=ZL+HEI-1;j>=ZL+1;j--) //当某行有WID/2-2个方块时,则为满行 if (k==WID/2-2) for(k=j-1;k>ZL;k--) gtxy(i,k+1); printf("□"); } } } j++; //方块下移后,重新判断删除行是否满行 Hang++; //记录删除方块的行数 } } } } score+=100*Hang; //每删除一行,得100分 if ( Hang>0 && (score%500==0 || score/500> level-1 ) ) //得分满500速度加快升一级 }

c语言编写俄罗斯方块

3,C语言俄罗斯方块等

VC6有windows.h头文件1234567 #include <stdio.h>#include <windows.h>intmain(void) Sleep(50); return0;} 这个程序如果没有#include <windows.h>编译不通过,说明VC6中有这头文件。我感觉你同学吹牛的可能性很大,自己随便在网上复制了代码过来就说是自己写的不过他要是能写出C语言的俄罗斯方块游戏,那可很厉害了

C语言俄罗斯方块等

4,怎样用c语言编写俄罗斯方块程序

俄罗斯方块C源代码#include <stdio.h>#include <windows.h>#include <conio.h>#include <time.h>#define ZL 4 //坐标增量, 不使游戏窗口靠边#define WID 36 //游戏窗口的宽度#define HEI 20 //游戏窗口的高度int i,j,Ta,Tb,Tc; // Ta,Tb,Tc用于记住和转换方块变量的值int a[60][60]=int b[4]; //标记4个"口"方块:1有,0无,类似开关int x,y, level,score,speed; //方块中心位置的x,y坐标,游戏等级、得分和游戏速度int flag,next; //当前要操作的方块类型序号,下一个方块类型序号void gtxy(int m, int n); //以下声明要用到的自编函数void gflag( ); //获得下一方块序号void csh( ); //初始化界面void start( ); //开始部分void prfk ( ); //打印方块void clfk( ); //清除方块void mkfk( ); //制作方块void keyD( ); //按键操作int ifmov( ); //判断方块能否移动或变体void clHA( ); //清除满行的方块void clNEXT( ); //清除边框外的NEXT方块int main( ) while(1) //开始部分 while(1) Sleep(speed); //延时 clfk( ); Tb=x;Tc=flag; //临存当前x坐标和序号,以备撤销操作 keyD( ); y++; //方块向下移动 if (ifmov( )==0) //不可动放下,删行,跨出循环 } for(i=y-2;i<y+2;i++)//方块触到框顶 if (j==0) 游戏结束!"); getch(); break; } clNEXT( ); //清除框外的NEXT方块 } return 0;}void gtxy(int m, int n) //控制光标移动 pos.X = m; //横坐标 pos.Y = n; //纵坐标 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }void csh( ) //初始化界面 gtxy(ZL+WID+3,ZL+7); printf("******* NEXT:"); //打印菜单信息 gtxy(ZL+WID+3,ZL+13); printf("**********"); gtxy(ZL+WID+3,ZL+15); printf("Esc :退出游戏");gtxy(ZL+WID+3,ZL+17); printf("↑键:变体"); gtxy(ZL+WID+3,ZL+19); printf("空格:暂停游戏"); gtxy(ZL,ZL); printf("╔"); gtxy(ZL+WID-2,ZL); printf("╗"); //打印框角 gtxy(ZL,ZL+HEI); printf("╚"); gtxy(ZL+WID-2,ZL+HEI); printf("╝");a[ZL][ZL+HEI]=2; a[ZL+WID-2][ZL+HEI]=2; //记住有图案 for(i=2;i<WID-2;i+=2) for(i=2;i<WID-2;i+=2) for(i=1;i<HEI;i++) for(i=1;i<HEI;i++) CONSOLE_CURSOR_INFO cursor_info= SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); level=1; score=0; speed=400; gflag( ); flag=next; //获得一个当前方块序号}void gflag( ) //获得下一个方块的序号void start( ) //开始部分 x=ZL+WID+6; y=ZL+10; prfk( ); //给x,y赋值,在框外打印出下一方块 flag=Ta; x=ZL+WID/2; y=ZL-1; //取回当前方块序号,并给x,y赋值}void prfk ( ) //打印俄罗斯方块 mkfk ( ); //制作俄罗斯方块 for( i= x-2; i<=x+4; i+=2 ) //打印方块 gtxy(ZL+WID+3,ZL+1); printf("level : %d",level); //以下打印菜单信息 gtxy(ZL+WID+3,ZL+3); printf("score : %d",score); gtxy(ZL+WID+3,ZL+5); printf("speed : %d",speed);}void clfk( ) //清除俄罗斯方块 mkfk ( ); //制作俄罗斯方块 for( i=x-2; i<=x+4; i+=2 ) //清除方块 }void mkfk( ) //制作俄罗斯方块 switch(flag) //共6大类,19种小类型 case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: }}void keyD( ) //按键操作 key=getch(); if (key==224) if (key==75) if (key==77) if (key==72) //按下向上方向键,方块变体 if ( flag>=4 && flag<=7 ) if (flag>=8 && flag<=11 ) if (flag>=12 && flag<=15 ) if ( flag>=16 && flag<=19 ) } if (key==32) //按空格键,暂停 if (ifmov( )==0) else }}int ifmov( ) //判断能否移动 else (flag==2 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x+4][y]==0 ) ) || (flag==3 && ( a[x][y-1]==0 && a[x][y-2]==0 && a[x][y+1]==0 ) ) || (flag==4 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x][y+1]==0 ) ) || (flag==5 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y]==0 ) ) || (flag==6 && ( a[x][ y-1]==0 && a[x-2][y]==0 && a[x+2][y]==0 ) ) || (flag==7 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y]==0 ) ) || (flag==8 && ( a[x][y+1]==0 && a[x-2][y]==0 && a[x+2][y+1]==0 ) ) || (flag==9 && ( a[x][y-1]==0 && a[x-2][y]==0 && a[x-2][y+1]==0 ) ) || (flag==10 && ( a[x][y-1]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) || (flag==11 && ( a[x][y+1]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) || (flag==12 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y-1]==0 ) ) || ( flag==13 && ( a[x-2][y]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) || ( flag==14 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y+1]==0 ) ) || (flag==15 && ( a[x-2][y]==0 && a[x-2][y+1]==0 && a[x+2][y]==0 ) ) || (flag==16 && ( a[x][y+1]==0 && a[x][y-1]==0 && a[x+2][y-1]==0 ) ) || ( flag==17 && ( a[x-2][y]==0 && a[x+2][y+1]==0 && a[x+2][y]==0 ) ) || (flag==18 && ( a[x][y-1]==0 &&a[x][y+1]==0 && a[x-2][y+1]==0 ) ) || (flag==19 && ( a[x-2][y]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) ) } return 0; //其它情况返回0}void clNEXT( ) //清除框外的NEXT方块void clHA( ) //清除满行的方块 for(j=ZL+HEI-1;j>=ZL+1;j--) //当某行有WID/2-2个方块时,则为满行 if (k==WID/2-2) for(k=j-1;k>ZL;k--) gtxy(i,k+1); printf("□"); } } } j++; //方块下移后,重新判断删除行是否满行 Hang++; //记录删除方块的行数 } } } } score+=100*Hang; //每删除一行,得100分 if ( Hang>0 && (score%500==0 || score/500> level-1 ) ) //得分满500速度加快升一级 }

5,用C语言编写俄罗斯方块怎样产生七种基本方块图形和19种变换图

用3维数组来存放七种基本方块图形:例如:int BOX[7][4][4]=},},},},},},} };为了方便读取,减少程序中算法上的开销(比如进行4*4矩阵的转置),我建议你将19种变换图形也用3维数组来存放,例如:||型:},|_型:},
自己想把,有点难度的哦.关键是数据结构要设计好
vc6有windows.h头文件1234567 #include #include intmain(void) sleep(50); return0;} 这个程序如果没有#include 编译不通过,说明vc6中有这头文件。我感觉你同学吹牛的可能性很大,自己随便在网上复制了代码过来就说是自己写的不过他要是能写出c语言的俄罗斯方块游戏,那可很厉害了

6,C语言中的俄罗斯方块

我给你,我有源代码,可以运行/*************************<Russia Diamonds Ver 1.0>Copyright by forever_changforever_chang@china.com2001.11.1*************************//*****************************************************************************************/#include "graphics.h" /*头文件*/#include "time.h"#include "stdlib.h"#include "bios.h"#include "dos.h"#include "stdio.h"#define ESC 0x11b /*键盘扫描码*/#define UP 0x4800#define DOWN 0x5000#define LEFT 0x4b00#define F1 0x3b00#define RIGHT 0x4d00#define YES 0x1579#define NO 0x316e#define RESTART 0x1372/*****************************************************************************************/struct diamond /*记录每种方块每种状态的信息*/int x[4];int y[4];int start_x;int start_y;int color;struct diamond *next;};int grid[12][23]; /*记录所有格子的状态 (0)没有方块 (1)有固定方块 (2)有活动方块*/int x; /*活动方块所在位置*/int y;int level; /*游戏难度*/int count; /*计数器*/int score;/*得分*/struct diamond *nowinfo; /*当前活动方块*/struct diamond *nextinfo; /*下一个方块*/int color;/*画格子的颜色*/int backcolor;/*游戏区域背景色*//*****************************************************************************************/void show_interface (int mode);/*显示游戏界面*/void show_copsign (int topx,int topy,int size,int color);/*显示公司标志--恒基伟业*/void show_intro (int xs,int ys);/*显示软件介绍区*//*void print(); 测试用函数*/void scandel();/*扫描所有格子看是否有可消除行*/void show_down ();/*方块下落后的下一个状态*/void show_next ();/*方块翻转后的下一个状态*/void show_left ();/*方块向左移动后的下一个状态*/void show_right ();/*方块向右移动后的下一个状态*/void interrupt (*oldtimer)();/*指向未安装前的中断向量,即函数指针,指向一段可执行的代码*/void install();/*安装新的中断向量,即将中断服务程序安装到中断向量表中*/void interrupt newtimer();/*中断服务程序*/struct diamond *get_diamond();/*随机得到一个方块*/struct diamond *create_I();/*函数用来构造各种类形方块的环形链表*/struct diamond *create_T();/*返回链表中随机一个状态的指针*/struct diamond *create_L();struct diamond *create_J();struct diamond *create_Z();struct diamond *create_N();struct diamond *create_H();void delinfo (struct diamond *info);/*释放当前方块所占用的空间*/void addtobuffer(int c);/*向键盘缓冲区中增加一个DOWN*//*void clrkey();调用dos中断清空键盘缓冲区,未使用此方法.*/void showsubwin(struct diamond *next);/*在小窗口显示下一个方块*/void showscore(int scoreget);/*显示分数*/void startset();/*初始化游戏*//*****************************************************************************************/main ()int driver=VGA;int mode=VGAHI;int i;/*计数器*/int j;int key;/*记录键盘扫描码*/initgraph (&driver,&mode,"");/*初始化*/color=8;backcolor=7;level=1;score=298;count=0;show_interface (9);/*显示界面*/setfillstyle(SOLID_FILL,1);bar(0,465,640,480);outtextxy(5,469,"Press any key to start...");getch();setfillstyle(SOLID_FILL,9);bar(0,465,640,480);showscore(0);/*显示分数*/randomize();nowinfo=get_diamond ();/*得到一个当前方块*/oldtimer=getvect(0x1c);install(newtimer);for(i=0;i<=21;i++)/*初始化grid[12][23]*/for(j=1;j<=10;j++)grid[j][i]=0;}for(i=0;i<=22;i++)grid[0][i]=1;grid[11][i]=1;}for(i=0;i<=11;i++)grid[i][22]=1;} x=nowinfo->start_x;/*初始化方块位置*/y=nowinfo->start_y;nextinfo=get_diamond ();/*得到下一个方块*/showsubwin(nextinfo); for (;key=bioskey(0);/*得到键盘扫描码*/if (key)switch(key)case DOWN:show_down ();break;}case UP:show_next ();break;}case LEFT:show_left();break;}case RIGHT:show_right();break;}case RESTART:install(oldtimer);setfillstyle(SOLID_FILL,1);bar(0,465,640,480);outtextxy(5,469,"Are you sure to restart (Y/N)...");for (;key=bioskey(0);/*得到键盘扫描码*/if (key==YES)startset();setfillstyle(SOLID_FILL,9);bar(0,465,640,480);break;}if (key==NO)setfillstyle(SOLID_FILL,9);bar(0,465,640,480);install(newtimer);break;}}break;}/* case F1:print();break;}*/case ESC:install(oldtimer);setfillstyle(SOLID_FILL,1);bar(0,465,640,480);outtextxy(5,469,"Are you sure to exit (Y/N)...");for (;key=bioskey(0);/*得到键盘扫描码*/if (key==YES)closegraph();exit(0);}if (key==NO)setfillstyle(SOLID_FILL,9);bar(0,465,640,480);install(newtimer);break;}} }}}}}/*****************************************************************************************/struct diamond *get_diamond()struct diamond *now;switch (random(7)+1)case 1:now=create_I();return now;}case 2:now=create_T();return now;}case 3:now=create_L();return now;}case 4:now=create_J();return now;}case 5:now=create_Z();return now;}case 6:now=create_N();return now;}case 7:now=create_H();return now;}}}/*****************************************************************************************/void show_interface (int fill_mode)int i;setbkcolor (9);setcolor (color);setfillstyle (SOLID_FILL,backcolor);bar (100,60,300,420);bar (360,60,440,140);rectangle (100,60,300,420);rectangle (96,56,304,424); rectangle (360,60,440,140);rectangle (356,56,444,144);setfillstyle (fill_mode,14);floodfill (97,57,color);floodfill (397,57,color);setcolor(1);rectangle(96,56,304,424);setcolor (color);for (i=80;i<=400;i+=20)line (100,i,300,i);}for (i=120;i<=280;i+=20)line (i,60,i,420);}for (i=80;i<=120;i+=20)line (360,i,440,i);}for (i=380;i<=420;i+=20)line (i,60,i,140);}show_intro (360,180);show_copsign (475,320,40,1);setfillstyle(SOLID_FILL,1);setcolor(14);rectangle(420,405,534,417);floodfill (421,406,14);outtextxy(422,408,"HI-TECH WEALTH");}/*****************************************************************************************/void show_copsign (int topx,int topy,int size,int color)int halfsize,qtrsize;int xadd,xdel,yadd1,yadd2;halfsize=0.5*size;qtrsize=0.25*size; xadd=topx+size;xdel=topx-size;yadd1=topy+size;yadd2=topy+2*size; setcolor(color);line (topx,topy,xdel,yadd1);line (xdel,yadd1,topx,yadd2);line (topx,yadd2,xadd,yadd1);line (xadd,yadd1,topx,topy);rectangle (topx-halfsize,topy+halfsize,topx+halfsize,yadd1+halfsize);setfillstyle (SOLID_FILL,color);floodfill (topx,topy+1,color);floodfill (xdel+1,yadd1,color);floodfill (topx,yadd2-1,color);floodfill (xadd-1,yadd1,color);rectangle (topx-halfsize,yadd1-qtrsize,topx-0.75*halfsize,yadd1+qtrsize);floodfill (topx-halfsize+1,yadd1-qtrsize+1,color);rectangle (topx-qtrsize,yadd1-halfsize,topx+qtrsize,yadd1-0.25*halfsize);floodfill (topx-qtrsize+1,yadd1-halfsize+1,color);rectangle (topx+0.75*halfsize,yadd1-qtrsize,topx+halfsize,yadd1+qtrsize);floodfill (topx+0.75*halfsize+1,yadd1-qtrsize+1,color);rectangle (topx-qtrsize,yadd1+0.25*halfsize,topx+qtrsize,yadd2-halfsize);floodfill (topx-qtrsize+1,yadd1+0.25*halfsize+1,color);setcolor(14);line (topx,topy-1,xdel-1,yadd1);line (xdel-1,yadd1,topx,yadd2+1);line (topx,yadd2+1,xadd+1,yadd1);line (xadd+1,yadd1,topx,topy-1);setfillstyle (SOLID_FILL,14);floodfill (topx,yadd1,color);}/*****************************************************************************************/void show_intro (int xs,int ys)char stemp[20];setcolor (15);rectangle(xs-3,ys-3,xs+239,ys+115);line (xs-3,ys+26,xs+239,ys+26);line (xs-3,ys+72,xs+239,ys+72);outtextxy(xs,ys,"Level:");outtextxy(xs,ys+15,"Score:");sprintf(stemp," -Roll -Downwards");stemp[0]=24;stemp[7]=25;outtextxy(xs,ys+30,"Help:");setcolor(14);outtextxy(xs+40,ys+30,stemp);outtextxy(xs+40,ys+45,"<-Turn Left >-Turn Right");outtextxy(xs+40,ys+60,"Esc-Exit R-Restart");outtextxy(xs,ys+75,"Russia Diamonds Ver 1.0");outtextxy(xs,ys+90,"CopyRight By ChangYong.01-11-1");outtextxy(xs,ys+105,"Email:forever_chang@163.com");}/*****************************************************************************************/struct diamond *create_I()struct diamond *info;struct diamond *first;first=(struct diamond *)malloc(sizeof(struct diamond));info=(struct diamond *)malloc(sizeof(struct diamond));first->next=info;info->next=first;first->x[0]=0;first->y[0]=0;first->x[1]=-1;first->y[1]=0;first->x[2]=1;first->y[2]=0;first->x[3]=2;first->y[3]=0;first->start_x=5;first->start_y=3;first->color=2; info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=-1;info->x[2]=0;info->y[2]=1;info->x[3]=0;info->y[3]=2;info->start_x=5;info->start_y=1;info->color=2; if(random(2)==0) else }/*****************************************************************************************/struct diamond *create_T()struct diamond *info;struct diamond *first;struct diamond *last;int i; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=-1;info->y[1]=0;info->x[2]=0;info->y[2]=-1;info->x[3]=1;info->y[3]=0;info->start_x=5;info->start_y=3;info->color=4;first=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=1;info->x[2]=0;info->y[2]=-1;info->x[3]=1;info->y[3]=0;info->start_x=5;info->start_y=2;info->color=4;last->next=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=-1;info->y[1]=0;info->x[2]=1;info->y[2]=0;info->x[3]=0;info->y[3]=1;info->start_x=5;info->start_y=2;info->color=4;last->next=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=1;info->x[2]=0;info->y[2]=-1;info->x[3]=-1;info->y[3]=0;info->start_x=5;info->start_y=2;info->color=4;last->next=info;last=info;last->next=first; for (i=0;i<=random(4);i++)first=first->next;}return first;}/*****************************************************************************************/struct diamond *create_L()struct diamond *info;struct diamond *first;struct diamond *last;int i; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=1;info->x[2]=0;info->y[2]=-1;info->x[3]=1;info->y[3]=1;info->start_x=5;info->start_y=2;info->color=5;first=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=-1;info->y[1]=0;info->x[2]=1;info->y[2]=0;info->x[3]=-1;info->y[3]=1;info->start_x=5;info->start_y=2;info->color=5;last->next=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=1;info->x[2]=0;info->y[2]=-1;info->x[3]=-1;info->y[3]=-1;info->start_x=5;info->start_y=2;info->color=5;last->next=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=-1;info->y[1]=0;info->x[2]=1;info->y[2]=0;info->x[3]=1;info->y[3]=-1;info->start_x=5;info->start_y=2;info->color=5;last->next=info;last=info;last->next=first; for (i=0;i<=random(4);i++)first=first->next;}return first;}/*****************************************************************************************/struct diamond *create_J()struct diamond *info;struct diamond *first;struct diamond *last;int i; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=1;info->x[2]=0;info->y[2]=-1;info->x[3]=-1;info->y[3]=1;info->start_x=5;info->start_y=2;info->color=6;first=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=-1;info->y[1]=0;info->x[2]=1;info->y[2]=0;info->x[3]=-1;info->y[3]=-1;info->start_x=5;info->start_y=2;info->color=6;last->next=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=1;info->x[2]=0;info->y[2]=-1;info->x[3]=1;info->y[3]=-1;info->start_x=5;info->start_y=2;info->color=6;last->next=info;last=info; info=(struct diamond *)malloc(sizeof(struct diamond));info->x[0]=0;info->y[0]=0;info->x[1]=-1;info->y[1]=0;info->x[2]=1;info->y[2]=0;info->x[3]=1;info->y[3]=1;info->start_x=5;info->start_y=2;info->color=6;last->next=info;last=info;last->next=first; for (i=0;i<=random(4);i++)first=first->next;}return first;}/*****************************************************************************************/struct diamond *create_Z()struct diamond *info;struct diamond *first;first=(struct diamond *)malloc(sizeof(struct diamond));info=(struct diamond *)malloc(sizeof(struct diamond));first->next=info;info->next=first;first->x[0]=0;first->y[0]=0;first->x[1]=-1;first->y[1]=0;first->x[2]=0;first->y[2]=1;first->x[3]=1;first->y[3]=1;first->start_x=5;first->start_y=2;first->color=9; info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=1;info->x[2]=1;info->y[2]=0;info->x[3]=1;info->y[3]=-1;info->start_x=5;info->start_y=2;info->color=9; if(random(2)==0) else }/*****************************************************************************************/struct diamond *create_N()struct diamond *info;struct diamond *first;first=(struct diamond *)malloc(sizeof(struct diamond));info=(struct diamond *)malloc(sizeof(struct diamond));first->next=info;info->next=first;first->x[0]=0;first->y[0]=0;first->x[1]=0;first->y[1]=1;first->x[2]=-1;first->y[2]=1;first->x[3]=1;first->y[3]=0;first->start_x=5;first->start_y=2;first->color=14; info->x[0]=0;info->y[0]=0;info->x[1]=0;info->y[1]=-1;info->x[2]=1;info->y[2]=0;info->x[3]=1;info->y[3]=1;info->start_x=5;info->start_y=2;info->color=14; if(random(2)==0) else }/*****************************************************************************************/struct diamond *create_H()struct diamond *first;first=(struct diamond *)malloc(sizeof(struct diamond));first->next=first;first->x[0]=0;first->y[0]=0;first->x[1]=0;first->y[1]=1;first->x[2]=1;first->y[2]=0;first->x[3]=1;first->y[3]=1;first->start_x=5;first->start_y=2;first->color=1;return first;}/*****************************************************************************************/void show_next ()int nowx;/*记录当前每个格子的位置*/int nowy;int i;/*计数器*/int j;int haveit;/*当前格子是否已经显示*/struct diamond *next;/*当前方块的翻转后的下一个状态*/next=nowinfo->next;if (next==NULL) for (i=0;i<=3;i++)/*判断是否能够翻转,若不能,就直接退出该函数*/if (grid[x+next->x[i]][y+next->y[i]]==1)return;}} setfillstyle(SOLID_FILL,backcolor);/*设置背景色以消除不需要的格子*/for (i=0;i<=3;i++)haveit=0;for (j=0;j<=3;j++)if (next->x[j]==nowinfo->x[i]&&next->y[j]==nowinfo->y[i]) }if (haveit==0) /*判断翻转后该格子是否显示,若不显示,将该格子设为背景色*/grid[x+nowinfo->x[i]][y+nowinfo->y[i]]=0;if (y+nowinfo->y[i]>=4)/*判断该格子是否到了可以显示的区域*/floodfill(80+(nowinfo->x[i]+x)*20+1,-20+(nowinfo->y[i]+y)*20+1,color);}} nowinfo=next;nowx=x;nowy=y;setfillstyle(SOLID_FILL,nowinfo->color);/*设置填冲色为方块的颜色*/for (i=0;i<=3;i++)if (grid[x+nowinfo->x[i]][y+nowinfo->y[i]]!=2)/*如果该格子还没有被显示*/nowx=x+nowinfo->x[i];nowy=y+nowinfo->y[i];if (y+nowinfo->y[i]>=4)floodfill(80+nowx*20+1,-20+nowy*20+1,color);grid[nowx][nowy]=2; /*设置该格子当前有活动方块*/}}return;}/*****************************************************************************************/void show_left ()int i;/*计数器*/int j;int haveit;/*当前格子是否已经显示*/int nowx;/*记录当前每个格子的位置*/int nowy;for (i=0;i<=3;i++)/*判断是否可以向左移动*/if (grid[x-1+nowinfo->x[i]][y+nowinfo->y[i]]==1)return;}} setfillstyle(SOLID_FILL,backcolor);/*设置背景色以消除不需要的格子*/for (i=0;i<=3;i++)haveit=0;for (j=0;j<=3;j++)if (nowinfo->x[i]==nowinfo->x[j]-1&&nowinfo->y[i]==nowinfo->y[j]) }if (haveit==0) /*判断翻转后该格子是否显示,若不显示,将该格子设为背景色*/grid[x+nowinfo->x[i]][y+nowinfo->y[i]]=0;if (y+nowinfo->y[i]>=4)/*判断该格子是否到了可以显示的区域*/floodfill(80+(nowinfo->x[i]+x)*20+1,-20+(nowinfo->y[i]+y)*20+1,color);}} setfillstyle(SOLID_FILL,nowinfo->color);/*设置填冲色为方块的颜色*/for (i=0;i<=3;i++)nowx=x+nowinfo->x[i]-1;nowy=y+nowinfo->y[i];if (grid[nowx][nowy]!=2)/*如果该格子还没有被显示*/if (nowy>=4)floodfill(80+nowx*20+1,-20+nowy*20+1,color);grid[nowx][nowy]=2;}}x=x-1;return;}/*****************************************************************************************/void show_right ()int i;/*计数器*/int j;int haveit;/*当前格子是否已经显示*/int nowx;/*记录当前每个格子的位置*/int nowy;for (i=0;i<=3;i++)if (grid[x+1+nowinfo->x[i]][y+nowinfo->y[i]]==1)return;/*判断是否可以向右移动*/}} setfillstyle(SOLID_FILL,backcolor);/*设置背景色以消除不需要的格子*/for (i=0;i<=3;i++)haveit=0;for (j=0;j<=3;j++)if (nowinfo->x[i]==nowinfo->x[j]+1&&nowinfo->y[i]==nowinfo->y[j]) }if (haveit==0)/*判断翻转后该格子是否显示,若不显示,将该格子设为背景色*/grid[x+nowinfo->x[i]][y+nowinfo->y[i]]=0;if (y+nowinfo->y[i]>=4)/*判断该格子是否到了可以显示的区域*/floodfill(80+(nowinfo->x[i]+x)*20+1,-20+(nowinfo->y[i]+y)*20+1,color);}} setfillstyle(SOLID_FILL,nowinfo->color);/*设置填冲色为方块的颜色*/for (i=0;i<=3;i++)nowx=x+nowinfo->x[i]+1;nowy=y+nowinfo->y[i];if (grid[nowx][nowy]!=2)if (nowy>=4)/*判断该格子是否到了可以显示的区域*/floodfill(80+nowx*20+1,-20+nowy*20+1,color);grid[nowx][nowy]=2;}}x=x+1;return;}/*****************************************************************************************/void show_down ()int i;/*计数器*/int j;int haveit;/*当前格子是否已经显示*/int nowx;/*记录当前每个格子的位置*/int nowy;int key;for (i=0;i<=3;i++)if (grid[x+nowinfo->x[i]][y+nowinfo->y[i]+1]==1)/*判断方块是否能够下落*/for (j=0;j<=3;j++)grid[x+nowinfo->x[j]][y+nowinfo->y[j]]=1;if (y+nowinfo->y[j]<=3)install(oldtimer);setfillstyle(SOLID_FILL,1);bar(0,465,640,480);outtextxy(5,469,"Do you want to restart (Y/N)...");for (;key=bioskey(0);if (key==YES)startset();setfillstyle(SOLID_FILL,9);bar(0,465,640,480);return;}if (key==NO)closegraph();exit (0);}}}} delinfo(nowinfo);scandel();/*扫描,删除*/delay(2500);while(bioskey(1)) bioskey(0);/*清除键盘缓冲区*//* clrkey();*/nowinfo=nextinfo;/*得到新的方块*/nextinfo=get_diamond();/*得到下一个方块*/showsubwin(nextinfo);x=nowinfo->start_x;/*重新设置方块位置*/y=nowinfo->start_y;return;}} setfillstyle(SOLID_FILL,backcolor);/*设置背景色以消除不需要的格子*/ for (i=0;i<=3;i++)haveit=0;for (j=0;j<=3;j++)if (nowinfo->x[i]==nowinfo->x[j]&&nowinfo->y[i]==nowinfo->y[j]+1) }......详见:http://topic.csdn.net/t/20030409/15/1638691.htmlhttp://www.anyter.com/doc/doc.asp?doc_id=87
文章TAG:俄罗斯俄罗斯方块罗斯方块俄罗斯方块代码C语言

最近更新

  • c程序设计基础教程,C语言的入门教程c程序设计基础教程,C语言的入门教程

    C语言的入门教程2,C语言程序设计基础3,C语言初学编程4,编程C语言入门5,C程序怎么学啊1,C语言的入门教程谭浩强的C语言程序设计2,C语言程序设计基础某班学生成绩管理管理员可以添加学生和老师.....

    问答 日期:2024-05-19

  • java课程设计管理系统,最近在用Java做数据库课程设计做教务管理系统java课程设计管理系统,最近在用Java做数据库课程设计做教务管理系统

    最近在用Java做数据库课程设计做教务管理系统2,Java课程设计简单图书管理系统3,用JAVA做课程管理系统4,Java程序手机管理系统5,Java设计开发一个简单的学生管理系统1,最近在用Java做数据库.....

    问答 日期:2024-05-19

  • 数据库视图包含哪些,mysql数据库视图是什么数据库视图包含哪些,mysql数据库视图是什么

    mysql数据库视图是什么2,数据库查询对象提供那3种视图并简单介绍3,数据库查询的三种视图和作用4,视图的分类为5,数据库中的视图又什么用1,mysql数据库视图是什么1、数据库视图隐藏了数据的.....

    问答 日期:2024-05-19

  • 哪个数据库win8可以用,求教WIN8能用哪个版本的SQL Server哪个数据库win8可以用,求教WIN8能用哪个版本的SQL Server

    求教WIN8能用哪个版本的SQLServer2,win8能装什么版本的sqlserver3,什么数据库可以装到win8上4,win8用什么数据库5,window81下载sqlserver什么版本的可以用1,求教WIN8能用哪个版本的SQLServe.....

    问答 日期:2024-05-19

  • mysql数据库有什么作用,MySQL数据库 具体是做什么的有什么功能mysql数据库有什么作用,MySQL数据库 具体是做什么的有什么功能

    MySQL数据库具体是做什么的有什么功能2,MYSQL是什么干嘛用的3,网站空间的mysql数据库有什么作用4,mysql是干什么用的5,请问MySQL用来做什么的6,mysql数据库的作用是什么mysql数据库的好处7,m.....

    问答 日期:2024-05-18

  • 国外知名化学数据库有哪些,请问化学专业数据库除了国外知名化学数据库有哪些,请问化学专业数据库除了

    请问化学专业数据库除了哪方面的数据库?国内试试超星国外的多着呢,美国的ACS,欧洲的weily,ISIweb另外NatureScience是不能缺的2,哪些化学材料的数据库比较好用化学有机合成方面SCIfinderrea.....

    问答 日期:2024-05-18

  • jquery带数据的日历插件jquery带数据的日历插件

    jqueryui的日期选择器很有用。大侠求助:需要写一个简单的jquery作文,jquery动态代码添加,jquery插件fullcalendar日期格式问题//,你好!你的需求可以通过fullcalendar自带的formatDate函数.....

    问答 日期:2024-05-18

  • 数据库的加密方法有哪些,数据加密方法有哪些数据库的加密方法有哪些,数据加密方法有哪些

    数据加密方法有哪些2,现在数据库加密的方式有哪几种3,数据加密的方法有哪些如题谢谢了1,数据加密方法有哪些数据加密主要的方式:对称和非对称密钥加密算法。1、设置密码功能。2、记事本的.....

    问答 日期:2024-05-17