《C语言版贪吃蛇代码.doc》由会员分享,可在线阅读,更多相关《C语言版贪吃蛇代码.doc(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、. .C语言版贪食蛇游戏源代码(我自己写的)热1已有 58 次阅读 2011-01-18 17:57#include #include #include #include #define UP 0#define DOWN 1#define LEFT 2#define RIGHT 3/宏定义,定义四个方向-0 1 2 3分别代表上下左右#define TURN_NUM 1000/可以保存的最多转弯次数,一条蛇同时最多只能有1000次的弯曲#define INIT_LENGTH 8#define UP_EDGE 0#define DOWN_EDGE 24#define LEFT_EDGE 0#de
2、fine RIGHT_EDGE 79/定义上下左右四个边界#define X 0/初始状态下蛇的身体坐标(LEFT_EDGE+X,UP_EDGE+Y)#define Y 0/决定初始状态下蛇的身体相对于游戏界面原点(LEFT_EDGE,UP_EDGE)的位置/*定义全局变量*/char buf1000=*;/决定初始的snake_length的值:必须与INIT_LENGTH保持同步char *snake=buf;/蛇的身体,最长有1000个环节char FOOD=$;/记录食物的形状int food_num=0;/记录已经吃下的食物数量int score=0;/记录当前的得分,由food_n
3、um决定int snake_length=INIT_LENGTH;/initializer is not a constant:strlen(snake);int cursor2=LEFT_EDGE+20+INIT_LENGTH,UP_EDGE+10;/记录当前光标所指位置int head2=LEFT_EDGE+20+INIT_LENGTH-1,UP_EDGE+10;/记录头部的坐标int tail2=0,0;/记录尾巴的坐标int old_tail2;/记录上一步尾巴所在位置int food2=0,0;/记录食物的坐标int init_position2=LEFT_EDGE+X,UP_EDG
4、E+Y;/蛇的初始位置int direction=RIGHT;/记录当前蛇的头部的运动方向int turn_pointTURN_NUM2;int head_turn_num=0;/记录头部的转弯次数int tail_turn_num=0;/记录尾巴的转弯次数int game_over=0;/判断游戏是否结束/*主方法*/void main() /函数声名 void gotoxy(int x,int y);/移动光标的位置 void cur_state();/测试游戏的当前状态参数 void print_introduction();/打印游戏规则 void init();/初始化游戏 void
5、 control();/接收键盘控制命令 void move();/控制身体的运动 void move_up();/向上运动 void move_down();/向下运动 void move_left();/向左运动 void move_right();/向右运动 void update_tail_position();/更新尾巴的坐标 void generate_food();/随机产生食物 void eat_food();/吃下食物 char ch; while(!game_over) print_introduction(); printf(tt按任意键开始游戏); getch(); s
6、ystem(cls); /cur_state(); init(); control(); system(cls); gotoxy(0,10); printf(tt您的当前得分是%dn,score); printf(tt这条蛇共转了%d次弯,它的身体长度是%dn,head_turn_num,strlen(snake); printf(tt游戏结束,您要再玩一局吗?(y/n); scanf(%c,&ch); getchar(); if(ch=y|ch=Y) continue; else system(cls); printf(nnnttt谢谢您的使用,再见!); _sleep(3000); gam
7、e_over=1; /*打印游戏规则*/void print_introduction() int i=0; int rule_num; char *rule4; rulei+=nnttt欢迎您来玩贪食蛇游戏n; rulei+=tt游戏规则如下:n; rulei+=tt1.按上下左右键控制蛇的运动方向n; rulei+=tt2.按Ctrl+C结束当前游戏n; rule_num=i; system(cls); for(i=0;i0;i-) putchar(snakei-1); /*接收键盘控制命令*/void control() char command;/存放接收到命令 while(1) co
8、mmand=getch(); if(command=-32) /F11,F12:-123,-122 command=getch(); if(command=H & (direction=LEFT | direction=RIGHT)/光标上移 direction=UP; turn_pointhead_turn_num%TURN_NUM0=head0; turn_pointhead_turn_num%TURN_NUM1=head1; head_turn_num+; else if(command=P & (direction=LEFT | direction=RIGHT)/光标下移 direct
9、ion=DOWN; turn_pointhead_turn_num%TURN_NUM0=head0; turn_pointhead_turn_num%TURN_NUM1=head1; head_turn_num+; else if(command=K & (direction=UP | direction=DOWN)/光标左移 direction=LEFT; turn_pointhead_turn_num%TURN_NUM0=head0; turn_pointhead_turn_num%TURN_NUM1=head1; head_turn_num+; else if(command=M & (
10、direction=UP | direction=DOWN)/光标右移 direction=RIGHT; turn_pointhead_turn_num%TURN_NUM0=head0; turn_pointhead_turn_num%TURN_NUM1=head1; head_turn_num+; else if(command=-122 | command=-123); else if(command=0) command=getch();/接收Fn的下一个字符 /F1F10:5968 else if(command=1&command=UP_EDGE) gotoxy(head0,head
11、1); putchar(*); gotoxy(head0,head1-1); putchar(snake0); gotoxy(tail0,tail1); /_sleep(1000);/查看尾部光标 putchar(0); update_tail_position(); head1-=1; cursor0=head0; cursor1=head1-1; gotoxy(cursor0,cursor1); else gotoxy(head0,head1); /*向下运动*/void move_down() if(cursor1=LEFT_EDGE) gotoxy(head0,head1); putc
12、har(*); gotoxy(head0-1,head1); putchar(snake0); gotoxy(tail0,tail1); /_sleep(1000);/查看尾部光标 putchar(0); update_tail_position(); head0-=1; cursor0=head0-1; cursor1=head1; gotoxy(cursor0,cursor1); else gotoxy(head0,head1); /*向右运动*/void move_right() if(cursor0=RIGHT_EDGE) gotoxy(head0,head1); putchar(*)
13、; putchar(snake0); gotoxy(tail0,tail1); /_sleep(1000);/查看尾部光标 putchar(0); update_tail_position(); head0+=1; cursor0=head0+1; cursor1=head1; gotoxy(cursor0,cursor1); else gotoxy(head0,head1); /*更新尾巴的坐标*/void update_tail_position() old_tail0=tail0; old_tail1=tail1;/保存上次尾巴的位置 if(tail0=food0 & tail1=foo
14、d1) gotoxy(tail0,tail1); putchar(FOOD); if(tail_turn_numhead_turn_num) if(tail0turn_pointtail_turn_num%TURN_NUM0) tail0-=1; else if(tail1turn_pointtail_turn_num%TURN_NUM1) tail1-=1; else if(tail0=turn_point(tail_turn_num-1)%TURN_NUM0 & tail1=turn_point(tail_turn_num-1)%TURN_NUM1) if(tail0turn_pointt
15、ail_turn_num%TURN_NUM0) tail0-=1; else if(tail1turn_pointtail_turn_num%TURN_NUM1) tail1-=1; if(tail0=turn_pointtail_turn_num%TURN_NUM0 & tail1=turn_pointtail_turn_num%TURN_NUM1) tail_turn_num+=1; else if(tail_turn_num=head_turn_num) if(tail0head0) tail0-=1; else if(tail1head1) tail1-=1; void generat
16、e_food() int i=0,j=0; do i=rand()%DOWN_EDGE; while(iDOWN_EDGE); do j=rand()%DOWN_EDGE; while(jRIGHT_EDGE); food0=i; food1=j; gotoxy(food0,food1);/抵达食物投放点 putchar(FOOD);/放置食物 gotoxy(cursor0,cursor1);/返回光标当前位置void eat_food() if(tail0=turn_point(tail_turn_num-1)%TURN_NUM0 & tail1=turn_point(tail_turn_num-1)%TURN_NUM1) tail_turn_num-=1; snakesnake_length+=snake1; tail0=old_tail0; tail1=old_tail1;/将尾巴回退到上一步所在的位置 gotoxy(tail0,tail1); putchar(snake1); food_num+; score=food_num; gotoxy(cursor0,cursor1);