用C++写贪吃蛇代码

时间: 2023-09-24 12:06:34 浏览: 69
### 回答1: 好的,这是一份用 C 语言编写的简单贪吃蛇代码: ``` #include<stdio.h> #include<conio.h> #include<windows.h> #include<time.h> #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define WIDTH 20 #define HEIGHT 20 int x,y,fruitx,fruity,gameover,score; int tailx[100],taily[100]; int ntail; void setup() { gameover=0; x=WIDTH/2; y=HEIGHT/2; fruitx=rand()%WIDTH; fruity=rand()%HEIGHT; score=0; } void draw() { int i,j,k; system("cls"); for(i=0;i<WIDTH+2;i++) { printf("#"); } printf("\n"); for(i=0;i<HEIGHT;i++) { for(j=0;j<WIDTH;j++) { if(j==0) printf("#"); if(i==y&&j==x) printf("O"); else if(i==fruity&&j==fruitx) printf("F"); else { int print=0; for(k=0;k<ntail;k++) { if(tailx[k]==j&&taily[k]==i) { printf("o"); print=1; } } if(!print) printf(" "); } if(j==WIDTH-1) printf("#"); } printf("\n"); } for(i=0;i<WIDTH+2;i++) { printf("#"); } printf("\n"); printf("Score:%d\n",score); } void input() { if(kbhit()) { switch(getch()) { case UP: y--; break; case DOWN: y++; break; case LEFT: x--; break; case RIGHT: x++; break; case 'q': gameover=1; break; } } } void logic() { int i; for(i=0;i<ntail;i++) { if(tailx[i]==x&&taily[i]==y) gameover=1; } if(x>WIDTH||x<0||y>HEIGHT||y<0) gameover=1; if(x==fruitx&&y==fruity) { score+=10; fruitx=rand()%WID ### 回答2: 贪吃蛇是一款经典的游戏,以下是一个用C语言写的贪吃蛇代码示例: ```c #include <stdio.h> #include <conio.h> #include <windows.h> #define WIDTH 20 // 地图宽度 #define HEIGHT 20 // 地图高度 int dir; // 蛇的移动方向 int speed = 100; // 蛇移动的速度 int gameOver; // 游戏结束标志 int score; // 得分 int length; // 蛇的长度 int snakeX[100], snakeY[100]; // 蛇身的坐标 int fruitX, fruitY; // 食物的坐标 void Setup() { gameOver = 0; // 游戏未结束 dir = 4; // 初始方向向右 length = 1; // 初始长度为1 score = 0; // 初始得分为0 snakeX[0] = WIDTH / 2; // 初始蛇头坐标 snakeY[0] = HEIGHT / 2; fruitX = rand() % WIDTH; // 随机生成食物坐标 fruitY = rand() % HEIGHT; } void Draw() { system("cls"); // 清屏 for (int i = 0; i < WIDTH + 2; i++) printf("#"); // 打印上边界 printf("\n"); for (int i = 0; i < HEIGHT; i++) { for (int j = 0; j < WIDTH; j++) { if (j == 0) printf("#"); // 打印左边界 if (i == snakeY[0] && j == snakeX[0]) printf("0"); // 打印蛇头 else if (i == fruitY && j == fruitX) printf("*"); // 打印食物 else { int isBody = 0; // 是否为蛇身 for (int k = 1; k < length; k++) { if (i == snakeY[k] && j == snakeX[k]) { printf("o"); isBody = 1; break; } } if (!isBody) printf(" "); } if (j == WIDTH - 1) printf("#"); // 打印右边界 } printf("\n"); } for (int i = 0; i < WIDTH + 2; i++) printf("#"); // 打印下边界 printf("\n"); printf("得分: %d\n", score); } void Input() { if (_kbhit()) { switch (_getch()) { case 'w': dir = 1; break; case 's': dir = 2; break; case 'a': dir = 3; break; case 'd': dir = 4; break; case 'x': gameOver = 1; break; } } } void Logic() { // 更新蛇身坐标 for (int i = length; i > 0; i--) { snakeX[i] = snakeX[i - 1]; snakeY[i] = snakeY[i - 1]; } // 更新蛇头坐标 switch (dir) { case 1: snakeY[0]--; break; case 2: snakeY[0]++; break; case 3: snakeX[0]--; break; case 4: snakeX[0]++; break; } // 碰撞检测 if (snakeX[0] == fruitX && snakeY[0] == fruitY) { score += 10; // 得分加10 length++; // 蛇身长度增加1 fruitX = rand() % WIDTH; // 生成新的食物坐标 fruitY = rand() % HEIGHT; } // 是否撞到边界 if (snakeX[0] >= WIDTH || snakeX[0] < 0 || snakeY[0] >= HEIGHT || snakeY[0] < 0) gameOver = 1; // 是否吃到自己 for (int i = 1; i < length; i++) { if (snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0]) gameOver = 1; } } int main() { Setup(); // 初始化游戏 while (!gameOver) { Draw(); // 绘制游戏界面 Input(); // 获取用户输入 Logic(); // 处理游戏逻辑 Sleep(speed); // 休眠一段时间,控制游戏速度 } printf("游戏结束!得分: %d\n", score); return 0; } ``` 以上是一个简单的用C语言写的贪吃蛇代码,它实现了蛇的移动、吃食物、得分计算、碰撞检测等基本功能。你可以通过键盘方向键控制蛇的移动方向,目标是吃到尽可能多的食物,当蛇撞到边界或吃到自己时,游戏结束。希望能帮到你! ### 回答3: 贪吃蛇是一个经典的游戏,我们可以使用C语言来编写它的代码。以下是一个简单的贪吃蛇代码示例: ```c #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h> #define WIDTH 40 #define HEIGHT 20 int gameOver; int score; int x, y; // 蛇头位置 int fruitX, fruitY; // 水果位置 int tailX[100], tailY[100]; // 蛇尾位置 int tailLength; enum Direction { STOP = 0, LEFT, RIGHT, UP, DOWN }; enum Direction dir; void Setup() { gameOver = 0; score = 0; x = WIDTH / 2; y = HEIGHT / 2; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; tailLength = 0; dir = STOP; } void Draw() { system("cls"); for (int i = 0; i < WIDTH + 2; i++) printf("#"); printf("\n"); for (int i = 0; i < HEIGHT; i++) { for (int j = 0; j < WIDTH; j++) { if (j == 0 || j == WIDTH - 1) printf("#"); if (i == y && j == x) printf("O"); else if (i == fruitY && j == fruitX) printf("F"); else { int isTail = 0; for (int k = 0; k < tailLength; k++) { if (tailX[k] == j && tailY[k] == i) { printf("o"); isTail = 1; } } if (!isTail) printf(" "); } } printf("\n"); } for (int i = 0; i < WIDTH + 2; i++) printf("#"); printf("\n"); printf("Score: %d\n", score); } void Input() { if (_kbhit()) { switch (_getch()) { case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'x': gameOver = 1; break; } } } void Logic() { int prevX = tailX[0]; int prevY = tailY[0]; int prev2X, prev2Y; tailX[0] = x; tailY[0] = y; for (int i = 1; i < tailLength; i++) { prev2X = tailX[i]; prev2Y = tailY[i]; tailX[i] = prevX; tailY[i] = prevY; prevX = prev2X; prevY = prev2Y; } switch (dir) { case LEFT: x--; break; case RIGHT: x++; break; case UP: y--; break; case DOWN: y++; break; } // 检测碰撞,游戏结束 if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) gameOver = 1; for (int i = 0; i < tailLength; i++) { if (tailX[i] == x && tailY[i] == y) gameOver = 1; } // 吃到水果 if (x == fruitX && y == fruitY) { score += 10; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; tailLength++; } } int main() { Setup(); while (!gameOver) { Draw(); Input(); Logic(); Sleep(10); } return 0; } ``` 这是一个控制台程序,使用了Windows.h头文件来实现一些特定的功能。游戏界面为一个由#字符组成的方框,玩家用wasd来控制蛇头移动,吃到水果得分加10,同时蛇长度加1。如果蛇头撞到墙壁或者自己的尾巴,则游戏结束。代码中的Draw函数用来显示游戏界面,Input函数用来读取玩家输入,Logic函数用来更新游戏逻辑。最后在main函数中通过循环反复调用这些函数来构建游戏的整体逻辑。

