[Small Game]Gluttonous Snake-V2.0

        今天上午又改了V2.0版本。

        加了好多功能:

        1、场景选择:有障碍的场景和无障碍的场景。

        2、随机道具:增加了随机道具。

        3、积分等级:增加了积分制度和等级系统。

        4、速度调节:可以调节速度。

        5、帮助界面:增设了帮助界面。

        6、功能键:增设了暂停、退出、选择场景等功能键。

        7、改正了V1.0版本中的一大堆bug。。。

        直接上码:

#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
/*=========================================================================================================*/
#define LEN 30
#define WID 24
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
#define WAIT_TIME 30000
/*=========================================================================================================*/
int snake_direction = LEFT;
int snake_length = 3;
int Score = 0;
int Lv = 1;
int Scene = 1;
int num = 0;
int Speed = 100;
int Now_time;
int flag1 = 1;

bool step_c = false;
bool alive = true;
bool eatup = false;
bool ispause = false;
bool ismagic = false;
/*=========================================================================================================*/
//光标相关
	void Set_Cursor_To(int x, int y);
//蛇相关
	void direction_snake();
	void flag_snake();
	void draw_snake();
	void eraser_snake();
//食物相关
	void product_food();
	void product_barriers(int i);
	void eraser_barriers();
	void draw_barriers();
	void draw_magic();
//环境相关
	void draw_boundary();
	void draw_info();
//控制相关
	void Game_Over();
	void initialize();
	void Lv_system();
	void Help();
	void Chose_Scene();
/*=========================================================================================================*/
//光标相关 
	HANDLE handle_console = GetStdHandle(STD_OUTPUT_HANDLE);
	//设置光标位置
	void Set_Cursor_To(int x, int y)
	{
		COORD position = { x, y };
		SetConsoleCursorPosition(handle_console, position);
	}
/*=========================================================================================================*/
//蛇相关
	int snake[LEN][WID] = { 0 };											//全地图标识数组
	//检测移动方向
	void direction_snake()
	{
		if (kbhit())
		{
			int ch = getch();
			if(ch == -32||ch == 0)
			{
				ch = getch();
			}
			switch (ch)
			{
				case 'p':	ispause =  true;break;
				case 'q':	exit(0);break;
				case 'h':	Help();break;
				case 'c':	Chose_Scene();step_c = true;break;
				case ',':	Speed-=10;break;
				case '.':	Speed+=10;break;
				case UP:	snake_direction = UP;	break; 
				case DOWN:	snake_direction = DOWN;	break;
				case LEFT:	snake_direction = LEFT;	break;
				case RIGHT:	snake_direction = RIGHT;break;
				default: break;
			}
			ch = 0;
		}
		if(ispause == false)
		{
			eraser_snake();
			flag_snake();
			draw_snake();
		}
	}
	//标记蛇
	void flag_snake()
	{
		int Snake_ix, Snake_iy;
		
		for (int x = 0; x < LEN; x++)
		for (int y = 0; y < WID; y++)
		{
			if (snake[x][y] == 1)//记录蛇头Snake_ix/iy
			{
				switch (snake_direction)
				{
					case UP:Snake_ix = x; Snake_iy = y - 1; break;
					case DOWN:Snake_ix = x; Snake_iy = y + 1; break;
					case LEFT:Snake_ix = x-1; Snake_iy = y; break;
					case RIGHT:Snake_ix = x+1; Snake_iy = y; break;
					default: break;

				}
				if ((snake[Snake_ix][Snake_iy]  == -3)||(snake[Snake_ix][Snake_iy]  == -2))//检查移动后头坐标是否满足规则
				{
					alive = false;
				}
				if (snake[Snake_ix][Snake_iy] > 0)//检查移动后头位置是否满足规则
				{
					alive = false;
				}
				if (snake[Snake_ix][Snake_iy] == -1)
				{
					snake_length++;
					Score += 10 * (1 + 0.5*Lv);
					Lv_system();
					eatup = true;
				}
				if (snake[Snake_ix][Snake_iy] == -10)
				{
					Lv++;
					Set_Cursor_To(25,12);
					printf("Lv Up! Lv:%d",Lv);
					Sleep(1000);
					system("cls");
					draw_boundary();
					draw_barriers();
					draw_magic();
					ismagic = false;
				}
				if (snake[Snake_ix][Snake_iy] == -11)
				{
					Score += 20;
					Lv_system();
					ismagic = false;
				}
				if (snake[Snake_ix][Snake_iy] == -12)
				{
					Score += 40;
					Lv_system();
					ismagic = false;
				}
				if (snake[Snake_ix][Snake_iy] == -13)
				{
					Score += 80;
					Lv_system();
					ismagic = false;
				}
				if (snake[Snake_ix][Snake_iy] == -14)
				{
					Score += 100;
					Lv_system();
					ismagic = false;
				}
			}
			if (snake[x][y] == snake_length)//必要时清除蛇尾
			{
				snake[x][y] = 0;
			}
			if (snake[x][y] > 0)//对蛇身进行编号
			{
				snake[x][y] += 1;
			}
		}
		snake[Snake_ix][Snake_iy] = 1;
	}
	//画蛇
	void draw_snake()
	{
		for (int i = 0; i < LEN;i++)
		for (int j = 0; j < WID;j++)
		{
			if (snake[i][j]>0 &&snake[i][j]<800)
			{
				Set_Cursor_To(2 * i, j);
				printf("■");
			}
			if(snake[i][j] == -1)
			{
				Set_Cursor_To(2 * i, j);
				printf("★");
			}
		}
	}
	//除尾
	void eraser_snake()
	{
		for (int i = 0; i < LEN;i++)
		for (int j = 0; j < WID; j++)
		{
			if (snake[i][j] == snake_length)
			{
				Set_Cursor_To(2 * i, j);
				printf(" ");
			}
		}
	}
