贪吃蛇C语言源文件

  • 格式:docx
  • 大小:37.21 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*贪吃蛇*/ #include #include #include #include #define HENG 80 #define SHU 25 //HENG 是宽度,SHU 是高度 #define TIME 400 //初始速度
void Gotoxy(int x, int y); void Food(struct SHE *head); int Move(struct SHE *head); int Panduan(struct SHE *head, int x, int y); struct SHE *Link(struct SHE *head); void FreeShe(struct SHE *head); void Gameover(void); void Huitu(struct SHE *head);
int Fx, Fy; //食物的位置 int fen; //得分
int fang; //方向参数 int Tx, Ty;
//构造蛇身 struct SHE { int x; int y; struct SHE *next; };
int main(void) { struct SHE *head = NULL; int temp; int times = TIME; char m;
do { fen = 0; fang = 2; temp = fen;

times = TIME; head = NULL;
head = (struct SHE *)malloc(sizeof(struct SHE)); head -> x = 40; head -> y = 13; head -> next = NULL;
Food(head);
while (1) { Huitu(head); Sleep(times); if (0 == Move(head)) { FreeShe(head); Gameover(); break; } if (temp < fen) { Food(head); temp = fen; if (times > 50) { times -=10; } else if (times > 20) { times -=1; } else ; } } do { Gotoxy(19,21); printf("是否继续?Y/N:"); scanf(" %c", &m); system("cls"); } while (m != 'Y' && m != 'y' && m != 'n' && m != 'N'); } while (m == 'Y' || m == 'y');

return 0; }
//绘图 void Huitu(struct SHE *head) { int flag = 1;
while (head != NULL) { Gotoxy(head -> x, head -> y); if (flag == 1) { printf("□"); } else if (flag == 2) { printf("■"); } else ; Gotoxy(Tx, Ty); printf(" "); flag++; head = head -> next; } }
//用于光标的移动 void Gotoxy(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); }
//食物位置构造 void Food(struct SHE *head) { int flag = 0; struct SHE *pr = head;

do { srand(GetTickCount()); //基于毫秒级的随机数产生办法,需头文件 winbase.h, windows 中设计 程序可以用 windows.h Fx = (rand()%40) * 2; Fy = (rand()%12) * 2; flag = 0; pr = head; while (pr != NULL) //防止食物位置与蛇形重合 { if (pr -> x == Fx && pr -> y == Fy) { flag = 1; break; } pr = pr -> next; } } while (flag == 1); Gotoxy(Fx, Fy); printf("■"); }
//用于蛇的移动 int Move(struct SHE *head) { char op; int tox, toy, flag, temp;
if (kbhit()) //kbhit 函数用于检查当前是否有键盘输入,若有则返回一个非 0 值,否则返回 0,需头 文件 conio.h { op = getch(); switch (op) { case 'w': if (fang != 3) fang = 1; break; case 'd': if (fang != 4) fang = 2; break; case 's': if (fang != 1)

fang = 3; break; case 'a': if (fang != 2) fang = 4; break; default: break; } }
switch (fang) { case 1: toy = (head -> y) - 1; tox = (head -> x); break; case 2: tox = (head -> x) + 2; toy = (head -> y); break; case 3: toy = (head -> y) + 1; tox = (head -> x); break; case 4: tox = (head -> x) - 2; toy = (head -> y); break; default: break; } flag = Panduan(head, tox, toy); if (flag == 0) { return 0; //game over } else if (flag == 1) { head = Link(head); fen++; } else {