贪吃蛇代码--c语言版 visual c++6.0打开
#include"stdafx.h"
#include<stdio.h>
#include<time.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>#define U 1
#define D 2
#define L 3
#define R 4 //蛇的状态 U:上 D:下 L:左 R:右
typedef struct snake //蛇身的一个节点
{int x; //节点的x坐标 int y; //节点的y坐标struct snake *next; //蛇身的下一个节点 }snake;int score=0,add=10; //总得分和每吃一次食物的得分 int highscore=0; //最高分 int status,sleeptime=200; //蛇前进状态,每次运行的时间间隔 snake *head,*food; //蛇头指针,食物指针 snake *q; //遍历蛇时用的指针 int endgamestatus=0; //游戏结束时的状态 HANDLE hOut; //控制台句柄 void gotoxy(int x,int y);int color(int c);void printsnake();void wlcome();void createmap();void scoreandtips();void initsnake();void createfood();int biteself();void cantcrosswall();void speedup();void speeddown();void snakemove();void keyboardcontrol();void lostdraw();void endgame();void choose();void file_out();void file_in();void explation();main(){ system("mode con cols=100 lines=30");printsnake();wlcome();file_out();keyboardcontrol();endgame();}void gotoxy(int x,int y)//设置光标位置 {COORD c;c.X=x;c.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); //定位光标的位置 }int color(int c)//设置颜色 {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);return 0;} void printsnake()//打印字符蛇 {gotoxy(2,5);color(3);printf("姓名:张小艾");gotoxy(2,6);color(3);printf("学号:1910101099"); gotoxy(35,1);color(6);printf("/^\\/^\\");gotoxy(34,2);printf("|_| o|");gotoxy(33,2);color(2);printf("_");gotoxy(25,3);color(12);printf("\\/");gotoxy(31,3);color(2);printf("/");gotoxy(37,3);color(6);printf("\\_/");gotoxy(41,3);color(10);printf(" \\");gotoxy(26,4);color(12);printf("\\____");gotoxy(32,4);printf("_________");gotoxy(31,4);color(2);printf("|");gotoxy(43,4);color(10);printf("\\");gotoxy(32,5);color(2);printf("\\_______");gotoxy(44,5);color(10);printf("\\");gotoxy(39,6);printf("| | \\");gotoxy(38,7);printf("/ / \\");gotoxy(37,8);printf("/ / \\ \\");gotoxy(35,9);printf("/ / \\ \\");gotoxy(34,10);printf(" / / \\ \\");gotoxy(33,11);printf("/ / _----_ \\ \\");gotoxy(32,12);printf("/ / _-~ ~-_ | |");gotoxy(31,13);printf("( ( _-~ _--_ ~-_ _/ |");gotoxy(32,14);printf("\\ ~-____-~ _-~ ~-_ ~-_-~ /");gotoxy(33,15);printf("~-_ _-~ ~-_ _-~");gotoxy(35,16);printf("~--____-~ ~-___-~");} void wlcome()//欢迎界面 {int n;int i,j=1;gotoxy(43,18);color(11);printf("贪吃蛇大作战");color(14);for(i=20;i<=26;i++){for(j=27;j<=74;j++){gotoxy(j,i);if(i==20||i==26){printf("-");}else if(j==27||j==74){printf("|");}}}color(12);gotoxy(35,22);printf("1.开始游戏");gotoxy(55,22);printf("2.游戏说明");gotoxy(35,24);printf("3.退出游戏");gotoxy(29,27);color(3);printf("请选择1 2 3\n");color(14);scanf("%d",&n);switch(n){case 1: system("cls");//清屏 createmap();initsnake();createfood();keyboardcontrol();break;case 2:explation();break;break;case 3:exit(0);break;} }
void createmap()//创建地图
{int i,j;for(i=0;i<58;i+=2){gotoxy(i,0);color(5);printf("□");gotoxy(i,26);printf("□"); }for(i=0;i<26;i++){gotoxy(0,i);printf("□");gotoxy(56,i);printf("□"); }for(i=2;i<56;i+=2){for(j=1;j<26;j++){gotoxy(i,j);color(3);printf("■\n\n"); }}
}void scoreandtips()//游戏界面右侧的得分和小提示{file_out();gotoxy(64,4);color(11);printf("*最高纪录*: %d",highscore);gotoxy(64,8);color(14);printf("得分: %d ",score);color(13);gotoxy(73,11);printf("小提示");gotoxy(60,13);color(6);printf("+---------------------+");gotoxy(60,25);printf("+---------------------+");color(3);gotoxy(64,14);printf("每个食物得分:%d分",add);gotoxy(64,16);printf("不能穿墙,不能咬到自己");gotoxy(64,18);printf("用↑↓←→分别控制蛇的移动");gotoxy(64,20);printf("F1为加速,F2为减速");gotoxy(64,22);printf("space: 暂停游戏");gotoxy(64,24);printf("ESC:退出游戏");
}
void file_out()//打开文件记录最高分
{FILE *fp;fp=fopen("save.txt","a+");fscanf(fp,"%d",&highscore);fclose(fp);} void initsnake(){snake *tail;int i;tail=(snake*)malloc(sizeof(snake));tail->x=24;tail->y=5;tail->next=NULL;for(i=1;i<=4;i++){head=(snake*)malloc(sizeof(snake));head->next=tail;head->x=24+2*i;head->y=5;tail=head;}while(tail!=NULL){gotoxy(tail->x,tail->y);color(14);printf("★"); //蛇身由★组成tail=tail->next; }
}
void createfood()//随机出现食物
{snake *food_1;srand((unsigned)time(NULL));food_1=(snake*)malloc(sizeof(snake));while((food_1->x%2!=0)){food_1->x=rand()%52+2;}food_1->y=rand()%24+1;q=head;while(q->next==NULL) {if(q->x==food_1->x&&q->y==food_1->y){free(food_1);createfood();}q=q->next;}gotoxy(food_1->x,food_1->y);food=food_1;color(12);printf("@");
}
int biteself()
{snake *self; //定义self为蛇身上除蛇头以外的节点 self=head->next;while(self!=NULL){if(self->x==head->x&&self->y==head->y){return 1;}self=self->next;}return 0;} void cantcrosswall()
{if(head->x==0||head->x==56||head->y==0||head->y==26){endgamestatus=1;endgame();}} void speedup()//加速
{if(sleeptime>=50){sleeptime=sleeptime-10;add=add+2;}
}void speeddown()//减速
{if(sleeptime<350){sleeptime=sleeptime+30;add=add-2;if(sleeptime==350){add=1;}}
}void snakemove()//控制方向
{snake *nexthead;cantcrosswall();nexthead=(snake*)malloc(sizeof(snake));if(status==U)//上{nexthead->x=head->x; //向上前进时,x不变,y-1 nexthead->y=head->y-1;nexthead->next=head;head=nexthead;q=head;//如果下一个位置上有食物,下一个位置的坐标和食物坐标相同 if(nexthead->x==food->x&&nexthead->y==food->y){while(q!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next; }score=score+add;speedup();createfood();}else{while(q->next->next!=NULL)//如果没有遇见食物 {gotoxy(q->x,q->y);color(14);printf("★");q=q->next; }//经过上面的循环 ,q指向蛇尾,蛇尾的下一步就是蛇走过去的位置 gotoxy(q->next->x,q->next->y);color(3);printf("■");//恢复走过的位置 free(q->next);q->next=NULL; } } if(status==D){nexthead->x=head->x; //向下前进时,x不变,y+1 nexthead->y=head->y+1;nexthead->next=head;head=nexthead;q=head;//如果下一个位置上有食物,下一个位置的坐标和食物坐标相同 if(nexthead->x==food->x&&nexthead->y==food->y){while(q!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next; }score=score+add;speedup();createfood();}else{while(q->next->next!=NULL)//如果没有遇见食物 {gotoxy(q->x,q->y);color(14);printf("★");q=q->next; }//经过上面的循环 ,q指向蛇尾,蛇尾的下一步就是蛇走过去的位置 gotoxy(q->next->x,q->next->y);color(3);printf("■");//恢复走过的位置 free(q->next);q->next=NULL; }}if(status==L)//左 {nexthead->x=head->x-2; //向左前进时,x不变,y+1 nexthead->y=head->y;nexthead->next=head;head=nexthead;q=head;//如果下一个位置上有食物,下一个位置的坐标和食物坐标相同 if(nexthead->x==food->x&&nexthead->y==food->y){while(q!=NULL){gotoxy(q->x,q->y); //食物变成蛇身上的一部分 color(14);printf("★");q=q->next; }score=score+add;speedup();createfood();}else{while(q->next->next!=NULL)//如果没有遇见食物 {gotoxy(q->x,q->y);color(14);printf("★");q=q->next; }//经过上面的循环 ,q指向蛇尾,蛇尾的下一步就是蛇走过去的位置 gotoxy(q->next->x,q->next->y);color(3);printf("■");//恢复走过的位置 free(q->next);q->next=NULL; } }if(status==R){nexthead->x=head->x+2; //向上前进时,x不变,y-1 nexthead->y=head->y;nexthead->next=head;head=nexthead;q=head;//如果下一个位置上有食物,下一个位置的坐标和食物坐标相同 if(nexthead->x==food->x&&nexthead->y==food->y){while(q!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next; }score=score+add;speedup();createfood();}else{while(q->next->next!=NULL)//如果没有遇见食物 {gotoxy(q->x,q->y);color(14);printf("★");q=q->next; }//经过上面的循环 ,q指向蛇尾,蛇尾的下一步就是蛇走过去的位置 gotoxy(q->next->x,q->next->y);color(3);printf("■");//恢复走过的位置 free(q->next);q->next=NULL; }
}if(biteself()==1){endgamestatus=2;endgame();}
}
void keyboardcontrol()
{status=R;while(1){scoreandtips();//GetAsyncKeyState函数用来判断函数调用指定虚拟键的状态if(GetAsyncKeyState(VK_UP)&&status!=D){status=U;} else if(GetAsyncKeyState(VK_DOWN)&&status!=U){status=D;} else if(GetAsyncKeyState(VK_LEFT)&&status!=R){status=L;} else if(GetAsyncKeyState(VK_RIGHT)&&status!=L){status=R;} if(GetAsyncKeyState(VK_SPACE)){while(1){//调用sleep函数,令进程停止,直到达到其中设定的参数时间 Sleep(300);if(GetAsyncKeyState(VK_SPACE)){break;} }}else if(GetAsyncKeyState(VK_ESCAPE)){endgamestatus=3;break;}else if(GetAsyncKeyState(VK_F1)){speedup();}else if(GetAsyncKeyState(VK_F2)){if(sleeptime<350){sleeptime=sleeptime+30;add=add-2;if(sleeptime==350){add=1;}}}Sleep(sleeptime);snakemove();}
}void lostdraw()
{system("cls");int i,j;gotoxy(17,5);color(11);printf("+------------------------");gotoxy(35,5);color(14);printf("o00o");gotoxy(39,5);color(11);printf("----------");gotoxy(48,5);color(14);printf("---");gotoxy(51,5);color(11);printf("----------");gotoxy(61,5);color(14);printf("o00o");gotoxy(65,5);color(11);printf("-----------------+");for(i=6;i<=19;i++){gotoxy(17,i);printf("|");gotoxy(82,i);printf("|");}gotoxy(17,20);printf("+----------------------------------");gotoxy(52,20);color(11);printf("-----------------------------+"); } void endgame(){system("cls");if(endgamestatus==1){lostdraw();gotoxy(35,9);color(12);printf("对不起,您撞到墙了。游戏结束!");}else if(endgamestatus==2){lostdraw();gotoxy(35,9);color(12);printf("对不起,您咬到自己了。游戏结束!");}else if(endgamestatus==3){lostdraw();gotoxy(40,9);color(12);printf("您结束了游戏。");} gotoxy(43,12);color(13);printf("您的得分是 %d",score);if(score>=highscore){color(10);gotoxy(33,16);printf("创新纪录啦!你真棒!!!");file_in(); } choose(); }void file_in()//将最高分存储到文件中 {FILE *fp;fp=fopen("save.txt","w+");//以读写的方式建立文件 fprintf(fp,"%d",score);fclose(fp);}void choose(){int n;gotoxy(25,23);color(12);printf("重玩一局-------1");gotoxy(52,23);printf("不玩了,退出-------2"); gotoxy(46,25);color(11);printf("选择:");scanf("%d",&n);switch(n){case 1:system("cls");score=0;sleeptime=200;add=10;printsnake();wlcome();break;case 2:exit(0);break;default:gotoxy(35,27);color(12);printf("您输入有误,请重新输入");system("pause >nul");//按任意键 endgame();choose();break; }} void explation(){int i,j=1;system("cls");color(13);gotoxy(44,3);printf("游戏说明"); color(2);for(i=6;i<=22;i++){for(j=20;j<=75;j++){gotoxy(j,i);if(i==6||i==22)printf("=");else if(j==20||j==75)printf("||");}}color(3);gotoxy(30,8);printf("1、不能穿墙,不能咬到自己");color(3);gotoxy(30,8);printf("1、不能穿墙,不能咬到自己");color(10);gotoxy(30,11);printf("2、用↑↓←→分别控制蛇的移动");color(14);gotoxy(30,14);printf("3、F1为加速,F2为减速");color(11);gotoxy(30,17);printf("4、按空格键暂停游戏,再按空格键继续");color(4);gotoxy(30,20);printf("5、ESC:退出游戏,space:暂停游戏");getch();//按任意键返回主界面system("cls");printsnake();wlcome(); }
贪吃蛇代码--c语言版 visual c++6.0打开相关推荐
- 贪吃蛇代码c语言改分,刚学C语言,想写一个贪吃蛇的代码
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...
- 贪吃蛇代码c 语言,刚学C语言,想写一个贪吃蛇的代码
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...
- 贪吃蛇(C语言版)链表实现
贪吃蛇 gitee:贪吃蛇C语言版: Snake 蛇的结构 typedef struct Snake {int x;int y;struct Snake *next; }; 游戏开始欢迎界面 //游戏 ...
- stm32贪吃蛇代码c语言,STM32实现贪吃蛇
本帖最后由 akwkevin2011 于 2012-7-14 14:47 编辑 STM32学习笔记二 竹天笑 呵呵,界面非常简单 要点:1.触摸屏校准信息保存在SD卡,不必每次开机都校准.(读写S ...
- c语言程序员写贪吃蛇代码28,厉害了,程序员28行代码写贪吃蛇游戏,附源码!...
对于贪吃蛇游戏,大家基本上都玩过,但是作为一个程序员,大家是否想过要自己去写一个贪吃蛇,毕竟玩别人写的游戏和自己写的游戏是两种截然不同的感受,而且也可以通过制作来提升自己的技术! 其实贪吃蛇的逻辑并不 ...
- c语言联机游戏,C/C++ 游戏 贪吃蛇双人对战版
贪吃蛇双人对战版--C语言 最近写的,用于交最后一次结构化程序设计课的作业,闲暇之余传到网上,仅供参考,新手上路,请多指教. 话不多说,先附上下载链接.http://download.csdn.net ...
- c语言安卓贪吃蛇代码下载,C语言贪吃蛇代码
c语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的 C语言贪吃蛇代码部分 #include #include #include#include #defin ...
- 贪吃蛇的c语言程序码,C语言贪吃蛇代码下载_C语言贪吃蛇代码官方下载-太平洋下载中心...
C语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的. C语言贪吃蛇代码原理: 产生一个固定大小没有边界的游戏区域,蛇从区域的中心开始,由玩家通过键盘控制蛇的 ...
- C语言贪吃蛇游戏(进阶版)
一,实验游戏流程图(由结构与数组实现) 1.贪吃蛇游戏思路流程图(自作) 二,实验贪吃蛇全部代码(借鉴+修改) #include <stdio.h> #include <Window ...
- c语言字符蛇代码,C语言实现贪吃蛇代码
本文实例为大家分享了C语言实现贪吃蛇代码的具体代码,供大家参考,具体内容如下 #include"stdafx.h" #include #include #include #incl ...
最新文章
- PInvoke复习之深入理解char*与wchar_t*与string以及wstring之间的相互转换
- linux前10ip,检查网口流量与前10名流量大IP
- mysql ef 随机排序_EFCore+Mysql倉儲層建設(分頁、多字段排序、部分字段更新)
- XML基础——extensible markup language
- PAT (Basic Level) Practice1020 月饼
- win10商店下载位置_win10应用商店下载的东西在哪
- 微软简体和繁体字体转换
- idea中Empty tag doesn‘t work in some browsers 浏览器中一片空白,没有渲染样式,
- WIFI系列协议--802.11s--Mesh网络
- 搜索引擎优化的优势及发展问题
- Java使用poi将list<Map>导出为表格
- 计算机硬件介绍之CPU与多线程
- 成熟才是男人应该有的标志//2021-2-15
- java web短信验证码_在Web项目中手机短信验证码实现的全过程记录
- 人生一定要知道的十大“博弈”!
- outlook邮件路径更改_如何在Outlook中更改电子邮件的“答复”地址
- 数据挖掘与分析——回归模型
- C语言初阶数据结构(四)栈(详细图解,简单上手,通俗易懂)
- 正式-日常作息(2020.11)
- WMS云端转型 势在必行