/*=========================================================================================================*/
//食物相关
	//生产食物
	void product_food()
	{
		int food_ix, food_iy;

		food_ix = rand() % LEN;
		food_iy = rand() % WID;
		while (snake[food_ix][food_iy] != 0)
		{
			food_ix = rand() % LEN;
			food_iy = rand() % WID;
		}
		snake[food_ix][food_iy] = -1;
		Set_Cursor_To(2 * food_ix, food_iy);
		printf("★");
		
		eatup = false;
	}
	//生成障碍
	void product_barriers(int i)
	{
		int barrier_ix,barrier_iy;
		
		for(;i>0;i--)
		{
			do
			{
				barrier_ix = rand()%LEN;
				barrier_iy = rand()%WID;
			}while(snake[barrier_ix][barrier_iy]!=0);
			snake[barrier_ix][barrier_iy] = 10000;
			Set_Cursor_To(2*barrier_ix,barrier_iy);
			printf("χ");
		}
	} 
	//清除障碍
	void eraser_barriers()
	{
		for (int i = 0; i < LEN;i++)
		for (int j = 0; j < WID; j++)
		{
			if (snake[i][j] == 10000)
			{
				Set_Cursor_To(2 * i, j);
				printf(" ");
			}
		}
	} 
	//画障碍
	void draw_barriers()
	{
		for (int i = 0; i < LEN;i++)
		for (int j = 0; j < WID; j++)
		{
			if (snake[i][j] >= 10000)
			{
				Set_Cursor_To(2 * i, j);
				printf("χ");
			}
		}
	} 
	//生产道具
	void product_magic()
	{
		int magic_ix,magic_iy;
		
		if(Score*11%6 == 3)
		{
			do
			{
				magic_ix = rand()%LEN;
				magic_iy = rand()%WID;
			}while(snake[magic_ix][magic_iy]!=0);
			snake[magic_ix][magic_iy] = -rand()%4 - 10;
			ismagic = true;
		}
	} 
	//画道具
	void draw_magic()
	{
		for (int i = 0; i < LEN;i++)
		for (int j = 0; j < WID; j++)
		{
			if (snake[i][j] == -10)
			{
				Set_Cursor_To(2 * i, j);
				printf("№"); 
			}
			if (snake[i][j] == -11)
			{
				Set_Cursor_To(2 * i, j);
				printf("Ⅰ"); 
			}
			if (snake[i][j] == -12)
			{
				Set_Cursor_To(2 * i, j);
				printf("Ⅱ"); 
			}
			if (snake[i][j] == -13)
			{
				Set_Cursor_To(2 * i, j);
				printf("Ⅲ"); 
			}
			if (snake[i][j] == -14)
			{
				Set_Cursor_To(2 * i, j);
				printf("Ⅳ"); 
			}
		}
	} 
