贪吃蛇基础·框架版(简单)开头有原码

本文详细介绍了使用C语言实现贪吃蛇游戏的过程,包括窗口设置、地图绘制、蛇结点和食物创建、键盘事件监听、游戏规则如撞墙和自我碰撞的检查,以及游戏界面的提示和结束页面的设计。代码中包含了头文件、全局变量、函数声明和主函数等关键部分,还探讨了游戏的背景、操作指南和游戏特色。作者提供了完整的源码,供读者参考和调试。

更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发,

最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要。

额,我有点晕了,今天先上框架版,晚上在进行优化,这个代码有点多,还跳来跳去,有F1和F2为实现,重新玩一次效果不佳,咬到自己那里的调用也有问题。

这是贪吃蛇的第一版,后期将会升级,希望可以弄懂每一步,而不是抄代码。

目录

原码,仅供侦错

首先的首先,这次我编译器是下面这个(需要安装包,请私信Q一下小喵),养成一个好习惯。

窗口设置

地图绘制

蛇结点创建

食物创建

键盘事件侦听

蛇的移动

​编辑

 屏幕提示

 结束页面

匹诺曹

结束页面实现及其子函数实现

开始页面

头文件

全局变量

函数声明

主函数

(水字数)贪吃蛇的游戏介绍

背景设定

操作指南

游戏特色

游戏评价


原码,仅供侦错

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>//要使用windows的api ,lrq 
//因为要用到随机数函数,所以要调用time.h文件
#include<time.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;
	int y;
	struct snake* next;
}snake;

snake *head;//指向蛇头的指针
snake *food;//创建的食物 
snake *q;//用来遍历蛇的结点的 
 
int status;
 
int add=10; //每个食物的得分 
int sumScore=0;//总得分 
int highScore=0;//最高分 

//三种结束状态变量
//1,撞墙    2,自己咬到自己了    3,主动退出 
int endGameStatus=0; 
////////////////////////////////////////////////////   
//函数声明
void createMap();
//坐标转换
void gotoXY(int a,int b); 
//颜色更换
int color(int x);
//创建蛇
void initSnake(); 
//创建食物
void createFood(); 
//侦听键盘事件
void keyboardControl(); 
//让蛇动起来
int snakeMove();
//撞墙停止
int cantCrossWall();
//自己咬到自己
int biteSelf();
//主页面上小提示
void screenTips();
//结束页面 
void endGame();
//匹诺曹绘制
void LostDraw();
void File_In(); 
void File_Out();
void choose();
void printsnake();
void welcometoGame();

/*
	字符拼成英文图案
*/
void printsnake()
{
	color(2);
	printf("                                                                                         \n");
	printf("                       __________       ___                                              \n");
	printf("                      /          \\     / \\ \\    |____      __\\__                     \n");
	printf("                     /  ________  \\   / ___ \\  _/ __     | |   /                       \n");
	printf("                     |  |      |__|     _/_   |_|  /    [|] |/                           \n");
	printf("                     |  |              | | |      /     _|_ \\__/                        \n");
	printf("                     \\  \\_______        / \\      |___/        ____                    \n");
	printf("                      \\         \\    ____ ____      ____   __ |  |  ___   ______       \n");
	printf("                       \\_______  \\   |  |/    \\    /    \\_/ / |  | /  /  /      \\   \n");
	printf("                               \\  \\  |    ___  \\  / ____   /  |  |/  /  /  ____  \\   \n");
	printf("                     __        |  |  |   /   \\  \\ | |  |  /   |     /  |  /____\\  |   \n");
	printf("                    \\  \\_______|  |  |  |    |  | | |__|  |   |     \\  |  ________/   \n");
	printf("                     \\            /  |  |    |  |  \\       \\  |  |\\  \\  \\  \\____  \n");
	printf("                      \\__________/   |__|    |__|   \\___/\\__\\ |__| \\__\\  \\______/ \n");

}
void welcometoGame()
{
	int n=0;
	int i=0;
	int j=0;
	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("|");
			}
		} 
	}
	gotoXY(36,22);
	color(10);
	printf("1.开始游戏");
	gotoXY(50,22);
	color(10);
	printf("2.游戏说明");
    gotoXY(36,24);
	color(10);
	printf("3.退出游戏");
    gotoXY(28,27);
    color(3);
    printf("请选择[1 2 3]:[ ]\b\b");//\b是退格使光标处于两个中括号之间
	color(14);
	scanf("%d",&n);
	switch(n)
	{
	case 1:
		system("cls");
		File_Out();
		sumScore=0;
		createMap();
		screenTips();
		initSnake();
		createFood();
		keyboardControl();
		break;
	case 2:
		//游戏说明界面 
		break;
	case 3:
		exit(0); 
		break;
	default:
		break;
		
	} 
			
}



