为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

俄罗斯方块代码 C++(

2017-10-15 17页 doc 37KB 82阅读

用户头像

is_079973

暂无简介

举报
俄罗斯方块代码 C++(俄罗斯方块代码 C++( #include #include #include #include #include #include #include #define ESC 0x011b #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define RIGHT 0x4d00 #define SPACE 0x3920 #define Y 0x1579 #define N 0x316e #define clearkbd(); while...
俄罗斯方块代码 C++(
俄罗斯方块代码 C++( #include #include #include #include #include #include #include #define ESC 0x011b #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define RIGHT 0x4d00 #define SPACE 0x3920 #define Y 0x1579 #define N 0x316e #define clearkbd(); while(bioskey(1)) bioskey(0); void update(); void messagebox(); void process(); void initremove(); void initinfo(); void initbox(); void initposition(); void next_shape(); typedef struct shape { int attr; int co[8]; }shape; typedef struct RE_AB { int Rx,Ry; int x1,x2,y1,y2; }RE_AB; RE_AB RA; shape p[19]={ { RED,0,1,1,0,1,1,2,1 }, { RED,0,1,1,0,1,1,1,2 }, { RED,0,0,1,0,2,0,1,1 }, { RED,0,0,0,1,1,1,0,2 }, { GREEN,0,0,1,0,2,0,3,0 }, { GREEN,0,0,0,1,0,2,0,3 }, { CYAN,0,0,0,1,1,0,1,1 }, { BROWN,0,0,1,0,1,1,2,1 }, { BROWN,1,0,0,1,1,1,0,2 }, { BLUE,1,0,2,0,1,1,0,1 }, { BLUE,0,0,0,1,1,1,1,2 }, { MAGENTA,0,0,0,1,0,2,1,2 }, { MAGENTA,2,0,0,1,1,1,2,1}, { MAGENTA,0,0,1,0,1,1,1,2 }, { MAGENTA,0,0,0,1,1,0,2,0 }, { YELLOW,0,2,1,0,1,1,1,2 }, { YELLOW,0,0,1,0,2,0,2,1 }, { YELLOW,1,0,0,0,0,1,0,2}, { YELLOW,0,0,0,1,1,1,2,1 }, }; int nback,nleft,nright,r_f[12][22],rs1,rs2,xcors,xcorb,ycors,ycorb; void interrupt (*oldint)(); int count_down=0,count_other=0; void interrupt newint() { count_down++; count_other++; oldint(); } void intenable() { oldint=getvect(0x1c); disable(); setvect(0x1c,newint); enable(); } void intrestore() { disable(); setvect(0x1c,oldint); enable(); } void HZ12(int x0,int y0,int w,int color,char *s) { FILE *fp; register char buffer[24]; register char str[2]; unsigned long fpos; register int i,j,k; fp=fopen("hzk12","r"); while(*s) { if(*s<0) { str[0]=(*s)-0xa0; str[1]=*(s+1)-0xa0; fpos=((str[0]-1)*94+(str[1]-1))*24L; fseek(fp,fpos,SEEK_SET); fread(buffer,24,1,fp); for(i=0;i<12;i++) for(j=0;j<2;j++) for(k=0;k<8;k++) if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL) putpixel(x0+8*j+k,y0+i,color); s+=2; x0+=w; } else { settextstyle(0,0,1); setcolor(color); str[0]=*s;str[1]=0; outtextxy(x0,y0+3,str); x0+=w-7; s++; } } fclose(fp); } void translation() { if(RA.Rx==1) { RA.x1=1; RA.x2=16; } else { RA.x1=16*(RA.Rx-1); RA.x2=16*RA.Rx; } if(RA.Ry==1) { RA.y1=1; RA.y2=16; } else { RA.y1=16*(RA.Ry-1); RA.y2=16*RA.Ry; } } int check_b() { int x,y,i,zf=0; for(i=0;i<7;i++,i++) { x=RA.Rx+p[rs1].co[i]; y=RA.Ry+p[rs1].co[i+1]; if(y>=6) zf+=r_f[x-15][y-6+1]; } if(zf==0) return 1; else return 0; } int finish() { int tfull=0,i; for(i=1;i<11;i++) tfull+=r_f[i][1]; if(tfull!=0) return 1; } int check_l() { int x,y,i,zf=0; for(i=0;i<7;i++,i++) { x=RA.Rx+p[rs1].co[i]; y=RA.Ry+p[rs1].co[i+1]; if(y>6) zf+=r_f[x-15-1][y-6]; if(y<=6&&x==16) zf+=1; } if(zf==0) return 1; else return 0; } int check_r() { int x,y,i,zf=0; for(i=0;i<7;i++,i++) { x=RA.Rx+p[rs1].co[i]; y=RA.Ry+p[rs1].co[i+1]; if(y>6) zf+=r_f[x-15+1][y-6]; if(y<=6&&x==25) zf+=1; } if(zf==0) return 1; else return 0; } void check_touch() { nback=check_b(); nleft=check_l(); nright=check_r(); } void draw(int cb) { int i,recordx=RA.Rx,recordy=RA.Ry; for(i=0;i<7;i++,i++) { RA.Rx+=p[rs1].co[i]; RA.Ry+=p[rs1].co[i+1]; if(RA.Ry<=6) { RA.Rx=recordx; RA.Ry=recordy; continue; } translation(); if(cb==1) setfillstyle(1,p[rs1].attr); else if(cb==2) setfillstyle(1,BLACK); else if(cb==3) { setfillstyle(1,WHITE); r_f[RA.Rx-15][RA.Ry-6]=1; } bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1); RA.Rx=recordx; RA.Ry=recordy; } } void mov(int key) { draw(2); if(key==LEFT&&nleft) RA.Rx--; else if(key==RIGHT&&nright) RA.Rx++; else RA.Ry++; nback=check_b(); if(nback) draw(1); else draw(3); } void change() { int status=rs1,buffer,i,x,y,zf=0; if(p[rs1].attr==p[rs1+1].attr) rs1++; else while(p[rs1].attr==p[rs1-1].attr) rs1--; for(i=0;i<7;i++,i++) { x=RA.Rx+p[rs1].co[i]; y=RA.Ry+p[rs1].co[i+1]; if(y>6) zf+=r_f[x-15][y-6]; } if(zf!=0) rs1=status; buffer=rs1; rs1=status; status=buffer; draw(2); buffer=rs1; rs1=status; status=buffer; nback=check_b(); if(nback) draw(1); else draw(3); } void accelerate() { if(count_down>=1) { check_touch(); count_down=0; if(nback) mov(DOWN); } } void drawbox() { int xcor,ycor; for(xcor=xcors;xcor<=xcorb;xcor++) for(ycor=ycors;ycor<=ycorb;ycor++) { if(xcor==xcors||xcor==xcorb||ycor==ycors||ycor==ycorb) { RA.Rx=xcor; RA.Ry=ycor; translation(); setfillstyle(1,DARKGRAY); bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1); } } } void erasure(int k) { int i,j,recordx=RA.Rx,recordy=RA.Ry; { j=k-1; for(;j>0;j--) { for(i=1;i<11;i++) { r_f[i][j+1]=r_f[i][j]; RA.Rx=i+15; RA.Ry=j+1+6; translation(); if(r_f[i][j+1]==1) setfillstyle(1,WHITE); else setfillstyle(1,BLACK); bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1); RA.Rx=recordx; RA.Ry=recordy; } } } } void pause() { HZ12(450,400,15,BLACK,"正常"); HZ12(450,400,15,GREEN,"暂停"); for(;;) if(bioskey(1)&&bioskey(0)==SPACE) { clearkbd(); HZ12(450,400,15,BLACK,"暂停"); HZ12(450,400,15,RED,"正常"); return; } } void judge() { int i,j,full=0; if(finish()) messagebox(); for(j=1;j<21;j++) { for(i=1;i<11;i++) full+=r_f[i][j]; if(full==10) erasure(j); full=0; } } void update() { cleardevice(); setbkcolor(BLACK); initinfo(); initbox(); srand((unsigned)time(NULL)); rs1=random(19); rs2=random(19); next_shape(); initposition(); initremove(); HZ12(450,400,15,RED,"正常"); process(); } void EXIT() { closegraph(); intrestore(); exit(0); } void initremove() { int i,j; for(i=0;i<12;i++) for(j=0;j<22;j++) if(i==0||i==11||j==0||j==21) r_f[i][j]=1; else r_f[i][j]=0; } void initinfo() { char aStr[2]; setcolor(RED); outtextxy(450,100,"This game's writer is:"); HZ12(450,140,15,RED,"该程序作者:NULL"); outtextxy(525,110,"NULL"); outtextxy(450,180,"FUNCTION FOR KEYS:"); outtextxy(450,200,"UP:change the shape"); outtextxy(450,210,"DOWN:accelerate"); outtextxy(450,220,"LEFT:move left"); outtextxy(450,230,"RIGHT:move right"); outtextxy(450,240,"ESC:exit this game"); outtextxy(450,250,"SPACE:pause"); HZ12(450,260,20,RED,"上:"); HZ12(450,280,20,RED,"下:"); HZ12(450,300,20,RED,"左:"); HZ12(450,320,20,RED,"右:"); HZ12(450,340,20,RED,"ESC:退出"); HZ12(450,360,15,RED,"空格: 暂停/开始"); HZ12(450,380,15,RED,"目前状态:"); HZ12(20,200,15,RED,"下一个形状"); aStr[0]=24; aStr[1]=0; aStr[6]=0; HZ12(480,260,12,GREEN,aStr); HZ12(500,260,12,GREEN,"( 变形 )"); aStr[0]=25; aStr[1]=0; HZ12(480,280,12,GREEN,aStr); HZ12(500,280,12,GREEN,"( 加速 )"); aStr[0]=27; aStr[1]=0; HZ12(480,300,12,GREEN,aStr); HZ12(500,300,12,GREEN,"向左"); aStr[0]=26; aStr[1]=0; HZ12(480,320,12,GREEN,aStr); HZ12(500,320,12,GREEN,"向右"); } void messagebox() { int key; setcolor(GREEN); setfillstyle(1,DARKGRAY); rectangle(220,200,420,300); bar(221,201,419,299); HZ12(280,210,15,GREEN,"GAME OVER"); HZ12(275,230,15,GREEN,"重新游戏: Y"); HZ12(275,270,15,GREEN,"退出游戏: N"); HZ12(450,400,15,BLACK,"正常"); HZ12(450,400,15,GREEN,"GAME OVER"); for(;;) if(bioskey(1)) { key=bioskey(0); if(key==Y) { clearkbd(); update(); } else if(key==N) { clearkbd(); EXIT(); } else clearkbd(); } } void initbox() { xcors=15; xcorb=26; ycors=6; ycorb=27; drawbox(); xcors=2; xcorb=7; ycors=6; ycorb=11; drawbox(); } void initposition() { RA.Rx=18; RA.Ry=6-p[rs1].co[7];; RA.x1=0; RA.x2=0; RA.y1=0; RA.y2=0; } void next_shape() { int recordx=RA.Rx,recordy=RA.Ry,buffer; RA.Rx=3; RA.Ry=7; draw(2); buffer=rs1; rs1=rs2; rs2=buffer; draw(1); RA.Rx=recordx; RA.Ry=recordy; buffer=rs1; rs1=rs2; rs2=buffer; } void process() { for(;;) { check_touch(); if(!nback) { rs1=rs2; rs2=random(19); initposition(); judge(); draw(1); next_shape(); } if(count_other>=1) { count_other=0; if(bioskey(1)) { int key=bioskey(0); clearkbd(); if(key==ESC) EXIT(); if(key==LEFT&&nleft&&nback) mov(LEFT); if(key==RIGHT&&nright&&nback) mov(RIGHT); if(key==UP&&nback) change(); if(key==SPACE) pause(); if(key==DOWN) accelerate(); } } if(count_down>=4) { check_touch(); count_down=0; if(nback) mov(DOWN); } } } main() { int gdriver=DETECT,gmode=0; initgraph(&gdriver,&gmode,"c:\\turboc2"); intenable(); update(); }
/
本文档为【俄罗斯方块代码 C++(】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索