/*=========================================================================================================*/
//环境相关
	//边界
	void draw_boundary()
	{
		for (int i = 0; i < LEN; i++)//上下边界
		{
			Set_Cursor_To(2 * i, 0);
			printf("--");
			Set_Cursor_To(2 * i, WID - 1);
			printf("--");
			snake[i][0] = -2;
			snake[i][WID - 1] = -2;
		}
		for (int i = 0; i < WID; i++)
		{
			Set_Cursor_To(0, i);
			printf("|");
			Set_Cursor_To(2*LEN - 1, i);
			printf("|");
			snake[0][i] = -3;
			snake[LEN-1][i] = -3;
		}
	}
	//信息
	void draw_info()
	{
		Set_Cursor_To(63,1);
		printf("'H':Help.");
		Set_Cursor_To(63,3);
		printf("'P':Pause.");
		Set_Cursor_To(63,5);
		printf("'Q':Quit.");
		Set_Cursor_To(63,7);
		printf("'C':Chose Scenes.");
		Set_Cursor_To(63,9);
		printf("',':Speed Up.");
		Set_Cursor_To(63,11);
		printf("'.':Speed Down.");
		Set_Cursor_To(63,19);
		printf("Speed:\t0.%03ds",Speed); 
		Set_Cursor_To(63,20);
		printf("Score:\t%d",Score); 
		Set_Cursor_To(63,21);
		printf("Lv:\t%d",Lv);
		Set_Cursor_To(63,22);
		printf("Length:\t%d",snake_length);
		Set_Cursor_To(63,23);
		printf("Barriers:%d",num);
	} 
