lnk2005

0

好吧,我又来了,先说一声抱歉,我是真不知道哪些是无关代码。

编译环境:vs2019,错误(117个)类似于:

LNK2005 "private: void __thiscall EasyX::GlobalMemory::Clear(void)" (?Clear@GlobalMemory@EasyX@@AAEXXZ) 已经在 EasyXw.lib(EasyX.GlobalMemory.obj) 中定义

LNK2005 "public: __thiscall EasyX::GlobalMemory::GlobalMemory(void)" (??0GlobalMemory@EasyX@@QAE@XZ) 已经在 EasyXw.lib(EasyX.GlobalMemory.obj) 中定义

的错误。

尝试过#ifndef以及#pragma   once 。

以下是几个文件的内容:

ceshi.h:

#pragma   once  
#include<graphics.h>
#define graphlength 1000//创建窗口的长度
#define graphwidth 680//创建窗口的宽度
#define picsize 20//图片尺寸a*a
#define width 19//边框的宽度
#define horizonx 700//水平边框的右坐标
#define verticaly 661//竖直边框的底部坐标
#define up 'w'
#define down 's'
#define left 'a'
#define right 'd'
#define quit 'q'
//结构体部分
typedef struct record//记录结构体
{
	int framework;
	int year;
	int mon;
	int day;
	int hour;
	int min;
	int sec;
}record;
typedef struct foods//食物结构体
{
	int x;
	int y;
}food1;
typedef struct _POINTS//奖励性食物结构体
{
	int x;
	int y;
}point1;
typedef struct fastfood//加速食物结构体
{
	int x;
	int y;
}fast1;
typedef struct slow//减速食物结构体
{
	int x;
	int y;
}slow1;
typedef struct snakes//蛇身结构体
{
	int x;
	int y;
	struct snakes* next;
}snake;
void transparentimage(int x, int y, IMAGE* srcimg, IMAGE* maskimg);
extern IMAGE bac[11], bodysrc[10], bodymask[10], foodsrc, foodmask, pointsrc, pointmask, fastsrc, fastmask, lowsrc, lowmask;
extern snake* head, * tail, * snake_2, * snake_1;
extern int i;
extern int map;
extern int score;
extern int n;
extern int speed, count0, count0_1, addnumber, count1, count1_1, count2, count2_1;
extern char key1, key;
extern food1 food;
extern fast1 fast;
extern slow1 slow;
extern point1 point;

1.h:

#pragma   once  
#pragma comment(lib, "Winmm.lib")//调用有关多媒体的动态连接库
//函数声明部分
int Cmpfunc(const void* a, const void* b);//数组排序函数
void eatfood();//蛇进食后身长
void stamp();//蛇身以及食物打印
void scoreshow();//得分显示
void Free();//释放蛇的内存
void creatfood();//普通食物
void creatslow();//减速型食物
void creatfast();//加速型食物
void creatpoint();//奖励性食物
void chosedifficult();//选择难度
void instructions();//游戏说明
void archive();//游戏记录存档
void ranklist();//显示排行
void welcome();//开始界面

2.h:

#pragma   once  
#pragma comment(lib, "Winmm.lib")//调用有关多媒体的动态连接库
void mapbgm();//设置地图bgm
void loadpic();//存储图片
void chosemap();//选择地图
void creatframe();//创建边框

3.h:

#pragma   once  
#pragma comment(lib, "Winmm.lib")//调用有关多媒体的动态连接库
int keyboard();//从键盘获得输入信号
void move_snake();//蛇的移动
void snakebody(int a, int b);//蛇的移动过程坐标变换
int endgame();//判断是否违反规则结束游戏
void End();//结束界面
void creatsnake();//创建蛇身

ceshi.cpp:

