- 时间:2021-02-11 20:31 编辑:中山美穗 来源:蚂蚁资源 阅读:178
- 扫一扫,手机访问
摘要:大家好,今天给大家介绍关于俄罗斯方块源码(c语言俄罗斯方块最简单代码)的相关内容,详细讲解俄罗斯方块的代码,高分征求有详细注解的俄罗斯方块C语言源代码。,求俄罗斯方块的程序代码等,希望可以帮助到您。
俄罗斯方块的代码,编写的俄罗斯广场源代码,有点愚蠢......包括
#include #include #include #include #dclude #dclude #dflude left 0x4b #define右0x4d #define下来0x50 #define更改0x20 #define esc 0x1b #define for 0x1c #define defaultx 5 #define decaysy 1 #dfdef __cplusplus #define __cppargs ... #else #define __cppargs #endif静态无符号计数器= 0;静态无符号形状[7] [4] [4] [4] = {{{0,1,1,10},{0,1,1,0},{0,0,0,0},{0 ,0,0,0}},{0,1,1,0},{0,0,0,0},{0,0,0,0,0},{0,0,0,0}} ,{{0,1,1,0},{0,0,0,0},{0,0,0,0,0}},{{0,1,1,1,1 ,0},{0,1,1,0},{0,0,0,0},{0,0,0,0,0}},},},{{0 0,0,0,0,0},{ 1,1,1,1},{0,0,0,0,1,0},{0,0,1,0},{0,0,1,0}, {0,0,0,0},{1,1,1,1,1},{0,0,0,0},{0,0,0,0,1,0},{0,0,1,0},{0,0,0} 1,0}},},{{0,1,0,0},{1,1,1,0},{0,0 ,0,0},{0,0,0,0,0,0},{0,1,1,0},{0,1,0,0,0},{0 ,0,0,0},{1,1,1,0},{0,1,0}},{{0,1,0,0,0},{1,1,0,0},{0 ,1,0,0,0,0,0},},},{{1,0,0,0,},{1,1,0,0},{0,1,0,0,0}, {0,0,0,0}},{0,0,0},{1,1,0,0},{0,0,0,0}},{{1,0,0,0,0} ,{1,1,0,0},{0,1,0,0},{0,0,0,0}},{{0,0,0,0},{0,1,1,1, 0},{1,1,0,0},{0,0,0,0}},},{{0,1,0,0},{1,1,0,0},{0, 0,0,0}},{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0},{{ 0,1,0},{1,1,0,0},{1,0,0,0},{0,0,0}},{{0,0,0,0},{0,1, 1,10},{0,0,0,0,0}},},{{1,0,0,0,0,0},{1,0,0,0},{1,1,0,0},{ 0,0,0,0}},{{0,0,0},{1,1,1,0},{1,0,0,0},{0,0,0,0}}, {{1,1,0,0},{0,0,0,0}},{0,0,0,0},{0,0,1,0}, {1,1,1,0},{0,0,0,0}},},{{0,1,0,0},{0,1,0,0},{1,1,0,0},{0,0,0,0},{1,0,0,0},{1,1, 1,0},{0,0,0}},{1,0,0,0},{1,0,0,0,0},{0,0,0,0, 0}},{0,0,0,0},{1,1,1,0},{0,0,1,0},{0,0,0}},},}; unsigned back [22] [14] = {{1,1,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,0,0,0,0,0 ,0,0,0,0,0,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,0 ,0,0,0,0,0,0,0,0,0,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,0,1,1}, {1,1,0,0,0,0,0,0,0,0,0,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,0,0 ,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,0,0,0,0,0,0,0,0 ,0,0,0,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,0,0,0,0,0 ,0,0,0,0,0,0,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,1 ,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1 },{1,1,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,0,0, 1,1},{1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0,0,0,0,0,0,1,1},{1,1,0,0,0,0, 0,0,0,0,0,0,1,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1。 char shapecolor [7] = {8,10,11,12,13,14,15}; Char DigitalsHape [10] = {128 + 119,3,62,31,128 + 75,128 + 93,128 + 125,19,128 + 127,128 + 95}; Char十二圈[11] = {4,6,12,13,11,10,2,3,9,1,8}; Char Zodiacsoft [18] [14] = {{0,0,0,0,0,0,0,96,0,0,0,0,248,0,0, 124,0},{255,248,0,0,3,248,0,0,192,0},{0,112,0,0,0,97,128 0,0,97,128,0,0,0,97,128,0,0,0,97,128,0,0,0,97,128 0,0 ,7,0,0,1,128,48},{0,224,0,0,96,0,0,0,14,0,0,1,128,48},{1,192,0,0,0,96 0,0,10,12,0,0,1,128,48},{3,128,10,12,0,15,15,249,255},{ 7,0,252,31,245,131,248,127,14,0,31,143,249,255},{7,1,142,48,225,135,24,227,7,240, 49,193,128,48},{14,3,134,96,97,142,24,99,3,48},{28,3,6,96,97,140,25,192,0, 28,96,193,128 48},{56,3,6,96,97,140,25,128,0,6,96,193,128,48},{56,3,6,96,97 ,140,25,128,0,6,96,193,128,48},{120 3,6,96,97,140,25,128,0,6,96,193,128,48} { 224,1,140,48,225,142,25,195,4,14,49,129,128,48},{255249,252,63,225,135,252,255,28,28,63, 129,128,48},{255,248,240,15,97,131,36,10,48},{0,0,0,0,0,0,0,0,7,224,0,1, 128,0}; unsigned long totalmark = 0; unsigned int erased = 0,etimes = 0;速度= 0; int cer = 0; int numoflev [5] = {0,0,0,0,0}; int timedlay [10] = {21,18,17,15,13,11,9,7,5,3}; char newshape [2];无符号秘收[4]; void中断(* oldhandler)__cppargs); void中断处理程序(__ cppargs){++计数器; oldhandler(); void缺点()} void缺点(){// setLineStyle} void绘图绘图(int x,int y,int a){int i = 7; setcolor(((((((Digitalshape [a] >> i)&1)* 7 + 4); // printf(“%d”,(digitalshape [a] >> i)&1);我--- ;线(x,y + 1,x,y + 15);线(x + 1,y + 2,x + 1,y + 14);线(x + 2,y + 3,x + 2,y + 13);雕刻(((Digitalshape)a] >> i)&1)* 7 + 4); i - ;线(x,y + 17,x,y + 31);线(x + 1,y + 18,x + 1,y + 30);线(x + 2,y + 19,x + 2,y + 29); setcolor((digitalshape [a] >> i)&1)* 7 + 4) ; I - ;线(x,y + 17,x,y + 31);线(x + 1,y + 18,x + 1,y + 30);线(x + 2,y + 19,x + 2,y + 29); SetColor((Digitalshape [A] >> I)&1)* 7 + 4); i - 线(x + 1,y,x + 16,y);线(x + 2,y + 1,x + 15,y + 1);线(x + 3,y + 2,x + 14,y)+2); SetColor((Digitalshape [A] >> I)&1)* 7 + 4);一世 - ;线(x + 2,y + 15,x + 15,y + 15);线(x + 1,y + 16,x + 16,y + 16);线(x + 2,y + 17,x + 15,y + 17); SetColor(((Digitalshape [A] >> I)&1)* 7 + 4);一世 -;线(x + 3,y + 30,x + 14,y + 30);线(x + 2,y + 31,x + 15,y + 31);线(x + 1,y + 32,x + 16,y + 32); SetColor(((Digitalshape [A] >> I)&1)* 7 + 4);一世-;线(x + 15,y + 3,x + 15,y + 13);线(x + 16,y + 2,x + 16,y + 14);线(x + 17,y + 1,x + 17,y + 15); SetColor(Digitalshape [A] >> I)&1)* 7 + 4);线(x + 15,y + 19,x + 15,y + 29);线(x + 16,y + 18,x + 16,y + 30);线(x + 17,y + 17,x + 17,y + 31); voidartclear(){for(int i = 480; i> = 0; i-= 2){setcolor 3);线(0,I-6,639,I-6);雕刻(9);线(0,I-4,639,I-4); SetColor(1);线(0,I-2,639,I-2); setcolor(getbkcolor());线(0,i,639 i);延迟(1);}(i = 1; i <480; i + = 2){setcolor(3);线(0,i + 6,639,i + 6);雕刻(9);线(线)0,i + 4,639,i + 4); SetColor(1);线(0,i + 2,639,i + 2); setcolor(getbkcolor());线(0,i,639,i);延迟(1);}}}} void end(){for(int j = 0; j <4; j ++){for(int i = j; i <480; i + = 4){setcolor(3);线(0,i + 8,639,i + 8);雕刻(9);线(0,i + 4,639,i + 4); SetColor(1);线(0,i,639,i); setcolor(getbkcolor());第0行,I,639,i);延迟(1);框架(黄色); Outtextxy(260,200,“[游戏); gotoxy(14,16); printf(”这个免费软件是由daniel.qu zodiacsoft 2000编写的); gotoxy(12,17); printf(“请e-邮寄到swami@yeah.net或访问我的主页“); gotoxy(12,18); printf(“http:///grocery.2699.com如果有qu.estion。”); gotoxy(14,20); Printf(“我很快就会提供新的东西,请稍候......”); gotoxy(14,22); Printf(“我们认为这些真理是不言而喻的,即所有代码”); gotoxy(12,23); printf(“是免费创建的。”); getch(); clrscr();特写镜头();退出(0); void showtitle(){int gdriver = detect,gmode,errorcode,i,j,k; EnitGraph(&gdriver,&gwe,“); errorcode = graphResult();如果(erroorcode!= grok){printf(”图形错误:%s
高分征求有详细注解的俄罗斯方块C语言源代码。,#include #include #include #include #ifdef __cplusplus #define __cppargs ...#else#define __cppargs #denif#define minboxize 15 / *最小方形大小* /#define bgcolor 7 / *背景着色* /#定义gx 200#定义gy 10#define sjnum 10000 / *每当玩家击中10,000点加一个级别* // *按钮代码* /#define vk_left 0x4b00#define vk_right 0x4d00#define vk_down 0x5000 #define vk_up 0x4800#define vk_home 0x4700#define vk_end 0x4f00#define vk_space 0x3920#define vk_seS 0x011b#define vk_enter 0x1c0d / *定义tetris的方向(我将他定义为四种)* / #define f_dong 0#define f_nan 1#定义f_xi 2#定义f_bei 3#定义NextCol 20 / *下一个块的纵坐标要* /#定义接下来的12 / * ou下一个块的下一个块* /#定义了maxrow 14 / *游戏屏幕尺寸* /#定义maxcol 20#定义sccol 100 / *游戏屏幕大显示* /#定义扰动60int gril [22] [16]; / *游戏屏幕坐标* / int col = 1,行= 7; / *当前方形横截面* / int boxfx = 0,boxgs = 0; / *当前寺庙和方向* / int nextboxfx = 0,nextboxgs = 0,maxcol = 22; / *下一个块形状和方向* / int minboxcolor = 6; int num = 0; / *游戏部* / int dj = 0,gamej [10] = {18,16,14,12,10,8,6,4,2,1}; / *游戏级别* // *以下我使用3D数组来记录初始形状和方向* / int boxstr [7] [4] [4] = {{{1,1,0,0,0 ,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0.0,0,0,0 ,0} {1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0 ,1,1,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0},{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1 ,0,0,0,1,0,0,0,0,0}},{{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0},{1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,{1,0,0,0,1,0,0,0, 0,1,1,0,0,0,0,0,0},{0,0,1,0,0,0,0,0,0,0,0,0,0} },{{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},{1,0,0,0,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}。 ,{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0, 0,0,1,0,0,1,0,0},{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,1,0,0,0,1,0,0},{0,0,0,0,1,1,1,1,1,0,0,0,0,0, 0,0.,0}},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,{1,1,0,0,0,1,1,1 ,0,0,0,0,0,0.0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{1 ,1,0,0,1,1,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0 ,1,0,0,0,0,0},{1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0}} }; / *随机获得当前方形和下一个框形状和方向* / void boxrad(){minboxcolor = nettminboxcolor; boxgs = nextboxgs; boxfx = nextboxfx; nextminboxcolor =随机(14)+1; if(nextminboxcolor == 4 || nextminboxcolor == 7 || nextminboxcolor == 8)nextminboxcolor = 9; NextboxFx = F_dong; NextboxGs =随机(7);} / *初始化图形测试* / void init(int gdrive,int gemode){int errerc颂; EnitGraph(&gdrive,&gmode,d:\\ tc \\“); errorcode = graphResult(); if(errorcode!= grok){printf(“错误:%s”,grapherrormsg(errorcode));退出(1);}} / * {图形模式下的setfillstyle(solid_fill,0); setcolor(0);栏(0),0,640,480);} / *图形模式中的高级清除屏幕* / void clscr(int a,int b,int c,int d,int color {setflexstyle(solid_fill,color); setcolor(颜色);酒吧A,B,C,D);} / *大型方形图* / void minbox(int ASC,int BSC,INT颜色,int BDColor){int a = 0,b = 0; a = sccol + asc; B =扰动+ BSC; CLSCR(A + 1,B + 1,A-1 + MINBOXSIZE,B-1 + MINBOXSIZE,颜色); if(颜色!= bgcolor){setcolor(bdcolor);线(A + 1,B)+ 1,A-1 + minboxize,B + 1);线(A + 1,B + 1,A + 1,B-1 + minboxize);线(A-1 + minboxize,B + 1,A-1+ minboxsize,B-1 + minboxize;线(a + 1,b-1 + minboxisize,a-1 + minboxize,b-1 + minboxize);} / *文本出现在游戏中* / void txt(int a,int b,char * txt,int字体,int颜色; settextstyle(0,0,字体); Outtextxy(a,b,txt);} / * windows draw * / void win(int a,int b,int c,int d,int bgcolor,int bordercolor ){clscr(a,b,c,d,bgcolor);雕刻(bordercolor);线(a,b,c,b);线(a,b,a,d);线(a,d,c) ,d);线(c,b,c,d);} / *绘图* / void funbox(int a,int b,int color,int bdcolor){int i,j; int boxz [4] [4]; for(i = 0; i 1; i - )for(j = 1; j <16;i++)boxz[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)if(boxz[i][j]==1)minbox((j+row+a)*MINBOXSIZE,(i+col+b)*MINBOXSIZE,color,bdcolor);}/*下一个方块的绘制*/void nextfunbox(int a,int b,int color,int bdcolor){int i,j;int boxz[4][4];for(i=0;i<16;i++)boxz[i/4][i%4]=boxstr[nextboxgs][nextboxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)if(boxz[i][j]==1)minbox((j+a)*MINBOXSIZE,(i+b)*MINBOXSIZE,color,bdcolor);}/*时间中断定义*/#define TIMER 0x1cint TimerCounter=0;void interrupt ( *oldhandler)(__CPPARGS);void interrupt newhandler(__CPPARGS){TimerCounter++;oldhandler();}void SetTimer(void interrupt (*IntProc)(__CPPARGS)){oldhandler=getvect(TIMER);disable();setvect(TIMER,IntProc);enable();}/*由于游戏的规则,消掉都有最小方块的一行*/void delcol(int a){int i,j;for(i=a;i> = 0; i - )for(j = 3; j> = 0; j- - )(a [ i] [j] && gril [col + i] [行+ j])k = 0;返回(k);} / *在当前广场后,标记屏幕坐标* / void setgril(){int i,j,a [4] [4]; Funbox(0,0,minboxcolor,0); for(i = 0; i <15;j++){minbox(j*MINBOXSIZE,i*MINBOXSIZE,BGCOLOR,BGCOLOR);gril[i][j]=gril[i-1][j];if(gril[i][j]==1)minbox(j*MINBOXSIZE,i*MINBOXSIZE,minboxcolor,0);}}/*消掉所有都有最小方块的行*/void delete(){int i,j,zero,delgx=0;char *nm="00000";for(i=1;i<21;i++){zero=0;for(j=1;j<15;j++)if(gril[i][j]==0)zero=1;if(zero==0){delcol(i);delgx++;}}num=num+delgx*delgx*10;dj=num/10000;sprintf(nm,"%d",num);clscr(456,173,500,200,4);txt(456,173,"Number:",1,15);txt(456,193,nm,1,15);}/*时间中断结束*/void KillTimer(){disable();setvect(TIMER,oldhandler);enable();}/* 测试当前方块是否可以向下落*/int downok(){int i,j,k=1,a[4][4];for(i=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)if(a[i][j] && gril[col+i+1][row+j])k=0;return(k);}/* 测试当前方块是否可以向左行*/int leftok(){int i,j,k=1,a[4][4];for(i=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)if(a[i][j] && gril[col+i][row+j-1])k=0;return(k);}/* 测试当前方块是否可以向右行*/int rightok(){int i,j,k=1,a[4][4];for(i=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)if(a[i][j] && gril[col+i][row+j+1])k=0;return(k);}/* 测试当前方块是否可以变形*/int upok(){int i,j,k=1,a[4][4];for(i=0;i<4;i++)for(i=0;i<16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx+1][i];for(i=3;i> 0; i - )for(j = 1; j <16;i++)a[i/4][i%4]=boxstr[boxgs][boxfx][i];for(i=0;i<4;i++)for(j=0;j<4;j++)if(a[i][j])gril[col+i][row+j]=1;col=1;row=7;}/*游戏结束*/void gameover(){int i,j;for(i=20;i> 3)boxfx = 0; Funbox(0,0,minboxcolor,0);突破;}案例vk_left:{/ *左方向键,空白情况* / if(左口())行 - ; Funbox(0,0,minboxcolor,0);突破;}案例vk_right:{/ *右方向键,支出标记1 * / if(rightok())行++; Funbox(0,0,minboxcolor,0);打破; } case vk_space:/ * space bob,直接落到最后一个设置* / while(downok())col ++; Funbox(0,0,minboxcolor,0); setgril(); NextFunbox(NextCol,Nextrow,4,4); boxrad(); NextFunbox(NextCol,Nextrow,NextMinboxColor,0);删除:{TXT(423,53,“Worng键!”,1,4); TXT(428,80,“Plese进入Anly Key AG!”,1,4); getch(); CLSCR(420,50,622,97,BGColor);}}}} / *时间中断开始* / voidtimezd(void){int键; settimer; boxrad(); NextFunbox(NextCol,Next,NextMinboxColor,0); for(;;){if(bioskey(1)){key = bioskey(0); Funbox(0,0,BGColor,BGColor); if(key == vk_esc)break; call_key(key); f(timercounter> gamedj [dj]){timercounter = 0; if(DownOK()){Funbox(0,0,BGColor,BGColor); col ++; Funbox(0,0,minboxcolor,0);} else {if(col == 1){gameover(); getch();突破;} setgril();删除(); Funbox(0,0,minboxcolor,0); col = 1;行= 7; Funbox(0,0,BGColor,BGColor NextFunbox(NextCol,Next,4,4); Boxrad(); NextFunbox(NextCol,NextCol,NexTrow,NextMinboxColor,0);}}} / *主程序开始* / void Main(void ){int i,j; char * nm =“00000”; init(vga,vgahi); cls(); / *屏幕坐标初始化* / for(i = 0; i <= maxcol + 1; i ++) for(j = 0; j<= maxrow + 1; j ++)gril [i] [j] = 0; for(i = 0; i <= maxcol + 1; i ++){gril [i] [0] = 1; gril [i] [15] = 1;} for(j = 1; j <= maxrow; j ++){gril [0] [j] = 1; gril [21] [j] = 1; clscr(0,0,0,640,480,15);赢(1,1,639,479,4,15);赢(SCCol + Minboxsize-2,Scow + Minboxize-2,Sccol + 15 * minboxsize + 2,扰动+ 21 * minboxsize + 2,BGColor,0); nextboxgs =随机8); NextBoxFx =随机(4); Sprintf(nm,“%d”,num); TXT(456,173,“数字:”,1,15); TXT(456,193,NM,1,15); TXT(456,243,“下一个方框:”,1,15); timezd(); killtimer();特写镜头();
求俄罗斯方块的程序代码,#include #include #include #include #include #ifdef __cplusplus #define __cppargs ... #else #define __cppargs #endif #define minboxize 15 #define bgcolor 7 #define gx 200 #define gy 10 #define sjnum 10000 #define vk_left 0x4b00 #define vk_right 0x4d00 #define vk_down 0x5000 #define vk_up 0x4800 #define vk_um 0x4700 #define vk_end 0x4f00 #define vk_space 0x3920 #define vk_space 0x3920 #define vk_esc 0x011b #define vk_enter 0x1c0d #define f_dong 0 #define f_nan 1 #define f_xi 2 #define f_bei 3 #define f_bei 3 #define NextCol 20 #define接下来12#定义maxrow 14 #define maxcol 20 #define sccol 100 #define ... 4] [i%4] = boxstr [boxgs] [boxfx] [i]; j ++){minbox(j * minboxize,color;}} num = num + delgx * delgx * 10,0); NextFunbox(NextCol,{1,1;行= 7,0,Delgx = 0,0; 16,1,0),a [4] [4]; gril [i] [j] = gril [i-1] [j],int b,intproc); i ++)for(j = 0; plese enteranly key ag,0,0; j&lt,0,d),0; 16,0,1,0;返回(k); num); for(i = 0,nextrow,10,1,j; killtimer)),0;,int d,0; i ++){gril [i] [0] = 1;} intup(){int i; 4,A-1 + minboxize; clscr(a + 1; i ++)boxz [I / 4; = maxcol + 1,0,字体);%d&&QUOT,0.h> 15,0},0;我&lt,0),minboxcolor,0; int col = 1,0; EnitGraph(&gdrive,0),0,j,0}; = maxrow + 1; char * nm =&键,0,1,1,0,0,“} int rectiveok(){int i,4,0,0),0,1;返回(k); void clscr(int a, 1,0,0},1,A-1 + minboxize; void Gameover(){int i,1; tc&ut,0); b =扰动+ bsc,0;}} void timezd(void){ int key; number,txt),b,int b; txt(456; for(,0,b + 1 ;; a = sccol + asc,0,0); setvect(定时器!= grok){printf(&Queer ,0;} void init(int gdrive; i ++)boxz [i / if(boxfx&gt,0; nextboxgs =随机(7),640;出口(1),0; 4),b); OutTextxy(a; Enable(),3,0,0,4,0; char * nm =“void中断newhandler(__ cppargs){timercounter ++,0,0,0,0,0,0; i&lt,0 ,0:“} void nextfunbox(int a,0,0; do,0,1,int颜色,bgcolor),0; col = 1;线(a,{0,1,1,0,1,1 ,b; gamedj [dj]){timercounter = 0,0; getch(),颜色),0,0,2,0,0,0; 3)BOXFX = 0,0;打破; boxfx = nextboxfx,0,0,1,0,0; oldhandler();图形,int d,0};} case vk_left; D; 16; J&GT#包括[I /,200;}案例VK_RIGHT,0 Funbox(0; 21; 4,173,0,1,0,1; = 0,1,0},1;} INT DROWOK() {int i,1,1,1,0,minboxcolor;} void funbox int a; void win(int a; 4,0; funbox(0; boxrad(); int nextboxfx = 0,0,{{0。 H&GT,0; SetColor(BORDERCOLOR),0,0}},0; void delete(){int i,0,0,{0; for(i = 0.0,0,0;} {if(inc == 1){gameover(); for(i = 0,a + 1; i ++)a [i /,0; isetcolor(0) ,d ;; boxgs = nextboxgs,{{1,int gmode){int errorcode,bgcolor,int bdcolor){int i,a-1 + minboxisize;我&gt 0,0,0:\,0; int num = 0,{{1,k = 1,1,b = 0,“nextboxfx = f_dong,0,(i + b)* minboxsize,0; funbox(0;下一个box,0,0,1}, 1,BGColor); 15,639,0,0,1; for(i = 3,1; nextminboxcolor =随机(14)+1;}断裂,0,0,j,0,0,0; txt(456:{ txt(423,0,b,0; 4] [i%4] = boxstr [boxgs] [boxfx] [i],1;} setgril(),0,int bordercolor){clscr(a,0;行( A-1 + Minboxize,Boxgs = 0;中断,NextboxGs = 0,B-1 + minboxize,0; i ++)for(j = 0,0; stdio,0; txt(456,0,12,0, &QUOT,0,0,1,0,0,1,479.,颜色),0; setgril(); enable(),4; j ++)如果(a [j] && gril [col + i + 1] [行+ j])k = 0,下一个,b-1 + minboxize,i * minboxsize,0,{0; for(i = 0; i ++){ZERO = 0,0; i ++)for(j = 0,0,0,1,0,1,0,0,0,0,0,1!“int boxstr [7] [4] [16] = {{{1; isetpextsyle (0,a [4] [4],0},int颜色,0;栏(a,{1,grapherror(errorcode)),1;线(a,0},k = 1;} #define计时器0x1c int timercounter = 0; #include win(1,0},0,14,0}; setgril(); #include&lt,j,0}; = maxrow,1.0,j,1; iint boxfx = 0,4 ),0,1; clscr(420,0,nextrow,0}}},0; dj = num /,10),char * txt,nextminboxcolor; wher(downok())col ++,{{0; i ++)for(j = 0,1,0,1;}} void txt)int a; break; 4] [i%4] = boxstr [boxgs] [boxfx] [i],1,b-1 + minboxisize,1,53,15); 0,0,1,0和Gmode,C,0; 4,0; void中断(* oldHandler)(__ CPPARGS),{1,1,0; i&lt:{if(downok()){col ++; j ++)如果(a [j] && gril [col + i] [行+ j-1])k = 0,0:“for(i = 0,0),0; int dj = 0,&Que ,0,1,1; int boxz [4] [4] [4休息;数字,nextminboxcolor,0,0,622; Funbox(0,0,0,4,0,0}; NextFunbox(NextCol,0),Num),15); 4] [i%4] = boxstr [boxgs] [boxfx + 1] [i],0; i ++)for(j = 0; stdlib,0,“return(k),1,a [4] [ 4],0,1,0},50,c,1; 16,minboxcolor,0,1,0,1!&QUOT,C,0; 16,0,B + 1,0),1,{0 0,0,int bsc,int b,颜色,d)! = BGColor){SetColor(BDColor),0,0,1,0,0,{0; Sprintf(nm,nextrow,0; delete(); j ++)gril [i] [j] = 0; INT minboxcolor = 6,1,1,1; for(i = 0,4),0; 4,{0; Worng钥匙; for(i = 0,0,0,b,0,0; funbox(0,j,0,0}},1,1,bdcolor),0,0,1; j&lt,1,0, 0,0,0,500; setvect(定时器,扰乱+ 21 * minboxsize + 2,b + 1),0,int颜色){setfillstyle(solid_fill; = maxcol + 1,oldrandler); i ++)for(i = 0,1:{if(upok())boxfx ++; settimer(newhandler),0},bgcolor ;; i - )for(j = 3,0,1; for(i = 0:{if(freekok())行++,0; j ++){gril [0] [j] = 1,0,nextminboxcolor; #ifdef __cplusplus #define __cppargs; 15; i&lt,0, d),0,0,1,0,0,0},0; for(i = 0,0,0,0,0,j,16,480,bgcolor),minboxcolor; Funbox(0; ErrorCode = GraphResult(),BGColor),15);}案例vk_space,0,nextrow; NextBoxFx =随机(4); col ++; i - for(j = 1,{1;} void minbox(int asc; i {0; j ++)minbox(j * minboxisize,0,0,b + 1,k = 1; j&lt,0} ,1; = 0,0; i&lt,0,0);线(c; e,0; for(i = 20,0; nextfunbox(nextcol; i#else #define __cppargs #endif #define minboxsize 15#定义BGColor 7#de细GX 200的#define GY 10的#define SJNUM 10000的#define VK_LEFT 0x4b00的#define VK_RIGHT数0x4D00的#define VK_DOWN 0x5000处的#define VK_UP 0x4800的#define VK_HOME 0x4700的#define VK_END 0x4f00的#define VK_SPACE 0x3920的#define VK_ESC 0x011b的#define VK_ENTER 0x1c0d的#define F_DONG 0 #define f_nan 1 #define f_xi 2 #define f_bei 3 #define nextcol 20 #define接下来12#定义maxrow 14 #define maxcol 20 #define sccol 100 #define吞咽60 int gril [22] [16],int bdcolor){ INT I,0; 4] [i%4] = boxstr [nextboxgs] [nextboxfx] [i],0; NextFunbox(NextCol,1:%S&&率,0,15),0;线(A + 1,0,0;对于i = 0:/,0; 4,0},minboxcolor,int B,1,1,10,1,Vgahi),4; Delgx ++,1,1; J ++)如果(boxz [i] [j] == 1)minbox((j +行+ a)* minboxize;线(a + 1,0}},0,173,0}}; i&lt ,0}; j&lt,0; j ++)if(gril [j] == 0)ZERO = 1,1,SCCOL + 15 * MINBOXSIZE + 2;在“4,4”,0,Nextrow,193,2,0,1,0,int BGColor,0;断裂,15),6;行= 7,0,0,0.0,0},0; j &lt,0; boxrad(),4);如果(零== 0){delcol(i),1,0; 4] [i%4] = boxstr [boxgs] [boxfx] [i],1, 0h&gt:&&quot,0,{1,maxcol = 22; funbox(0,0,bdcolor),int c; if(downok()){funbox(0; i ++)for(j = 0 ,1,0,b; i} void setgril(){int i; boxrad(),i * minboxisize; for(i = 0; for(i = 1;如果(gril [i] [j] == 1) minbox(j * minboxisize; 16,193,0,1,{0,0,0,0,0,1,{1,0,bgcolor,0,0,0,0,0,{{1; win(sccol + minboxsize-2; } else {funbox(0; j ++)如果(a [j] && gril [col + i] [行+ j + 1])k = 0;删除),0,nm,(i + col + b) * minboxsize; nextFunbox(NextCol,K = 1,GameJ [10] = {18,15),B + 1,0),0,0,{1,0,0; 4,0,1;,B-1 + minboxisize,0,0,0; col = 1,0,0;默认值,minboxcolor,1; for(j = 1; i&lt,0,j;} case vk_up; j ++)if(a [j])gril [col + i] [行+ j] = 1,j;} void killtimer() {禁用(); if(key == vk_esc)break,0,0; if(颜色,480),0,0),0; gril [i] [15] = 1; for(i = 0; call_key(key),1; 1,640,{1; txt(456; void call_key(int keyx){switch(keyx){case vk_down;){if(bioskey(1)){key = Bioskey(0),0,0,8,0,0 i&gt,b-1 + minboxize,nextminboxcolor; boxrad(),int color,0,0,0}; 4; Itxt(456,i * minboxisize, 203,{0,0,0,0,0,int颜色){setcolor(颜色); i&lt,1,0; \,1,b; int bdcolor){int a = 0;禁用(),1,0,1; I ++)for(j = 0; getch(),0,1,0; for(i = 0,0,1,1,1,bgcolor,1;} for(j = 1,1,0,0 ,0;误差; int boxz [4] [4]; txt(428,a [4] [4];线(a,nextrow,0; i ++)a [i /,{0; j&lt,1; i ++)a [i /,0,80,0,0 delete()。 H&GT,C; Conio,0; i - )for(j = 1,0; #include funbox(0,1,0,0}}; funcox(0,{1,0,a-1 + minboxsize; j ++)if(boxz [i] [j] == 1)minbox((j + a)* minboxisize,int c; sprintf(nm,0,0,1;} if(timercounter&gt,0,4),0,nm,bgcolor;线( A + 1,1,1,1,1,0,d),0,0;}}} void main(void){int i,0;} int}}}} intrefreeok(){int i,0}; Funbox(0,{0; j&lt,minboxcolor,0,“gril [21] [j] = 1; nextfunbox(nextcol,0,0,0.h>),0; j&lt,0},int b,97,minboxcolor,0,0),{1,0,0; 4,0 ;; for(i = 0,minboxcolor,&&Quaty,0;} void setTimer(__ cppargs)){oldhandler = getVect(定时器),0;} CLSCR(0,0,0,0},0; init(VGA,A [4] [4];栏(0,0,0,a; 10000,0,1,0; 16; 4; j - 如果(a [j] && gril [col + i] [行+ j])k = 0; 00000&QUOT,1,0,0,0; i>} void delcol(int a){int i,15),0;返回(k); void cls(){setfillstyle(solid_fill; txt(103,0),{1; clscr(456,0:{if(beftok())行 - ,bgcolor,0,0,行= 7,minboxcolor,1 ,bgcolor,1; setcolor(颜色),1; for(i = a,173,0; nextboxgs =随机(8),0; nextfunbox(nextcol,0,0,0,0,0; if(nextminboxcolor == 4 || nextminboxcolor == 7 || nextminboxcolor == 8)nextminboxcolor = 9; getch(); j&lt.0,扰乱+ minboxsize-2,1;如果(erroorcode,0),0; for(i = 0 ;%d“i&lt,0,1,0 ;; cls(),int字体,0,0; #include chotoctugh(),0; timezd(),&&q,0,0,1,0 ),0; j&lt,0,1,0; i ++)a [i /,243,1; void boxrad(){minboxcolor = nextminboxcolor
责任编辑(中山美穗)
以上就是关于**俄罗斯方块源码,c语言俄罗斯方块最简单代码**的全部内容,了解更多请关注蚂蚁资源网。
- 好牛通
- 求用JAVA编写俄罗斯方块游戏的源代码,俄罗斯方块——java源代码提供 import java.awt.*; import java.awt.event.*; //俄罗斯方块类 public class ERS_Block extends Frame{ public static boolean isPlay=false; public static int level=1,score=0; public static TextField scoreField,levelField; public static MyTimer timer; GameCanvas gameScr; public static void main(String[] argus){ ERS_Block ers = new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent"); WindowListener win_listener = new WinListener(); ers.addWindowListener(win_listener); } //俄罗斯方块类的构造方法 ERS_Block(String title){ super(title); setSize(600,480); setLayout(new GridLayout(1,2)); gameScr = new GameCanvas(); gameScr.addKeyListener(gameScr); timer = new MyTimer(gameScr); timer.setDaemon(true); timer.start(); timer.suspend(); add(gameScr); Panel rightScr = new Panel(); rightScr.setLayout(new GridLayout(2,1,0,30)); rightScr.setSize(120,500); add(rightScr); //右边信息窗体的布局 MyPanel infoScr = new MyPanel(); infoScr.setLayout(new GridLayout(4,1,0,5)); infoScr.setSize(120,300); rightScr.add(infoScr); //定义标签和初始值 Label scorep = new Label("分数:",Label.LEFT); Label levelp = new Label("级数:",Label.LEFT); scoreField = new TextField(8); levelField = new TextField(8); scoreField.setEditable(false); levelField.setEditable(false); infoScr.add(scorep); infoScr.add(scoreField); infoScr.add(levelp); infoScr.add(levelField); scorep.setSize(new Dimension(20,60)); scoreField.setSize(new Dimension(20,60)); levelp.setSize(new Dimension(20,60)); levelField.setSize(new Dimension(20,60)); scoreField.setText("0"); levelField.setText("1"); //右边控制按钮窗体的布局 MyPanel controlScr = new MyPanel(); controlScr.setLayout(new GridLayout(5,1,0,5)); rightScr.add(controlScr); //定义按钮play Button play_b = new Button("开始游戏"); play_b.setSize(new Dimension(50,200)); play_b.addActionListener(new Command(Command.button_play,gameScr)); //定义按钮Level UP Button level_up_b = new Button("提高级数"); level_up_b.setSize(new Dimension(50,200)); level_up_b.addActionListener(new Command(Command.button_levelup,gameScr)); //定义按钮Level Down Button level_down_b =new Button("降低级数"); level_down_b.setSize(new Dimension(50,200)); level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr)); //定义按钮Level Pause Button pause_b =new Button("游戏暂停"); pause_b.setSize(new Dimension(50,200)); pause_b.addActionListener(new Command(Command.button_pause,gameScr)); //定义按钮Quit Button quit_b = new Button("退出游戏"); quit_b.setSize(new Dimension(50,200)); quit_b.addActionListener(new Command(Command.button_quit,gameScr)); controlScr.add(play_b); controlScr.add(level_up_b); controlScr.add(level_down_b); controlScr.add(pause_b); controlScr.add(quit_b); setVisible(true); gameScr.requestFocus(); } } //重写MyPanel类,使Panel的四周留空间 class MyPanel extends Panel{ public Insets getInsets(){ return new Insets(30,50,30,50); } } //游戏画布类 class GameCanvas extends Canvas implements KeyListener{ final int unitSize = 30; //小方块边长 int rowNum; //正方格的行数 int columnNum; //正方格的列数 int maxAllowRowNum; //允许有多少行未削 int blockInitRow; //新出现块的起始行坐标 int blockInitCol; //新出现块的起始列坐标 int [][] scrArr; //屏幕数组 Block b; //对方快的引用 //画布类的构造方法 GameCanvas(){ rowNum = 15; columnNum = 10; maxAllowRowNum = rowNum - 2; b = new Block(this); blockInitRow = rowNum - 1; blockInitCol = columnNum/2 - 2; scrArr = new int [32][32]; } //初始化屏幕,并将屏幕数组清零的方法 void initScr(){ for(int i=0;i<rowNum;i++) for (int j=0; j<columnNum;j++) scrArr[j]=0; b.reset(); repaint(); } //重新刷新画布方法 public void paint(Graphics g){ for(int i = 0; i < rowNum; i++) for(int j = 0; j < columnNum; j++) drawUnit(i,j,scrArr[j]); } //画方块的方法 public void drawUnit(int row,int col,int type){ scrArr[row][col] = type; Graphics g = getGraphics(); tch(type){ //表示画方快的方法 case 0: g.setColor(Color.black);break; //以背景为颜色画 case 1: g.setColor(Color.blue);break; //画正在下落的方块 case 2: g.setColor(Color.magenta);break; //画已经落下的方法 } g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true); g.dispose(); } public Block getBlock(){ return b; //返回block实例的引用 } //返回屏幕数组中(row,col)位置的属性值 public int getScrArrXY(int row,int col){ if (row < 0 || row >= rowNum || col < 0 || col >= columnNum) return(-1); else return(scrArr[row][col]); } //返回新块的初始行坐标方法 public int getInitRow(){ return(blockInitRow); //返回新块的初始行坐标 } //返回新块的初始列坐标方法 public int getInitCol(){ return(blockInitCol); //返回新块的初始列坐标 } //满行删除方法 void deleteFullLine(){ int full_line_num = 0; int k = 0; for (int i=0;i<rowNum;i++){ boolean isfull = true; L1:for(int j=0;j<columnNum;j++) if(scrArr[j] == 0){ k++; isfull = false; break L1; } if(isfull) full_line_num++; if(k!=0 && k-1!=i && !isfull) for(int j = 0; j < columnNum; j++){ if (scrArr[j] == 0) drawUnit(k-1,j,0); else drawUnit(k-1,j,2); scrArr[k-1][j] = scrArr[j]; } } for(int i = k-1 ;i < rowNum; i++){ for(int j = 0; j < columnNum; j++){ drawUnit(i,j,0); scrArr[j]=0; } } ERS_Block.score += full_line_num; ERS_Block.scoreField.setText(""+ERS_Block.score); } //判断游戏是否结束方法 boolean isGameEnd(){ for (int col = 0 ; col <columnNum; col ++){ if(scrArr[maxAllowRowNum][col] !=0) return true; } return false; } public void keyTyped(KeyEvent e){ } public void keyReleased(KeyEvent e){ } //处理键盘输入的方法 public void keyPressed(KeyEvent e){ if(!ERS_Block.isPlay) return; tch(e.getKeyCode()){ case KeyEvent.VK_DOWN:b.fallDown();break; case KeyEvent.VK_LEFT:b.leftMove();break; case KeyEvent.VK_RIGHT:b.rightMove();break; case KeyEvent.VK_SPACE:b.leftTurn();break; } } } //处理控制类 class Command implements ActionListener{ static final int button_play = 1; //给按钮分配编号 static final int button_levelup = 2; static final int button_leveldown = 3; static final int button_quit = 4; static final int button_pause = 5; static boolean pause_resume = true; int curButton; //当前按钮 GameCanvas scr; //控制按钮类的构造方法 Command(int button,GameCanvas scr){ curButton = button; this.scr=scr; } //按钮执行方法 public void actionPerformed (ActionEvent e){ tch(curButton){ case button_play:if(!ERS_Block.isPlay){ scr.initScr(); ERS_Block.isPlay = true; ERS_Block.score = 0; ERS_Block.scoreField.setText("0"); ERS_Block.timer.resume(); } scr.requestFocus(); break; case button_levelup:if(ERS_Block.level < 10){ ERS_Block.level++; ERS_Block.levelField.setText(""+ERS_Block.level); ERS_Block.score = 0; ERS_Block.scoreField.setText(""+ERS_Block.score); } scr.requestFocus(); break; case button_leveldown:if(ERS_Block.level > 1){ ERS_Block.level--; ERS_Block.levelField.setText(""+ERS_Block.level); ERS_Block.score = 0; ERS_Block.scoreField.setText(""+ERS_Block.score); } scr.requestFocus(); break; case button_pause:if(pause_resume){ ERS_Block.timer.suspend(); pause_resume = false; }else{ ERS_Block.timer.resume(); pause_resume = true; } scr.requestFocus(); break; case button_quit:System.exit(0); } } } //方块类 class Block { static int[][] pattern = { {0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态 {0x04e0,0x0464,0x00e4,0x04c4}, {0x4620,0x6c00,0x4620,0x6c00}, {0x2640,0xc600,0x2640,0xc600}, {0x6220,0x1700,0x2230,0x0740}, {0x6440,0x0e20,0x44c0,0x8e00}, {0x0660,0x0660,0x0660,0x0660} }; int blockType; //块的模式号(0-6) int turnState; //块的翻转状态(0-3) int blockState; //快的下落状态 int row,col; //块在画布上的坐标 GameCanvas scr; //块类的构造方法 Block(GameCanvas scr){ this.scr = scr; blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random() * 1000)%4; blockState = 1; row = scr.getInitRow(); col = scr.getInitCol(); } //重新初始化块,并显示新块 public void reset(){ blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random() * 1000)%4; blockState = 1; row = scr.getInitRow(); col = scr.getInitCol(); dispBlock(1); } //实现“块”翻转的方法 public void leftTurn(){ if(assertValid(blockType,(turnState + 1)%4,row,col)){ dispBlock(0); turnState = (turnState + 1)%4; dispBlock(1); } } //实现“块”的左移的方法 public void leftMove(){ if(assertValid(blockType,turnState,row,col-1)){ dispBlock(0); col--; dispBlock(1); } } //实现块的右移 public void rightMove(){ if(assertValid(blockType,turnState,row,col+1)){ dispBlock(0); col++; dispBlock(1); } } //实现块落下的操作的方法 public boolean fallDown(){ if(blockState == 2) return(false); if(assertValid(blockType,turnState,row-1,col)){ dispBlock(0); row--; dispBlock(1); return(true); }else{ blockState = 2; dispBlock(2); return(false); } } //判断是否正确的方法 boolean assertValid(int t,int s,int row,int col){ int k = 0x8000; for(int i = 0; i < 4; i++){ for(int j = 0; j < 4; j++){ if((int)(pattern[t][s]&k) != 0){ int temp = scr.getScrArrXY(row-i,col+j); if (temp<0||temp==2) return false; } k = k >> 1; } } return true; } //同步显示的方法 public synchronized void dispBlock(int s){ int k = 0x8000; for (int i = 0; i < 4; i++){ for(int j = 0; j < 4; j++){ if(((int)pattern[blockType][turnState]&k) != 0){ scr.drawUnit(row-i,col+j,s); } k=k>>1; } } } } //定时线程 class MyTimer extends Thread{ GameCanvas scr; public MyTimer(GameCanvas scr){ this.scr = scr; } public void run(){ while(true){ try{ sleep((10-ERS_Block.level + 1)*100); } catch(InterruptedException e){} if(!scr.getBlock().fallDown()){ scr.deleteFullLine(); if(scr.isGameEnd()){ ERS_Block.isPlay = false; suspend(); }else scr.getBlock().reset(); } } } } class WinListener extends WindowAdapter{ public void windowClosing (WindowEvent l){ System.exit(0); } } 22
- 2021-02-11 20:31:55
- 金牛科技
- #pragma once#include "afxwin.h"#include "Resource.h"const int BLOCK_LINE = 20;const int BLOCK_ROW = 10;class CBlock{public: CBlock(void); ~CBlock(void);private: int m_BlockShape; int m_nextBlockShape; int m_BlockState; int m_BlockLevel; int m_BlockCurDelLine; bool m_blockRunning; POINT m_BlockPos[4]; POINT m_nextBlockPos[4]; int m_Blockmap[BLOCK_LINE][BLOCK_ROW];public: void BlockInit( void );private: CBitmap m_bmpBlock[7];public: void CreateNewBlock(void); void MakeNewBlock(int shape, POINT pt[], int xPos); //CDC memDC; void DrawBlock(CDC* pDC); void BlockDropDown(CDC* pDC); void HideBlock(CDC* pDC);private: CBitmap m_bmpBKGND;public: void DrawNextBlock( CDC* pDC ); void BlockLeft(CDC* pDC); void BlockRight(CDC* pDC); void BlockFastDown(CDC* pDC); void ChangeState(CDC* pDC); void DeleteLine(CDC* pDC, int LineNum, bool start); bool BlockGameOver(void); void BlockScore(int del, CDC* pDC); bool BlockLevelUp(void); int BlockSpeed(void);};#include "StdAfx.h"#include "Block.h"CBlock::CBlock(void){ srand( (unsigned)time(NULL) ); m_BlockShape = 0; m_nextBlockShape = rand()%7; m_BlockState = 0; m_BlockLevel = 1; m_BlockCurDelLine = 0; m_blockRunning = false; memset(m_Blockmap, 0, sizeof(m_Blockmap) );}CBlock::~CBlock(void){}void CBlock::BlockInit( void ){ for( int i=0; i<7; i++) { m_bmpBlock[i].LoadBitmapW( IDB_BLOCKBAR+i ); } m_bmpBKGND.LoadBitmapW( IDB_BMPBACK );}void CBlock::CreateNewBlock(void){ m_BlockShape = m_nextBlockShape; m_nextBlockShape = rand()%7; m_BlockState = 0; MakeNewBlock( m_BlockShape, m_BlockPos, 4 );}void CBlock::MakeNewBlock(int shape, POINT pt[], int xPos){ switch(shape) { case 0: for(int i=0; i<4; i++) { pt[i].x=i+xPos; pt[i].y=0; } break; case 1: pt[0].x = 1+xPos; pt[0].y = 0; for(int i=1; i<4; i++) { pt[i].x = i-1+xPos; pt[i].y = 1; } break; case 2: pt[0].x = 0+xPos; pt[0].y = 0; pt[1].x = 1+xPos; pt[1].y = 0; pt[2].x = 1+xPos; pt[2].y = 1; pt[3].x = 2+xPos; pt[3].y = 1; break; case 3: pt[0].x = 0+xPos; pt[0].y = 1; pt[1].x = 1+xPos; pt[1].y = 1; pt[2].x = 1+xPos; pt[2].y = 0; pt[3].x = 2+xPos; pt[3].y = 0; break; case 4: pt[0].x = 0+xPos; pt[0].y = 0; for(int i=1; i<4; i++) { pt[i].x = i-1+xPos; pt[i].y = 1; } break; case 5: pt[0].x = 2+xPos; pt[0].y = 0; for(int i=1; i<4; i++) { pt[i].x = i-1+xPos; pt[i].y = 1; } break; case 6: for(int i=0; i<2; i++) { pt[i].x = i+xPos; pt[i].y = 0; pt[i+2].x = i+xPos; pt[i+2].y = 1; } break; default: break; }}void CBlock::DrawBlock(CDC* pDC){ //BlockInit(); //MakeNewBlock( m_BlockShape, m_BlockPos, 4 ); CDC memDC; memDC.CreateCompatibleDC(pDC); memDC.SelectObject( &m_bmpBlock[m_BlockShape] ) ; int x = BLOCK_X; int y = BLOCK_Y; for( int i = 0; i<4; i++ ) { x = BLOCK_X + m_BlockPos[i].x*BLOCK_WIDTH; y = BLOCK_Y + m_BlockPos[i].y*BLOCK_HEIGHT; pDC->BitBlt( x, y, 20, 20, &memDC, 0, 0, SRCCOPY ); }}void CBlock::BlockDropDown( CDC* pDC ){ int i,j; bool bAbleDrop = true; for( i=0; i<4; i++ ) { if( 19 == m_BlockPos[i].y || 0 != m_Blockmap[m_BlockPos[i].y+1][m_BlockPos[i].x] ) { bAbleDrop = false; break; } } if( true == bAbleDrop ) { HideBlock( pDC ); for( i=0; i<4; i++ ) { m_BlockPos[i].y++; } DrawBlock( pDC ); } else { for( i=0; i<4; i++ ) { m_Blockmap[m_BlockPos[i].y][m_BlockPos[i].x] = m_BlockShape+1; } for( i=0; i<20; i++ ) { for( j=0; j<10; j++ ) { if( 0 == m_Blockmap[i][j] ) { break; } } if( 10 == j ) { DeleteLine( pDC, i, false ); m_BlockCurDelLine++; BlockScore(1, pDC ); } } CreateNewBlock(); MakeNewBlock( m_BlockShape, m_BlockPos, 4 ); DrawBlock( pDC ); DrawNextBlock( pDC ); }}void CBlock::HideBlock(CDC* pDC){ CDC bkDC; bkDC.CreateCompatibleDC(pDC); bkDC.SelectObject(m_bmpBKGND); int x, y; for( int i=0; i<4; i++ ) { x = BLOCK_X+BLOCK_WIDTH*m_BlockPos[i].x; y = BLOCK_Y+BLOCK_HEIGHT*m_BlockPos[i].y; pDC->BitBlt( x, y, BLOCK_WIDTH, BLOCK_HEIGHT, &bkDC, x, y, SRCCOPY ); } bkDC.DeleteDC();}void CBlock::DrawNextBlock( CDC* pDC ){ CDC bkDC; bkDC.CreateCompatibleDC( pDC ); bkDC.SelectObject( m_bmpBKGND ); int x ,y; pDC->BitBlt( NEXTBLOCK_X, NEXTBLOCK_Y, NEXTBLOCK_WIDTH, NEXTBLOCK_HEIGHT, &bkDC, NEXTBLOCK_X, NEXTBLOCK_Y, SRCCOPY ); MakeNewBlock( m_nextBlockShape, m_nextBlockPos, 0 ); bkDC.SelectObject( m_bmpBlock[m_nextBlockShape] ); if( 0 == m_nextBlockShape ) { for( int i=0; i<4; i++ ) { x = NEXTBLOCK_X + 15 + BLOCK_WIDTH*m_nextBlockPos[i].x; y = NEXTBLOCK_Y + 47 + BLOCK_HEIGHT*m_nextBlockPos[i].y; pDC->BitBlt( x, y, BLOCK_WIDTH, BLOCK_HEIGHT, &bkDC, 0, 0, SRCCOPY ); } } else if( 6 == m_nextBlockShape ) { for( int i=0; i<4; i++ ) { x = NEXTBLOCK_X + 35 + BLOCK_WIDTH*m_nextBlockPos[i].x; y = NEXTBLOCK_Y + 38 + BLOCK_HEIGHT*m_nextBlockPos[i].y; pDC->BitBlt( x, y, BLOCK_WIDTH, BLOCK_HEIGHT, &bkDC, 0, 0, SRCCOPY ); } } else { for( int i=0; i<4; i++ ) { x = NEXTBLOCK_X + 24 + BLOCK_WIDTH*m_nextBlockPos[i].x; y = NEXTBLOCK_Y + 38 + BLOCK_HEIGHT*m_nextBlockPos[i].y; pDC->BitBlt( x, y, BLOCK_WIDTH, BLOCK_HEIGHT, &bkDC, 0, 0, SRCCOPY ); } }}void CBlock::BlockLeft(CDC* pDC){ for( int i=0; i<4; i++ ) { if( m_BlockPos[i].x <= 0 ) return; if( 0 != m_Blockmap[m_BlockPos[i].y][m_BlockPos[i].x-1] ) return; } HideBlock( pDC ); for( int i=0; i<4; i++ ) { m_BlockPos[i].x -= 1; } DrawBlock( pDC );}void CBlock::BlockRight(CDC* pDC){ for( int i=0; i<4; i++ ) { if( m_BlockPos[i].x >= 9 ) return; if( 0 != m_Blockmap[m_BlockPos[i].y][m_BlockPos[i].x+1] ) return; } HideBlock( pDC ); for( int i=0; i<4; i++ ) { m_BlockPos[i].x += 1; } DrawBlock( pDC );}void CBlock::BlockFastDown(CDC* pDC){ for( int i=0; i<4; i++ ) { if( m_BlockPos[i].y >= 19 ) return; if( 0 != m_Blockmap[m_BlockPos[i].y+1][m_BlockPos[i].x] ) return; } HideBlock( pDC ); for( int i=0; i<4; i++ ) { m_BlockPos[i].y += 1; } DrawBlock( pDC );}#include "StdAfx.h"#include "Block.h"CBlock::CBlock(void){ srand( (unsigned)time(NULL) ); m_BlockShape = 0; m_nextBlockShape = rand()%7; m_BlockState = 0; m_BlockLevel = 1; m_BlockCurDelLine = 0; m_blockRunning = false; memset(m_Blockmap, 0, sizeof(m_Blockmap) );}CBlock::~CBlock(void){}void CBlock::BlockInit( void ){ for( int i=0; i<7; i++) { m_bmpBlock[i].LoadBitmapW( IDB_BLOCKBAR+i ); } m_bmpBKGND.LoadBitmapW( IDB_BMPBACK );}void CBlock::CreateNewBlock(void){ m_BlockShape = m_nextBlockShape; m_nextBlockShape = rand()%7; m_BlockState = 0; MakeNewBlock( m_BlockShape, m_BlockPos, 4 );}void CBlock::MakeNewBlock(int shape, POINT pt[], int xPos){ switch(shape) { case 0: for(int i=0; i<4; i++) { pt[i].x=i+xPos; pt[i].y=0; } break; case 1: pt[0].x = 1+xPos; pt[0].y = 0; for(int i=1; i<4; i++) { pt[i].x = i-1+xPos; pt[i].y = 1; } break; case 2: pt[0].x = 0+xPos; pt[0].y = 0; pt[1].x = 1+xPos; pt[1].y = 0; pt[2].x = 1+xPos; pt[2].y = 1; pt[3].x = 2+xPos; pt[3].y = 1; break; case 3: pt[0].x = 0+xPos; pt[0].y = 1; pt[1].x = 1+xPos; pt[1].y = 1; pt[2].x = 1+xPos; pt[2].y = 0; pt[3].x = 2+xPos; pt[3].y = 0; break; case 4: pt[0].x = 0+xPos; pt[0].y = 0; for(int i=1; i<4; i++) { pt[i].x = i-1+xPos; pt[i].y = 1; } break; case 5: pt[0].x = 2+xPos; pt[0].y = 0; for(int i=1; i<4; i++) { pt[i].x = i-1+xPos; pt[i].y = 1; } break; case 6: for(int i=0; i<2; i++) { pt[i].x = i+xPos; pt[i].y = 0; pt[i+2].x = i+xPos; pt[i+2].y = 1; } break; default: break; }}void CBlock::DrawBlock(CDC* pDC){ CDC memDC; memDC.CreateCompatibleDC(pDC); memDC.SelectObject( &m_bmpBlock[m_BlockShape] ) ; int x = BLOCK_X; int y = BLOCK_Y; for( int i = 0; i<4; i++ ) { x = BLOCK_X + m_BlockPos[i].x*BLOCK_WIDTH; y = BLOCK_Y + m_BlockPos[i].y*BLOCK_HEIGHT; pDC->BitBlt( x, y, 20, 20, &memDC, 0, 0, SRCCOPY ); }}void CBlock::BlockDropDown( CDC* pDC ){ int i,j; bool bAbleDrop = true; for( i=0; i<4; i++ ) { if( 19 == m_BlockPos[i].y || 0 != m_Blockmap[m_BlockPos[i].y+1][m_BlockPos[i].x] ) { bAbleDrop = false; break; } } if( true == bAbleDrop ) { HideBlock( pDC ); for( i=0; i<4; i++ ) { m_BlockPos[i].y++; } DrawBlock( pDC ); } else { for( i=0; i<4; i++ ) { m_Blockmap[m_BlockPos[i].y][m_BlockPos[i].x] = m_BlockShape+1; } for( i=0; i<20; i++ ) { for( j=0; j<10; j++ ) { if( 0 == m_Blockmap[i][j] ) { break; } } if( 10 == j ) { DeleteLine( pDC, i, false ); m_BlockCurDelLine++; BlockScore(1, pDC ); } } CreateNewBlock(); MakeNewBlock( m_BlockShape, m_BlockPos, 4 ); DrawBlock( pDC ); DrawNextBlock( pDC ); }}void CBlock::HideBlock(CDC* pDC){ CDC bkDC; bkDC.CreateCompatibleDC(pDC); bkDC.SelectObject(m_bmpBKGND); int x, y; for( int i=0; i<4; i++ ) { x = BLOCK_X+BLOCK_WIDTH*m_BlockPos[i].x; y = BLOCK_Y+BLOCK_HEIGHT*m_BlockPos[i].y; pDC->BitBlt( x, y, BLOCK_WIDTH, BLOCK_HEIGHT, &bkDC, x, y, SRCCOPY ); } bkDC.DeleteDC();}void CBlock::DrawNextBlock( CDC* pDC ){ CDC bkDC; bkDC.CreateCompatibleDC( pDC ); bkDC.SelectObject( m_bmpBKGND ); int x ,y; pDC->BitBlt( NEXTBLOCK_X, NEXTBLOCK_Y, NEXTBLOCK_WIDTH, NEXTBLOCK_HEIGHT, &bkDC, NEXTBLOCK_X, NEXTBLOCK_Y, SRCCOPY ); MakeNewBlock( m_nextBlockShape, m_nextBlockPos, 0 ); bkDC.SelectObject( m_bmpBlock[m_nextBlockShape] ); if( 0 == m_nextBlockShape ) { for( int i=0; i<4; i++ ) { x = NEXTBLOCK_X + 15 + BLOCK_WIDTH*m_nextBlockPos[i].x; y = NEXTBLOCK_Y + 47 + BLOCK_HEIGHT*m_nextBlockPos[i].y; pDC->BitBlt( x, y, BLOCK_WIDTH, BLOCK_HEIGHT, &bkDC, 0, 0, SRCCOPY ); } } else if( 6 == m_nextBlockShape ) { for( int i=0; i<4; i++ ) { x = NEXTBLOCK_X + 35 + BLOCK_WIDTH*m_nextBlockPos[i].x; y = NEXTBLOCK_Y + 38 + BLOCK_HEIGHT*m_nextBlockPos[i].y; pDC->BitBlt( x, y, BLOCK_WIDTH, BLOCK_HEIGHT, &bkDC, 0, 0, SRCCOPY ); } } else { for( int i=0; i<4; i++ ) { x = NEXTBLOCK_X + 24 + BLOCK_WIDTH*m_nextBlockPos[i].x; y = NEXTBLOCK_Y + 38 + BLOCK_HEIGHT*m_nextBlockPos[i].y; pDC->BitBlt( x, y, BLOCK_WIDTH, BLOCK_HEIGHT, &bkDC, 0, 0, SRCCOPY ); } }}void CBlock::BlockLeft(CDC* pDC){ for( int i=0; i<4; i++ ) { if( m_BlockPos[i].x <= 0 ) return; if( 0 != m_Blockmap[m_BlockPos[i].y][m_BlockPos[i].x-1] ) return; } HideBlock( pDC ); for( int i=0; i<4; i++ ) { m_BlockPos[i].x -= 1; } DrawBlock( pDC );}void CBlock::BlockRight(CDC* pDC){ for( int i=0; i<4; i++ ) { if( m_BlockPos[i].x >= 9 ) return; if( 0 != m_Blockmap[m_BlockPos[i].y][m_BlockPos[i].x+1] ) return; } HideBlock( pDC ); for( int i=0; i<4; i++ ) { m_BlockPos[i].x += 1; } DrawBlock( pDC );}void CBlock::BlockFastDown(CDC* pDC){ for( int i=0; i<4; i++ ) { if( m_BlockPos[i].y >= 19 ) return; if( 0 != m_Blockmap[m_BlockPos[i].y+1][m_BlockPos[i].x] ) return; } HideBlock( pDC ); for( int i=0; i<4; i++ ) { m_BlockPos[i].y += 1; } DrawBlock( pDC );}
- 2021-02-11 20:31:55
- Lu珊Han
- 是俄罗斯方块 但不晓得是不是手机游戏 #include <graphics.h> #include <stdio.h> #include <dos.h> #include <conio.h> #include <time.h> #include <math.h> #include <stdlib.h> void draw_block(int x,int y,int style,int way); void kill_line(int y); void draw_little_block(int x,int y,int z,int style); int check_block(int x,int y,int style); int change(int *i,int *j,int key); int style1,style,score,speed,l; int board[10][20]; char str[100]; struct shape { int xy[8],next; }; struct shape shapes[19]= /* 19种方块(前 8个点表示4个小方块的相对位置 第9点表示类型) */ { { 0,-2, 0,-1, 0, 0, 1, 0, 1 }, {-1, 0, 0, 0, 1,-1, 1, 0, 2}, { 0,-2, 1,-2, 1,-1, 1, 0, 3}, {-1,-1,-1, 0, 0,-1, 1,-1, 0}, { 0,-2, 0,-1, 0, 0, 1,-2, 5}, {-1,-1, 0,-1, 1,-1, 1, 0, 6}, { 0, 0, 1,-2, 1,-1, 1, 0, 7}, {-1,-1,-1, 0, 0, 0, 1, 0, 4}, {-1, 0, 0,-1, 0, 0, 1, 0, 9}, { 0,-2, 0,-1, 0, 0, 1,-1,10}, {-1,-1, 0,-1, 1,-1, 0, 0,11}, { 0,-1, 1,-2, 1,-1, 1, 0, 8}, {-1, 0, 0,-1, 0, 0, 1,-1,13}, { 0,-2, 0,-1, 1,-1, 1, 0,12}, {-1,-1, 0,-1, 0, 0, 1, 0,15}, { 0,-1, 0, 0, 1,-2, 1,-1,14}, { 0,-3, 0,-2, 0,-1, 0, 0,17}, {-1, 0, 0, 0, 1, 0, 2, 0,16}, { 0,-1, 0, 0, 1,-1, 1, 0,18} }; #define MAPXOFT 9 /* 第1个方块的位置 */ #define MAPYOFT 5 #define MAPXOFT1 18 /* 下一个方块的位置 */ #define MAPYOFT1 17 #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b #define ENTER 0x1c0d int main() { int gdriver,gmode, i,j,key,x0=5,y0=1,m,n,c,key1,p,q,le=0,b; l=1,score=0; gdriver=DETECT; initgraph(&gdriver,&gmode,"D:\\TURBOC2"); randomize(); for(m=0;m<=19;m++) for(n=0;n<=19;n++) board[m][n]=0; /* 初始游戏版 */ setcolor(10); /* 开机的画面 */ settextstyle(0,0,3); outtextxy(10,150,"WELCOME TO RUSSIS"); outtextxy(10,250,"READY GO"); setcolor(14); settextstyle (0,0,4); outtextxy(10,350,"^_^"); /* circle(400,350,60); ellipse(370,340,60,120,25,25); ellipse(430,340,60,120,25,25); ellipse(400,350,225,315,30,30);*/ getch(); settextstyle(0,0,1); cleardevice(); setcolor(LIGHTRED); /* 画出游戏所在的范围图 */ setlinestyle(0,0,3); setfillstyle(1,14); rectangle(157,419,533,429); floodfill(300,424,LIGHTRED); setcolor(LIGHTRED); setlinestyle(0,0,3); setfillstyle(1,14); rectangle(147,95,157,429); floodfill(152,200,LIGHTRED); setcolor(LIGHTRED); setlinestyle(0,0,3); setfillstyle(1,14); rectangle(323,95,333,429); floodfill(330,320,LIGHTRED); setcolor(LIGHTRED); setlinestyle(0,0,1); setfillstyle(1,BLUE); rectangle(450,50,500,70); floodfill(455,55,LIGHTRED); setcolor(10); for(m=0;m<=10;m=m+2) ellipse(240,94,0,180,84+m,84+m); setcolor(14); setfillstyle(1,0); circle(440,330,60); floodfill(440,330,14); outtextxy(420,80,"* you can change the game"); /* 对游戏的说明 */ outtextxy(440,90,"-speed and the gradth by"); /* 上为变形 左右 为 调整 下为快下 ESC为退出 */ outtextxy(440,100," using 'up'and'down'."); outtextxy(420,110,"* when you are plying the"); outtextxy(440,120,"game,you can use these pu"); outtextxy(440,130,"-tturns."); outtextxy(420,140,"* if you want to go into t"); outtextxy(440,150,"-he game,please 'enter'."); outtextxy(420,160,"* you can chang shapes "); outtextxy(440,170," using UP"); outtextxy(420,180,"* RIGHT and LEFT can" ); outtextxy(440,190," move shapes"); outtextxy(10,40,"GAMESPEED:"); outtextxy(10,100,"GRADTH:"); printf("\n\n\n 1"); printf("\n\n\n\n 0"); /* setcolor(LIGHTRED); setlinestyle(0,0,1); setfillstyle(1,10); rectangle(10,65,110,85); floodfill(15,75,LIGHTRED); */ outtextxy(450,40,"SCORES:"); outtextxy(10,190,"**The speed will"); outtextxy(10,200,"increas if score"); outtextxy(10,210,"increas 3"); for(p=0;p<=100;p++) /* 对速度的调整 */ { key=bioskey(0); if(key==ENTER) break; if(key==UP) { if(l==9) l=9; if(l<9) l++; } if(key==DOWN) { if(l==1) l=l; if(l>1) l--; } gotoxy(2,4); printf("%d",l); } for(q=0;q<=100;q++) /* 对高度的调整 */ { key=bioskey(0); if(key==ENTER) break; if(key==UP) { if(le==5) le=le; if(le<5) le++; } if(key==DOWN) { if(le==0) le=le; if(le>0) le--; } gotoxy(2,8); printf("%d",le); } key=bioskey(0); if(key==ENTER) { style=random(19); for(m=1;m<=le;m++) /* 具体的对高度的调整 */ { b=random(7)+1; for(n=1;n<=10;n++) { if(random(2)) { board[n-1][20-m]=1; draw_little_block(MAPXOFT+n,MAPYOFT+21-m,1,b); } } } while(1) { while(1) { i=x0,j=y0; style1=random(19); setcolor(14); /* 画出下一个方 块 */ draw_block(MAPXOFT1,MAPYOFT1,style1,1); for(j=y0;j<=20;j++) { while(1) { if(bioskey(1)) /* 方块的 调整 */ { key=bioskey(0); change(&i,&j,key); } if(!check_block (i,j+1,style)) /* 判断方块能不能下降 */ break; if(j==20) break; if(speed==1) { draw_block (i,j,style,0); /* 方块的下降 */ j++; draw_block (i,j,style,1); delay(10000); } if(speed!=1) { m++; delay (10000); if(m>=3*(10-l)) { m=0; draw_block (i,j,style,0); /* 方块的下降 */ j++; draw_block (i,j,style,1); } } } speed=0; for(m=0;m<=6;m+=2) /* 对有方块的位置给予1 的数值 */ board[i+shapes[style].xy[m]-1] [j+shapes[style].xy[m+1]-1]=1; if(board[ i][4]==1) { setcolor(14); settextstyle(0,0,2); outtextxy(10,450,"CAREFUL -_-"); delay(100000000); delay(100000000); setcolor(0); outtextxy(10,450,"CAREFUL -_-"); settextstyle(0,0,1); setcolor(LIGHTRED); } /* setcolor(LIGHTRED); setlinestyle(0,0,1); setfillstyle(1,10); rectangle(10,65,110,85); floodfill(15,75,LIGHTRED);*/ if(l==1) /* 显示当前游戏等级 */ { setcolor(LIGHTRED); setlinestyle(0,0,1); /* 容易的速度 */ setfillstyle(1,10); rectangle(10,65,110,85); floodfill(15,75,LIGHTRED); outtextxy(7,70," easy speed"); } if(l==4) { setcolor(BLACK); outtextxy(7,70," easy speed"); setcolor(LIGHTRED); /* 中等难度 */ setlinestyle(0,0,1); setfillstyle(1,10); rectangle(10,65,110,85); floodfill(15,75,LIGHTRED); outtextxy(7,70," normal speed"); } if(l==7) { setcolor(BLACK); outtextxy(7,70," normal speed"); setcolor(LIGHTRED); setlinestyle(0,0,1); /* 困难的难度 */ setfillstyle(1,10); rectangle(10,65,110,85); floodfill(15,75,LIGHTRED); outtextxy(7,70," hard speed"); } kill_line(j); if(j==20) break; if(!check_block(i,j+1,style)) break; } draw_block(MAPXOFT1,MAPYOFT1,style1,0); /* 对下1个方块显示位置进行覆盖 */ style=style1; /* 使的方块和显示的方块一样 */ if(j==1) /* 关机的画面 */ { setcolor(14); settextstyle(0,0,2); outtextxy(170,200,"GAME OVER"); outtextxy(170,240,"THANK YOU"); sleep(3); exit(0); } } } } getch(); } int change(int *i,int *j,int key) /* 方块的具体的变化( 移动 变形 下降) */ { if(key==UP&&check_block(*i,*j,shapes[style].next)) /* 变形 */ { draw_block(*i,*j,style,0); style=shapes[style].next; draw_block(*i,*j,style,1); } else if(key==LEFT&&check_block(*i-1,*j,style)) /* 移动 */ { draw_block(*i,*j,style,0); (*i)--; draw_block(*i,*j,style,1); } else if(key==RIGHT&&check_block(*i+1,*j,style)) { draw_block(*i,*j,style,0); (*i)++; draw_block(*i,*j,style,1); } else if(key==DOWN&&check_block(*i,*j+1,style)) /* 下降 */ { draw_block(*i,*j,style,0); (*j)++; draw_block(*i,*j,style,1); speed=1; } else if(key==ESC) /* 退出 */ exit(0); } void draw_block(int x,int y,int style,int way) /* 画出方块 的位置 */ { int x1=x+MAPXOFT,y1=y+MAPYOFT; int i; if(way==1) { setcolor(WHITE); } else { setcolor(BLACK); } for(i=0;i<=6;i+=2) { draw_little_block(x1+shapes[style].xy[ i],y1+shapes[style].xy[i+1],way,style); } } void draw_little_block(int x,int y,int z,int style) /* 画 出方块的每一个小方块的形状(方块的色彩) */ { int m,n; if(z==1) /* 对色彩的调整 */ { if(0<=style&&style<=3) n=2; if(4<=style&&style<=7) n=3; if(8<=style&&style<=11) n=4; if(12<=style&&style<=13) n=5; if(14<=style&&style<=15) n=6; if(16<=style&&style<=17) n=7; if(style==18) n=8; m=1; } if(z==0) { m=0,n=0; } setcolor(m); setfillstyle(1,n); rectangle(x*16,y*16,x*16+16,y*16+16); floodfill(x*16+2,y*16+2,m); } void kill_line(int y) /* 消行 */ { int i,t=1,j,k,color=random(7)+1; for(;y>=1&&t<=4;y--,t++) /* 对4行进行验证 */ { for(i=1;i<=10;i++) if(!board[i-1][y-1]) /* 严整1行的数组是不是全 为1 */ break; if(i==11) { setcolor(LIGHTRED); /* 对积分底色的画法 */ setlinestyle(0,0,1); setfillstyle(1,BLUE); rectangle(450,50,500,70); floodfill(455,55,LIGHTRED); score++; /* 每消去1行 可以得1分 */ setcolor(14); itoa(score,str,10); outtextxy(460,55,str); if(score!=0&&score%3==0) l++; /* 每次分到一定位置是 速度进 行提高(目前是3行加1次 可以调整) */ setcolor(14); /* 每次消去是进行庆祝模式 */ settextstyle(0,0,4); outtextxy(10,310,"COOL"); outtextxy(10,270,"^_^"); delay(100000000); delay(100000000); delay(100000000); setcolor(BLACK); settextstyle(0,0,4); outtextxy(10,310,"COOL"); outtextxy(10,270,"^_^"); settextstyle(0,0,1); if(score%3==0&&score!=0) { setcolor(14); settextstyle(0,0,2); outtextxy(10,435,"CONGRATULATION ON YOU ^_^"); sleep(2); setcolor(BLACK); settextstyle(0,0,2); outtextxy(10,435,"CONGRATULATION ON YOU ^_^ "); settextstyle(0,0,1); } for(k=1;k<=10;k++) /* 对满了行进行消去 */ { setcolor(BLACK); draw_little_block (k+MAPXOFT,y+MAPYOFT,0,2); } for(j=y-1;j>=1;j--) /* 消去1行后 用上面的 累下来(并且调整色彩) */ for(k=1;k<=10;k++) { board[k-1][j]=board[k-1][j-1]; if(board[k-1][j]) { setcolor(BLACK); draw_little_block (k+MAPXOFT,j+MAPYOFT,0,2); setcolor(WHITE); draw_little_block (k+MAPXOFT,j+1+MAPYOFT,1,color); } } delay(100000000000); y++; } } } int check_block(int x,int y,int style) /* 验证能不能往下1 个位置累方块 */ { int x1=x+MAPXOFT,y1=y+MAPYOFT; int x2,y2,i; for(i=0;i<=6;i+=2) { x2=x1+shapes[style].xy[ i]; y2=y1+shapes[style].xy[i+1]; if(x2>=10&&x2<20&&y2<26&&(y2<6||board[x2-10][y2- 6]==0)) continue; else break; } if(i==8) return 1; else return 0; getch(); }
- 2021-02-22 09:55:01