返回列表 发帖

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

贪吃蛇游戏的帮助文件 跟传统的贪吃蛇游戏一样的规则,另外加入了一些新的特性,玩家可以自己发现,虽然这个游戏没有花很多的时间,而且在性能的优化上也做得不好,但是是第一次写类似的程序,觉得还有点困难,希望玩家们在游戏的趣味性和程序的能够提出一些好的建议,优化方面提出一些更好的建议,以便更好地修改游戏,给大家带来更多的趣味!!!! 此外,这个版本设置了终结程序,如果玩家有信心和耐心的话,不妨去试一下,相信它一定能很好地挑战你的大脑和双手!!!!! 我的email: kikix86@163.com QQ: 41805355 /*代码如下*/ #include #include #include #include #include #define UP 18432 #define DOWN 20480 #define LEFT 19200 #define RIGHT 19712 #define ESC 283 #define TRUE 1 #define FALSE 0 /*设置显示模式的函数*/ #define VGA256 0x13 #define TXT16 0x03 void Set_video_mode(int mode) { union REGS inregs,outregs; inregs.h.ah=0; inregs.h.al=(unsigned char)mode; int86(0x10,&inregs,&outregs); } /*画竖线的函数VLine*/ void VLine(int y1,int y2,int x,unsigned int color){ unsigned int LineOffset,index; unsigned char far *video_buffer=(char far *)0xA0000000L; LineOffset=((y1<<8)+(y1<<6))+x; for(index=0;index<=y2-y1;index++){ video_buffer[LineOffset]=color; LineOffset+=320; }} /*画方块的函数*/ void draw(int x,int y,int color) { unsigned char far *video_buffer=(char far *)0xA0000000L; int i,j=0; for((i=((((y<<8)+(y<<6))+x)-2));j<=4;i++) {video_buffer=color; j++; } j=0; for((i=(((((y-1)<<8)+((y-1)<<6))+x)-2));j<=4;i++) {video_buffer=color; j++; } j=0; for((i=(((((y+1)<<8)+((y+1)<<6))+x)-2));j<=4;i++) {video_buffer=color; j++; } j=0; for((i=(((((y-2)<<8)+((y-2)<<6))+x)-2));j<=4;i++) {video_buffer=color; j++; } j=0; for((i=(((((y+2)<<8)+((y+2)<<6))+x)-2));j<=4;i++) {video_buffer=color; j++; } } /*清空键盘缓冲区的函数*/ void Clear_Key_Buffer(void) {int offset; offset=peek(0x40,0x1a); pokeb(0x40,0x1c,offset); } main(void) { unsigned int LineOffset; unsigned char far *video_buffer=(char far *)0xA0000000L; int flag=90000; int i=0; int j; int count=2; int exit=FALSE; int key; int keydown=0 ; int rax; int ray; struct kuai {int x; int y; }; struct first {int x; int y; int left; int right; int up; int down; }; struct first head[103]={232,167,0,0,0,0, 232,172,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,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,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,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,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,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,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,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,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}; struct first temp; Set_video_mode(VGA256);/*设置为320*200 256色的图形模式*/ /*画游戏界面外框*/ for(i=59;i<=260;i++) {VLine(19,19,i,111); VLine(180,180,i,111); } VLine(19,180,59,111); VLine(19,180,260,111); draw(232,167,234); draw(232,172,234); draw(232,132,222);/*an egg*/ /*游戏大循环开始!!!*/ while (!exit) { keydown=0; if (kbhit()) { key = bioskey(0); switch(key) { case UP: if( (head[0].down!=1)&& !keydown) {head[0].up = 1; head[0].down=0; head[0].left=0; head[0].right=0; Clear_Key_Buffer(); keydown = TRUE; break;} case DOWN: if( (head[0].up!= 1)&& !keydown) {head[0].up = 0; head[0].down=1; head[0].left=0; head[0].right=0; Clear_Key_Buffer(); keydown = TRUE; break;} case LEFT: if( (head[0].right!=1)&& !keydown) {head[0].up = 0; head[0].down=0; head[0].left=1; head[0].right=0;; Clear_Key_Buffer(); keydown = TRUE; break;} case RIGHT: if( (head[0].left!= 1)&& !keydown) {head[0].up = 0; head[0].down=0; head[0].left=0; head[0].right=1; Clear_Key_Buffer(); keydown = TRUE; break;} case ESC: exit = TRUE;break; } } if((head[0].up ==0)&&(head[0].down==0)&&(head[0].left==0)&&(head[0].right==0)) {;} else{ temp.x=head[count-1].x;/*擦除尾巴的代码*/ temp.y=head[count-1].y; i=1; while((count-i-1)!=(-1))/*各个方块依次获取上一个方块的地址*/ {head[count-i].x=head[count-i-1].x; head[count-i].y=head[count-i-1].y; i++; } if(head[0].left==1) head[0].x=head[0].x-5; if(head[0].right==1) head[0].x=head[0].x+5; if(head[0].up==1) head[0].y=head[0].y-5; if(head[0].down==1) head[0].y=head[0].y+5; if(((head[0].left==1)||(head[0].right==1))&&((head[0].x<62)||(head[0].x>257))) exit=1; if(((head[0].up==1)||(head[0].down==1))&&((head[0].y<22)||(head[0].y>177))) exit=1; LineOffset=((head[0].y<<8)+(head[0].y<<6))+head[0].x; if(video_buffer[LineOffset]==234) exit=1; if(exit==1) goto END; /*吃蛋的代码,确保让蛇离开蛋的时候,带着蛋一起走,并改变蛋的颜色*/ else{ LineOffset=((temp.y<<8)+(temp.y<<6))+temp.x; if(video_buffer[LineOffset]==222) {count++; head[count-1].x=temp.x; head[count-1].y=temp.y; draw(head[0].x,head[0].y,234); draw(head[count-1].x,head[count-1].y,234); loop: rax=(random(19)+6)*10+2; ray=(random(15)+2)*10+7; for(i=0;i.x)&&(ray==head.y)) goto loop; } draw(rax,ray,222); } /*在遇到蛋的时候继续向前走的代码,并不改变蛋的颜色直到离开蛋!*/ else { for(i=0;i.y<<8)+(head.y<<6))+head.x; if(video_buffer[LineOffset]==222) {draw(head.x,head.y,222); draw(temp.x,temp.y,0); } /*没有蛋的时候*/ else {draw(head.x,head.y,234); draw(temp.x,temp.y,0); } } } /*延时部分,各种玩家可根据自己电脑的配置来选择时间值,我的是p3 128m 的*/ if((count-2)<10) delay(90000); if(((count-2)>=10)&&((count-2)<20)) delay(85000); if(((count-2)>=20)&&((count-2)<30)) delay(80000); if(((count-2)>=30)&&((count-2)<40)) delay(75000); if(((count-2)>=40)&&((count-2)<50)) delay(70000); if(((count-2)>=50)&&((count-2)<60)) delay(65000); if(((count-2)>=60)&&((count-2)<70)) delay(60000); if(((count-2)>=70)&&((count-2)<80)) delay(55000); if(((count-2)>=80)&&((count-2)<90)) delay(50000); if(((count-2)>=90)&&((count-2)<100)) delay(45000); if(count==102) {exit=1; flag=1; } } } } END: Set_video_mode(TXT16); if(flag==1) {window(26,10,80,15); textcolor(1102); textbackground(000); cprintf(" Congratulation!!!"); window(13,12,80,17); textcolor(0104); cprintf("The snake has eaten 100 eggs, You are the winner!!!"); window(2,14,80,19); textbackground(000); cprintf("----------------------------------------------------------------------"); window(2,15,80,20); textcolor(0102); cprintf("If you have any advice for this game,please tell me by the next email:"); window(10,16,60,21); textcolor(0102); cprintf(" ************** kikix86@163.com ************** "); textcolor(0100); } else { window(30,10,80,15); textcolor(1111); textbackground(001); textmode(800*600); cprintf("GAME OVER"); window(23,12,80,17); cprintf("The snake has eaten %d eggs!!!",count-2); window(2,14,80,19); textbackground(000); cprintf("----------------------------------------------------------------------"); window(2,15,80,20); textcolor(0102); cprintf("If you have any advice for this game,please tell me by the next email:"); window(10,16,60,21); textcolor(0102); cprintf(" ************** kikix86@163.com ************** "); textcolor(0100); } getche(); } 

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

似乎不能运行....

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

我试试
呵呵

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

头文件部分被屏蔽了,自己加一下了,他们是 肯定可以运行的 tc2.0下

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

stdio.h
dos.h
bios.h
stdlib.h
connio.h

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

把上面的头文件包含进去就可以了

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

very good!!!

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

不错!

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

上面的头文件有一个connio错了,应该是conio.h

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

缺tc程序,来不及试了,
不过蛮有意思的

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

这个程序的随机数做得不好,每次重新开始的时候,蛋的位置都是一样的,现在已经知道怎么改进了
在产生蛋的时候使用random()函数的时候之前使用randomize(),就可以很好的解决这个问题。
但是在游戏进行到后面的时候,有同学说会很慢,不过,我目前还是没有发现这种情况,希望能大家能发现并提出!!!
16位dos程序已经没有什么存在的价值了,但是用来锻炼我们的思维和动手能力还是有很大的帮助的,希望大家支持!!!!!

TOP

[原创]c语言的贪吃蛇代码,tc2.0 编译通过!!!!

愿意和我哦一起学习吗?
联系我 ?
85208141!
努力!

TOP

返回列表 回复 发帖