300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 贪吃蛇_C语言_链表实现_SCAU课程设计

贪吃蛇_C语言_链表实现_SCAU课程设计

时间:2021-05-07 01:12:43

相关推荐

贪吃蛇_C语言_链表实现_SCAU课程设计

个人大一下课程设计作品,本文中直接附上源代码(通过visual stdio 实现 ):

课题:贪吃蛇(链表实现~)

语言:C/C++

运行环境(软件):Visual Stdio (以下统一简称“vs”)

作者(CSDN账户名):zzzzzyl_C_Py_Ja

前言:

我大一下做课设的时候选的是贪吃蛇项目,且是根据链表实现的。

当时课设的要求大概是这个样子:

做这次课设时的历程与感慨:

当时,在CSDN上搜了资源,找了好多都好难找到完美的(不是各种各样的bug就是甚至连运行都运行不了,很无奈),很能体会到当时的无助。所以现在我做完课设了,将它分享与大家,希望能帮助更多的人,也能丰富网络上、CSDN上的这方面(贪吃蛇_C语言~_链表实现)的资源。全文大家都可以适度地参考借鉴一下,现发诸此处:

代码:

我在这一共发布了三个版本的代码,分别是:

1-代码(代码一)

基本核心功能代码~(共222行)(新手可先学这里) ):

只实现了贪吃蛇游戏最基本最核心的功能,新手建议先学这里!

(注:不做文件分区,大家直接复制到自己vs版的某cpp后缀文件中即可了)

#pragma once#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<Windows.h>#include<conio.h>//键盘~! *.#include<iostream>#define OK 1int shechang = 4;int flag = 4;int xbianhua = 2, ybianhua = 0;int shijian = 100;typedef struct LNode{int x;int y;struct LNode* next;}LNode, * LinkList;LNode* tou, * wei, * jie, * daoshudier, * shiwu, * bianli;#define boardwidth 112#define boardlength 36//黄金比:长等于宽乘以0.618~(再乘2~)#define windowlength 45#define windowwidth 160int main();void zuobiao(int x, int y);void jianpan();void movesnake();void xinshiwu();//void color(int ~);void zuobiao(int x, int y){COORD pos;//注意:0是开始!亦占一格pos.X = x;//x的值为y~两倍 z.pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);}void drawmap(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");}int initsnake(){int i;wei = new LNode;//龘龘龘wei->x = boardwidth / 2 - 4;wei->y = boardlength / 2;wei->next = NULL;zuobiao(wei->x, wei->y);printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = boardwidth / 2 - 4 + 2 * i; //!!!!!!!!!!!!!!!!!!!!!!!!tou->y = boardlength / 2;zuobiao(tou->x, tou->y);printf("■");wei = tou;}wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu();return OK;}void xinshiwu(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;if (shiwu->x % 2 != 0 || shiwu->x == 0 || shiwu->y == 0){free(shiwu);xinshiwu();}zuobiao(shiwu->x, shiwu->y);printf("●");}void jianpan(){while (1){char ch;if (_kbhit()){ch = _getch();ch = _getch();/*极特殊↑↑↑之发现:在此处多(再~.)加一个“(ch=_getch())”可以修复好之前“按一下方向键蛇会动两格(而非正常的一格~)”的bug!而且,还可以空格控制进程的暂停或继续 !surprise,but why!? .*//*↑↑↑ ???? *~!. *///********!!!!!!.if (ch == 80 && flag != 1) flag = 2;if (ch == 72 && flag != 2/*nice~!*/) flag = 1;//*!if (ch == 75 && flag != 4) flag = 3;if (ch == 77 && flag != 3) flag = 4;if (ch == 59 && shijian <= 225){shijian += 25;//F1减速}if (ch == 60 && shijian >= 75){shijian -= 25;//F2减速}else if (ch == 62){printf("您退出了游戏!");exit(0);//F4退出游戏}}Sleep(shijian);//!!!!!新变量(#define shijian 300)movesnake();if (tou->x == boardwidth || tou->y == boardlength || tou->x == 0 || tou->y == 0)exit(0);//龘 是处exit(0)待改~.jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(boardwidth, boardwidth); exit(0);}}}}void movesnake(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}LNode* xin;//龘xin = new LNode;xin->x = xbianhua + tou->x;//后可改~ !xin->y = ybianhua + tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;//if(food()==1) !!!!!!!if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu();}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y); printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}int main(){system("mode con cols=160 lines=45");//左须为右之两倍 drawmap();initsnake();jianpan();movesnake();zuobiao(boardwidth, boardlength + 1);return 0;}

2-代码(代码二)

无排行榜功能(共1726行)

这里我除了最基本的贪吃蛇普通模式之外,还开发了另外三种模式,另外加上了游戏说明和游戏界面右端规则、分数、成就显示等功能,大家可以适度地参考借鉴一下。

(注:不做文件分区,大家直接复制到自己vs版的某cpp后缀文件中即可了)