#include"ceshi.h"
//函数声明
// 透明贴图函数
// 参数:
//		x, y:	目标贴图位置
//		srcimg: 源 IMAGE 对象指针。NULL 表示默认窗体
//		maskimg:掩码 IMAGE
void transparentimage(int x, int y, IMAGE* srcimg, IMAGE* maskimg)
{
	putimage(x, y, maskimg, SRCAND);
	putimage(x, y, srcimg, SRCPAINT);
}

main.cpp:

#include"ceshi.h"
#include"1.h"
#include"2.h"
#include"3.h"
IMAGE bac[11], bodysrc[10], bodymask[10], foodsrc, foodmask, pointsrc, pointmask, fastsrc, fastmask, lowsrc, lowmask;
snake* head, * tail, * snake_2, * snake_1;
int i = 0;
int map = 1;
int score = 0;
int n;
int speed = 100, count0 = 0, count0_1 = 0, addnumber = 15, count1 = 0, count1_1 = 0, count2 = 0, count2_1 = 0;
char key1 = 'd', key = 'd';
food1 food;
fast1 fast;
slow1 slow;
point1 point;
//主函数
int main()
{
	initgraph(graphlength, graphwidth);
	setbkmode(TRANSPARENT);
	loadpic();
	welcome();
	return 0;
}

1.cpp:

#undef UNICODE
#undef _UNICODE
#include<stdio.h>
#include<time.h>
#include"1.h"
#include"2.h"
#include"3.h"
#include"ceshi.h"
//开始界面
void welcome()
{
	clearcliprgn();//清空屏幕
	mciSendString(_T("open music\\welcome.mp3 alias welcomebgm"), NULL, 0, NULL);//打开欢迎音乐
	mciSendString("setaudio welcomebgm volume to 200", NULL, 0, NULL);//控制音量大小
	mciSendString(_T("play welcomebgm repeat"), NULL, 0, NULL);					//播放欢迎音乐
	putimage(0, 0, &bac[7]);
	int n;
	settextcolor(LIGHTRED);
	outtextxy(graphlength / 2, 100, _T("贪吃蛇"));
	outtextxy(graphlength / 2, 150, _T("1.开始游戏"));
	outtextxy(graphlength / 2, 200, _T("2.选择难度"));
	outtextxy(graphlength / 2, 250, _T("3.选择地图"));
	outtextxy(graphlength / 2, 300, _T("4.查看排行榜"));
	outtextxy(graphlength / 2, 350, _T("5.游戏说明"));
	outtextxy(graphlength / 2, 400, _T("6.退出游戏"));
	outtextxy(graphlength / 2, 450, _T("请选择:1.2.3.4.5.6"));
	scanf("%d", &n);
	mciSendString(_T("close welcomebgm"), NULL, 0, NULL);//关闭欢迎界面bgm
	cleardevice();
	switch (n)
	{
	case 1:
		mapbgm();
		creatframe();
		creatsnake();
		creatfood();
		creatpoint();
		creatfast();
		creatslow();
		keyboard();
		break;
	case 2:
		chosedifficult();
		break;
	case 3:
		chosemap();
		welcome();
		break;
	case 4:
		ranklist();
		welcome();
		break;
	case 5:
		instructions();
		welcome();
		break;
	case 6:
		exit(0);
		break;
	default:
		outtextxy(220, 120, _T("请输入有效的数字"));
		system("pause");
		while (getchar() != '\n');
		welcome();
		break;
	}
}
//释放蛇的各节点的内存
void Free()
{
	snake* p = head;
	while (head->next != NULL)
	{
		head = head->next;
		free(p);
		p = head;
	}
	free(p);
}
//创造食物
void creatfood()
{
	snake* p;
	srand((unsigned)time(NULL));
label:
	food.x = (rand() % (horizonx / 20 - 2) + 1) * 20;
	food.y = (rand() % ((verticaly - 1) / 20 - 1) + 1) * 20;
	p = head;
	while (p->next != NULL)
	{
		if (food.x == p->x && food.y == p->y)
		{
			goto label;
		}
		p = p->next;
	}
	if (food.x == fast.x && food.y == fast.y)
	{
		goto label;
	}
	if (food.x == point.x && food.y == point.y)
	{
		goto label;
	}
	if (food.x == slow.x && food.y == slow.y)
	{
		goto label;
	}
}
//创造奖励性食物
void creatpoint()
{
	snake* p;
	srand((unsigned)time(NULL));
label:
	point.x = (rand() % (horizonx / 20 - 2) + 1) * 20;
	point.y = (rand() % ((verticaly - 1) / 20 - 1) + 1) * 20;
	p = head;
	while (p->next != NULL)
	{
		if (point.x == p->x && point.y == p->y)
		{
			goto label;
		}
		p = p->next;
	}
	if (point.x == fast.x && point.y == fast.y)
	{
		goto label;
	}
	if (point.x == food.x && point.y == food.y)
	{
		goto label;
	}
	if (point.x == slow.x && point.y == slow.y)
	{
		goto label;
	}
}
//减速型食物
void creatslow()
{
	snake* p;
	srand((unsigned)time(NULL));
label:
	slow.x = (rand() % (horizonx / 20 - 2) + 1) * 20;
	slow.y = (rand() % ((verticaly - 1) / 20 - 1) + 1) * 20;
	p = head;
	while (p->next != NULL)
	{
		if (slow.x == p->x && slow.y == p->y)
		{
			goto label;
		}
		p = p->next;
	}
	if (slow.x == fast.x && slow.y == fast.y)
	{
		goto label;
	}
	if (slow.x == food.x && slow.y == food.y)
	{
		goto label;
	}
	if (slow.x == point.x && slow.y == point.y)
	{
		goto label;
	}
}
//创造加速食物
void creatfast()
{
	snake* p;
	srand((unsigned)time(NULL));
label:
	fast.x = (rand() % (horizonx / 20 - 2) + 1) * 20;
	fast.y = (rand() % ((verticaly - 1) / 20 - 1) + 1) * 20;
	p = head;
	while (p->next != NULL)
	{
		if (fast.x == p->x && fast.y == p->y)
		{
			goto label;
		}
		p = p->next;
	}
	if (fast.x == food.x && fast.y == food.y)
	{
		goto label;
	}
	if (fast.x == point.x && fast.y == point.y)
	{
		goto label;
	}
	if (fast.x == slow.x && fast.y == slow.y)
	{
		goto label;
	}
}
//难度选择
void chosedifficult()
{
	cleardevice();
	mciSendString(_T("open music\\chosedifficult.mp3 alias chosedifficultbgm"), NULL, 0, NULL);//打开难度选择BGM
	mciSendString("setaudio chosedifficultbgm volume to 180", NULL, 0, NULL);//控制音量大小
	mciSendString(_T("play chosedifficultbgm repeat"), NULL, 0, NULL);					//播放难度选择BGM
	putimage(0, 0, &bac[5]);
	int n;
	outtextxy(graphlength / 2, 100, _T("选择难度"));
	outtextxy(graphlength / 2, 150, _T("1.简单难度"));
	outtextxy(graphlength / 2, 200, _T("2.一般难度"));
	outtextxy(graphlength / 2, 250, _T("3.困难难度"));
	outtextxy(graphlength / 2, 300, _T("4.炼狱难度"));
	outtextxy(graphlength / 2, 350, _T("请选择:1.2.3.4"));
	scanf("%d", &n);
	switch (n)
	{
	case 1:
		speed = 150;break;
	case 2:
		speed = 100;break;
	case 3:
		speed = 50;break;
	case 4:
		speed = 30;break;
	default:
		outtextxy(320, 350, _T("请输入有效的数字"));
		system("pause");
		while (getchar() != '\n');
		chosedifficult();
	}
	mciSendString(_T("close chosedifficultbgm"), NULL, 0, NULL);//关闭选择难度bgm
	welcome();
}
//游戏说明
void instructions()
{
	cleardevice();
	outtextxy(graphlength / 2, 50, _T("欢迎玩贪吃蛇这款游戏"));
	outtextxy(graphlength / 2, 100, _T("通过按w,a,s,d控制蛇的移动"));
	outtextxy(graphlength / 2, 150, _T("通过吃鸡腿来加速"));
	outtextxy(graphlength / 2, 200, _T("通过吃猪排来减速"));
	outtextxy(graphlength / 2, 250, _T("通过吃汉堡获取大量分数"));
	outtextxy(graphlength / 2, 300, _T("通过吃蛋长大"));
	outtextxy(graphlength / 2, 350, _T("吃到普通食物后会随机变换身体"));
	outtextxy(graphlength / 2, 450, _T("游戏最终版权归chc小组所有"));
	system("pause");
}
//游戏记录存档
void archive()
{
	time_t timep;
	tm *ti;
	time(&timep);
	ti = localtime(&timep);
	record* data = (record*)malloc(sizeof(record));
	data->year = ti->tm_year;
	data->mon = ti->tm_mon;
	data->day = ti->tm_mday;
	data->hour = ti->tm_hour;
	data->min = ti->tm_min;
	data->sec = ti->tm_sec;
	FILE* fp;
	fp = fopen("out.text","ab");
	if (fp == NULL)
	{
		fp = fopen("out.text","wb");
	}
	fwrite(data,sizeof(record),1,fp);
	fclose(fp);
	free(data);
}
//数组排序函数
int Cmpfunc(const void* a, const void* b)
{
	return(*(int*)b - *(int*)a);//降序排序
}
void ranklist()
{
	cleardevice();
	mciSendString(_T("open music\\rank.mp3 alias rankbgm"), NULL, 0, NULL);//打开排行榜音乐
	mciSendString(_T("play rankbgm repeat"), NULL, 0, NULL);					//播放排行榜音乐
	putimage(0, 0, &bac[0]);
	int i = 0;
	record data[1000];
	FILE* fp = fopen("out.text", "rb");
	if (fp == NULL)
	{
		outtextxy(graphlength / 2, 50, _T("暂无游戏记录"));
		system("pause");
		welcome();
	}
	rewind(fp);
	while (!feof(fp))
	{
		fread(&data[i], sizeof(record), 1, fp);
		i++;
	}
	qsort(data, i - 1, sizeof(record), Cmpfunc);
	outtextxy(graphlength / 2, 50, _T("排行榜"));
	outtextxy(graphlength / 2 - 200, 80, _T("得分"));
	outtextxy(graphlength / 2 + 200, 80, _T("时间"));
	for (int j = 0;j < i - 1;j++)
	{
		char score1[100] = "";
		char a = ':';
		sprintf(score1, "%d", data[j].framework);
		outtextxy(graphlength / 2 - 200, 100 + j * 20, score1);
		sprintf(score1, "%d%c", data[j].year + 1900, a);
		outtextxy(graphlength / 2 + 200, 100 + j * 20, score1);
		sprintf(score1, "%d%c", data[j].mon + 1, a);
		outtextxy(graphlength / 2 + 250, 100 + j * 20, score1);
		sprintf(score1, "%d%c", data[j].day, a);
		outtextxy(graphlength / 2 + 300, 100 + j * 20, score1);
		sprintf(score1, "%d%c", data[j].hour, a);
		outtextxy(graphlength / 2 + 350, 100 + j * 20, score1);
		sprintf(score1, "%d%c", data[j].min, a);
		outtextxy(graphlength / 2 + 400, 100 + j * 20, score1);
		sprintf(score1, "%d", data[j].sec);
		outtextxy(graphlength / 2 + 450, 100 + j * 20, score1);
	}
	fclose(fp);
	system("pause");
	mciSendString(_T("close rankbgm"), NULL, 0, NULL);//关闭排行榜bgm
}
//得分显示
void scoreshow()
{
	char score1[100] = { 0 };
	sprintf(score1, "%d", score);
	outtextxy(horizonx + 50, 30, _T("得分是:"));
	outtextxy(horizonx + 120, 30, score1);
	outtextxy(horizonx + 50, 70, _T("鸡蛋是普通食物"));
	outtextxy(horizonx + 50, 110, _T("汉堡是奖励性食物"));
	outtextxy(horizonx + 50, 150, _T("鸡腿是加速食物"));
	outtextxy(horizonx + 50, 190, _T("猪排是减速食物"));
	outtextxy(horizonx + 50, 230, _T("不能穿墙,不能咬到自己"));
	outtextxy(horizonx + 50, 270, _T("用w a s d控制蛇的移动"));
	outtextxy(horizonx + 50, 310, _T("按q退出游戏"));
}
//蛇身以及食物打印
void stamp()
{
	snake* p;
	p = head;
	cleardevice();
	BeginBatchDraw();
	putimage(0, 0, &bac[map]);
	creatframe();
	transparentimage(food.x, food.y, &foodsrc, &foodmask);
	if (count0_1 >= 4)
	{
		transparentimage(point.x, point.y, &pointsrc, &pointmask);
	}
	if (count1_1 >= 4)
	{
		transparentimage(fast.x, fast.y, &fastsrc, &fastmask);
	}
	if (count2_1 >= 4)
	{
		transparentimage(slow.x, slow.y, &lowsrc, &lowmask);
	}
	while (1)
	{
		if (p->next == NULL)
		{
			break;
		}
		transparentimage(p->x, p->y, &bodysrc[i], &bodymask[i]);
		p = p->next;
	}
	scoreshow();
	FlushBatchDraw();
	EndBatchDraw();
}
//蛇的伸长
void eatfood()
{
	srand(time(NULL));
	snake* add;//add为新建的节点,用于蛇的伸长
	add = (snake*)malloc(sizeof(snake));
	if (add == NULL)
	{
		printf("内存分配不成功");
		exit(0);
	}
	if (head->x == point.x && head->y == point.y)//判断蛇是否吃到奖励性食物,每吃到5个食物出现一个奖励性食物,且奖励性食物只出现8次
	{
		if (count0 < 8 && count0_1 >= 4)
		{
			count0++;
			score += 15;
			creatpoint();
			count0_1 -= 4;
		}
	}
	if (head->x == fast.x && head->y == fast.y)//判断蛇是否吃到加速食物,每吃到5个食物出现一个加速食物,且加速食物只出现8次
	{
		if (count1 < 8 && count1_1 >= 4)
		{
			count1++;
			score += 5;
			creatfast();
			count1_1 -= 4;
			speed -= 5;
		}
	}
	if (head->x == slow.x && head->y == slow.y)//判断蛇是否吃到减速食物,每吃到5个食物出现一个减速食物,且减速食物只出现8次
	{
		if (count2 < 8 && count2_1 >= 4)
		{
			count2++;
			score += 5;
			creatslow();
			count2_1 -= 4;
			speed += 5;
		}
	}
	if (head->x == food.x && head->y == food.y)
	{
		i = rand() % 10;
		score += 5;
		creatfood();
		count0_1++;
		count1_1++;
		count2_1++;
	}
	if (score >= addnumber)//如果分数达到伸长所需分数,则将蛇伸长
	{
		addnumber += 15;
		add->next = head->next;
		head->next = add;
	}
}

