已有81人关注
贪吃蛇创建蛇身出错
发表在新手报到 2019-02-28
是否精华
版块置顶:
// Snake贪吃蛇第二个.cpp : Defines the entry point for the console application.
#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


//定义全局变量
typedef struct snake//定义一个结构体 ---蛇身的一个节点
{
int x; //节点的x坐标
int y; //节点的y坐标
struct snake *next; //蛇身的下一个节点

}snake;

int score=0; //游戏的总得分
int add=10; //每次吃了食物得分
int HighScore=0; //最高分
int status; //蛇前进的状态
int 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 welcometogame(); //开始界面
void createMap(); //绘制地图
void scoreandtips(); //游戏界面右侧的得分和
void initsnake(); //初始化蛇身,画蛇身
void createfood(); //创建并随机出现食物
int biteself(); //判断是否咬到了自己
void cantcrosswall(); //设置蛇撞墙的情况
void speedup(); //加速
void speeddown(); //减速
void snakemove(); //控制蛇前进方向
void keyboardControl(); //控制键盘按键 keyboardControl()
void Lostdraw(); //游戏结束界面
void endgame(); //游戏结束
void choose(); //游戏失败之后的选择
void File_out(); //在文件中读取最高一
void File_in(); //储存最高分进文件
void explation(); //游戏说明



/*
*设置文字颜色
*/
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
return 0;

}

/*
*获得控制台的坐标位置
*/
void gotoxy(int x,int y)
{
COORD c;
c.X=x;
c.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);

}

/*
*界面字符蛇形状
*/
void printsnake()
{
color(6);
gotoxy(35,1);
printf("/^\\/^\\");

gotoxy(34,2);
printf("|_| o|");


color(12);
gotoxy(25,5);
printf("+++++++贪吃蛇大作战@@@@@@+++++++++++++++++++");

}
/*
*欢迎界面
*/
void welcometogame()
{
int n;
int i,j=1;
color(1);
gotoxy(43,18);
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.退出游戏");

color(3); //蓝色
gotoxy(29,27);
printf("请选择[1 2 3]:[ ]\b\b");
color(14); //黄色
scanf("%d",&n);
switch(n)
{
case 1:
system("cls");
createMap();
initsnake();
break;
case 2:
break;
case 3:
exit(0);
default:
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=1;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();//读取文件
color(11);
gotoxy(64,4);
printf("☆最高级纪录:%d",HighScore);
color(14);
gotoxy(64,8);
printf("得分:%d",score);
color(13);
gotoxy(73,11);
printf("小 提 示");
color(6);
gotoxy(60,13);
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;

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;
}
}



/*
*主函数
*/
int main()
{
system("mode con cols=100 lines=30");//设置控制台的宽高
printsnake();
welcometogame();
File_out();
return 0;

}
2019-02-28 20:46:33编辑
分享到:
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照