锁定老帖子 主题:用c开发的游戏
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-06
申明:前不久选修了c语言,因为老师把用c写一个游戏作为考试题。于是我写了这个常见的俄罗斯方块,感觉良好就 写到 博客里了,见笑了。 #include #include #include #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <conio> #include <time.h> #include <grapgics.h> #define L 1 #define LX 15 #define LY 4 static struct BLOCK{ int x0,y0,x1,y1,x2,y2,x3,y3; int color,next;}b[23]={{0,1,1,1,2,1,3,1,4,1}, {1,0,1,3,1,2,1,1,4,0},{1,1,2,2,1,2,2,1,1,2}, {0,1,1,1,1,0,2,0,2,4},{0,0,0,1,1,2,1,1,2,3},{0,0,1,0,1,1,2,1,3,8}, {1,0,1,1,2,2,2,1,2,5},{0,2,1,2,1,1,2,1,2,6},{0,1,0,2,1,1,1,0,3,9}, {0,1,1,1,1,2,2,2,3,10},{1,1,1,2,2,1,2,0,3,7},{ 1,0,1,1,1,2,2,2,7,12}, {0,1,1,1,2,1,2,0,7,13},{0,0,1,2,1,1,1,0,7,14},{0,1,0,2,1,1,2,1,7,11}, {0,2,1,2,1,1,1,0,5,16},{0,1,1,1,2,2,2,1,5,17},{1,0,1,1,1,2,2,0,5,18}, {0,0,0,1,1,11,2,1,5,15},{0,1,1,1,1,0,2,1,6,2,0},{0,1,1,2,1,1,1,0,6,21}, {0,1,1,2,1,1,2,1,6,22},{1,0,1,1,1,2,2,1,6,19}}; static int d[10]={33000,3000,1600,1200,900,800,600,400,300,200}; int Llevel,Lcurrent,Lnext,Lable,lx,ly,Lsum; unsigned Lpoint; int La[19][10],FLAG,sum; unsigned ldelay; void scrint(),datainit(),dispb(),eraseeb(); void throw(),judge(),delayp(),move(0,note(0,show(); int Ldrop(),Ljudge(),nextb(),routejudge();
main(){ char c; datainit(); Label=nextb(); Label=Ldrop(); while(1) { delayp(); if(Label!=0){ Ljudge(); Lable=nextb();} ldelay--; if(ldelay==0){ Label=Ldrop(); ldelay=d[0];} if(FLAG!=0) break;} whlie(getch()!='\r'); { goto xy(38,16); cputs("again?"); c=getch(); while(c!='n'&&c!='N') clscr();} int nextb(){ if(La[(b[Lnext].y0)][(3+b[Lnext].x0)]!=0 || La[(b[Lnext].y1)][(3+b[Lnext].x1)] !=0 || La[(b[Lnext].y2)][(3+b[Lnext].x2)]!=0 || La[(b[Lnext].y3)][(3+ b[Lnext].x3)]!=0){ FLAG= L; return ( -1 );} eraseb(0,3,5,Lnext); Lcurrent = Lnext; lx=3;ly=0; Label=0; ldelay=d[0]; Lsum ++; Lpoint += 1; Lnext=random(23); dispb(0,3,5,Lnext); textcolor(7); goto xy(3,14);cprintf("%#5d",Lsum); goto xy(3,17);cprintf("%#5d",Lpoint); return(0); } void delayp(0{ char key; if(kbhit()!=0){ key=getch(); move(key); if(key=='\\') getch(); }} void move(funkey) char funkey;{ int tempcode; switch( funkey){ case 'k': if(lx+b[current].x0>0){ if(La[ly+(b[Lcurrent].y0)][lx-1+(b[L current].x0)]==0&& La[(ly+b[current].y1)][(lx-1+b[current].x10]==0 && La[ly+b[current].y2)][lx-1+b[Lcurrent].x2)]==0&&La[ly+(b[current].y3)][lx-1+(b[Lcurrent].x3)]==0){ eraseb(L,lx,lyLcurrent); lx--; dispb(L,lx,ly,Lcurrent);} break; case 0x20: tempcode=b[Lcurrent].next; if (lx+b[tempcode].x0>=0&&lx+b[tempcode].x3<=9&& ly+b[tempcode].y1<=19&&ly+b[tempcode].y2<=19) if(routejudge()!+-1) if(La+(b[tempcode].y0)][lx+(b[tempcode].x0)]==0&& La[ly+(b[tempcode].y1)][lx+(b[tempcode].x1)]==0&&La[ly+(b[tempcode].y2)][lx+(b[tempcode].x2)]==0&&La[ly+(b[tempcode].y3)][lx+(b[tempcode].x3)]==0) { eraseb(L,lx,ly,Lcurrent); Lcurrent=tempcode; dispb(L,lx,ly,Lcurrent);} break; case 'M': if(lx+b[Lcurrent].x3<9) if(La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]==0&&La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]==0&&La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]==0&&La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]==0){ eraseb(L,lx,ly,Lcurrent); lx++; disb(L,lx,ly,Lcurrent);}break; case 'p': throw();break; case 0x1b: clrscr();exit(0);break; default:break;}} void throw(0{ int tempy;tempy=ly; while(ly+b[Lcurrent].y1<19&& ly+b[current].y2<19&&La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]==0&&La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]==0&&La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]==0&&La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]==0) ly++;ly--; eraseb(L,lx,tempy,Lcurrent);dispb(L,lx,ly,Lcurrent); La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]= La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]= La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]= La[ly+b[Lcurrent].y3)][lx+(b[current].x3)]=b[Lcurrent].color; Label=-1;} int routejudge(){ int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(La[ly+i][lx+j]!=0) return(-1); return(1);} int Ldrop(){ if(ly+b[Lcurrent].y1>=18||ly+b[Lcurrent].y2>=18) {La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]= La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]= La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]= La[ly+b[Lcurrent].y3)][lx+(b[current].x3)]=b[Lcurrent].color; return(-1);} if(La(ly+1+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]!=0||La(ly+1+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]!=0||La(ly+1+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]!=0||La(ly+1+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]!=0){La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]= La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]= La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]= La[ly+b[Lcurrent].y3)][lx+(b[current].x3)]=b[Lcurrent].color; return(-1);} eraseb(L,lx,ly,Lcurrent); dispb(L,lx,++ly,Lcurrent); return(0);}
int Ljudge(){ int i,j,k,lines,f; static int p[5]={0,1,3,6,10}; lines=0; for(k=0;k<=3;k++){ f=0;if((ly+k)>18) continue; for(i=0;i<10;i++) if(La[ly+k][i]==0);i>0;i--){ f++;break;} if(f==0){ movetext(LX,LY,LX+19,LY+ly+k-1,LX,LY+1); for(i=(ly+k);i>0;i--){ for(j=0;j<10;j++) La[i][j]=La[i-1][j]; for(j=0;j<10;j++) La[0][j]=0; lines++;}} Lpoint+=p[lines]*10; return(0);}
void scrint(){ int i; char lft[20]; textbackground(1); clrscr(); gotoxy(30,9); cputs("enter your name"); scanf("%s",lft); gotoxy(25,14); scanf("%s",lft); textbackground(0);clrscr(); textcolor(15);gotoxy(17,1); cprintf("%s",lft); gotoxy(5,3); cputs("next"); gotoxy(4,13);cputs("block"); gotoxy(4,16);cputs("point"); for(i=0;i<19;i++) { gotoxy(LX-2,LY+1); cputs("** **"); }gotoxy(LX-2,LY+19);cputs("**********************"); } void datainit(){ int i,j; for(i=0;i<19;i++) for(j=0;j<10;j++) La[i][j]=0; Label=0;FLAG=0; ldelay=d[0];Lsum=0;Lpoint=0; randomize(); Lnext=random(23);} void dispb(LRflag,x,y,blockcode) int realx,realy; if(LRflag==L) {realx=LX+x*2;realy=LY+y;} else {realx=x,raly=y;} textcolor(b[blockcode].color); gotoxy(realx+2*b[blockcode].x0,realy+b[blockcode].y0);cputs("**"); gotoxy(realx+2*b[blockcode].x1,realy+b[blockcode].y1);cputs("**"); gotoxy(realx+2*b[blockcode].x2,realy+b[blockcode].y2);cputs("**"); gotoxy(realx+2*b[blockcode].x3,realy+b[blockcode].y3);cputs("**");} void eraseb(LRflag,x,y,blockcode) int LRflag,x,y,blockcode; { int realx,realy; if(LRflag==L) { realx=LX+x*2;realy=LY+y;} else {realx=Lx+x*2;realy=LY+y;} textcolor(0); gotoxy(realx+2*b[blockcode].x0,realy+b[blockcode].y0);cputs("**"); gotoxy(realx+2*b[blockcode].x1,realy+b[blockcode].y1);cputs("**"); gotoxy(realx+2*b[blockcode].x2,realy+b[blockcode].y2);cputs("**"); gotoxy(realx+2*b[blockcode].x3,realy+b[blockcode].y3);cputs("**");} } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-08-27
过了几天后,如果发现里面有个小bug,你肯定不想再去查看源码修复了。因为那是一个非常头痛的问题。
可能你首先想到以后要多写注释。但用注释还是不能解决根本问题。 没别的意思,只是提示一下要注意代码的清晰度。 |
|
返回顶楼 | |
发表时间:2008-08-29
现在忙着学Java,有时间了我再看看,那时候还请你多指点呀。呵呵
|
|
返回顶楼 | |
发表时间:2008-08-29
代码规范==代码质量
|
|
返回顶楼 | |
发表时间:2008-09-11
太多错误了,能不能调好了,再放上来
|
|
返回顶楼 | |
发表时间:2008-11-02
我不会用C,提个建议,能不能多几行注释呀!
因为现在没有谁会认真去看没有一行注释而且长段长段的代码,当然,除非是自己写的,不过那也不一定。 |
|
返回顶楼 | |
发表时间:2008-11-26
请问这是在那个编译器下编译的呀,cv or bc or other??
|
|
返回顶楼 | |
发表时间:2009-05-06
这怎么读得懂啊
|
|
返回顶楼 | |
发表时间:2009-05-06
现在的大学怎么就不与时俱进一点呢,都2009年了还在用1987年的编译器写dos下的程序
|
|
返回顶楼 | |
浏览 5027 次