2.cpp:

#include<stdio.h>
#include<string.h>
#include"1.h"
#include"2.h"
#include"3.h"
#include"ceshi.h"
//设置地图bgm
void mapbgm()
{
	if (map == 1)
	{
		mciSendString(_T("open music\\map1.mp3 alias map1bgm"), NULL, 0, NULL);//打开地图一bgm
		mciSendString(_T("play map1bgm repeat"), NULL, 0, NULL);					//播放地图一bgm
	}
	else if (map == 2)
	{
		mciSendString(_T("open music\\map2.mp3 alias map2bgm"), NULL, 0, NULL);//打开地图二bgm
		mciSendString(_T("play map2bgm repeat"), NULL, 0, NULL);					//播放地图二bgm
	}
	else if (map == 3)
	{
		mciSendString(_T("open music\\map3.mp3 alias map3bgm"), NULL, 0, NULL);//打开地图三bgm
		mciSendString(_T("play map3bgm repeat"), NULL, 0, NULL);					//播放地图三bgm
	}
	else if (map == 4)
	{
		mciSendString(_T("open music\\map4.mp3 alias map4bgm"), NULL, 0, NULL);//打开地图四bgm
		mciSendString(_T("play map4bgm repeat"), NULL, 0, NULL);					//播放地图四bgm
	}
	else if (map == 5)
	{
		mciSendString(_T("open music\\map5.mp3 alias map5bgm"), NULL, 0, NULL);//打开地图五bgm
		mciSendString(_T("play map5bgm repeat"), NULL, 0, NULL);					//播放地图五bgm
	}
}
//存储图片
void loadpic()
{
	
	loadimage(&bac[1], _T("pic\\map1.png"), graphlength, graphwidth);
	loadimage(&bac[2], _T("pic\\map2.jpeg"), graphlength, graphwidth);
	loadimage(&bac[3], _T("pic\\map3.jpg"), graphlength, graphwidth);
	loadimage(&bac[4], _T("pic\\map4.jpg"), graphlength, graphwidth);
	loadimage(&bac[5], _T("pic\\map5.jpg"), graphlength, graphwidth);
	loadimage(&bac[6], _T("pic\\chosedifficult.png"), graphlength, graphwidth);
	loadimage(&bac[7], _T("pic\\welcome.png"), graphlength, graphwidth);
	loadimage(&bac[8], _T("pic\\instruction.png"), graphlength, graphwidth);
	loadimage(&bac[9], _T("pic\\end.png"), graphlength, graphwidth);
	loadimage(&bac[10], _T("pic\\chosemap.png"), graphlength, graphwidth);
	loadimage(&bodysrc[0], _T("pic\\0pic.png"), picsize, picsize);
	loadimage(&bodymask[0], _T("pic\\0pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[1], _T("pic\\1pic.png"), picsize, picsize);
	loadimage(&bodymask[1], _T("pic\\1pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[2], _T("pic\\2pic.png"), picsize, picsize);
	loadimage(&bodymask[2], _T("pic\\2pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[3], _T("pic\\3pic.png"), picsize, picsize);
	loadimage(&bodymask[3], _T("pic\\3pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[4], _T("pic\\4pic.png"), picsize, picsize);
	loadimage(&bodymask[4], _T("pic\\4pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[5], _T("pic\\5pic.png"), picsize, picsize);
	loadimage(&bodymask[5], _T("pic\\5pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[6], _T("pic\\6pic.png"), picsize, picsize);
	loadimage(&bodymask[6], _T("pic\\6pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[7], _T("pic\\7pic.png"), picsize, picsize);
	loadimage(&bodymask[7], _T("pic\\7pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[8], _T("pic\\8pic.png"), picsize, picsize);
	loadimage(&bodymask[8], _T("pic\\8pic_1.png"), picsize, picsize);
	loadimage(&bodysrc[9], _T("pic\\9pic.png"), picsize, picsize);
	loadimage(&bodymask[9], _T("pic\\9pic_1.png"), picsize, picsize);
	loadimage(&foodsrc, _T("pic\\jidan.png"), picsize, picsize);
	loadimage(&foodmask, _T("pic\\jidan_1.png"), picsize, picsize);
	loadimage(&pointsrc, _T("pic\\hanbao.png"), picsize, picsize);
	loadimage(&pointmask, _T("pic\\hanbao_1.png"), picsize, picsize);
	loadimage(&fastsrc, _T("pic\\fast.png"), picsize, picsize);
	loadimage(&fastmask, _T("pic\\fast_1.png"), picsize, picsize);
	loadimage(&lowsrc, _T("pic\\pow.png"), picsize, picsize);
	loadimage(&lowmask, _T("pic\\pow_1.png"), picsize, picsize);
}
//选择地图
void chosemap()
{
	cleardevice();
	putimage(0, 0, &bac[10]);
	mciSendString(_T("open music\\chosemap.mp3 alias chosemapbgm"), NULL, 0, NULL);//打开地图选择音乐
	mciSendString(_T("play chosemapbgm repeat"), NULL, 0, NULL);					//播放地图选择音乐
	outtextxy(graphlength / 2, 30, _T("选择地图"));
	outtextxy(graphlength / 2, 70, _T("1.地图1"));
	outtextxy(graphlength / 2, 110, _T("2.地图2"));
	outtextxy(graphlength / 2, 150, _T("3.地图3"));
	outtextxy(graphlength / 2, 190, _T("4.地图4"));
	outtextxy(graphlength / 2, 240, _T("5.地图5"));
	scanf("%d", &n);
	switch (n)
	{
	case 1:
		map = 1;
		break;
	case 2:
		map = 2;
		break;
	case 3:
		map = 3;
		break;
	case 4:
		map = 4;
		break;
	case 5:
		map = 5;
		break;
	default:
		cleardevice();
		while (getchar() != '\n');
		outtextxy(graphlength / 2, 100, _T("请输入有效的数字"));
		system("cls");
		chosemap();
		break;
	}
	mciSendString(_T("close chosemapbgm"), NULL, 0, NULL);//关闭地图选择界面bgm
}
//地图框架创建
void creatframe()
{
	setlinecolor(LIGHTBLUE);
	setfillcolor(LIGHTCYAN);
	fillrectangle(0, 0, horizonx, width);
	fillrectangle(0, verticaly, horizonx, graphwidth);
	fillrectangle(0, width, width, verticaly);
	fillrectangle(horizonx - width, width, horizonx, verticaly);
}

3.cpp:

#undef UNICODE
#undef _UNICODE
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include"1.h"
#include"2.h"
#include"3.h"
#include"ceshi.h"
//从键盘接收按键
int keyboard()
{
	while (1)
	{
		if (endgame())//若游戏结束则返回0
		{
			return 0;
		}
		move_snake();
		eatfood();
		if (_kbhit())//_kbhit判断是否按下按键,若按下则读取按下的字符
		{
			key = _getch();
		}
		if ((key == 'w' && key1 == 's') || (key == 'a' && key1 == 'd') || (key == 's' && key1 == 'w') || (key == 'd' && key1 == 'a'))//避免连续两次按相反按键时咬到自己
		{
			key = key1;
		}
		if (key != 's' && key != 'd' && key != 'w' && key != 'a')//防止按其他按键时暂停
		{
			if (key == 'q')
			{
				system("pause");
				exit(0);
			}
			key = key1;
		}
		else if ((key == 'w' && key1 != 's') || (key == 'a' && key1 != 'd') || (key == 's' && key1 != 'w') || (key == 'd' && key1 != 'a'))
		{
			key1 = key;
		}
	}
	return 1;
}
//蛇的移动
void move_snake()
{
	snake* p;
	p = head;
	int a = head->x, b = head->y;//a,b代替头部坐标
	switch (key)//通过接受按键改变蛇的方向
	{
	case up:
		head->y -= 20;
		snakebody(a, b);
		break;
	case left:
		head->x -= 20;
		snakebody(a, b);
		break;
	case down:
		head->y += 20;
		snakebody(a, b);
		break;
	case right:
		head->x += 20;
		snakebody(a, b);
		break;
	case quit:
		system("pause");
		exit(0);
	}
	stamp();
	Sleep(speed);//Sleep函数设置蛇的移动速度
}
//若蛇改变则移动方向的坐标改变
void snakebody(int a, int b)
{
	snake* p = head->next;
	int s1_x, s1_y;
	int s2_x, s2_y;
	s1_x = p->x;
	s1_y = p->y;
	while (1)//将蛇的前一段身体坐标给后一段
	{
		if (p->next->next == NULL)
		{
			break;
		}
		s2_x = p->next->x;
		s2_y = p->next->y;
		p->next->x = s1_x;
		p->next->y = s1_y;
		s1_x = s2_x;
		s1_y = s2_y;
		p = p->next;
	}
	p = head->next;
	p->x = a;
	p->y = b;
}
//游戏结束的条件,返回1表示游戏结束
int endgame()
{
	if (head->x < width || head->y < width || head->x>(horizonx - width - picsize) || head->y>(graphwidth - width - picsize))
	{
		End();
		return 1;
	}
	snake* p = head->next;
	while (1)//判断是否咬到自己
	{
		if (p->next == NULL)
		{
			break;
		}
		if (head->x == p->x && head->y == p->y)
		{
			End();
			return 1;
		}
		p = p->next;
	}
	return 0;
}
//游戏结束界面
void End()
{
	clearcliprgn();
	if (map == 1)
	{
		mciSendString(_T("close map1bgm"), NULL, 0, NULL);//关闭地图一bgm
	}
	else if (map == 2)
	{
		mciSendString(_T("close map2bgm"), NULL, 0, NULL);//关闭地图二bgm
	}
	else if (map == 3)
	{
		mciSendString(_T("close map3bgm"), NULL, 0, NULL);//关闭地图三bgm
	}
	else if (map == 4)
	{
		mciSendString(_T("close map4bgm"), NULL, 0, NULL);//关闭地图四bgm
	}
	else if (map == 5)
	{
		mciSendString(_T("close map5bgm"), NULL, 0, NULL);//关闭地图五bgm
	}
	putimage(0, 0, &bac[9]);
	archive();
	outtextxy(320, 30, _T("游戏结束"));
	char score1[100] = { 0 };
	sprintf(score1, "%d", score);
	outtextxy(320, 70, _T("你的分数是:"));
	outtextxy(320, 110, score1);
	system("pause");
	Free();
}
//蛇身创建
void creatsnake()
{
	head = (snake*)malloc(sizeof(snake));//初始蛇的坐标,蛇的长度为3
	if (head == NULL)
	{
		outtextxy(550, 30, _T("内存分配不成功"));
		exit(0);
	}
	head->x = 20;
	head->y = 20;
	tail = (snake*)malloc(sizeof(snake));
	if (tail == NULL)
	{
		outtextxy(550, 30, _T("内存分配不成功"));
		exit(0);
	}
	snake_1 = (snake*)malloc(sizeof(snake));
	snake_2 = (snake*)malloc(sizeof(snake));
	if (snake_1 == NULL || snake_2 == NULL)
	{
		outtextxy(550, 30, _T("内存分配不成功"));
		exit(0);
	}
	snake_1->x = 20;
	snake_1->y = 40;
	snake_2->x = 20;
	snake_2->y = 60;
	head->next = snake_1;
	snake_1->next = snake_2;
	snake_2->next = tail;
	tail->next = NULL;
}
ava
滑稽

2020-1-2

0

如果决定用:

#undef UNICODE
#undef _UNICODE

就要确保在整个项目内都生效。

而你目前的代码,只在部分文件内使用了 MBCS 编码,其他文件用的还是 Unicode 编码,这是根本原因。

ava
慢羊羊

2020-1-2

技术讨论社区