#pragma once#pragma once#include<stdio.h>#include<stdlib.h>#include<malloc.h>//链表~#include<Windows.h>//窗口~ .#include<conio.h>//键盘~! *.#define OK 1#define dituheng 108#define ditushu 36#define zongheng 160#define zongshu 45int shechang = 4;int flag = 4;int xbianhua = 2, ybianhua = 0;int shijian=100;int caidanflag = 0;int i, j;int fenshu = 0;int fenshubianhua = 10;int sududengji = 3;//??typedef struct LNode{int x;int y;struct LNode* next;}LNode, * LinkList;//LinkList:???(这里引用了大一上下两本教材书上关于链表创建的源码~)LNode* tou, * wei, * jie, * daoshudisan, * daoshudier, * shiwu, * duyao, * duyao2, * bianli;//头,尾,结,倒数第三,倒数第二,食物,毒药1,毒药2,遍历//黄金比:长等于宽乘以0.618~(再乘2~)int main();void zuobiao(int x, int y);int color(int num);void caidan();void shuoming();void youbianshuoming();//void color(int ~);//————————————————————————————————void xinditu1();int xinshe1();void xinshiwu1();void jianpan1();void sheyidong1();//————————————————————————————————void xinditu2();int xinshe2();void xinshiwu2();void jianpan2();void sheyidong2();//————————————————————————————————void xinditu3();int xinshe3();void xinshiwu3();void jianpan3();void sheyidong3();//————————————————————————————————void xinditu4();int xinshe4();void xinshiwu4();void jianpan4();void sheyidong4();//————————————————————————————————、void zuobiao(int x, int y){COORD pos;//注意:0是开始!亦占一格pos.X = x;//x的值为y~两倍 z.pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);}int color(int num)///weixin_43118073/article/details/102531970 ~ .{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), num);return 0;}void xinditu1(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n"); xinshe1();}int xinshe1(){int i;wei = new LNode;wei->x = dituheng / 2 - 4;wei->y = ditushu / 2;wei->next = NULL;zuobiao(wei->x, wei->y);color(11);// printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = dituheng / 2 - 4 + 2 * i; tou->y = ditushu / 2;zuobiao(tou->x, tou->y);color(11);// printf("■");wei = tou;}zuobiao(tou->x, tou->y);color(12);// printf("■");// color(15);// wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu1();return OK;}void xinshiwu1(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;if (shiwu->x % 2 != 0||shiwu->x==0||shiwu->y==0){free(shiwu);xinshiwu1();}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (shiwu->x == jie->x && shiwu->y == jie->y){free(shiwu);xinshiwu1();}}zuobiao(shiwu->x, shiwu->y);color(14);printf("●");color(15);}void jianpan1(){flag=4;shijian = 100;fenshu = 0;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥fenshubianhua = 10;while (1){youbianshuoming();//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥char ch;if (_kbhit()){ch = _getch();ch = _getch();if (ch == 80 && flag != 1){flag = 2;}if (ch == 72 && flag != 2/*nice~!*/){flag = 1;}if (ch == 75 && flag != 4){flag = 3;}if (ch == 77 && flag != 3){flag=4;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 59 && shijian <160)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian += 30; sududengji -= 1; fenshubianhua -= 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 60 &&shijian>40)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian -= 30; sududengji += 1; fenshubianhua += 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥九点}else if (ch == 62){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}Sleep(shijian );//!!!!!新变量(#define shijian 300)sheyidong1();if (tou->x == dituheng || tou->y == ditushu|| tou->x == 0 || tou->y == 0){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(dituheng, dituheng); system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}}}void sheyidong1(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}//12点!!!!!!!!!!!!!!!!!!!!!zuobiao(tou->x, tou->y);color(11);printf("■");color(12);//12点!!!!!!!!!!!!!!!!!!!!!!!!LNode* xin;xin = new LNode;xin->x = xbianhua+tou->x;//后可改~ !xin->y = ybianhua+tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu1();fenshu+=fenshubianhua;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y);printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}//————————————————————————————————————————————void xinditu2(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");for (i = 2; i <= dituheng - 2; i++){for (j = 1; j <= ditushu - 1; j++){if (i % 8 == 0 && j % 4 == 0)/******* ****!!!!****/{zuobiao(i, j);color(4);printf("▲");color(7);}}}xinshe2();}int xinshe2(){int i;wei = new LNode;//龘龘龘wei->x = dituheng / 2 - 4;wei->y = ditushu / 2;wei->next = NULL;zuobiao(wei->x, wei->y);color(11);printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = dituheng / 2 - 4 + 2 * i; //!!!!!!!!!!!!!!!!!!!!!!!!tou->y = ditushu / 2;zuobiao(tou->x, tou->y);color(11);printf("■");wei = tou;}zuobiao(tou->x, tou->y);color(12);// printf("■");// color(15);// wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu2();return OK;}void xinshiwu2(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;if (shiwu->x % 2 != 0 || shiwu->x == 0 || shiwu->y == 0){free(shiwu);xinshiwu2();}if (shiwu->x % 8 == 0&& shiwu->y % 4 == 0){free(shiwu);xinshiwu2();}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (shiwu->x == jie->x && shiwu->y == jie->y){free(shiwu);xinshiwu2();}}zuobiao(shiwu->x, shiwu->y);color(14);printf("●");color(15);}void jianpan2(){flag=4;shijian = 100;fenshu = 0;fenshubianhua = 10;while (1){youbianshuoming();char ch;if (_kbhit()){ch = _getch();ch = _getch();/*极特殊↑↑↑之发现:在此处多(再~.)加一个“(ch=_getch())”可以修复好之前“按一下方向键蛇会动两格(而非正常的一格~)”的bug!而且,还可以空格控制进程的暂停或继续 !surprise,but why!? .*//*↑↑↑ ???? *~!. *///********!!!!!!.if (ch == 80 && flag != 1){flag = 2;}if (ch == 72 && flag != 2/*nice~!*/){flag = 1;//*!}if (ch == 75 && flag != 4){flag = 3;}if (ch == 77 && flag != 3){flag = 4;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 59 && shijian < 160)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian += 30; sududengji -= 1; fenshubianhua -= 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 60 && shijian > 40)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian -= 30; sududengji += 1; fenshubianhua += 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥九点}else if (ch == 62){printf("您退出了游戏!");system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}for (i = 2; i <= dituheng - 2; i++){for (j = 1; j <= ditushu - 1; j++){if (i % 8 == 0 && j % 4 == 0)/******* ****!!!!****/{zuobiao(i, j);color(4);printf("▲");color(7);}}}Sleep(shijian+20);//!!!!!新变量(#define shijian 300)sheyidong2();if (tou->x == dituheng || tou->y == ditushu || tou->x == 0 || tou->y == 0){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}} jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(dituheng, dituheng); system("cls");zuobiao(zongheng/2-14,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}if (tou->next== NULL){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}}void sheyidong2(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}//zuobiao(tou->x, tou->y);color(11);printf("■");color(12);//LNode* xin;//龘xin = new LNode;xin->x = xbianhua + tou->x;//后可改~ !xin->y = ybianhua + tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu2();fenshu += fenshubianhua;}else if (tou->x % 8 == 0 && tou->y % 4 == 0){fenshu -= fenshubianhua;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥LNode* daoshudisan;daoshudisan = new LNode;daoshudisan = tou;while (daoshudisan->next->next->next != NULL){daoshudisan = daoshudisan->next;}zuobiao(daoshudisan->next->next->x, daoshudisan->next->next->y); printf(" ");zuobiao(daoshudisan->next->x, daoshudisan->next->y); printf(" ");free(daoshudisan->next->next);free(daoshudisan->next);daoshudisan->next = NULL;}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y); printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}//——————————————————————————————————————————————————————void xinditu3(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");for (i = 0; i <= dituheng; i++){for (j = 0; j <= ditushu; j++){if (j == 12 && i <= 64 && i>=6){zuobiao(i, j);printf("□");}if (i==72 && j <= 20&&j>=3){zuobiao(i, j);printf("□");}if (j == 24 && i <= 102&&i>=44){zuobiao(i, j);printf("□");}if (i==36&&j<=33&&j>=16){zuobiao(i, j);printf("□");}}}xinshe3();}int xinshe3(){int i;wei = new LNode;wei->x = dituheng / 2 - 14;wei->y = ditushu / 2;wei->next = NULL;zuobiao(wei->x, wei->y);color(11);printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = dituheng / 2 - 14 + 2 * i; //!!!!!!!!!!!!!!!!!!!!!!!!tou->y = ditushu / 2;zuobiao(tou->x, tou->y);color(11);printf("■");wei = tou;}zuobiao(tou->x, tou->y);color(12);// printf("■");// color(15);// wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu3();return OK;}void xinshiwu3(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;if (shiwu->x % 2 != 0 || shiwu->x == 0 || shiwu->y == 0){free(shiwu);xinshiwu3();}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (shiwu->x == jie->x && shiwu->y == jie->y){free(shiwu);xinshiwu1();}}if (shiwu->y == 12 && shiwu->x <= 64 && shiwu->x >= 6){free(shiwu);xinshiwu3();}if (shiwu->x == 72 && shiwu->y <= 20 && shiwu->y >= 3){free(shiwu);xinshiwu3();}if (shiwu->y == 24 && shiwu->x <= 102 && shiwu->x >= 44){free(shiwu);xinshiwu3();}if (shiwu->x == 36 && shiwu->y <= 33 && shiwu->y >= 16){free(shiwu);xinshiwu3();}zuobiao(shiwu->x, shiwu->y);color(14);printf("●");color(15);}void jianpan3(){flag=4;shijian = 100;fenshu = 0;fenshubianhua = 10;while (1){youbianshuoming();char ch;if (_kbhit()){ch = _getch();ch = _getch();/*极特殊↑↑↑之发现:在此处多(再~.)加一个“(ch=_getch())”可以修复好之前“按一下方向键蛇会动两格(而非正常的一格~)”的bug!而且,还可以空格控制进程的暂停或继续 !surprise,but why!? .*//*↑↑↑ ???? *~!. *///********!!!!!!.if (ch == 80 && flag != 1){flag = 2;}if (ch == 72 && flag != 2/*nice~!*/){flag = 1;//*!}if (ch == 75 && flag != 4){flag = 3;}if (ch == 77 && flag != 3){flag = 4;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 59 && shijian < 160)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian += 30; sududengji -= 1; fenshubianhua -= 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 60 && shijian > 40)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian -= 30; sududengji += 1; fenshubianhua += 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥九点}else if (ch == 62){printf("您退出了游戏!");system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}Sleep(shijian+18);//!!!!!新变量(#define shijian 300)sheyidong3();if (tou->x == dituheng || tou->y == ditushu || tou->x == 0 || tou->y == 0){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");Sleep(2000);caidan();}//龘 是处exit(0)待改~.jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(dituheng, dituheng); system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}if (tou->y == 12 && tou->x <= 64 && tou->x >= 6){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}if (tou->x == 72 && tou->y <= 20 && tou->y >= 3){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}if (tou->y == 24 && tou->x <= 102 && tou->x >= 44){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}if (tou->x == 36 && tou->y <= 33 && tou->y >= 16){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}}void sheyidong3(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}//zuobiao(tou->x, tou->y);color(11);printf("■");color(12);//LNode* xin;xin = new LNode;xin->x = xbianhua + tou->x;//后可改~ !xin->y = ybianhua + tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu3();fenshu += fenshubianhua;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y); printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}//————————————————————————————————————————————void xinditu4(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");for (i = 2; i <= dituheng - 2; i++){for (j = 1; j <= ditushu - 1; j++){if (i % 6 == 0 && j % 3 == 0)/******* ****!!!!****/{zuobiao(i, j);color(4);printf("▲");color(7);}}} for (i = 0; i <= dituheng; i++){for (j = 0; j <= ditushu; j++){if (j == 13 && i <= 64&&i>1){zuobiao(i, j);printf("□");}if (i == 70 && j <= 20&&j>0){zuobiao(i, j);printf("□");}if (j == 23 && i <= 106 && i >= 44){zuobiao(i, j);printf("□");}if (i == 38 && j < 36 && j >= 16){zuobiao(i, j);printf("□");}}}xinshe4();}int xinshe4(){int i;wei = new LNode;//龘龘龘wei->x = dituheng / 2 - 12;wei->y = ditushu / 2+2;wei->next = NULL;zuobiao(wei->x, wei->y);color(11);printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = dituheng / 2 - 12 + 2 * i; //!!!!!!!!!!!!!!!!!!!!!!!!tou->y = ditushu / 2+2;zuobiao(tou->x, tou->y);color(11);printf("■");wei = tou;}zuobiao(tou->x, tou->y);color(12);// printf("■");// color(15);// wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu4();return OK;}void xinshiwu4(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (shiwu->x == jie->x && shiwu->y == jie->y){free(shiwu);xinshiwu4();}}if (shiwu->x % 2 != 0 || shiwu->x == 0 || shiwu->y == 0){free(shiwu);xinshiwu4();}if (shiwu->x % 6 == 0 && shiwu->y % 3 == 0){free(shiwu);xinshiwu4();}if (shiwu->y == 13 && shiwu->x <= 64){free(shiwu);xinshiwu4();}if (shiwu->x == 70 && shiwu->y <= 20){free(shiwu);xinshiwu4();}if (shiwu->y == 23 && shiwu->x <= 108 && shiwu->x >= 44){free(shiwu);xinshiwu4();}if (shiwu->x == 38 && shiwu->y <= 36 && shiwu->y >= 16){free(shiwu);xinshiwu4();}//DADADAzuobiao(shiwu->x, shiwu->y);color(14);printf("●");color(15);}void jianpan4(){flag=4;shijian = 100;fenshu = 0;fenshubianhua = 10;while (1){youbianshuoming();char ch;if (_kbhit()){ch = _getch();ch = _getch();/*极特殊↑↑↑之发现:在此处多(再~.)加一个“(ch=_getch())”可以修复好之前“按一下方向键蛇会动两格(而非正常的一格~)”的bug!而且,还可以空格控制进程的暂停或继续 !surprise,but why!? .*//*↑↑↑ ???? *~!. *///********!!!!!!.if (ch == 80 && flag != 1){flag = 2;}if (ch == 72 && flag != 2/*nice~!*/){flag = 1;//*!}if (ch == 75 && flag != 4){flag = 3;}if (ch == 77 && flag != 3){flag = 4;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 59 && shijian < 160)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian += 30; sududengji -= 1; fenshubianhua -= 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 60 && shijian > 40)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian -= 30; sududengji += 1; fenshubianhua += 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥九点}else if (ch == 62){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}for (i = 2; i <= dituheng - 2; i++){for (j = 1; j <= ditushu - 1; j++){if (i % 6 == 0 && j % 3 == 0)/******* ****!!!!****/{zuobiao(i, j);color(4);printf("▲");color(7);//dadada}}}Sleep(shijian+100);sheyidong4();if (tou->x == dituheng || tou->y == ditushu || tou->x == 0 || tou->y == 0){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");Sleep(2000);caidan();}//龘 是处exit(0)待改~.jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(dituheng, dituheng); system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}if (tou->y == 13 && tou->x <= 64){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}if (tou->x == 70 && tou->y <= 20){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}if (tou->y == 23 && tou->x <= 108 && tou->x >= 44){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}if (tou->x == 38 && tou->y <= 36 && tou->y >= 16){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}if (tou->next== NULL){system("cls");zuobiao(zongheng/2-12,zongshu/2-8);color(12);printf("游戏结束!");zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);Sleep(200);printf("请进行选择: 1、重新进行游戏; 2、退出游戏!");zuobiao(zongheng / 2 - 10, zongshu / 2 - 4);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();}else if (jieshuflag == 2){exit(0);}}}}void sheyidong4(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}//zuobiao(tou->x, tou->y);color(11);printf("■");color(12);//LNode* xin;//龘xin = new LNode;xin->x = xbianhua + tou->x;//后可改~ !xin->y = ybianhua + tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu4();fenshu += fenshubianhua;}else if (tou->x % 6 == 0 && tou->y % 3 == 0){fenshu -= fenshubianhua;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥LNode* daoshudisan;daoshudisan = new LNode;daoshudisan = tou;while (daoshudisan->next->next->next != NULL){daoshudisan = daoshudisan->next;}zuobiao(daoshudisan->next->next->x, daoshudisan->next->next->y); printf(" ");zuobiao(daoshudisan->next->x, daoshudisan->next->y); printf(" ");free(daoshudisan->next->next);free(daoshudisan->next);daoshudisan->next = NULL;}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y); printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}//——————————————————————————————————————————————————void youbianshuoming(){zuobiao(dituheng + 6, 2);color(15);printf("游戏说明&显示:");zuobiao(dituheng + 6, 4+ 2);color(14);printf("1、按键说明:");zuobiao(dituheng + 6, 6 + 2);color(10);printf("(1)按上下左右键:控制蛇的移动方向;");zuobiao(dituheng + 6, 8 + 2);color(11);printf("(2)按空格键:可以暂停/继续游戏;");zuobiao(dituheng + 6, 10 + 2);color(12);printf("(3)按F4键:可以结束游戏;");zuobiao(dituheng + 6, 12 + 2);color(13);printf("(4)按F1/F2键:可以对蛇的移动进行减速/加速;");zuobiao(dituheng + 6, 16 + 2);color(14);printf("2、分数和速度显示:");zuobiao(dituheng + 6, 6 + 2 + 12);color(10);printf("(1)当前分数:%2d分",fenshu);zuobiao(dituheng + 6, 8 + 2 + 12);color(11);printf("(2)速度等级:%2d(1--5)",sududengji);//蹦~zuobiao(dituheng + 6, 8+2+12+2);color(12);printf("(3)食物(/毒药)对应增(/减)分值:%2d分(6--14)",fenshubianhua);//蹦~zuobiao(dituheng + 6, 22+4+2);color(14);printf("☆☆☆成就显示☆☆☆");zuobiao(dituheng + 6, 22 + 6+2);color(10);printf("敬请期待......");if (fenshu >= 50){zuobiao(dituheng + 6, 22 +6+2);color(2);printf("达成成就:初出茅庐 50分!");}if (fenshu >= 100){zuobiao(dituheng + 6, 22+8 + 2);color(3);printf("达成成就:崭露头角 100分!");}if (fenshu >= 200){zuobiao(dituheng + 6, 22 + 10 + 2);color(4);printf("达成成就:登堂入室 200分!");}if (fenshu >= 500){zuobiao(dituheng + 6, 22 +12 + 2);color(5);printf("达成成就:技惊四座 500分!您已经出神入化了!");}if (fenshu >= 1000){zuobiao(dituheng + 6, 22 + 14 + 2);color(6);printf("达成成就:大显身手 1000分!您已经登峰造极了!");zuobiao(dituheng + 6, 22 + 16 + 2);color(7);printf("您已达到过目前已有的所有成就了!恭喜您!");}}void shuoming(){system("cls");zuobiao(zongheng / 2 - 14 - 2, zongshu / 2 - 4 - 5-2-2);color(11);printf("游戏说明:");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 - 2 - 3 - 2-2);color(15);printf("1、普通模式:蛇吃食物增长,且分数增加,撞墙(冲出边界)则游戏结束;");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 - 0 - 3 - 2 - 2);color(2);printf("2、“毒刺”模式:增加红色毒刺,蛇碰到则身体剪短,且分数减少,蛇长小于2时游戏也会结束;");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 + 2 - 3 - 2 - 2);color(3);printf("3、新地图(“风车阵”)模式:增加新地图样式,“阵型”类似于风车~,蛇撞“墙”也会则游戏结束;");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 + 4 - 3 - 2 - 2);color(4);printf("4、“地狱”模式:既有毒刺也有风车阵型,并且毒刺更密,阵型的“墙”更多更复杂,但蛇的初始速度更慢");zuobiao(zongheng / 2 - 26 - 18, zongshu / 2 + 6 - 3 - 2);color(13);printf("5、游戏按键: 上下左右键控制蛇的移动方向;空格键暂停/继续游戏;F4键退出游戏;");zuobiao(zongheng / 2 - 26 - 18+3, zongshu / 2 + 6 - 3+2 - 2);color(13);printf("F1键加速蛇的移动,且食物(/毒药)对应的增(/减)分值会加大;F2键减速蛇的移动,增减分值会减小;");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 + 10 - 3+2);color(14);printf("按任意键可以返回主菜单......");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 + 12 - 3+2);color(15);char renyijian;renyijian = _getch();caidan();}void caidan(){system("cls");int shechang = 5;int flag=4;shijian = 100;int xbianhua = 2, ybianhua = 0;int shijian = 100;int caidanflag = 0;typedef struct LNode{int x;int y;struct LNode* next;}LNode, * LinkList;//LinkList:???(这里引用了大一上下两本教材书上关于链表创建的源码~)LNode* tou, * wei, * jie, * daoshudisan, * daoshudier, * shiwu, * duyao, * duyao2, * bianli;//头,尾,结,倒数第三,倒数第二,食物,毒药1,毒药2,遍历system("mode con cols=160 lines=45");//左须为右之两倍 zuobiao(zongheng / 2-18, zongshu / 2-7-6);color(14);printf("欢迎来到贪吃蛇游戏!");zuobiao(zongheng / 2 - 14-12, zongshu / 2 - 4 -5);color(11);printf("请选择游戏模式或选项:");zuobiao(zongheng / 2 - 26, zongshu / 2 - 2 -3);color(15);printf("1、普通模式;");zuobiao(zongheng / 2 - 26, zongshu / 2 - 0 -3);color(2);printf("2、“毒刺”模式;");zuobiao(zongheng / 2 - 26, zongshu / 2 +2 -3);color(3);printf("3、新地图(“风车阵”)模式;");zuobiao(zongheng / 2 - 26, zongshu / 2 +4 -3);color(4);printf("4、“地狱”模式(毒刺更密,地图更难)");zuobiao(zongheng / 2 - 26, zongshu / 2 +8 -3);color(6);printf("5、游戏说明;");zuobiao(zongheng / 2 - 26, zongshu / 2 +10 -3);color(13);printf("6、退出游戏;");zuobiao(zongheng / 2 -10, zongshu / 2 + 12 -3);color(15);scanf_s("%d", &caidanflag);if (caidanflag == 1){system("cls");xinditu1();jianpan1();}else if (caidanflag == 2){system("cls");xinditu2();jianpan2();}else if (caidanflag == 3){system("cls");xinditu3();jianpan3();}else if (caidanflag == 4){system("cls");xinditu4();jianpan4();}else if (caidanflag == 5){shuoming();}else if (caidanflag == 6){exit(0);}}int main(){caidan();}

