贪吃蛇多功能_第1页
贪吃蛇多功能_第2页
贪吃蛇多功能_第3页
贪吃蛇多功能_第4页
贪吃蛇多功能_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include #include #include #include #include #include /使用控制颜色 光标的函数#define X 150#define Y 35#define INIT (snake*)malloc(sizeof(snake)# pragma comment (lib, Winmm.lib)/ 定义一些全局变量struct Foodint x; /食物的横坐标int y;normalfood,passgrass27,poisonousfood,bedfood5,luckyfood;/分别表示普通食物 有毒食物 好食物/其中普通食物蛇身长一节 毒食物蛇身断

2、一半 好食物蛇自动运动一段时间typedef struct Snake int x;/ 表示蛇的坐标位置int y;struct Snake *next;snake;struct playerchar name 20;int score ;message100;char string 30;snake *head,*fp,*qq;char z; /记录键盘输入int i,add=10,score=0; /add为每次吃东西增加的节数 int node,whyover=0,temp,snakedir=1; / node为蛇的节数 whyover为记录游戏结束的原因 temp记录游戏困难程度 sn

3、akedir为蛇的方向int s; / s为控制毒草出现的次数的函数int suiji;/产生一个115的随机数int gamespeed=200;int panduan=1; /这个是用来判断蛇走的步数 以便出现毒草int trues=0,jilus,tongguancao=27;/记录通关草的有关变量int trues1=0; /这个是辅助判断蛇是否吃到毒草int jilus1; /记录毒草的出现位置/声明各个函数void color (const int color1); /控制输出框的颜色 void gotoxy(int x,int y); /控制光标的所在 void printfsc

4、ore(); / 打印出分数void printfmap(); /打印地图void gamestart_jiemian(); /打印游戏开始界面void printfsnake(); /打印出蛇 即蛇的初始化void printffood(); /打印出普通食物void printffood1 (); /打印出有毒食物void printffood2 (); void HideCursor(); /隐藏鼠标void gameover(); /游戏结束函数void notpasswall(); /不能穿墙void biteself () ; /不能咬到自己void snakemove(); /蛇

5、移动int time ();void appearfood2();/出现毒草食物void shengji();/控制关卡的函数void printfgaming ();void denglv();/登录游戏void baocun();/记录分数void duqu();void pass_grass(); /产生通关草的函数void lucky_food(); /产生幸运食物的函数void baocunyouxi(); /保存游戏数据void duquyouxi();/读取游戏数据 即读取进度void gaming();/键盘响应int time()/用来计时clock_t t=clock()/

