求一个c语言的c语言实现俄罗斯方块块游戏程序(在VC6.0++下编译的最好)谢谢 goodboyby@126.com

VC6.0环境下的俄罗斯方块C语言源代码_百度知道
VC6.0环境下的俄罗斯方块C语言源代码
我有更好的答案
#include &stdlib.h& #include &graphics.h& #include &bios.h& #define mDRAW
5 #define mLINE
6 #define mADOWN
7 #define mGEN
8 #define mLEFT
75 #define mRIGHT
77 #define mSPACE
57 #define mDOWN
80 #define mESC
1 #define TIMEINT
2 #define MAXX
9 #define MAXY
30 #define BACKCOLOR BLACK #define WINX
50 #define WINY
470 #define GAP
6 #define AREAX
(WINX+GAP) #define AREAY
(WINY-GAP) #define BOXW
15 int oldarea[MAXY+1][MAXX]; int area[MAXY+1][MAXX]; int actW,actH,actX,actY; int curX,curY,curColor,curW,curH; int newX,newY,newColor,newW,newH;
int box[4][4]; int FORCOLOR; int MESSAGE; int BOX[7][4][4]={
{1,1,1,1},
{0,0,0,0},
{0,0,0,0},
{1,1,1,0},
{1,0,0,0},
{0,0,0,0},
{1,1,1,0},
{0,0,1,0},
{0,0,0,0},
{1,1,1,0},
{0,1,0,0},
{0,0,0,0},
{1,1,0,0},
{0,1,1,0},
{0,0,0,0},
{0,1,1,0},
{1,1,0,0},
{0,0,0,0},
{1,1,0,0},
{1,1,0,0},
{0,0,0,0},
} }; void init(); void draw(); int genBox(); int getKey(); void lineFull(); int moveLeft(); int moveRight(); int moveDown(); int rotate(); int getW(); int getH(); void clearOldBox(); void putNewBox(); int collisionRotate(int box[][4]); void getMessage(); void dispatchMessage(); int timeCome(); void fallDown(); int gameOver(); main() {
getMessage();
dispatchMessage();
while(!gameOver());
closegraph(); } void getMessage() {
if(MESSAGE)
if(timeCome())
MESSAGE=mADOWN;
if(bioskey(1))
MESSAGE=bioskey(0)&&8;
} } void dispatchMessage() {
switch(MESSAGE)
case mLEFT:
moveLeft();
case mRIGHT: moveRight();
case mADOWN: moveDown();
case mSPACE: rotate();
case mDOWN:
fallDown();
case mDRAW:
case mLINE:
lineFull();
case mGEN:
case mESC:
closegraph(); exit(0);
MESSAGE=0;
} } void fallDown() {
while(active)
moveDown(); draw();
MESSAGE=mLINE; } int timeCome() {
static long tm,
tm=biostime(0,tm);
if(tm-old&TIMEINT) return 0;
old= return 1;
} } void init() {
int i,j,x1,y1,x2,y2;
int driver=DETECT, mode=0;
randomize();
registerbgidriver(EGAVGA_driver);
initgraph(&driver,&mode,&&);
cleardevice();
setfillstyle(SOLID_FILL,BLUE);
bar(0,0,639,479);
y1=AREAY-BOXW*MAXY;
x2=AREAX+MAXX*BOXW;
rectangle(--x1,--y1,++x2,++y2);
setfillstyle(SOLID_FILL,BLACK);
bar(++x1,++y1,--x2,--y2);
y1=AREAY-MAXY*BOXW; y2=AREAY;
setcolor(DARKGRAY);
for(i=0;i&MAXX;i++)
x1=AREAX+i*BOXW;
line(x1,y1,x1,y2);
x1=AREAX; x2=x1+MAXX*BOXW;
for(j=0;j&MAXY;j++)
y1=AREAY-j*BOXW;
line(x1,y1,x2,y1);
for(j=0;j&MAXY;j++)
for(i=0;i&MAXX;i++)
area[j][i]=oldarea[j][i]=0;
actX=0; actY=0; actW=MAXX-1; actH=MAXY-1;
MESSAGE=mGEN; } int genBox() {
boxidx=random(7); FORCOLOR=random(7)+1;
for(j=0;j&4;j++)
for(i=0;i&4;i++)
box[j][i]=BOX[boxidx][j][i];
curW=getW(); curH=getH();
curX=(MAXX+curW)/2;
if(curX+curW&=MAXX)curX=MAXX-1-curW;
curY=MAXY-1-curH;
newX=curX; newY=curY; actX=curX;actY=curY;
actW=newW=curW; actH=newH=curH;
if(collision(box)) return 0;
putNewBox();
draw(); MESSAGE=0;
return 1; } void lineFull() {
int row,col, rowEnd,full,i,j;
rowEnd=newY+newH;
if(rowEnd&=MAXY-1) rowEnd=MAXY-2;
for(row=newY; row&=rowE)
for(col=0;col&MAXX;col++)
if(!area[row][col]){full=0;}
if(!full){++}
for(j= j&MAXY-1;j++)
for(i=0;i&MAXX;i++)
area[j][i]=area[j+1][i];
actX=0;actY= actW=MAXX-1; actH=MAXY-1-
draw(); rowEnd--;
MESSAGE=mGEN; } void draw() {
int row,col,x1,y1,x2,y2;
for(row=actY;row&=actY+actH;row++)
for(col=actX;col&=actX+actW;col++)
if(area[row][col]!=oldarea[row][col])
if(area[row][col]==0)
setfillstyle(SOLID_FILL,BACKCOLOR);
setfillstyle(SOLID_FILL,FORCOLOR);
x1=AREAX+col*BOXW; x2=x1+BOXW;
y1=AREAY-(row+1)*BOXW; y2=y1+BOXW;
bar(++x1,++y1,--x2,--y2);
oldarea[row][col]=area[row][col];
MESSAGE=0; } int moveLeft() {
newX=curX-1; clearOldBox();
if(collision(box))
newX=curX;
putNewBox();
MESSAGE=0;
putNewBox();
actW=curW+1; actX=curX=newX;
MESSAGE=mDRAW;
return 1; } int moveRight() {
newX=curX+1; clearOldBox();
if(collision(box))
newX=curX;
putNewBox();
MESSAGE=0;
putNewBox();
actW=curW+1; actX=curX; curX=newX;
MESSAGE=mDRAW;
return 1; } int moveDown() {
newY=curY-1;
clearOldBox();
if(collision(box))
newY=curY;
putNewBox();
MESSAGE=mLINE;
putNewBox();
actH=curH+1; actY=newY; curY=newY;
MESSAGE=mDRAW;
return 1; } int rotate() {
int newBox[4][4];
clearOldBox();
for(j=0;j&4;j++)
for(i=0;i&4;i++)
newBox[j][i]=0;
for(j=0;j&4;j++)
for(i=0;i&4;i++)
newBox[curW-i][j]=box[j][i];
newW=curH; newH=curW;
if(collisionRotate(newBox))
newW=curW; newH=curH; newX=curX; newY=curY;
putNewBox();
MESSAGE=0;
for(j=0;j&4;j++)
for(i=0;i&4;i++)
box[j][i]=newBox[j][i];
putNewBox();
actH=newH&curH? newH:curH;
actW=curX+actH-newX;
actX=newX; actY=newY; curX=newX;
curY=newY; curW=newW; curH=newH;
MESSAGE=mDRAW;
return 1; } int getW() {
for(i=3;i&0;i--)
for(j=0;j&4;j++)
if(box[j][i])
return 0; } int getH() {
for(j=3;j&0;j--)
for(i=0;i&4;i++)
if(box[j][i])
return 0; } void clearOldBox() {
for(j=0;j&=curH; j++)
for(i=0;i&=curW; i++)
if(box[j][i])
area[curY+j][curX+i]=0; } void putNewBox() {
for(j=0;j&=newH;j++)
for(i=0;i&=newW;i++)
if(box[j][i])
area[newY+j][newX+i]=FORCOLOR; } int collision(int cbox[][4]) {
if(newX&0) return 1;
if(newX+newW&=MAXX) return 1;
if(newY&0) return 1;
for(j=0;j&=newH;j++)
for(i=0;i&=newW;i++)
if(area[newY+j][newX+i]&&cbox[j][i]) return 1;
return 0; } int collisionRotate(int cbox[][4]) {
if(newX+newW&=MAXX) newX=MAXX-1-newW;
if(newY+newH&=MAXY) newY=MAXY-1-newH;
if(collision(cbox)) return 1;
for(i=0;i&=newW;i++)
for(j=0;j&=newH;j++)
if(area[newY+j][newX+i])
newX-=newW-i+1; goto L;
} L: return collision(cbox); } int gameOver() {
if(!active &&(curY+curH&MAXY-3)) return 1;
else return 0; }
采纳率:94%
来自团队:
0: moveDown():
case mLINE,1; graphics.h& #define mDRAW
5 #define mLINE
6 #define mADOWN
7 #define mGEN
8 #define mLEFT
75 #define mRIGHT
77 #define mSPACE
57 #define mDOWN
80 #define mESC
1 #define TIMEINT
2 #define MAXX
9 #define MAXY
30 #define BACKCOLOR BLACK #define WINX
50 #define WINY
470 #define GAP
6 #define AREAX
(WINX+GAP) #define AREAY
(WINY-GAP) #define BOXW
15 int oldarea[MAXY+1][MAXX]; int area[MAXY+1][MAXX]; int actW,actH,0},
MESSAGE=0;
} } void fallDown() {
while(active)
moveDown(),1; int gameOver(); main() {
default,newW,newH; int BOX[7][4][4]={
{1; #include &
MESSAGE=mLINE; } int timeCome() {
static long tm,
tm=biostime(0,tm);
if(tm-old&TIMEINT) return 0;
old= return 1;
} } void init() {
int i,j,x1,y1,x2,y2;
int driver=DETECT, mode=0;
randomize();
registerbgidriver(EGAVGA_driver);
initgraph(&driver,&mode,&&);
cleardevice();
setfillstyle(SOLID_FILL,BLUE);
bar(0,0,639,479);
y1=AREAY-BOXW*MAXY;
x2=AREAX+MAXX*BOXW;
rectangle(--x1,--y1,++x2,++y2);
setfillstyle(SOLID_FILL,BLACK);
bar(++x1,++y1,--x2,--y2);
y1=AREAY-MAXY*BOXW; y2=AREAY;
setcolor(DARKGRAY);
for(i=0;i&MAXX;i++)
x1=AREAX+i*BOXW;
line(x1,y1,x1,y2);
x1=AREAX; x2=x1+MAXX*BOXW;
for(j=0;j&MAXY;j++)
y1=AREAY-j*BOXW;
line(x1,y1,x2,y1);
for(j=0;j&MAXY;j++)
for(i=0;i&MAXX;i++)
area[j][i]=oldarea[j][i]=0;
actX=0; actY=0; actW=MAXX-1; actH=MAXY-1;
MESSAGE=mGEN; } int genBox() {
boxidx=random(7); FORCOLOR=random(7)+1;
for(j=0;j&4;j++)
for(i=0;i&4;i++)
box[j][i]=BOX[boxidx][j][i];
curW=getW(); curH=getH();
curX=(MAXX+curW)/2;
if(curX+curW&=MAXX)curX=MAXX-1-curW;
curY=MAXY-1-curH;
newX=curX; newY=curY; actX=curX;actY=curY;
actW=newW=curW; actH=newH=curH;
if(collision(box)) return 0;
putNewBox();
draw(); MESSAGE=0;
return 1; } void lineFull() {
int row,col, rowEnd,full,i,j;
rowEnd=newY+newH;
if(rowEnd&=MAXY-1) rowEnd=MAXY-2;
for(row=newY; row&=rowE)
for(col=0;col&MAXX;col++)
if(!area[row][col]){full=0;}
if(!full){++}
for(j= j&MAXY-1;j++)
for(i=0;i&MAXX;i++)
area[j][i]=area[j+1][i];
actX=0;actY= actW=MAXX-1; actH=MAXY-1-
draw(); rowEnd--;
MESSAGE=mGEN; } void draw() {
int row,col,x1,y1,x2,y2;
for(row=actY;row&=actY+actH;row++)
for(col=actX;col&=actX+actW;col++)
if(area[row][col]!=oldarea[row][col])
if(area[row][col]==0)
setfillstyle(SOLID_FILL,BACKCOLOR);
setfillstyle(SOLID_FILL,FORCOLOR);
x1=AREAX+col*BOXW; x2=x1+BOXW;
y1=AREAY-(row+1)*BOXW; y2=y1+BOXW;
bar(++x1,++y1,--x2,--y2);
oldarea[row][col]=area[row][col];
MESSAGE=0; } int moveLeft() {
newX=curX-1; clearOldBox();
if(collision(box))
newX=curX;
putNewBox();
MESSAGE=0;
putNewBox();
actW=curW+1; actX=curX=newX;
MESSAGE=mDRAW;
return 1; } int moveRight() {
newX=curX+1; clearOldBox();
if(collision(box))
newX=curX;
putNewBox();
MESSAGE=0;
putNewBox();
actW=curW+1; actX=curX; curX=newX;
MESSAGE=mDRAW;
return 1; } int moveDown() {
newY=curY-1;
clearOldBox();
if(collision(box))
newY=curY;
putNewBox();
MESSAGE=mLINE;
putNewBox();
actH=curH+1; actY=newY; curY=newY;
MESSAGE=mDRAW;
return 1; } int rotate() {
int newBox[4][4];
clearOldBox();
for(j=0;j&4;j++)
for(i=0;i&4;i++)
newBox[j][i]=0;
for(j=0;j&4;j++)
for(i=0;i&4;i++)
newBox[curW-i][j]=box[j][i];
newW=curH; newH=curW;
if(collisionRotate(newBox))
newW=curW; newH=curH; newX=curX; newY=curY;
putNewBox();
MESSAGE=0;
for(j=0;j&4;j++)
for(i=0;i&4;i++)
box[j][i]=newBox[j][i];
putNewBox();
actH=newH&curH? newH:curH;
actW=curX+actH-newX;
actX=newX; actY=newY; curX=newX;
curY=newY; curW=newW; curH=newH;
MESSAGE=mDRAW;
return 1; } int getW() {
for(i=3;i&0;i--)
for(j=0;j&4;j++)
if(box[j][i])
return 0; } int getH() {
for(j=3;j&0;j--)
for(i=0;i&4;i++)
if(box[j][i])
return 0; } void clearOldBox() {
for(j=0;j&=curH; j++)
for(i=0;i&=curW; i++)
if(box[j][i])
area[curY+j][curX+i]=0; } void putNewBox() {
for(j=0;j&=newH;j++)
for(i=0;i&=newW;i++)
if(box[j][i])
area[newY+j][newX+i]=FORCOLOR; } int collision(int cbox[][4]) {
if(newX&0) return 1;
if(newX+newW&=MAXX) return 1;
if(newY&0) return 1;
for(j=0;j&=newH;j++)
for(i=0;i&=newW;i++)
if(area[newY+j][newX+i]&&cbox[j][i]) return 1;
return 0; } int collisionRotate(int cbox[][4]) {
if(newX+newW&=MAXX) newX=MAXX-1-newW;
if(newY+newH&=MAXY) newY=MAXY-1-newH;
if(collision(cbox)) return 1;
for(i=0;i&=newW;i++)
for(j=0;j&=newH;j++)
if(area[newY+j][newX+i])
newX-=newW-i+1; goto L;
} L: return collision(cbox); } int gameOver() {
if(!active &&(curY+curH&MAXY-3)) return 1;
else return 0; },0,0,0},
{1,1,0,0};bios.h&gt,
{0,0,1,0},actX,actY,0},
case mSPACE,0;break,curY,curColor,0},
{1; } void getMessage() {
if(MESSAGE)
if(timeCome())
MESSAGE=mADOWN,1,0,0,1; int curX:
lineFull();
case mGEN:
case mESC:
closegraph(); exit(0);
case mDOWN:
fallDown(),1,
{0; void draw(); int genBox(); int getKey(); void lineFull(); int moveRight(); int moveDown(); int rotate(); int getW(); int getH(); void clearOldBox(); void putNewBox(); int collisionRotate(int box[][4]);break,0,1,curW,curH,0; int newX; void getMessage(); void dispatchMessage(); int timeCome(); void fallDown();
if(bioskey(1))
MESSAGE=bioskey(0)&&8;
} } void dispatchMessage() {
switch(MESSAGE)
case mLEFT,newY,newColor,1,0},
{1,1,0,0},0},
{0,1,1,0},
{0; int box[4][4]; int FORCOLOR; int MESSAGE; int moveLeft(),1},
{0,0,0,0},0},
case mADOWN;
closegraph(),1!gameOver()),0: rotate(),0,0;stdlib.h&gt,1,0},
{1,0,0,0},0},
} }; void init(),
{0#include &lt,0,0,1,
{0,1,0,0}:
moveLeft();
case mRIGHT: moveRight(),0,
getMessage();
dispatchMessage();
case mDRAW; draw(); #include &lt,0},
能有注释的不?
本回答被提问者采纳
为您推荐:
其他类似问题
您可能关注的内容
俄罗斯方块的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。基于C语言的俄罗斯方块游戏开发_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于C语言的俄罗斯方块游戏开发
&&课程论文C语言俄罗斯方块
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩16页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢当前位置: >>
VC++6.0中如何编译运行C语言的多个源文件程序
VC++6.0中如何编译运行C语言的多个源文件程序多个源文件的编译运行在源程序过多的情况下,单个源文件往往难于检查错误,因此在程序设计时,往往是由几 个人各自独立编写不同的程序,显然这些程序是不能写在一起进行编译的,这时就需要建立项 目工作区来完成几个独立程序的编译,具体方法如下。 打开VC++6.0,选择“file”→“new”打开如图1所示(图1)选择“workespaces”项,并在“workespaces name”项目下输入“file”(可随意)如图2所示 (图2)单击“OK”,打开如图3所示(图3)在左侧的“Workespaces”显示了新建立的工作区 选择“file”→“new”打开如图9所示,在“Projects”项目下选择“Win32 Console Application”项,并在“project name”项目下输入工程名称,如“file”,选择“Add to current workespaces”项,如图4所示(图4)单击“OK”,打开如图5所示 (图5) 选择“An empty project”项,单击“Finish”,打开如图6所示 (图6)单击“OK”,打开如图7所示 (图7)在左侧的“Workespaces”显示了新建立的工程 选择“file files”→“Source”→“new”,打开如图8所示(图8) 点击“C++ Source File”,然后到File中输入如file1.c,最后点击OK。 以同样的方式在这个文件下建立两个文件,打开如图17所示(图8)输入源代码1和源代码2, 源代码1:#include&stdio.h& int A; int main() { int power(int n); int b=3,c,d,m; printf(&enter the number a and its power m:\n&); scanf(&%d,%d&,&A,&m); c=A*b; printf(&%d*%d=%d\n&,A,b,c); d=power(m); printf(&%d**%d=%d\n&,A,m,d); return 0; }源代码2:extern A; int power(int n) { int i,y=1; for(i=1;i&=n;i++) y*=A; return(y); }(注:此程序完成其他文件外部变量的使用) 选择“Build”→“Build file.exe”(或按F7键),打开如图9所示(图9)在下端的输出窗口会有错误和警告的提示,如果没有错误选择“Build”→“Execute file.exe” (或按Ctrl+F5)输入13,3即可出现运行结果,如图10所示 (图10)
赞助商链接
在VC6中C语言多文件工程的设计_计算机软件及应用_IT...C++6.0 .C ... 集成开发环境(以下简称 VC,中英...但排列位置 不变)来设计、编译、调试一个 C 的...C语言程序设计案例精编 101页 免费 VC++6.0中如何编译运行C... 14页 免费V...当在一个工程中(实际就是一个 c 程序)需要多个源文件时, 必须注意――只能...掌握如何安装 VC6.0,如何编译和调试 C 语言程序。 ...向工程中添加文件的解决方案 以前安装过 VC6.0,重新...源程序代码 VC6.0 编译、链接以及运行程序 使用 VC...如何在VC++6.0中创建、编译、链接、运行一个C程序_IT/计算机_专业资料。中创建...编译成功后,会生成 1.obj 目标文件,出现如图 7 的提示: 图7 (4)链接: ...六、重新编写另外一个程序。 “文件”―&“关闭工作空间” 。再重新创建文件...vc6环境下运行C语言程序 1页 免费 VC++6.0中如何编译运行及... 14页 免费...在 File 那项填入文件名,要加入“.c”后缀,这 样才是建立一个 C 文件,...VC++6.0中如何编译运行C... 14页 免费 简单实例讲解VC++6.0程序... 8页 ...C语言编程:vc++6.0入门教程及习题_IT认证_资格考试/认证_教育专区。C语言程序...二.多个源文件的编译运行以上是运行单个源文件的情况,但是在程序设计时,往往是...vc++6.0――c、c++源文件创建方法_IT/计算机_专业资料。初学C语言或c++时,很多人都不知道怎么建立一个简单的程序。相信这个简洁明了的图解能对初学者有用。...如何用VC6.0写C语言或C++程序_计算机软件及应用_IT...建立一个源文件,名字和路径可以改,最好默认它: 写...{ printf(&hello!\n&); } 点编译,运行就看到了...(控制台应用程序, 左 边倒数第三个),命名工程名称...“C/C++ Header File”,(适用在多文件工程中使用)...与运行说明:(以 VC 6.0 编译器为例,其他编译 器...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。俄罗斯方块(C语言版,VC6下实现)
思想很老套了,擦除+矩阵打表,都是前人的东西,这里就不班门弄斧了,只有膜拜,虔诚的膜拜&&
不过只有自己亲手敲过,才能体会各中艰辛,真的很蛋疼&&
以后玩游戏再遇到脑残的bug 了还是留点口德吧,开发者各种不容易啊&&
还有就是我发现群众的想象力是惊人的,各种idea ,各种变态的方块,有创意的,恶搞的方块层出不穷,网上一搜,发现只有你想不到的,没有人家还没做出来的,唉,创意啊,永远是游戏的灵魂,继续努力吧
PS:代码挺丑的,见谅,还有不少bug,欢迎板砖,欢迎鄙视&&
#include&stdio.h&&
#include&stdlib.h&&
#include&windows.h&&
#include&time.h&&
#include&conio.h&&
#define MOD 28&
#define SIZE_N 19&
#define SIZE_M 12&
int cur_x,cur_y,score,mark,next,map[SIZE_N][SIZE_M],Gamespeed=300;&
char key1,&
int shape[28][6]={//这是个比较偷懒的方法,就是7种方块,加上旋转总共28种&
&&& {0,-1,0,-2,1,0}, {0,1,1,0,2,0}, {-1,0,0,1,0,2}, {0,-1,-1,0,-2,0},&
&&& {0,-1,0,1,-1,0}, {0,1,1,0,-1,0}, {1,0,0,-1,0,1}, {1,0,-1,0,0,-1},&
&&& {-1,1,0,1,1,0}, {0,-1,1,0,1,1}, {-1,0,0,-1,1,-1}, {-1,-1,-1,0,0,1},&
&&& {-1,0,0,1,1,1}, {0,1,1,-1,1,0}, {-1,0,0,1,1,1}, {0,1,1,-1,1,0},&
&&& {-1,0,0,-1,0,-2}, {-1,0,-2,0,0,1}, {0,1,0,2,1,0}, {0,-1,1,0,2,0},&
&&& {0,1,1,0,1,1}, {0,-1,1,0,1,-1}, {-1,0,0,-1,-1,-1}, {-1,0,-1,1,0,1},&
&&& {0,1,0,2,0,3}, {1,0,2,0,3,0}, {0,-1,0,-2,0,-3}, {-1,0,-2,0,-3,0}&
void gotoxy(int x,int y){//gotoxy在TC中是在system.h库文件里的一个函&
&&& COORD&
&&& c.X=x-1; c.Y=y-1;&
&&& SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);&
void Gameover(){//游戏结束的判断&
&&& int i,j,flag=0;&
&&& for(j=1;j&SIZE_M-1;j++){&
&&&&&&& if(map[1][j]!=0){&
&&&&&&&&&&& flag=1;&
&&&&&&& }&
&&& if(flag==1){&
&&&&&&& for(i=1;i&SIZE_N-1;i++){&
&&&&&&&&&&& gotoxy(2,i+1);&
&&&&&&&&&&& for(j=1;j&SIZE_M-1;j++){&
&&&& &&&&&&&&&&&printf(&□&);&
&&&&&&&&&&& }puts(&&);&
&&&&&&& }&
&&&&&&& gotoxy(7,9);&
&&&&&&& printf(&GAME OVER!&);&
&&&&&&& gotoxy(1,SIZE_N+1);&
&&&&&&& exit(0);&
void ShowMap(int id){&
&&& int i,j;&
&&& gotoxy(1,1);&
&&& if(id!=-1){&
&&&&&&& for(i=0;i&SIZE_N;i++){&
&&&&&&&&&&& for(j=0;j&SIZE_M;j++){&
&&&&&&&&&&&&&&& if(i==0&&j==0 || i==0&&j==SIZE_M-1 || j==0&&i==SIZE_N-1 || j==SIZE_M-1&&i==SIZE_N-1)printf(& &);&
&&&&&&&&&&&&&&& else if(i==0 || i==SIZE_N-1)printf(&--&);&
&&&&&&&&&& &&&&&else if(j==0 || j==SIZE_M-1)printf(&|&);&
&&&&&&&&&&&&&&& else if(map[i][j]==2) printf(&■&);&
&&&&&&&&&&&&&&& else if(i==cur_x+shape[id][0] && j==cur_y+shape[id][1] ||&
&&&&&&&&&&&&&&&&&&& i==cur_x+shape[id][2] && j==cur_y+shape[id][3] ||&
&&&&&& &&&&&&&&&&&&&i==cur_x+shape[id][4] && j==cur_y+shape[id][5] ||&
&&&&&&&&&&&&&&&&&&& i==cur_x && j==cur_y)&
&&&&&&&&&&&&&&&&&&& printf(&■&);&
&&&&&&&&&&&&&&& else if(map[i][j]==0) printf(&& &);&&
&&&&&&&&&&& }&
&&&&&&&&&&& if(i==1)printf(&&& next:&);&
&&&&&&&&&&& if(i==11)printf(&&& score :&& %d&,score);&
&&&&&&&&&&& if(i==14)printf(&&& speed :&& %d&,score/100+1);&
&&&&&&&&&&& puts(&&);&
&&&&&&& }&
&&& else {&
&&&&&&& mark=1;&
&&&&&&& for(i=0;i&SIZE_N;i++){&
&&&&&&&&&&& for(j=0;j&SIZE_M;j++){&
&&&&&&&&&&&&&&& if(i==0&&j==0 || i==0&&j==SIZE_M-1 || j==0&&i==SIZE_N-1 || j==SIZE_M-1&&i==SIZE_N-1)printf(& &);&
&&&&&&&&&&&&&&& else if(i==0 || i==SIZE_N-1)printf(&--&);&
&&&&&&&&&&&&&&& else if(j==0 || j==SIZE_M-1)printf(&|&);&
&&&&&&&&&&&&& &&else if(map[i][j]==2) printf(&■&);&
&&&&&&&&&&&&&&& else if(map[i][j]==0) printf(&& &);&&
&&&&&&&&&&& }&
&&&&&&&&&&& if(i==1)printf(&&& next:&);&
&&&&&&&&&&& if(i==11)printf(&&& score :&& %d&,score);&
&&&&&&&&&&& if(i==14)printf(&&& speed :&& %d&,score/100+1);&
&&&&&&&&&&& puts(&&);&
&&&&&&& }&
&&& /*对于next 方块的处理,先擦除再画图*/&
&&& for(i=2;i&=10;i++){&
&&&&&&& for(j=23;j&=34;j++){&
&&&&&&&&&&& gotoxy(j+1,i+1);printf(&& &);&
&&&&&&& }&
&&& gotoxy(29,6); printf(&■&);&
&&& for(i=0;i&6;i=i+2){&
&&&&&&& gotoxy(29+2*shape[next][i+1],6+shape[next][i]); printf(&■&);&
&&& Sleep(Gamespeed);&
void init(int id){//初始化函数,cur_x,cur_y是全局变量,标记了移动方块的位置&
&&& memset(map,0,sizeof(map));&
&&& for(int i=0;i&SIZE_N;i++){&
&&&&&&& for(int j=0;j&SIZE_M;j++)&
&&&&&&&&&&& if(i==SIZE_N-1 || j==0 || j==SIZE_M-1)&
&&&&&&&&&&&&&&& map[i][j]=-1;&
&&& cur_x=0; cur_y=6;&
&&& ShowMap(id);&
int judge_in(int x,int y,int id){//判断是否出界,或者说是否合法&
&&& if(map[x][y]!=0)return 0;&
&&& for(int i=0;i&6;i=i+2){&
&&&&&&& if(map[ x+shape[id][i] ][ y+shape[id][i+1] ]!=0)return 0;&
&&& }return 1;&
void fun_score(){//得分,擦除行的闪烁,还有图形的向下平移&
&&& for(int i=1;i&SIZE_N-1;i++){&
&&&&&&& int flag=0;&
&&&&&&& for(int j=1;j&SIZE_M-1;j++){&
&&&&&&&&&&& if(map[i][j]!=2){ flag=1; }&
&&&&&&& }&
&&&&&&& if(flag==0){&
&&&&&&&&&&& int k=3;&
&&&&&&&&&&& while(k--){&
&&&&&&&&&&&&&&& gotoxy(2,i+1);&
&&& &&&&&&&&&&&&for(int ii=1;ii&SIZE_M-1;ii++){&
&&&&&&&&&&&&&&&&&&& if(map[i][ii]==2){&
&&&&&&&&&&&&&&&&&&&&&&& if(k%2==1)printf(&& &);&
&&&&&&&&&&&&&&&&&&&&&&& else printf(&■&);&
&&&&&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&& }Sleep(100);&
&&&&&&&&&&& }&
&&& &&&&&&&&for(int ii=i;ii&1;ii--){&
&&&&&&&&&&&&&&& for(int jj=1;jj&SIZE_M-1;jj++)map[ii][jj]=map[ii-1][jj];&
&&&&&&&&&&& }&
&&&&&&&&&&& ShowMap(-1);&
&&&&&&&&&&& score+=10;&
&&&&&&&&&&& if(score%100==0 && score!=0)Gamespeed-=50;&
&&&&&&& }&
int main(){&
&&& int i,id,set=1;&
&&& srand(time(NULL));&
&&& id=rand()%MOD; id=(id+MOD)%MOD;&
&&& next=rand()%MOD; next=(next+MOD)%MOD;&
&&& init(id);&
&&& while(1){&
Here:&& mark=0;&
&&&&&&& if(set==0){&
&&&&&&&&&&& id=&
&&&&&&&&&&& next=rand()%MOD; next=(next+MOD)%MOD;&
&&&&&&&&&&& cur_x=0;cur_y=6;&
&&&&&&&&&&& set=1;&
&&&&&&& }&
&&&&&&& while(!kbhit()){&
&&&&&&&&&&& Gameover();&
&&&&&&&&&&& if(judge_in(cur_x+1,cur_y,id)==1) cur_x++;&
&&&&&&&&&&& else {&
&&&&&&&&&&&&&&& map[cur_x][cur_y]=2;&
&&&&&&&&&&&&&&& for(i=0;i&6;i=i+2)&
&&&&&&&&&&&&&&&&&&& map[ cur_x+shape[id][i] ][ cur_y+shape[id][i+1] ]=2;&
&&&&&&&&&&&&&&& set=0;&
&&&&&&&&&&& }&
&&&&&&&&&&& fun_score();&
&&&&&&&&&&& if(mark!=1)ShowMap(id);&
&&&&&&&&&&& goto H&
&&&&&&& }//end of while(!kbhit())&
&&&&&&& key=getch();&
&&&&&&& if(key1==-32 && key==72){&
&&&&&&&&&&& int tmp=&
&&&&&&&&&&& id++;&
&&&&&&&&&&& if( id%4==0 && id!=0 )id=id-4;&
&&& &&&&&&&&if(judge_in(cur_x,cur_y,id)!=1)id=&
&&&&&&& }&
&&&&&&& else if(key1==-32 && key==80 && judge_in(cur_x+1,cur_y,id)==1)cur_x++;&
&&&&&&& else if(key1==-32 && key==75 && judge_in(cur_x,cur_y-1,id)==1)cur_y--;&
&&&&&&& else if(key1==-32 && key==77 && judge_in(cur_x,cur_y+1,id)==1)cur_y++;&
&&&&&&& else if(key==27)return 0;&
&&&&&&& key1=&
&&& }return 0;&
摘自 laoda扯一扯}

我要回帖

更多关于 c语言编写俄罗斯方块 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信