重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编给大家分享一下C++如何实现贪吃蛇游戏,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
肥西网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
#include#include #include #include #include #include #include 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; }
看完了这篇文章,相信你对C++如何实现贪吃蛇游戏有了一定的了解,想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!