C++实现贪吃蛇游戏的详细步骤及实战演示

互联网 18-7-24
学习C++过程中做的一个小程序,比较简单,只实现了贪吃蛇小游戏最基本的功能。上传代码作为学习的记录,同时也为其他同学提供作为一个小小的参考。实现环境为:Microsoft visual C++6.0集成开发环境 。
#include<iostream> #include<cmath> #include<cstdlib> #include<cstdio> #include<ctime> #include<conio.h> #include<windows.h> using namespace std;  /*光标定位*/ HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord; void  locate(int x, int y) { 	coord.X = y; 	coord.Y = x; 	SetConsoleCursorPosition(hout,coord); };  /*光标隐藏*/ void hide() { 	CONSOLE_CURSOR_INFO cursor_info = {1,0}; //bVisible=0;隐藏光标 	SetConsoleCursorInfo(hout, &cursor_info);//获取光标状态 }  /*生成随机数*/ double random(double start, double end) { 	return start + (end - start)*rand()/(RAND_MAX+1.0);//生成一个数,大于等于start,小于end; }  /*定义地图的长和宽*/ int m, n;  /*定义蛇 的长度,坐标,方向,食物的位置*/ struct node { 	int x, y; }snake[1000];//蛇的坐标  int snake_length, dir;//蛇的长度,方向 node food; int direct[4][2] = { {-1,0}, {1,0}, {0,-1}, {0,1} };//食物的位置  /*输出围墙:一个矩形框*/ void print_wall() { 	//输出第一行 “----------” 	cout << " "; 	for (int i = 1; i <= n; i++) 	{ 		cout << "-"; 	} 	cout << endl; 	//输出第一列“|”,中间输入空格,最后一列输出“|” 	for (int j = 0; j <= m-1; j++) 	{ 		cout << "|"; 		for (int i = 1; i <= n; i++) 			cout << " "; 		cout << "|" << endl; 	} 	cout << " "; 	//输出最后一行“----------” 	for (int i = 1; i <= n; i++) 		cout << "-"; }  /*首次输出蛇,其中snake[0]代表头部*/ //蛇的外型:“@*****” void print_snake() { 	locate(snake[0].x,snake[0].y); 	cout << "@"; 	for (int i = 1; i < snake_length - 1; i++) 	{ 		locate(snake[i].x, snake[i].y); 		cout << "*"; 	} }  /*判断是否撞墙或者头部是否碰到身体的任意一个部位,碰到则游戏失败*/ bool is_correct() { 	if (snake[0].x == 0 || snake[0].y == 0 || snake[0].x == m + 1 || snake[0].y == n + 1) return false;//头部碰到边缘 	for (int i = 1; i <= snake_length - 1; i++) 		if (snake[0].x == snake[i].x  &&  snake[0].y == snake[i].y)return false;//头部碰到身体的任意一个部位	 	return  true; }  /*随机生成食物的位置*/ bool print_food() { 	srand((unsigned)time(0));//随机种子 	bool e; 	while (1) 	{ 		e = true; 		int i = (int)random(0,m)+1; 		int j = (int)random(0,n)+1; 		food.x = i; food.y = j;//食物的位置随机  		for (int k = 0; k <= snake_length - 1; k++) //食物不能出现在蛇的身体的任意位置处 		{ 			if (snake[k].x == food.x  &&  snake[k].y == food.y) 			{ 			   e= false; 			   break;  			} 		} 		if (e)break; 	}  	//在食物的位置处标记,食物符号为“$”; 	locate(food.x,food.y); 	cout << "$"; 	return true; }  /*蛇的前进*/ bool go_ahead() { 	node tmp; 	bool e = false; 	tmp = snake[snake_length-1];//蛇尾 	for (int i = snake_length - 1; i >= 1;i--) 	{ 		snake[i] = snake[i - 1];//后移一位 	} 	snake[0].x += direct[dir][0]; 	snake[0].y += direct[dir][1]; 	locate(snake[1].x, snake[1].y);//定位到头部的后一位 	cout << "*"; 	/*吃到食物*/ 	if (snake[0].x == food.x&&snake[0].y == food.y) 	{ 		snake_length++; 		e = true; 		snake[snake_length - 1] = tmp; 	} 	/*输出此时蛇状态*/ 	if (!e) 	{ 		locate(tmp.x, tmp.y); 		cout << " "; 	} 	else 		print_food(); 	locate(snake[0].x, snake[0].y); 	cout << "@"; 	/*** 如果自撞 ***/ 	if (!is_correct()) 	{ 		system("cls"); 		cout << "You lose!" << endl << "Length: " << snake_length << endl; 		return false; 	} 	return true; 	   }   int main() { 	//游戏提示: 	cout << "--------------------贪吃蛇---------------------" << endl; 	cout << "请先输入两个数,表示地图大小.要求长宽均不小于10." << endl; 	cout << "请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl; 	cout << "再选择难度.请在1-10中输入1个数,1最简单,10则最难" << endl; 	cout << "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl; 	cout << "-----------------------------------------------" << endl; 	cin >> m >> n; 	if (m < 10 || n < 10 || m>25 || n>40) 	{ 		cout << "ERROR" << endl; 		system("pause"); 		return 0; 	} 	//输入难度系数:1-10; 	int hard; 	cin >> hard; 	if (hard <= 0 || hard > 100) 	{ 		cout << "ERROR" << endl; 		system("pause"); 		return 0; 	} 	//数据初始化:蛇的位置,长度,方向 	snake_length = 5;//长度 	clock_t a, b; 	char ch; 	double hard_len; 	for (int i = 0; i <= 4; i++)//位置 	{ 		snake[i].x = 1; 		snake[i].y = 5 - i; 	} 	dir = 3;//方向 	//输出原始地图、食物和蛇 	system("cls"); 	hide(); 	print_wall(); 	print_food(); 	print_snake(); 	//在(0,m+2)出显示长度: 	locate(m + 2, 0); 	cout << "Now Length:"; 	//开始游戏 	while (1) 	{   /*难度随长度的增加而提高*/ 		hard_len = (double)snake_length / (double)(m*n); 		/*调节时间,单位是ms*/ 		a = clock(); 		while (1) 		{ 			b = clock(); 			if (b - a >= (int)(400 - 30 * hard)*(1 - sqrt(hard_len)))break; 		} 		//接收键盘输入的方向 //https://blog.csdn.net/wenweimin/article/details/105561 		if (_kbhit()) 		{ 			ch = _getch(); 			if (ch == -32) 			{ 				ch = _getch(); 				switch (ch) 				{ 				case 72:if (dir == 2 || dir == 3)dir = 0; break; 				case 80:if (dir == 2 || dir == 3)dir = 1; break; 				case 75:if (dir == 0 || dir == 1)dir = 2; break; 				case 77:if (dir == 0 || dir == 1)dir = 3; break; 				} 			} 		}  		//前进 		if (!go_ahead())break; 		//输出此时的长度 		locate(m + 2, 12); 		cout << snake_length; 	} 	system("pause"); 	return 0;  }	

相关推荐:

H5的canvas实现贪吃蛇小游戏

js贪吃蛇游戏实现思路和源码_javascript技巧

Java游戏项目:拼图游戏的开发视频教程

以上就是C++实现贪吃蛇游戏的详细步骤及实战演示的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:C/C++区别有哪些?很多人都不知道的比较方法

相关资讯