6、CLOCKS_PER_SEC;/记录当前程序已用时间return t;void color (const int color1) /控制输出框的颜色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color1);void gotoxy(int x,int y) /控制光标的所在COORD c=x,y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);void printfscore() / 打印出分数char str50;color(11);gotoxy (1

7、05,12);sprintf(str,您现在的分数是:%d, score);puts(str);gotoxy (105,20);void HideCursor() CONSOLE_CURSOR_INFO cursor_info = 105, 0; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);void denglv()gotoxy(20,20);puts (请输入您的姓名 输入后请按下enter键 请不要在您的名字里输入空格键或者:符号);flat1:gets(string);for (i=0;i20;i

8、+)while (string i= |string i=: |string i=r)gotoxy(20,20);puts(对不起 您输入的名字含有不合格字符(空格键或“:”) 请重新输入);goto flat1;void gamestart_jiemian() /设定游戏参与者一进来时的界面system(mode con cols=153 lines=38); color(10); for (i=35;i75;i+=2) gotoxy(i,14); printf(*); for (i=35;i75;i+=2) gotoxy(i,20); printf(*); for (i=14;i=20;i

9、+) gotoxy(35,i); printf(*); for (i=14;i=20;i+) gotoxy(75,i); printf(*); gotoxy(37,16);/设置特定位置打印出不同的信息 system(title 贪吃蛇游戏 completed by strange_tang);puts(欢迎来到贪吃蛇游戏); gotoxy(37,18);puts(贪吃蛇游戏 completed by strange_tang); color(9);/使用不同的颜色来打印不同的信息 for (i=35;i75;i+=2) gotoxy(i,2); printf(*); for (i=35;i7

10、5;i+=2) gotoxy(i,8); printf(*); for (i=2;i=8;i+) gotoxy(35,i); printf(*); for (i=2;i=8;i+) gotoxy(75,i); printf(*); gotoxy (37,4); printf ( 控制方向 空格键为加速);gotoxy (38,6); puts(加速将会得到更高的分数);color(7); for (i=35;i75;i+=2) gotoxy(i,26); printf(*); for (i=35;i75;i+=2) gotoxy(i,32); printf(*); for (i=26;i=32

11、;i+) gotoxy(35,i); printf(*); for (i=26;i=32;i+) gotoxy(75,i); printf(*); gotoxy (37,28); puts(有三种食物 吃不同的食物会有不同命运); gotoxy (37,30); puts(毒草 地雷 普通食物); color(12); for (i=80;i130;i+=2) gotoxy(i,7); printf(*); for (i=80;i130;i+=2) gotoxy(i,15); printf(*); for (i=8;i=15;i+) gotoxy(80,i); printf(*); for (

12、i=7;i=15;i+) gotoxy(130,i); printf(*); gotoxy(82,9); color(2); puts(绿为普通食物 吃后身体增长一节 加10分); gotoxy(82,11); color(4); puts(红为地雷 吃后身体长度减半 分数减半); gotoxy(82,13); color(6); puts(闪烁为毒草 吃后身体减一节 减10分); color (14);for (i=80;i130;i+=2) gotoxy(i,19); printf(*); for (i=80;i130;i+=2) gotoxy(i,27); printf(*); for

13、(i=19;i=27;i+) gotoxy(80,i); printf(*); for (i=19;i=27;i+) gotoxy(130,i); printf(*); gotoxy(82,21); puts(w s a d 也为方向键 分别控制上下左右 );gotoxy(82,23); puts(q e z c 也为方向键 分别控制左上 右上 左下 右下 ); gotoxy(82,25); puts(达到一定的分数以及蛇达到一定节数 游戏难度会增加 );system(pause);system(cls); gotoxy(50,20);printf (请问您是否有继续上一次的游戏? (Y|N)

14、);char dd;dd=getch();if (dd=y|dd=Y) system(cls);duquyouxi();else system(cls); denglv(); system(cls);gotoxy(20,20);printf (请选择难度 输入1代表简单(easy) 输入2代表普通(normal) 输入3代表困难(difficult) 输入4代表退出游戏(over) 输入后请按下enter键n);scanf(%d, &temp);while (temp!=1 & temp!=2 & temp!=3 &temp!=4)gotoxy(20,20);printf (输入错误 请重新输

15、入 输入1代表简单 输入2代表普通 输入3代表困难 输入4代表退出游戏 输入后请按下enter键n);scanf(%d, &temp);if (temp=1) gamespeed=160;add=10;if (temp=2)gamespeed=150;add=13;if (temp=3)gamespeed=140;add=16;if (temp=4) exit(0);system(cls);void printfmap()if (temp=1) color(13);for(i=0;i100;i+=2) /打印出上下边界gotoxy(i,0);printf();gotoxy(i,36);prin

16、tf();for(i=1;i36;i+) /打印出左右边界gotoxy(0,i);printf();gotoxy(98,i);printf();if (temp=2) color(13);for(i=0;i100;i+=2) /打印出上下边界gotoxy(i,0);printf();gotoxy(i,36);printf();for(i=1;i36;i+) /打印出左右边界gotoxy(0,i);printf();gotoxy(98,i);printf();color (14);for (i=25;i=30;i+)gotoxy(66,i);printf();for (i=25;i=30;i+)

17、gotoxy(86,i);printf();for (i=66;i=86;i+=2)gotoxy(i,25);printf();for (i=66;i=86;i+=2)gotoxy(i,30);printf();color (14);for (i=5;i=10;i+)gotoxy(12,i);printf();for (i=5;i=10;i+)gotoxy(32,i);printf();for (i=12;i=32;i+=2)gotoxy(i,5);printf();for (i=12;i=32;i+=2)gotoxy(i,10);printf();if (temp=3) color(13);

