C语言编写双人贪吃蛇游戏

本文档介绍了如何在Visual Studio 2017环境下,利用C语言开发一款支持双人的贪吃蛇游戏。通过编程实现游戏逻辑,包括玩家控制、食物生成、碰撞检测等关键功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双人贪吃蛇游戏

运行环境 visual stdio 2017




/*
贪吃蛇游戏 //双人版本  玩家2使用 W 上    S下	A左   D右边
                       玩家1使用 箭头上   箭头下  箭头左   箭头右
*/
/*
作者:李金虎
*/
/*
时间:2018-04-06
*/
/*
QQ:1910084514
*/

#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
int a = 1;
int a2 = 1;
int snack_life=1;//1代表游戏继续  0代表游戏结束
int snack_life2 = 1;//1代表游戏继续  0代表游戏结束 玩家2
int count = 0;//得分
int count2 = 0;//得分  玩家2
int speed=0;//贪吃蛇的速度
int who_flag=0;//判断是谁吃了标志位  0为玩家1吃了  1为玩家2吃了
void gotoxy(int x, int y)//光标移动函数,光标想在哪里就在哪里
{
	COORD coord = { x , y };
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

struct food //食物结构体
{
	int x;
	int y;
	int life;
}Food;

struct snack //蛇结构体
{
	int x;
	int y;
	struct snack *next;
} *snack_body, *snack_body2;


void color(short x) //自定义函根据参数改变颜色   
{
	if (x >= 0 && x <= 15)//参数在0-15的范围颜色  
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);    //只有一个参数,改变字体颜色   
	else//默认的颜色白色  
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}

void product_food() //产生食物坐标函数
{
	remake:
	struct snack *p;//定义一个临时指针变量 指向snack_body
	struct snack *p2;//定义一个临时指针变量 指向snack_body
	p = snack_body;
	p2 = snack_body2;
	srand(time(NULL));
	Food.x = (rand() % 16 + 4)*2;
	Food.y = rand() % 17 + 2;
	Food.life = 1;
	while (p != NULL)  //防止食物生成在蛇所处的位置,如果生成在蛇身体的位置,则重新生成食物
	{
		if (Food.x == p->x&&p->y == Food.y)
			goto remake;//跳转回去,重新产生一个食物
		p = p->next;
	}
	//while (p2 != NULL)  //防止食物生成在蛇所处的位置,如果生成在蛇身体的位置,则重新生成食物
	//{
	//	if (Food.x == p2->x&&p2->y == Food.y)
	//		goto remake;//跳转回去,重新产生一个食物
	//	p2 = p2->next;
	//}
	gotoxy(Food.x, Food.y);
	printf("G");
}


void introduce()
{
	
	system("cls");
	gotoxy(10, 2);
	printf("欢迎来到贪吃蛇的世界 ,这次带来的是一个双人贪吃蛇游戏\n");
	gotoxy(10, 4);
	printf("我是李金虎,此代码的作者\n");
	gotoxy(10, 6);
	printf("完成时间: 2018-04-09 , 历时7小时\n");
	gotoxy(10, 8);
	printf("初次编写贪吃蛇,代码风格以及逻辑有很多的不足\n");
	gotoxy(10, 10);
	printf("如果有些代码不懂的小伙伴可以加我QQ1910084514私信我,乐意为您效劳\n");
	gotoxy(10, 12);
	printf("希望您游戏愉快\n");

	while (speed<=0||speed>=21)
	{
		gotoxy(10, 14);
		printf("请输入游戏的级别 最快的为20级,最慢为1级,请输入一个整数:");
		scanf_s("%d", &speed);
	}
	system("cls");
	gotoxy(10, 16);
	printf("按任意键盘,确认开始游戏");
	system("pause");
	system("cls");
	
}

void map()  //打印地图函数
{
	for (int i = 0; i < 20; i++)
	{
		gotoxy(i*2, 0);
		printf("〇");
		gotoxy(i * 2, 19);
		printf("〇");
		gotoxy(0, i);
		printf("〇");
		gotoxy(40, i);
		printf("〇");
	}
	gotoxy(50, 7);
	printf("玩家1得分:%d", count);
	gotoxy(50, 8);
	printf("玩家2得分:%d", count);
	gotoxy(50, 9);
	printf("游戏难度:%d 级",speed);
	gotoxy(50, 10);
	printf("-----贪吃蛇小游戏-----");
	gotoxy(50, 11);
	printf("--作者--李金虎");
}

void init_snack()//蛇初始化函数
{
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值