相关推荐

最新推荐

recommend-type

基于easyx的C++实现贪吃蛇

主要为大家详细介绍了基于easyx的C++实现贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

Python源码-数学美之樱花.py

Python源码-数学美之樱花
recommend-type

蚁群算法(ACO)求解TSP问题,MATLAB源码,代码注释详细,可根据自身需求拓展应用

蚁群算法(ACO)求解TSP问题,MATLAB源码,代码注释详细,可根据自身需求拓展应用
recommend-type

2024年5月最新采集大众点评全国(内地)-学习培训大类-店铺基础信息,93余万家

2024年5月最新采集大众点评全国(内地)-学习培训大类-店铺基础信息,93余万家。此处仅展示1万家,全量也有。 2024年5月最新大众点评店铺基础信息采集。含美食、休闲娱乐、结婚、电影演出赛事、丽人、酒店、亲子、周边游、运动健身、购物、家装、学习培训、医疗健康、爱车、宠物等十几大类共几千万家店铺信息。
recommend-type

My-Graduation-Project-demo

服务器
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用matlab绘制高斯色噪声情况下的频率估计CRLB,其中w(n)是零均值高斯色噪声,w(n)=0.8*w(n-1)+e(n),e(n)服从零均值方差为se的高斯分布

以下是用matlab绘制高斯色噪声情况下频率估计CRLB的代码: ```matlab % 参数设置 N = 100; % 信号长度 se = 0.5; % 噪声方差 w = zeros(N,1); % 高斯色噪声 w(1) = randn(1)*sqrt(se); for n = 2:N w(n) = 0.8*w(n-1) + randn(1)*sqrt(se); end % 计算频率估计CRLB fs = 1; % 采样频率 df = 0.01; % 频率分辨率 f = 0:df:fs/2; % 频率范围 M = length(f); CRLB = zeros(M,1); for
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。