3-代码(代码三)

有排行榜功能&用户名记录(共2310行) 课设最终版

这里我在前两种代码(增加游戏模式、说明和显示)的基础上,还加上了排行榜和用户名记录、切换的功能,这里涉及到文件分区的操作(很简单的,大家学一下很容易的)。我这里也有参考到别人代码的部分,侵删。同样,大家也可以适度地参考借鉴一下。

(注:这里排行榜功能必须要分文件分区了!

分区情况如下(其实主要就是在资源文件下面新建一个txt文件即可):

不会的还可以去别的地方搜一下vs文件分区怎么操作)

首先附参考的txt文件内容如下:

1 zzzzzyl 208.0000002 测试玩家2 104.0000001 测试玩家2 76.0000003 zzzzzyl 54.0000003 测试玩家1 24.0000003 zzzzzyl 14.0000003 zzzzzyl 14.0000003 zzzzzyl 14.0000002 测试玩家1 10.0000001 测试玩家2 987.0000003 测试玩家2 10.0000003 zzzzzyl 0.0000001 测试玩家1 36.0000004 测试玩家1 36.0000002 测试玩家1 36.0000003 测试玩家3 36.0000003 zzzzzyl 36.0000001 测试玩家1 36.0000004 测试玩家1 36.0000002 测试玩家1 36.0000003 测试玩家3 36.0000003 zzzzzyl 36.0000001 测试玩家1 36.0000004 测试玩家1 36.0000002 测试玩家1 36.0000003 测试玩家3 36.0000003 zzzzzyl 36.0000001 测试玩家1 36.0000004 测试玩家1 36.0000002 测试玩家1 577.0000003 测试玩家3 427.0000004 zzzzzyl -10.0000004 zzzzzyl -10.0000004 zzzzzyl -10.0000004 zzzzzyl -10.0000002 zzzzzyl -20.0000002 测试玩家2 -20.0000004 测试玩家2 -20.0000002 zzzzzyl -20.0000002 测试玩家2 -20.0000004 测试玩家2 -20.0000002 zzzzzyl -20.0000002 测试玩家2 -20.0000004 测试玩家2 -20.0000002 zzzzzyl -20.0000002 测试玩家2 -20.0000004 测试玩家2 -20.000000

