大一制作的贪吃蛇 VS-2022创作 1.0 #使用C语言制作

1.首先看下制作效果:

1.

2.

3 .

4 .

2.接下来展示代码:

#include"windows.h"
#include"stdlib.h"
#include<conio.h>
#include"time.h"
int fenshu = 1;
int k = 0;
int ksyx = 0;

void color(short x)//颜色函数
{
	if (x >= 0 && x <= 15)
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
}
#include"stdio.h"
char bian[40][90] = {};
enum DIR//上下左右
{
	UP,
	DOWN,
	LEFT,
	RIGHT,
};
void kuanjia()//建设框架
{

	int i, j;
	for (i = 1; i < 39; i++)
		for (j = 0; j < 89; j++)

		{
			bian[i][j] = '@';
		}
	for (i = 2; i < 38; i++)
		for (j = 1; j < 88; j++)
		{
			bian[i][j] = ' ';
		}

}
void shedy()//打印框架和蛇的位置
{
	if (ksyx == 1)
	{
		printf("\t当前为简单模式:可穿墙");
		printf("\t\t\t\t\t当前分数:%d", fenshu);
	}
	else if (ksyx == 2)
	{
		printf("\t当前为困难模式:不可穿墙");
		printf("\t\t\t\t\t当前分数:%d", fenshu);
	}
	int i, j;
	for (i = 0; i < 39; i++)
	{
		for (j = 0; j < 89; j++)
		{
			color(6);
			printf("%c", bian[i][j]);
		}
		printf("\n");
	}
}
void shecs()//蛇的初始位置
{
	bian[3][3] = '=';
}
struct snake
{
	int dir;
	int heng[1000];
	int zong[1000];
}snake;
void snak()//判断按键输入
{
	if (_kbhit())
	{
		switch (_getch())
		{
		case 'w':
		case 'W':
		case 72://数字是wasd的键值
			if (snake.dir != DOWN)
				snake.dir = UP;
			break;
		case 's':
		case 'S':
		case 80:
			if (snake.dir != UP)
				snake.dir = DOWN;
			break;
		case 'a':
		case 'A':
		case 75:
			if (snake.dir != RIGHT)
				snake.dir = LEFT;
			break;
		case 'd':
		case 'D':
		case 77:
			if (snake.dir != LEFT)
				snake.dir = RIGHT;
			break;
		}
	}

}
void sna()//判断方向
{
	switch (snake.dir)//方向;
	{
	case UP:
		snake.heng[1]--;
		bian[snake.heng[1]][snake.zong[1]] = '=';
		break;
	case DOWN:
		snake.heng[1]++;
		bian[snake.heng[1]][snake.zong[1]] = '=';
		break;
	case LEFT:
		snake.zong[1]--;
		bian[snake.heng[1]][snake.zong[1]] = '=';
		break;
	case RIGHT:
		snake.zong[1]++;
		bian[snake.heng[1]][snake.zong[1]] = '=';
		break;
	}
}
int snakepd(int zhenshu)//判断蛇头是否和蛇身重叠
{
	for (k = 2; k <= fenshu; k++)
	{
		if (snake.heng[1] == snake.heng[k] && snake.zong[1] == snake.zong[k])
		{
			zhenshu = 10000;
		}
	}
	return zhenshu;
}
struct snakeswwz//食物结构体
{
	int heng1;
	int zong1;
}snakeswwz;
void snakeswcs()//食物的初始位置
{
	srand(time(NULL));
	snakeswwz.heng1 = rand() % 27 + 1;
	snakeswwz.zong1 = rand() % 87 + 1;
	bian[snakeswwz.heng1][snakeswwz.zong1] = '$';
}
void snakesw()//食物的刷新位置
{
	srand(time(NULL));
	if (snake.heng[1] == snakeswwz.heng1 && snake.zong[1] == snakeswwz.zong1)
	{
		snakeswwz.heng1 = rand() % 23 +3;
		snakeswwz.zong1 = rand() % 83 +3;
		bian[snakeswwz.heng1][snakeswwz.zong1] = '$';
		fenshu++;
	}
	else if (snake.heng[1] != snakeswwz.heng1 || snake.zong[1] != snakeswwz.zong1)
	{
		bian[snakeswwz.heng1][snakeswwz.zong1] = '$';
	}

}
void snakest()//蛇的身体
{
	if (fenshu > 1)
	{
		for (k = 1; k < fenshu; k++)
		{
			bian[snake.heng[k]][snake.zong[k]] = '+';
		}
		for (k = fenshu; k > 1; k--)
		{

			snake.heng[k] = snake.heng[k - 1];
			snake.zong[k] = snake.zong[k - 1];
		}
	}
}
void snakehw()//简单模式可穿墙
{
	if (snake.heng[1] == 38)
	{
		snake.heng[1] = 2;
	}
	else if (snake.heng[1] == 2)
	{
		snake.heng[1] = 37;
	}
	else if (snake.zong[1] == 1)
	{
		snake.zong[1] = 87;
	}
	else if (snake.zong[1] == 88)
	{
		snake.zong[1] = 1;
	}
}
int snakepd1(int zhenshu)//困难模式不可穿墙
{
	for (k = 2; k <= fenshu; k++)
	{
		if (snake.heng[1] == snake.heng[k] && snake.zong[1] == snake.zong[k])
		{
			zhenshu = 10000;
		}
	}
	if (snake.heng[1] == 1 || snake.heng[1] == 39 || snake.zong[1] == 0 || snake.zong[1] == 89)
		zhenshu = 10000;
	return zhenshu;
}
void welcome()//打印菜单
{
	color(6);
	printf("\t\t\t\t\t=======欢迎来到贪吃蛇=======\t\t\t\t\n\n");
	printf("\t\t\t\t\t=======请选择游戏模式=======\t\t\t\t\n\n");
	printf("\t\t\t\t\t=======   简单模式   =======\t\t\t\t\n");
	printf("\t\t\t\t\t=======   困难模式   =======\t\t\t\t\n\n");
	printf("\t\t\t\t\t简单模式可穿墙,困难模式不能\t\t\t\t\n");
	printf("\t\t\t\t\t简单模式输入1,困难模式输入2\t\t\t\t\n");
	printf("\t\t\t\t\t");
	scanf_s("%d", &ksyx);
	while (ksyx != 1 && ksyx != 2)
	{
		printf("输入错误,请重新输入Y或X:");
		scanf_s("%d", &ksyx);
	}
	system("cls");
}
int main()
{
	welcome();
	int zhenshu;
	char  kaishi;
	snake.heng[1] = 4;
	snake.zong[1] = 4;
	kuanjia();
	shecs();
	snakeswcs();
	shedy();
	color(2);
	snake.dir = RIGHT;
	getchar();
	printf("开始游戏按:  Y\n");
	printf("退出游戏按: X\n");
	scanf_s("%c", &kaishi);
	while (kaishi != 'Y' && kaishi != 'X')
	{
		printf("输入错误,请重新输入Y或X:");
		scanf_s("%c", &kaishi);
	}
	bian[3][3] = ' ';
	system("cls");
	if (ksyx == 1)简单模式,可穿墙
	{
		if (kaishi == 'Y')
		{
			for (zhenshu = 0; zhenshu < 10000; zhenshu++)
			{
				snakest();
				snak();
				sna();
				snakesw();
				shedy();
				snakehw();
				kuanjia();
				system("cls");
				setvbuf(stdout, NULL, _IOFBF, 4096); // 1:修改刷新模式为手动刷新
				//然后画你要画的东西
				fflush(stdout); // 2:清空并输出缓冲区的内容
				setvbuf(stdout, NULL, _IOLBF, 4096); // 3:刷新模式改回去
				if (snake.dir == RIGHT || snake.dir == LEFT)
					Sleep(5);
				else if (snake.dir == UP || snake.dir == DOWN)
					Sleep(40);
				zhenshu = snakepd(zhenshu);
			}
			color(4);
			printf("你死了!!");
		}
	}
	if (ksyx == 2)///困难模式,不可穿墙
	{
		if (kaishi == 'Y')
		{
			for (zhenshu = 0; zhenshu < 10000; zhenshu++)
			{
				snakest();
				snak();
				sna();
				snakesw();
				shedy();
				kuanjia();
				system("cls");
				setvbuf(stdout, NULL, _IOFBF, 4096); // 1:修改刷新模式为手动刷新
				//然后画你要画的东西
				fflush(stdout); // 2:清空并输出缓冲区的内容
				setvbuf(stdout, NULL, _IOLBF, 4096); // 3:刷新模式改回去
				if (snake.dir == RIGHT || snake.dir == LEFT)
					Sleep(5);
				else if (snake.dir == UP || snake.dir == DOWN)
					Sleep(40);
				zhenshu = snakepd1(zhenshu);
			}
			color(4);
			printf("你死了!!");
		}
	}
	else if (kaishi == 'X')
	{
		printf("你已经退出游戏");
	}
	return 0;
}

若有不好的地方,欢迎大家评论,我会及时参考和改正。:>

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值