void endGame()
{
	//清屏操作 
	system("cls");
	LostDraw();
	if(endGameStatus==1)
	{
		//TODO
		gotoXY(35,9);
		color(7);
		printf("对不起,你撞墙了!游戏结束"); 
	}else if(endGameStatus==2)
		{
			//TODO
			gotoXY(35,9);
			color(7);
			printf("对不起,你咬到自己了!游戏结束"); 
		}
	else if(endGameStatus==3)
			{
				//TODO
				gotoXY(35,9);
				color(7);
				printf("游戏结束!"); 
			} 
	gotoXY(43,12);
	printf("你的得分是:%d分",sumScore);
	//判断得分是否需要存储
	if(sumScore>=highScore)
	{
		color(10);
		gotoXY(33,16);
		printf("创纪录了,最高分被你刷新了!"); 
		//最高分存入文件当中 
		File_In();
	} else{
		gotoXY(33,16);
		printf("继续努力吧~你离最高分还差:%d",highScore-sumScore);
	} 
	//调用选择选项
	 choose(); 
	
}


void choose()
{
	int n=0;
	gotoXY(30,23);
	color(12);
	printf("重玩一局[1]");
	gotoXY(50,23);
	printf("溜了溜了[2]");
	gotoXY(43,25);
	printf("选择:");
	scanf("%d",&n);
	switch(n)
	{
		case 1:
			system("cls");
		    printsnake();
		    //开始界面
			 welcometoGame(); 
			break;
		case 2:
			exit(0);
			break;
		default:
			gotoXY(35,27);
			color(12);
			printf("你输入的有误,请重新输入");
			break; 
			
	} 
} 


//文件读写
void File_In()
{
	//定义文件指针 
	FILE *fp;
	//指针关联文件 
	fp=fopen("save.txt","w+");
	//通过文件指针向文件写入内容 
	fprintf(fp,"%d",sumScore);
	//关闭文件 
	fclose(fp);
}

void File_Out()
{
	FILE *pp;
	pp=fopen("save.txt","a+");
	fscanf(pp,"%d",&highScore);
	fclose(pp);
	
}


void LostDraw() {
	/*
		失败界面
	*/
	system("cls");
	int i;
    gotoXY(45, 1);
	color(6);
	printf(" |-----|   ");		//匹诺曹的帽子
	gotoXY(45, 2);
	color(6);
	printf(" |     |   ");
	gotoXY(43, 3);
	color(6);
	printf("-------------");

	gotoXY(44, 4);
	color(14);
	printf("(");

	gotoXY(47, 4);
	color(15);
	printf(" > <");				//眼睛

	gotoXY(54, 4);
	color(14);
	printf(")");

	gotoXY(17, 5);
	color(11);
	printf("+------------------------");	//上边框

	gotoXY(35, 5);
	color(14);
	printf("oOOo");

	gotoXY(39, 5);
	color(11);
	printf("----------");					//上边框

	gotoXY(48, 5);
	color(14);
	printf("| |");				//鼻子
	gotoXY(48, 6);
	color(14);
	printf("|_|");

	gotoXY(51, 5);
	color(11);
	printf("----------");					//上边框

	gotoXY(61, 5);
	color(14);
	printf("oOOo");

	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(60, 20);
	color(11);
	printf("----------------------+");						//下边框



}


void screenTips(){
	color(11);
	gotoXY(64,4);
	printf("☆最高记录是:%d☆",highScore);
	color(14);
	gotoXY(64,6);
	printf("当前得分:%d",sumScore);
	gotoXY(73,11);
	printf("小提示");
	
	gotoXY(60,13);
	color(6);
	printf("§--------------------§");
	
	gotoXY(60,26);
	color(6);
	printf("§--------------------§");
	
	gotoXY(64,14);
	color(3);
	printf("每个食物得分:%d分",add);
	
	gotoXY(64,16);
	printf("不能撞墙,不能咬到自己");

	gotoXY(64,18);
	printf("用上,下,左,右箭头分别控制方向");	
	
	gotoXY(64,20);
	printf("F1键加速,F2键减速");
	
	gotoXY(64,22);
	printf("空格键暂停游戏");
	
	gotoXY(64,24);
	printf("Esc键退出游戏");
	 
} 


int biteSelf()
{
	snake *self;//这里不涉及内存分配,它只是涉及只向的内容的变化
	self=head->next;
	while(
评论 169
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫佛佛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值