再附“3-代码”的(后缀为cpp~ !)源代码如下:

#define _CRT_SECURE_NO_WARNINGS#pragma once#pragma once#include<iostream>#include<string.h>#include<stdio.h>#include<stdlib.h>#include<malloc.h>//链表~#include<Windows.h>//窗口~ .#include<conio.h>//键盘~! *.#define OK 1#define dituheng 108#define ditushu 36#define zongheng 160#define zongshu 45//黄金比:长等于宽乘以0.618~(再乘2~)int shechang = 4;int flag = 4;int xbianhua = 2, ybianhua = 0;int shijian = 100;int caidanflag;int i, j;int fenshu = 0;int fenshubianhua = 10;int sududengji = 3;int bangflag = 0;char name2[80];//䲜int model2;//䲜double score2;//䲜typedef struct LNode{int x;int y;struct LNode* next;}LNode, * LinkList;//LinkList:(这里引用了大一上下两本教材书上关于链表创建的源码~)LNode* tou, * wei, * jie, * daoshudisan, * daoshudier, * shiwu, * duyao, * duyao2, * bianli;//头,尾,结,倒数第三,倒数第二,食物,毒药1,毒药2,遍历typedef struct node//学生信息{int id;//䲜 //学号char name[20];//䲜 //姓名double grade;//䲜 //分数struct node* next;//䲜}node;//䲜int main();void zuobiao(int x, int y);int color(int num);void caidan();void shuoming();void youbianshuoming();void paihangbang();void yonghu();void jilupaixu();void jieshudayin();node* createlink();void Sort(node* head);void get(node* head);void show(node* head);//————————————————————————————————//说明:不同的模式各个函数有出入的部分,故四种模式均有对应不同的函数名称及其中功能void xinditu1();int xinshe1();void xinshiwu1();void jianpan1();void sheyidong1();//————————————————————————————————void xinditu2();int xinshe2();void xinshiwu2();void jianpan2();void sheyidong2();//————————————————————————————————void xinditu3();int xinshe3();void xinshiwu3();void jianpan3();void sheyidong3();//————————————————————————————————void xinditu4();int xinshe4();void xinshiwu4();void jianpan4();void sheyidong4();//————————————————————————————————void zuobiao(int x, int y){COORD pos;//注意:0是开始!亦占一格pos.X = x;//x的值为y~两倍 z.pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);}int color(int num)///weixin_43118073/article/details/102531970 ~ .{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), num);return 0;}void yonghu(){ //负责切换用户~ system("mode con cols=160 lines=45");//左须为右之两倍 system("cls");zuobiao(zongheng / 2 - 6 - 6 - 6 - 2-5, zongshu / 2 - 6);color(12);printf("请输入您的用户名(玩家名称):");zuobiao(zongheng / 2 - 15 - 3 - 26, zongshu / 2 - 6 + 2);color(11);printf("(提醒:中文字符请勿超过5个字符,英文字符及数字请勿超过10个字符!)");zuobiao(zongheng / 2 - 7 - 6 - 3, zongshu / 2 - 6 + 4);color(14);scanf("%s", &name2);//䲜䲜䲜䲜䲜caidan();}void jilupaixu(){FILE* r = fopen("grad.txt", "a+");//䲜䲜䲜䲜䲜model2 = caidanflag;//& name2=name2~score2 = fenshu;fprintf(r, "%3d %8s %4lf\n", model2, name2, score2);//䲜䲜䲜䲜䲜fclose(r);//䲜䲜䲜䲜䲜}void paihangbang()//&初次输入用户名~.//负责打印.显示~{while (1){system("cls");zuobiao(zongheng / 2 - 14 - 12, zongshu / 2 - 4 - 5 - 2);color(11);printf("请输入您要查看的哪一游戏模式的排行榜:");zuobiao(zongheng / 2 - 26, zongshu / 2 - 2 - 3 - 2);color(15);printf("1、普通模式排行榜;");zuobiao(zongheng / 2 - 26, zongshu / 2 - 0 - 3 - 2);color(2);printf("2、“毒刺”模式排行榜;");zuobiao(zongheng / 2 - 26, zongshu / 2 + 2 - 3 - 2);color(3);printf("3、新地图(“风车阵”)模式排行榜;");zuobiao(zongheng / 2 - 26, zongshu / 2 + 4 - 3 - 2);color(4);printf("4、“地狱”模式排行榜;");zuobiao(zongheng / 2 - 26, zongshu / 2 + 8 - 3 - 4);color(14);printf("5、总排行榜(所有模式排行榜均显示)");zuobiao(zongheng / 2 - 10, zongshu / 2 + 3);color(15);scanf("%d", &bangflag);if (bangflag >= 1 && bangflag <= 5)break;}system("cls");node* head;//䲜䲜䲜䲜䲜head = createlink();//䲜䲜䲜䲜䲜get(head);//䲜䲜䲜䲜䲜Sort(head);//䲜䲜䲜䲜䲜show(head);//䲜䲜䲜䲜䲜//䲜䲜䲜䲜䲜䲜䲜蹦//负责储存&重新排序~char ch = _getch();caidan();}void jieshudayin(){zuobiao(zongheng / 2 - 50+9+6+4+2, zongshu / 2 - 6 );color(13);printf("(您的分数已计入,可以在排行榜查看您的分数和排名!)");zuobiao(zongheng / 2 -6-6-6-2-8, zongshu / 2 - 6+2);color(11);printf("请进行选择:"); zuobiao(zongheng / 2 - 15-3-2-8, zongshu / 2 - 6+2+2);color(14);printf("1、重新进行游戏(返回菜单);");zuobiao(zongheng / 2 - 7-6-6-2-8, zongshu / 2 - 6+4+2);color(4);printf(" 2、退出游戏;");}//从文件中读取数据存入链表node* createlink(){node* head, * pre, * p;//䲜䲜䲜䲜䲜//pre保存当前结点的前驱结点,head为头结点head = (node*)malloc(sizeof(node));//䲜䲜䲜䲜䲜//创建头结点pre = head;//䲜䲜䲜䲜䲜//记录pre为headint a;//䲜䲜䲜䲜䲜char b[20];//䲜䲜䲜䲜䲜double c;//䲜䲜䲜䲜䲜FILE* r = fopen("grad.txt", "r");//䲜䲜䲜䲜䲜if (r == NULL){//printf("打开文件失败!");//䲜䲜䲜䲜䲜return NULL;//䲜䲜䲜䲜䲜}while (fscanf(r, "%d%s%lf", &a, &b, &c) != EOF){p = (node*)malloc(sizeof(node));//䲜䲜䲜䲜䲜//新建结点p->id = a;//䲜䲜䲜䲜䲜//保存数据域strcpy_s(p->name, b);//䲜䲜䲜䲜䲜p->grade = c;//䲜䲜䲜䲜䲜pre->next = p;//䲜䲜䲜䲜䲜//前驱结点的指针域设为当前新建结点的地址pre = p;//䲜䲜䲜䲜䲜//把pre设为p,作为下个结点的前驱结点}pre->next = NULL;//䲜䲜䲜䲜䲜return head;//䲜䲜䲜䲜䲜}//按照成绩降序排序void Sort(node* head){node* m = head;//䲜䲜䲜䲜䲜if (head->next == NULL || head->next->next == NULL){return;//䲜䲜䲜䲜䲜}node* p = head->next;//䲜䲜䲜䲜䲜node* s = p->next;//䲜䲜䲜䲜䲜node* k = NULL;//䲜䲜䲜䲜䲜while (k != head->next->next){while (s != k){if (p->grade < s->grade){p->next = s->next;//䲜䲜䲜䲜䲜s->next = p;//䲜䲜䲜䲜䲜m->next = s;//䲜䲜䲜䲜䲜m = s;//䲜䲜䲜䲜䲜s = p->next;//䲜䲜䲜䲜䲜}else{m = p;//䲜䲜䲜䲜䲜p = s;//䲜䲜䲜䲜䲜s = s->next;//䲜䲜䲜䲜䲜}}k = p;//䲜䲜䲜䲜䲜m = head;//䲜䲜䲜䲜䲜p = m->next;//䲜䲜䲜䲜䲜s = p->next;//䲜䲜䲜䲜䲜}}//统计总人数 和 平均分void get(node* head){double sum = 0;//䲜䲜䲜䲜䲜int cnt = 0;//䲜䲜䲜䲜䲜node* p;//䲜䲜䲜䲜䲜p = head->next;//䲜䲜䲜䲜䲜//指向第一个有效结点FILE* w = fopen("grad.txt", "w");//䲜䲜䲜䲜䲜if (w == NULL){//printf("打开文件失败!");//䲜䲜䲜䲜䲜return;//䲜䲜䲜䲜䲜}while (p){sum += p->grade;//䲜䲜䲜䲜䲜cnt++;//䲜䲜䲜䲜䲜p = p->next;//䲜䲜䲜䲜䲜}//输出链表节点数据到屏幕return;//䲜䲜䲜䲜䲜}//输出链表到屏幕和文件output.txtvoid show(node* head){node* p;//䲜䲜䲜䲜䲜p = head->next;//䲜䲜䲜䲜䲜//指向第一个有效结点FILE* w = fopen("grad.txt", "a+");//䲜䲜䲜䲜䲜if (w == NULL){return;//䲜䲜䲜䲜䲜}int hangshu = 1;zuobiao(zongheng / 2 - 13-10, hangshu);color(14);printf("游戏排行榜(仅显示前40名)\n");node* o;//䲜䲜䲜䲜䲜o = head->next;//䲜䲜䲜䲜䲜//指向第一个有效结点while (o){fprintf(w, "%3d %8s %4f\n", o->id, o->name, o->grade);//䲜䲜䲜䲜䲜//**~:注意printf和fprint以及“w,”~ !o = o->next;}while (p){int hangshuflag = 1;if (bangflag == 5 && hangshuflag == 1){zuobiao(zongheng / 2 - 25 - 10, 2);if (hangshu == 2)printf(" 名次模式用户 分数 最高成就\n");//啥if (hangshu + 1 == 2)color(13);//第一名else if (hangshu + 1 == 3)color(12);//第二名else if (hangshu + 1 == 4)color(11);//第三名zuobiao(zongheng / 2 - 25 - 10, hangshu + 2);printf("第%02d名 模式%d%-10s %4.0f分", hangshu, p->id, p->name, p->grade);//䲜䲜䲜䲜䲜//龘(左对齐~)color(15);fenshu = p->grade;if (fenshu < 50){color(15);printf("--");}if (fenshu >= 50 && fenshu < 100){color(2);printf("初出茅庐");color(15);}if (fenshu >= 100 && fenshu < 200){color(3);printf("崭露头角");color(15);}if (fenshu >= 200 && fenshu < 500){color(4);printf("登堂入室");color(15);}if (fenshu >= 500 && fenshu < 1000){color(5);printf("技惊四座");color(15);}if (fenshu >= 1000){color(14);printf("大显身手!登峰造极!(已达到过目前已有的所有成就了!)");color(15);}printf("\n");//啥hangshu++;if (hangshu > 40)break;}else if (bangflag >= 1 && bangflag <= 4&&p->id == bangflag && hangshuflag == 1)//龘 !*. 待改~!*. 周二晚上~.{zuobiao(zongheng / 2 - 25 - 10, 2);if (hangshu == 2)printf(" 名次模式用户 分数 最高成就\n");//啥if (hangshu + 1 == 2)color(13);//第一名else if (hangshu + 1 == 3)color(12);//第二名else if (hangshu + 1 == 4)color(11);//第三名zuobiao(zongheng / 2 - 25 - 10, hangshu + 2);printf("第%02d名 模式%d%-10s %4.0f分", hangshu, p->id, p->name, p->grade);//䲜䲜䲜䲜䲜//龘(左对齐~)color(15);fenshu = p->grade;if (fenshu < 50){color(15);printf("--");}if (fenshu >= 50 && fenshu < 100){color(2);printf("初出茅庐");color(15);}if (fenshu >= 100 && fenshu < 200){color(3);printf("崭露头角");color(15);}if (fenshu >= 200 && fenshu < 500){color(4);printf("登堂入室");color(15);}if (fenshu >= 500 && fenshu < 1000){color(5);printf("技惊四座");color(15);}if (fenshu >= 1000){color(14);printf("大显身手!登峰造极!(已达到过目前已有的所有成就了!)");color(15);}printf("\n");//啥hangshu++;if (hangshu > 40)break;}p=p->next;}zuobiao(zongheng / 2 - 25 - 10, hangshu + 2);color(14);printf("按任意键可以返回主菜单......");fclose(w);//䲜䲜䲜䲜䲜return;//䲜䲜䲜䲜䲜}void xinditu1(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n"); xinshe1();}int xinshe1(){int i;wei = new LNode;wei->x = dituheng / 2 - 4;wei->y = ditushu / 2;wei->next = NULL;zuobiao(wei->x, wei->y);color(11);// printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = dituheng / 2 - 4 + 2 * i; tou->y = ditushu / 2;zuobiao(tou->x, tou->y);color(11);// printf("■");wei = tou;}zuobiao(tou->x, tou->y);color(12);// printf("■");// color(15);// wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu1();return OK;}void xinshiwu1(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;if (shiwu->x % 2 != 0||shiwu->x==0||shiwu->y==0){free(shiwu);xinshiwu1();}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (shiwu->x == jie->x && shiwu->y == jie->y){free(shiwu);xinshiwu1();}}zuobiao(shiwu->x, shiwu->y);color(14);printf("●");color(15);}void jianpan1(){flag=4;shijian = 100;fenshu = 0;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥fenshubianhua = 10;sududengji=3;while (1){youbianshuoming();//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥char ch;caidanflag = 1;if (_kbhit()){ch = _getch();ch = _getch();if (ch == 80 && flag != 1){flag = 2;}if (ch == 72 && flag != 2/*nice~!*/){flag = 1;}if (ch == 75 && flag != 4){flag = 3;}if (ch == 77 && flag != 3){flag=4;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 59 && shijian <160)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian += 30; sududengji -= 1; fenshubianhua -= 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 60 &&shijian>40)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian -= 30; sududengji += 1; fenshubianhua += 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥九点}else if (ch == 62){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");//排查:这里的caidanflag及其之后都没有问题zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();//排查:这里的caidanflag及其之后都没有问题zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}Sleep(shijian );//!!!!!新变量(#define shijian 300)sheyidong1();if (tou->x == dituheng || tou->y == ditushu|| tou->x == 0 || tou->y == 0){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(dituheng, dituheng);//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}}}void sheyidong1(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}//12点!!!!!!!!!!!!!!!!!!!!!zuobiao(tou->x, tou->y);color(11);printf("■");color(12);//12点!!!!!!!!!!!!!!!!!!!!!!!!LNode* xin;xin = new LNode;xin->x = xbianhua+tou->x;//后可改~ !xin->y = ybianhua+tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu1();fenshu+=fenshubianhua;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y);printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}//————————————————————————————————————————————void xinditu2(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");for (i = 2; i <= dituheng - 2; i++){for (j = 1; j <= ditushu - 1; j++){if (i % 8 == 0 && j % 4 == 0)/******* ****!!!!****/{zuobiao(i, j);color(4);printf("▲");color(7);}}}xinshe2();}int xinshe2(){int i;wei = new LNode;//龘龘龘wei->x = dituheng / 2 - 4;wei->y = ditushu / 2;wei->next = NULL;zuobiao(wei->x, wei->y);color(11);printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = dituheng / 2 - 4 + 2 * i; //!!!!!!!!!!!!!!!!!!!!!!!!tou->y = ditushu / 2;zuobiao(tou->x, tou->y);color(11);printf("■");wei = tou;}zuobiao(tou->x, tou->y);color(12);// printf("■");// color(15);// wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu2();return OK;}void xinshiwu2(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;if (shiwu->x % 2 != 0 || shiwu->x == 0 || shiwu->y == 0){free(shiwu);xinshiwu2();}if (shiwu->x % 8 == 0&& shiwu->y % 4 == 0){free(shiwu);xinshiwu2();}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (shiwu->x == jie->x && shiwu->y == jie->y){free(shiwu);xinshiwu2();}}zuobiao(shiwu->x, shiwu->y);color(14);printf("●");color(15);}void jianpan2(){caidanflag = 2;flag=4;shijian = 100;fenshu = 0;fenshubianhua = 10;sududengji=3;sududengji=3;while (1){youbianshuoming();char ch;if (_kbhit()){ch = _getch();ch = _getch();/*极特殊↑↑↑之发现:在此处多(再~.)加一个“(ch=_getch())”可以修复好之前“按一下方向键蛇会动两格(而非正常的一格~)”的bug!而且,还可以空格控制进程的暂停或继续 !surprise,but why!? .*//*↑↑↑ ???? *~!. *///********!!!!!!.if (ch == 80 && flag != 1){flag = 2;}if (ch == 72 && flag != 2/*nice~!*/){flag = 1;//*!}if (ch == 75 && flag != 4){flag = 3;}if (ch == 77 && flag != 3){flag = 4;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 59 && shijian < 160)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian += 30; sududengji -= 1; fenshubianhua -= 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 60 && shijian > 40)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian -= 30; sududengji += 1; fenshubianhua += 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥九点}else if (ch == 62){printf("您退出了游戏!");//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}for (i = 2; i <= dituheng - 2; i++){for (j = 1; j <= ditushu - 1; j++){if (i % 8 == 0 && j % 4 == 0)/******* ****!!!!****/{zuobiao(i, j);color(4);printf("▲");color(7);}}}Sleep(shijian+20);//!!!!!新变量(#define shijian 300)sheyidong2();if (tou->x == dituheng || tou->y == ditushu || tou->x == 0 || tou->y == 0){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$} jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(dituheng, dituheng); //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}if (tou->next== NULL){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}}void sheyidong2(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}//zuobiao(tou->x, tou->y);color(11);printf("■");color(12);//LNode* xin;//龘xin = new LNode;xin->x = xbianhua + tou->x;//后可改~ !xin->y = ybianhua + tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu2();fenshu += fenshubianhua;}else if (tou->x % 8 == 0 && tou->y % 4 == 0){fenshu -= fenshubianhua;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥LNode* daoshudisan;daoshudisan = new LNode;daoshudisan = tou;while (daoshudisan->next->next->next != NULL){daoshudisan = daoshudisan->next;}zuobiao(daoshudisan->next->next->x, daoshudisan->next->next->y); printf(" ");zuobiao(daoshudisan->next->x, daoshudisan->next->y); printf(" ");free(daoshudisan->next->next);free(daoshudisan->next);daoshudisan->next = NULL;}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y); printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}//——————————————————————————————————————————————————————void xinditu3(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");for (i = 0; i <= dituheng; i++){for (j = 0; j <= ditushu; j++){if (j == 12 && i <= 64 && i>=6){zuobiao(i, j);printf("□");}if (i==72 && j <= 20&&j>=3){zuobiao(i, j);printf("□");}if (j == 24 && i <= 102&&i>=44){zuobiao(i, j);printf("□");}if (i==36&&j<=33&&j>=16){zuobiao(i, j);printf("□");}}}xinshe3();}int xinshe3(){int i;wei = new LNode;wei->x = dituheng / 2 - 14;wei->y = ditushu / 2;wei->next = NULL;zuobiao(wei->x, wei->y);color(11);printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = dituheng / 2 - 14 + 2 * i; //!!!!!!!!!!!!!!!!!!!!!!!!tou->y = ditushu / 2;zuobiao(tou->x, tou->y);color(11);printf("■");wei = tou;}zuobiao(tou->x, tou->y);color(12);// printf("■");// color(15);// wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu3();return OK;}void xinshiwu3(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;if (shiwu->x % 2 != 0 || shiwu->x == 0 || shiwu->y == 0){free(shiwu);xinshiwu3();}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (shiwu->x == jie->x && shiwu->y == jie->y){free(shiwu);xinshiwu1();}}if (shiwu->y == 12 && shiwu->x <= 64 && shiwu->x >= 6){free(shiwu);xinshiwu3();}if (shiwu->x == 72 && shiwu->y <= 20 && shiwu->y >= 3){free(shiwu);xinshiwu3();}if (shiwu->y == 24 && shiwu->x <= 102 && shiwu->x >= 44){free(shiwu);xinshiwu3();}if (shiwu->x == 36 && shiwu->y <= 33 && shiwu->y >= 16){free(shiwu);xinshiwu3();}zuobiao(shiwu->x, shiwu->y);color(14);printf("●");color(15);}void jianpan3(){caidanflag = 3;flag=4;shijian = 100;fenshu = 0;fenshubianhua = 10;sududengji=3;while (1){youbianshuoming();char ch;if (_kbhit()){ch = _getch();ch = _getch();/*极特殊↑↑↑之发现:在此处多(再~.)加一个“(ch=_getch())”可以修复好之前“按一下方向键蛇会动两格(而非正常的一格~)”的bug!而且,还可以空格控制进程的暂停或继续 !surprise,but why!? .*//*↑↑↑ ???? *~!. *///********!!!!!!.if (ch == 80 && flag != 1){flag = 2;}if (ch == 72 && flag != 2/*nice~!*/){flag = 1;//*!}if (ch == 75 && flag != 4){flag = 3;}if (ch == 77 && flag != 3){flag = 4;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 59 && shijian < 160)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian += 30; sududengji -= 1; fenshubianhua -= 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 60 && shijian > 40)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian -= 30; sududengji += 1; fenshubianhua += 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥九点}else if (ch == 62){printf("您退出了游戏!");//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}Sleep(shijian+18);//!!!!!新变量(#define shijian 300)sheyidong3();if (tou->x == dituheng || tou->y == ditushu || tou->x == 0 || tou->y == 0){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(dituheng, dituheng); //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}if (tou->y == 12 && tou->x <= 64 && tou->x >= 6){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}if (tou->x == 72 && tou->y <= 20 && tou->y >= 3){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}if (tou->y == 24 && tou->x <= 102 && tou->x >= 44){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}if (tou->x == 36 && tou->y <= 33 && tou->y >= 16){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}}void sheyidong3(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}//zuobiao(tou->x, tou->y);color(11);printf("■");color(12);//LNode* xin;xin = new LNode;xin->x = xbianhua + tou->x;//后可改~ !xin->y = ybianhua + tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu3();fenshu += fenshubianhua;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y); printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}//————————————————————————————————————————————void xinditu4(){system("mode con cols=160 lines=45");//左须为右之两倍 printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");for (i = 2; i <= dituheng - 2; i++){for (j = 1; j <= ditushu - 1; j++){if (i % 6 == 0 && j % 3 == 0)/******* ****!!!!****/{zuobiao(i, j);color(4);printf("▲");color(7);}}} for (i = 0; i <= dituheng; i++){for (j = 0; j <= ditushu; j++){if (j == 13 && i <= 64&&i>1){zuobiao(i, j);printf("□");}if (i == 70 && j <= 20&&j>0){zuobiao(i, j);printf("□");}if (j == 23 && i <= 106 && i >= 44){zuobiao(i, j);printf("□");}if (i == 38 && j < 36 && j >= 16){zuobiao(i, j);printf("□");}}}xinshe4();}int xinshe4(){int i;wei = new LNode;//龘龘龘wei->x = dituheng / 2 - 12;wei->y = ditushu / 2+2;wei->next = NULL;zuobiao(wei->x, wei->y);color(11);printf("■");wei->next = NULL;//~ !for (i = 1; i < shechang; i++){tou = new LNode;tou->next = wei;tou->x = dituheng / 2 - 12 + 2 * i; //!!!!!!!!!!!!!!!!!!!!!!!!tou->y = ditushu / 2+2;zuobiao(tou->x, tou->y);color(11);printf("■");wei = tou;}zuobiao(tou->x, tou->y);color(12);// printf("■");// color(15);// wei = wei->next->next->next;//ok了~(一共为5个节~!ww *.z后己又~:还是为4个 !以便于后面snakemove的时候“free(wei->next)”-方便!z.xinshiwu4();return OK;}void xinshiwu4(){shiwu = new LNode;shiwu->x = rand() % 108;shiwu->y = rand() % 36;shiwu->next = NULL;jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (shiwu->x == jie->x && shiwu->y == jie->y){free(shiwu);xinshiwu4();}}if (shiwu->x % 2 != 0 || shiwu->x == 0 || shiwu->y == 0){free(shiwu);xinshiwu4();}if (shiwu->x % 6 == 0 && shiwu->y % 3 == 0){free(shiwu);xinshiwu4();}if (shiwu->y == 13 && shiwu->x <= 64){free(shiwu);xinshiwu4();}if (shiwu->x == 70 && shiwu->y <= 20){free(shiwu);xinshiwu4();}if (shiwu->y == 23 && shiwu->x <= 108 && shiwu->x >= 44){free(shiwu);xinshiwu4();}if (shiwu->x == 38 && shiwu->y <= 36 && shiwu->y >= 16){free(shiwu);xinshiwu4();}//DADADAzuobiao(shiwu->x, shiwu->y);color(14);printf("●");color(15);}void jianpan4(){caidanflag = 4;flag=4;shijian = 100;fenshu = 0;fenshubianhua = 10;sududengji=3;while (1){youbianshuoming();char ch;if (_kbhit()){ch = _getch();ch = _getch();/*极特殊↑↑↑之发现:在此处多(再~.)加一个“(ch=_getch())”可以修复好之前“按一下方向键蛇会动两格(而非正常的一格~)”的bug!而且,还可以空格控制进程的暂停或继续 !surprise,but why!? .*//*↑↑↑ ???? *~!. *///********!!!!!!.if (ch == 80 && flag != 1){flag = 2;}if (ch == 72 && flag != 2/*nice~!*/){flag = 1;//*!}if (ch == 75 && flag != 4){flag = 3;}if (ch == 77 && flag != 3){flag = 4;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 59 && shijian < 160)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian += 30; sududengji -= 1; fenshubianhua -= 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥}if (ch == 60 && shijian > 40)//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥{shijian -= 30; sududengji += 1; fenshubianhua += 2;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥九点}else if (ch == 62){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}for (i = 2; i <= dituheng - 2; i++){for (j = 1; j <= ditushu - 1; j++){if (i % 6 == 0 && j % 3 == 0)/******* ****!!!!****/{zuobiao(i, j);color(4);printf("▲");color(7);//dadada}}}Sleep(shijian+100);sheyidong4();if (tou->x == dituheng || tou->y == ditushu || tou->x == 0 || tou->y == 0){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}jie = new LNode;jie = tou;while (jie->next != NULL){jie = jie->next;if (tou->x == jie->x && tou->y == jie->y){zuobiao(dituheng, dituheng); //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}if (tou->y == 13 && tou->x <= 64){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}if (tou->x == 70 && tou->y <= 20){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}if (tou->y == 23 && tou->x <= 108 && tou->x >= 44){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}if (tou->x == 38 && tou->y <= 36 && tou->y >= 16){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}if (tou->next== NULL){//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$while (1){system("cls");zuobiao(zongheng / 2 - 12, zongshu / 2 - 8); color(12); printf("游戏结束!\n");jilupaixu();zuobiao(zongheng / 2 - 28, zongshu / 2 - 6);color(11);jieshudayin();zuobiao(zongheng / 2 - 10, zongshu / 2 +2);color(15);int jieshuflag = 0;scanf_s("%d", &jieshuflag);if (jieshuflag == 1){caidan();break;}else if (jieshuflag == 2){exit(0);}}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}}}void sheyidong4(){switch (flag){case 1:xbianhua = 0, ybianhua = -1; break;case 2:xbianhua = 0, ybianhua = 1; break;case 3:xbianhua = -2, ybianhua = 0; break;case 4:xbianhua = 2, ybianhua = 0; break;}//zuobiao(tou->x, tou->y);color(11);printf("■");color(12);//LNode* xin;//龘xin = new LNode;xin->x = xbianhua + tou->x;//后可改~ !xin->y = ybianhua + tou->y;xin->next = tou;zuobiao(xin->x, xin->y); printf("■");tou = xin;if (shiwu->x == tou->x && shiwu->y == tou->y){free(shiwu);xinshiwu4();fenshu += fenshubianhua;}else if (tou->x % 6 == 0 && tou->y % 3 == 0){fenshu -= fenshubianhua;//¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥LNode* daoshudisan;daoshudisan = new LNode;daoshudisan = tou;while (daoshudisan->next->next->next != NULL){daoshudisan = daoshudisan->next;}zuobiao(daoshudisan->next->next->x, daoshudisan->next->next->y); printf(" ");zuobiao(daoshudisan->next->x, daoshudisan->next->y); printf(" ");free(daoshudisan->next->next);free(daoshudisan->next);daoshudisan->next = NULL;}else{LNode* daoshudier;daoshudier = new LNode;daoshudier = tou;while (daoshudier->next->next != NULL){daoshudier = daoshudier->next;}zuobiao(daoshudier->next->x, daoshudier->next->y); printf(" ");free(daoshudier->next);daoshudier->next = NULL;}}//——————————————————————————————————————————————————void youbianshuoming(){zuobiao(dituheng + 6, 2);color(15);printf("游戏说明&显示:");zuobiao(dituheng + 6, 4+ 2);color(14);printf("1、按键说明:");zuobiao(dituheng + 6, 6 + 2);color(10);printf("(1)按上下左右键:控制蛇的移动方向;");zuobiao(dituheng + 6, 8 + 2);color(11);printf("(2)按空格键:可以暂停/继续游戏;");zuobiao(dituheng + 6, 10 + 2);color(12);printf("(3)按F4键:可以结束游戏;");zuobiao(dituheng + 6, 12 + 2);color(13);printf("(4)按F1/F2键:可以对蛇的移动进行减速/加速;");zuobiao(dituheng + 6, 16 + 2);color(14);printf("2、分数和速度等显示:");zuobiao(dituheng + 6, 6 + 2 + 12);color(10);printf("(1)当前分数:%3d分",fenshu);zuobiao(dituheng + 6, 8 + 2 + 12);color(11);printf("(2)速度等级:%2d(1--5)",sududengji);//蹦~zuobiao(dituheng + 6, 8+2+12+2);color(12);printf("(3)食物(/毒药)对应增(/减)分值:%2d分(6--14)",fenshubianhua);//蹦~zuobiao(dituheng + 6, 22+4+2);color(14);printf("☆☆☆成就显示☆☆☆");zuobiao(dituheng + 6, 22 + 6+2);color(10);printf("敬请期待......");//fenshu = 10000;if (fenshu >= 50){zuobiao(dituheng + 6, 22 +6+2);color(2);printf("达成成就:初出茅庐 50分!");}if (fenshu >= 100){zuobiao(dituheng + 6, 22+8 + 2);color(3);printf("达成成就:崭露头角 100分!");}if (fenshu >= 200){zuobiao(dituheng + 6, 22 + 10 + 2);color(4);printf("达成成就:登堂入室 200分!");}if (fenshu >= 500){zuobiao(dituheng + 6, 22 +12 + 2);color(5);printf("达成成就:技惊四座 500分!您已经出神入化了!");}if (fenshu >= 1000){zuobiao(dituheng + 6, 22 + 14 + 2);color(14);printf("达成成就:大显身手 1000分!您已经登峰造极了!");zuobiao(dituheng + 6, 22 + 16 + 2);color(7);printf("您已达到过目前已有的所有成就了!恭喜您!");}}void shuoming(){system("cls");zuobiao(zongheng / 2 - 14 - 2, zongshu / 2 - 4 - 5-2-2);color(11);printf("游戏说明:");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 - 2 - 3 - 2-2);color(15);printf("1、普通模式:蛇吃食物增长,且分数增加,撞墙(冲出边界)则游戏结束;");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 - 0 - 3 - 2 - 2);color(2);printf("2、“毒刺”模式:增加红色毒刺,蛇碰到则身体剪短,且分数减少,蛇长小于2时游戏也会结束;");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 + 2 - 3 - 2 - 2);color(3);printf("3、新地图(“风车阵”)模式:增加新地图样式,“阵型”类似于风车~,蛇撞“墙”也会则游戏结束;");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 + 4 - 3 - 2 - 2);color(4);printf("4、“地狱”模式:既有毒刺也有风车阵型,并且毒刺更密,阵型的“墙”更多更复杂,但蛇的初始速度更慢");zuobiao(zongheng / 2 - 26 - 18, zongshu / 2 + 6 - 3 - 2);color(13);printf("5、游戏按键: 上下左右键控制蛇的移动方向;空格键暂停/继续游戏;F4键退出游戏;");zuobiao(zongheng / 2 - 26 - 18+3, zongshu / 2 + 6 - 3+2 - 2);color(13);printf("F1键加速蛇的移动,且食物(/毒药)对应的增(/减)分值会加大;F2键减速蛇的移动,增减分值会减小;");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 + 10 - 3+2);color(14);printf("按任意键可以返回主菜单......");zuobiao(zongheng / 2 - 26 -18, zongshu / 2 + 12 - 3+2);color(15);char renyijian;renyijian = _getch();caidan();}void caidan(){while (1){system("cls");int shechang = 5;int flag = 4; shijian = 100;int xbianhua = 2, ybianhua = 0;int shijian = 100;int caidanflag = 9;//排查:typedef struct LNode{int x;int y;struct LNode* next;}LNode, * LinkList;//LinkList:???(这里引用了大一上下两本教材书上关于链表创建的源码~)LNode* tou, * wei, * jie, * daoshudisan, * daoshudier, * shiwu, * duyao, * duyao2, * bianli;//头,尾,结,倒数第三,倒数第二,食物,毒药1,毒药2,遍历system("mode con cols=160 lines=45");//左须为右之两倍 zuobiao(zongheng / 2 - 18, zongshu / 2 - 7 - 6 - 2);color(14);printf("欢迎来到贪吃蛇游戏!");zuobiao(zongheng / 2 - 14 - 12, zongshu / 2 - 4 - 5 - 2);color(11);printf("请选择游戏模式或选项:");zuobiao(zongheng / 2 - 26, zongshu / 2 - 2 - 3 - 2);color(15);printf("1、普通模式;");zuobiao(zongheng / 2 - 26, zongshu / 2 - 0 - 3 - 2);color(2);printf("2、“毒刺”模式;");zuobiao(zongheng / 2 - 26, zongshu / 2 + 2 - 3 - 2);color(3);printf("3、新地图(“风车阵”)模式;");zuobiao(zongheng / 2 - 26, zongshu / 2 + 4 - 3 - 2);color(4);printf("4、“地狱”模式(毒刺更密,地图更难);");zuobiao(zongheng / 2 - 26, zongshu / 2 + 8 - 3-2);color(11);printf("5、游戏说明;");zuobiao(zongheng / 2 - 26, zongshu / 2 + 8 - 3 );color(14);printf("6、查看排行榜;");zuobiao(zongheng / 2 - 26, zongshu / 2 + 8 - 3 + 2);color(12);printf("7、切换用户;");zuobiao(zongheng / 2 - 26, zongshu / 2 + 10 - 3+2);color(13);printf("8、退出游戏;"); zuobiao(zongheng / 2 - 10, zongshu / 2 + 12 - 3+2);color(15);scanf_s("%d", &caidanflag);if (caidanflag == 1){system("cls");xinditu1();jianpan1();break;}else if (caidanflag == 2){system("cls");xinditu2();jianpan2();break;}else if (caidanflag == 3){system("cls");xinditu3();jianpan3();break;}else if (caidanflag == 4){system("cls");xinditu4();jianpan4();break;}else if (caidanflag == 5){shuoming();break;}else if (caidanflag == 6){paihangbang();break;}else if (caidanflag == 7){yonghu();break;}else if (caidanflag == 8){exit(0);}}}int main(){yonghu();}

附(根据我的游戏课设主要过程做出的流程图):

(PS:这里我为了清晰一点,把原pdf版的截成两张图给大家看,如果大家想看完整一点可以自己拼

接一下~)

(另:关于我的课设报告,由于CSDN不能直接发word文档的类型,故我打算将课设报告另发到一篇博客里,大家有兴趣的或者想了解更多的,可以点进我主页里看一看~)

注意:

文件名和文件后缀(“~~~.cpp”注意是cpp ~ !)

BUG:按任意字母~等单键值的按键也会停止游戏(如果能修复这个bug的小伙伴可以在评论区告诉我,谢谢~)

声明一下~:

如有部分有版权未周全到的地方问题,请有疑问的原创者联系我!我将进行相应纠正!

各位小伙伴们有疑问或者改进意见可以在评论区写下~

讠身寸谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。