/*=========================================================================================================*/
//控制相关
	//判定游戏结束
	void Game_Over()
	{
		Set_Cursor_To(25, 12);
		printf("~~傻屌,你死了~~");
		Set_Cursor_To(21, 13);
		printf("Press any key to replay.");
		system("pause > nul");
	}
	//初始化
	void initialize()
	{
		Score = 0;
		Lv = 1;
		snake_length = 3;
		for (int x = 0; x < LEN; x++)
		for (int y = 0; y < WID; y++)
		{
			snake[x][y] = 0;
		}		
		draw_boundary();
		draw_info();
		for (int i = 0; i < snake_length; i++)                  //初始化蛇
		{
			snake[i + 12][12] = i + 1;
		}
		draw_snake();
		product_food();
		alive = true;
		ispause = false;
		snake_direction = LEFT;
	}
	//等级系统
	void Lv_system()
	{
		if(Score > (Lv+1)*(Lv)*20)
		{
			Lv++;
			Set_Cursor_To(25,12);
			printf("Lv Up! Lv:%d",Lv);
			Sleep(1000);
			system("cls");
			draw_boundary();
			draw_barriers();
			draw_magic();
		}
	} 
	//帮助界面
	void Help()
	{
		system("cls");
		Set_Cursor_To(10,2);
		printf("It's a game produced by Bit[CS2013]_Percy.");
		Set_Cursor_To(10,4);
		printf("Game's name: Gluttonous Snake.");
		Set_Cursor_To(10,6);
		printf("Game's version: V2.0.");
		Set_Cursor_To(10,8);
		printf("Game's operation: you can press'Up'、'Down'、'Left'、\n\t\t'Right' to control the snake to eat the star.");
		Set_Cursor_To(10,11);
		printf("When the snake eatup the star,the score will increase.\n\t\tAnd your level will increase,too.");
		Set_Cursor_To(10,14);
		printf("Try to eat more STAR ~ ");
		Set_Cursor_To(10,15);
		printf("Oh,I nearly foget to say that you will be much longer\n\t\t when you eat the star.");
		Set_Cursor_To(10,18);
		printf("■:The body of the snake.");
		Set_Cursor_To(25,18);
		printf("№:Lv UP.");
		Set_Cursor_To(25,18);
		printf("χ:The barriers.");
		Set_Cursor_To(10,20);
		printf("Ⅰ:20 scores.");
		Set_Cursor_To(25,20);
		printf("Ⅱ:40 scores.");
		Set_Cursor_To(40,20);
		printf("Ⅲ:80 scores.");
		Set_Cursor_To(55,20);
		printf("Ⅳ:100 scores.");
		Set_Cursor_To(10,22);
		printf("★:The star which can increase your length and scores.");
		
		system("pause > nul");
		system("cls");
		draw_boundary();
		draw_barriers();
		draw_magic();
	} 
	//场景选择
	void Chose_Scene()
	{
		system("cls");
		Set_Cursor_To(10,4);
		printf("Please chose a scene you like.");
		Set_Cursor_To(10,6);
		printf("1、No barriers.");
		Set_Cursor_To(10,8);
		printf("2、Barriers.");
		
		switch(getch())
		{
			case '1': Scene = 1;break;
			case '2': Scene = 2;break;
			default : break;
		}
		if(Scene == 2)
		{
			Set_Cursor_To(10,10);
			printf("Please input the number of barriers:");
			scanf("%d",&num);
		}
		system("cls");
		draw_boundary();
	} 
/*=========================================================================================================*/
int main()
{
	system("title Bit[CS2013]_Percy_贪吃蛇V2.0");
	system("mode con:cols=100 lines= 30");
	Chose_Scene();
	srand((unsigned)time(NULL));
	Now_time = clock();
	while(1)
	{
		if(Scene == 1)
			{
				flag1 = 0;
				while (1)
				{
					system("cls");
					initialize();
					while (1)
					{
						if (alive == false)
						{
							Game_Over();
							break;
						}
						else
						{
							if (eatup == true)
							{
								product_food();
							}
							if(ispause == true)
							{	
								system("pause > nul");
								ispause = false;
							}
							if(ismagic == false)
							{
								product_magic();
								draw_magic();
								ismagic == true;
							}
							direction_snake();
							if(Scene != 1)
							{
								break;
							}
							draw_info();
							Sleep(Speed);
						}
					}
					if(Scene != 1)
							{
								break;
							}
				}
		}
		else
		{
			for(int times = 0;;times++)
				{
					system("cls");
					initialize();
					if(times != 0 || flag1 == 1)
						product_barriers(num);
					while (1)
					{
						if (alive == false)
						{
							Game_Over();
							break;
						}
						else
						{
							if (eatup == true)
							{
								product_food();
							}
							if(ispause == true)
							{	
								system("pause > nul");
								ispause = false;
							}
							if(ismagic == false)
							{
								product_magic();
								draw_magic();
								ismagic == true;
							}
							direction_snake();
							if(Scene != 2)
							{
								break;
							}
							else
							{
								if(step_c == true)
								{
									eraser_barriers();
									product_barriers(num);
									step_c = false;
								}
							}
							draw_info();
							Sleep(Speed);
						}
					}
					if(Scene != 2)
					{
						break;
					}
				}
		}
	}
	return 0;
}
/*=========================================================================================================*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值