18、for(i=0;i100;i+=2) /打印出上下边界gotoxy(i,0);printf();gotoxy(i,36);printf();for(i=1;i36;i+) /打印出左右边界gotoxy(0,i);printf();gotoxy(98,i);printf();color (14); /打印出上下两个边框围墙for (i=25;i=30;i+)gotoxy(66,i);printf();for (i=25;i=30;i+)gotoxy(86,i);printf();for (i=66;i=86;i+=2)gotoxy(i,25);printf();for (i=66;i=86;i+

19、=2)gotoxy(i,30);printf();color (14);for (i=5;i=10;i+)gotoxy(12,i);printf();for (i=5;i=10;i+)gotoxy(32,i);printf();for (i=12;i=32;i+=2)gotoxy(i,5);printf();for (i=12;i=32;i+=2)gotoxy(i,10);printf();color (7); /打印出4条横竖的围墙for (i=1;i20;i-)gotoxy(18,i); printf ();color (3);for (i=96;i60;i=i-2)gotoxy(i,22

20、); printf ();for (i=2;ix=42; /蛇的位置初始化tail-y=35;tail-next=NULL; /蛇尾的节点 即尾节点为nullfor (i=1;inext=tail;head-x=42+i*2; /建立蛇身与蛇头的联系head-y=35;tail=head; /建立下一个节点while (tail-next!=NULL)gotoxy(tail-x,tail-y);color(1);printf (); /打印出蛇身tail=tail-next;node=2; /蛇一开始时的节数void printffood () /打印出普通食物int d;if (temp=3

21、)d=5; /d用来记录毒草的出现个数 以便判断普通食物是否与毒草重合 if (temp=2)d=4; if (temp=1)d=3;int flag=1; /用来判断srand(unsigned) time(NULL);while (1) flag=1;normalfood.x=rand()%95+2;normalfood.y=rand()%30+1;fp=head; while (fp-next!=NULL)if (fp-x=normalfood.x & fp-y=normalfood.y) / 判断蛇身是否与食物重合flag=0;fp=fp-next;if (normalfood.x%2

22、!=0) /食物的横坐标必须为偶数 不然就不能与蛇头对接flag=0;for (i=0;i11 & normalfood.y4 & normalfood.y11 & normalfood.x64 & normalfood.y24 & normalfood.y31 & normalfood.x11 & normalfood.y4 & normalfood.y11 & normalfood.x64 & normalfood.y24 & normalfood.y31 & normalfood.x=1 & normalfood.y20 & normalfood.y60 & normalfood.x=2

23、 & normalfood.x38)flag=0;for (i=0;inext!=NULL)if (fp-x=poisonousfood.x & fp-y=poisonousfood.y)flag=0;fp=fp-next;if (poisonousfood.x%2!=0)flag=0;if (luckyfood.x=poisonousfood.x & luckyfood.y=poisonousfood.y )flag=0;if (poisonousfood.x=normalfood.x & poisonousfood.y=normalfood.y)flag=0;for (i=0;i27;i+

24、)if (poisonousfood.x=passgrassi.x & poisonousfood.y=passgrassi.y)flag=0;for (i=0;i11 & poisonousfood.y4 & poisonousfood.y11 & poisonousfood.x64 & poisonousfood.y24 & poisonousfood.y31 & poisonousfood.x11 & poisonousfood.y4 & poisonousfood.y11 & poisonousfood.x64 & poisonousfood.y24 & poisonousfood.y

25、31 & poisonousfood.x=1 & poisonousfood.y20 & poisonousfood.y60 & poisonousfood.x=2 & poisonousfood.x38)flag=0;if (flag)break; gotoxy(poisonousfood.x,poisonousfood.y);color (4); printf ();HideCursor(); void printffood2() /产生毒草 if (temp=3)s=5;if (temp=2)s=4;if (temp=1)s=3;int flag=1;int jilu;/一会会用来判断毒

26、草的位置是否相互重合for (i=0;inext!=NULL)if (fp-x=bedfoodi.x & fp-y=bedfoodi.y)flag=0;fp=fp-next;if (bedfoodi.x%2!=0)flag=0;if (bedfoodi.x=normalfood.x & bedfoodi.y=normalfood.y) /普通食物flag=0;if (bedfoodi.x=poisonousfood.x & bedfoodi.y=poisonousfood.y)/地雷flag=0;if (luckyfood.x=bedfoodi.x & luckyfood.y=bedfoodi

27、.y )/幸运食物flag=0;for (int v=0;v11 & bedfoodi.y4 & bedfoodi.y11 & bedfoodi.x64 & bedfoodi.y24 & bedfoodi.y31 & bedfoodi.x11 & bedfoodi.y4 & bedfoodi.y11 & bedfoodi.x64 & bedfoodi.y24 & bedfoodi.y31 & bedfoodi.x88 )flag=0;if (bedfoodi.x=70 & bedfoodi.y=1) | (bedfoodi.x=18 & bedfoodi.y20)flag=0;if (bedf

28、oodi.y=22 & bedfoodi.x60) | (bedfoodi.y=13 & bedfoodi.x=2)flag=0;jilu=i;if (i0)/判断毒草的位置是否相互重合if (bedfoodi-1.x=bedfoodi.x & bedfoodi-1.y=bedfoodi.y)flag=0;for (int j=2; j=jilu; j+)if (bedfoodjilu.x=bedfood0.x & bedfoodjilu.y=bedfood0.y)flag=0; if (i=3)if (bedfood3.x=bedfood1.x & bedfood3.y=bedfood1.y

29、)flag=0;if (i=4)if (bedfood4.x=bedfood1.x & bedfood4.y=bedfood1.y)|(bedfood4.x=bedfood2.x&bedfood4.y=bedfood2.y)flag=0;if (flag)break;gotoxy(105,30) ;color(6);for (i=0;is;i+) gotoxy(bedfoodi.x,bedfoodi.y);printf (); void appearfood2()/出现毒草 以及幸运食物int yanse; /随机数 出现颜色if (temp=1)if ( panduan=75)printff

30、ood2();/控制出现毒草的函数lucky_food();/控制幸运食物的出现srand (time(0);if (panduan75) /毒草出现后就控制其颜色的变化for (i=0;is;i+) yanse=rand()%15+1;color(yanse);gotoxy(bedfoodi.x,bedfoodi.y);printf (); if (panduan=100) panduan=0;gotoxy(luckyfood.x,luckyfood.y); printf ( );luckyfood.x=150;luckyfood.y=36;for (i=0;is;i+)gotoxy(bed

31、foodi.x,bedfoodi.y); printf ( );for (i=0;is;i+)bedfoodi.x=104;bedfoodi.y=1;if (temp=2)if ( panduan=60)printffood2();lucky_food();srand (time(0);if (panduan60) /毒草出现后就控制其颜色的变化for (i=0;is;i+) yanse=rand()%15+1;color(yanse);gotoxy(bedfoodi.x,bedfoodi.y);printf (); if (panduan=100) panduan=0; gotoxy(luc

32、kyfood.x,luckyfood.y); printf ( );luckyfood.x=150;luckyfood.y=36;for (i=0;is;i+)gotoxy(bedfoodi.x,bedfoodi.y); printf ( );for (i=0;is;i+)bedfoodi.x=104;bedfoodi.y=1;if (temp=3)if ( panduan=50)printffood2();lucky_food();srand (time(0);if (panduan50) /毒草出现后就控制其颜色的变化for (i=0;is;i+) yanse=rand()%15+1;color(yanse);gotoxy(bedfoodi.x,bedfoodi.y);printf (); if (panduan=100) panduan=0;gotoxy(luckyfood.x,luckyfood.y); printf ( );luckyfood.x=150;luckyfood.y=36;for (i=0;is;i+)gotoxy(bedfoodi.x,bedfoodi.y); printf ( );for (i=0;is;i+)bedfoodi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论