#define mal (snake*)malloc(sizeof(snake))#define max 21#include <windows.h>#include <stdlib.h>#include <time.h>#include <stdio.h>#include <string.h>#include <conio.h>char map[max+1][max+1];char moodword[6][50]={{"我觉得明珠真的没有我能吃。。。"}, {"好开心吃吃吃!!!"}, {"明珠都没我能吃哈哈哈!!!"}, {"看我今天胃口好大!!!"}, {"顺丰和真乐是真爱。。。真的。。。"}, {"顺丰和真乐是真爱!!!!!"}};char badmoodword[5][40]={{"痛痛痛痛痛痛痛痛痛!!!"}, {"痛~~~我今天一定是感冒了。。。"}, {"痛~~~越痛越快乐yeah!yeah!yeah!"}, {"疼不要紧,关键是短了。。。"}, {"QAQ。。。。。。"}};int direct[4][2]={-1,0,1,0,0,-1,0,1};int grades;int guoguo;struct snake{ int x; int y; snake *next; snake *prev;}*stail,*shead;void gotoxy(int x, int y) //输出坐标 { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);}void color(int b) //颜色函数 { HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; SetConsoleTextAttribute(hConsole,b) ;}void gameover();void screenon(){ int i; for(i=0;i<=max+1;i++) { gotoxy(0,i); printf("■"); Sleep(4); gotoxy(2*i,0); printf("■"); Sleep(4); } for(i=1;i<=max+1;i++) { gotoxy(2*i,max+1); printf("■"); Sleep(4); gotoxy(2*max+2,i); printf("■"); Sleep(4); }}void snakeon(){ snake *head=stail; while(head!=NULL) { map[head->x][head->y]='s'; gotoxy(2*head->y,head->x); printf("#"); head=head->next; } gotoxy(2*shead->y,shead->x); printf("#");}void createsnake(){ stail=mal; shead=mal; stail->next=shead; shead->prev=stail; stail->prev=shead->next=NULL; stail->x=stail->y=2; shead->x=2,shead->y=3;}void getguoguo(){ int x=rand()%max+1; int y=rand()%max+1; for(;map[x][y]!=' ';) { x=rand()%max+1; y=rand()%max+1; } map[x][y]='a'; gotoxy(2*y,x); printf("¤");}void mood(){ gotoxy(0,max+2); printf(" "); gotoxy(0,max+2); printf("%s",moodword[rand()%6]); gotoxy(0,max+2);}void badmood(){ gotoxy(0,max+2); printf(" "); gotoxy(0,max+2); printf("%s",badmoodword[rand()%5]); gotoxy(0,max+2);}void move(char ch){ int i; snake *head=stail; switch(ch) { case 'W': case 'w':i=0;break; case 'S': case 's':i=1;break; case 'A': case 'a':i=2;break; case 'D': case 'd':i=3;break; default:return; } int x=shead->x+direct[i][0]; int y=shead->y+direct[i][1]; if(x<=0||y<=0||x>max||y>max) gameover(); if(guoguo) { guoguo--; head=mal; head->next=stail; stail->prev=head; head->x=stail->x; head->y=stail->y; stail=head; } else { map[stail->x][stail->y]=' '; gotoxy(2*stail->y,stail->x); printf(" "); } while(head->next!=NULL) { head->x=head->next->x; head->y=head->next->y; head=head->next; } gotoxy(2*shead->y,shead->x); printf("#"); shead->x+=direct[i][0]; shead->y+=direct[i][1]; if(map[shead->x][shead->y]=='a') { guoguo++;//吃到果子 grades+=10; mood(); } else if(map[shead->x][shead->y]=='s') { for(head=stail;head->x!=shead->x||head->y!=shead->y;) { gotoxy(2*head->y,head->x); printf(" "); map[head->x][head->y]=' '; grades-=3; head=head->next; } gotoxy(2*head->y,head->x); printf(" "); map[head->x][head->y]=' '; head=head->next; stail=head; badmood(); }//咬自己 map[shead->x][shead->y]='s'; gotoxy(2*shead->y,shead->x); printf("#"); if(guoguo) getguoguo(); Sleep(120-grades/4);}void game(){ grades=guoguo=0; memset(map,' ',sizeof(map)); srand((unsigned)time(NULL)); createsnake(); screenon(); gotoxy(2*max+5,0); printf("wsad上下左右 p暂停 esc结束"); snakeon(); getguoguo(); gotoxy(0,max+2); char ch='p',c; while(ch!=27) { c=ch; if(kbhit()) { ch=getch(); switch(ch) { case 27:exit(0); case 'P': case 'p':break; case 'W': case 'w':if(c=='s'||c=='S')ch='s';break; case 'S': case 's':if(c=='w'||c=='W')ch='w';break; case 'A': case 'a':if(c=='d'||c=='D')ch='d';break; case 'D': case 'd':if(c=='a'||c=='A')ch='a';break; default:ch=c;break; } } move(ch); }}void gameover(){ stail=stail->next; for(;stail->next!=NULL;) { free(stail->prev); stail=stail->next; } free(stail); shead=stail=NULL; char ch; gotoxy(2*max+6,2); printf("你的蛇蛇撞死了 QAQ\n"); gotoxy(2*max+6,4); printf("它吃到了分数为%d的果果\n",grades); gotoxy(2*max+6,5); printf("简直死不瞑目。。。\n"); gotoxy(2*max+6,7); //yanse printf("要重来咩?(按y重新开始,esc结束)"); for(;;) { ch=getch(); if(ch=='y') system("cls"), game(); else if(ch==27) { gotoxy(2*max+6,9); system("pause"); gotoxy(2*max+6,10); exit(0); } }}int main(){ game(); return 0;}
目前暂无任何回答
- 0 回答
- 1 关注
- 1657 浏览
添加回答
举报
0/150
提交
取消