上学期看到学长写了一个贪吃蛇,就一直想要做一个不同的游戏,当时觉得写出来并不是不可能,可还是因为能力有限,很多东西都不懂,就放弃了这个想法。这学期还没开始,就一直心想着编一个俄罗斯方块出来,可是当我真正开始的时候,才发现没有那么简单,什么头绪也没有就开始凭着感觉去写。大干花了两个晚上的时间写了大概有100~200行代码,再回过头来去看那个贪吃蛇的代码,发现自己写的完全什么用也没有。没办法只有全部删掉,先研究研究再从头开始。
在中途也碰到过很多问题,有一段时间就干脆不去管它,搁置了大概有一两周的时间,之后开始写才一点一点理清思路,写各种函数(由于对c++还算是没入门,只能用c语言写下去了),再考虑各种情况,再一点一点拼凑起来,总算是把他给摆平了。不过到现在也还是有各种BUG,还希望多多见谅。(实在是不好找错了)。没事了可以拿去玩一玩。还希望各位指出其中的BUG,容小菜再去改一改。。。
从这500行的代码中,其实感觉自己也没用到什么新东西,不懂得直接调用别人的,其他的基本上都是FOR循环以及IF和ELSE,所以这不算什么学到很多新知识,但是有一点,就是从这么长的代码中明白一点,就是如何去管理这样长的代码:用容易理解的函数名以及变量名;各种函数的功能明确;如何去安排每个细节;然后就是一点一点耐心的调试,一边调试一边编写。。。。还是很有收获的!!!
游戏图片:(高手勿喷!!!)
代码
1 /*******************************/ 2 /******Writer: GJ *******/ 3 /******Language: C *******/ 4 /******Date: 2013 3 23 *******/ 5 /*******************************/ 6 #include7 #include 8 //#include 9 #include 10 #include 11 #include 12 #include 13 using namespace std; 14 #define me(a) memset(a,0,sizeof(a)) 15 #define judge(bl,ok) for(i=0;i<5;i++)if(bl[i].x&&map[bl[i].x][bl[i].y])ok=0 16 #define is_pure(node,ok) if(map[node.x][node.y])ok=0 17 const int HEIGHT=24,LENGTH=40,SIDE=22; 18 19 char INIT_MAP[HEIGHT+1][LENGTH+1]; 20 int map[HEIGHT][SIDE]; 21 struct node{ int x,y;int color;}; 22 const int TIME_DWELL=1000; 23 int state=0; 24 25 /**********获取句柄**********/ 26 HANDLE Output=GetStdHandle(STD_OUTPUT_HANDLE); 27 HANDLE Input=GetStdHandle(STD_INPUT_HANDLE); 28 29 /**********设置光标位置**********/ 30 void SetCursor(int x,int y){ 31 COORD cd={x,y}; 32 SetConsoleCursorPosition(Output,cd); 33 } 34 35 /**************初始化图**************/ 36 void INITMAP() 37 { 38 for(int i=0;i max)max=block[i].y;330 if(max+2>19)ok=0;331 for(i=0;i<5&&block[i].x;i++)if(block[i].x)332 if(map[block[i].x][block[i].y+2])ok=0;333 return ok;334 }335 336 /*********打印图**********/337 void print_map()338 {339 int i,j;340 me(INIT_MAP);341 for(i=0;i 1;i--){406 int ok=1;407 for(j=1;j 1;j--)for(int k=1;k 1;i--)416 for(int j=1;j =5&&j<17)printf("%c",aa[t++]);441 else printf(" ");442 }443 }444 else for(j=4;j<18;j++){445 SetCursor(j,i);446 printf(" ");447 }448 }449 SetCursor(1,12);printf(" Enter To Continue. ");450 SetCursor(1,13);printf(" Esc To Escape. ");451 SetCursor(1,14);printf(" ");452 }453 return ok;454 }455 456 /*******游戏结束,再来一局,清理屏幕******/457 void Clear_map()458 {459 for(int i=22;i>0;i--)460 for(int j=1;j