根据主代码,写出该程序完成了哪些任务,包括面对过程解决贪吃蛇问题,二维数组画图,输入控制方向等#include"初始化蛇.h" #include"打印.h" #include"判断方向.h" #include"去位置(x,y).h" #include"蛇的移动.h" #include<Windows.h> #include"隐藏光标.h" using namespace std; void main() { const int Length = 40;//场景的高度 const int Width = 60;//场景的宽度 int moveDirection; int canvas[Length][Width];//以数组的形式形成场景 //初始化数组(订造场景) for (int i = 0; i < Length; i++) { for (int j = 0; j < Width; j++) { canvas[i][j] = 0; } } for (int i = 0, j = 0; j < Width; j++)//定制上下边框 { canvas[i][j] = -1; canvas[Length - 1][j] = -1; } for (int i = 0, j = 0; j < Length; j++)//定制左右边框 { canvas[j][i] = -1; canvas[j][Width - 1] = -1; } inisnake(canvas, Length, Width); inimove(moveDirection); inifood(canvas, Length, Width); int* still = &moveDirection; while (1) { gotoxy(0, 0); HideCursor(); moveDirection = *still; updateWithInput(canvas, Length, Width,moveDirection,still); print(canvas, Length, Width); Sleep(100); }
时间: 2024-04-03 20:32:42 浏览: 11
该程序完成了以下任务:
1. 订制了一个二维数组,作为贪吃蛇游戏的场景,并初始化了该数组。
2. 通过定制数组来实现了场景的边框。
3. 调用了初始化蛇函数,初始化了贪吃蛇的位置和长度。
4. 调用了初始化移动函数,初始化了贪吃蛇的移动方向。
5. 调用了初始化食物函数,初始化了游戏场景中的食物位置。
6. 在一个循环中,根据玩家输入的移动方向,更新了贪吃蛇的位置,控制游戏的进行。
7. 调用了隐藏光标函数,隐藏了控制台窗口中的光标。
8. 调用了打印函数,将当前的游戏场景打印到控制台窗口中。
9. 使用 Sleep(100) 函数暂停程序 100 毫秒,使游戏运行变得平滑。
相关问题
帮我用c++面对过程思想,使用二维数组构造贪吃蛇游戏场景,请帮我写出代码,不使用结构体,希望直接给出代码不需要解释,要求贪吃蛇可以在没有输入情况下,保持原方向移动
好的,以下是使用 C++ 面向过程思想,使用二维数组构造贪吃蛇游戏场景的代码,不使用结构体,可以在没有输入情况下,保持原方向移动:
```cpp
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int ROW = 20; // 场景行数
const int COL = 20; // 场景列数
const int SNAKE_LEN = 3; // 初始蛇身长度
int snake[SNAKE_LEN][2]; // 蛇身坐标
int food[2]; // 食物坐标
int direction = 2; // 初始方向:向右
void initSnake(); // 初始化蛇身
void initFood(); // 初始化食物
void drawScene(); // 绘制游戏场景
void moveSnake(); // 移动蛇身
bool isHitWall(); // 判断是否撞墙
bool isHitSnake(); // 判断是否撞到自身
int main()
{
initSnake();
initFood();
drawScene();
while (true)
{
if (_kbhit()) // 判断是否有键盘输入
{
int key = _getch();
switch (key)
{
case 'w': // 上
if (direction != 4) direction = 1;
break;
case 's': // 下
if (direction != 1) direction = 4;
break;
case 'a': // 左
if (direction != 2) direction = 3;
break;
case 'd': // 右
if (direction != 3) direction = 2;
break;
case 27: // ESC
exit(0);
}
}
moveSnake();
if (isHitWall() || isHitSnake())
{
cout << "游戏结束!" << endl;
break;
}
drawScene();
if (snake[0][0] == food[0] && snake[0][1] == food[1]) // 吃到食物
{
initFood();
SNAKE_LEN++;
}
Sleep(100); // 延时,控制蛇身移动速度
}
return 0;
}
void initSnake()
{
for (int i = 0; i < SNAKE_LEN; i++)
{
snake[i][0] = ROW / 2;
snake[i][1] = COL / 2 - i;
}
}
void initFood()
{
srand((unsigned)time(NULL));
food[0] = rand() % ROW;
food[1] = rand() % COL;
}
void drawScene()
{
system("cls"); // 清屏
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
bool isSnake = false;
for (int k = 0; k < SNAKE_LEN; k++)
{
if (i == snake[k][0] && j == snake[k][1])
{
cout << "O";
isSnake = true;
break;
}
}
if (!isSnake)
{
if (i == food[0] && j == food[1])
cout << "*";
else
cout << " ";
}
}
cout << endl;
}
}
void moveSnake()
{
for (int i = SNAKE_LEN - 1; i > 0; i--)
{
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
switch (direction)
{
case 1: // 上
snake[0][0]--;
break;
case 2: // 右
snake[0][1]++;
break;
case 3: // 左
snake[0][1]--;
break;
case 4: // 下
snake[0][0]++;
break;
}
}
bool isHitWall()
{
if (snake[0][0] < 0 || snake[0][0] >= ROW || snake[0][1] < 0 || snake[0][1] >= COL)
return true;
else
return false;
}
bool isHitSnake()
{
for (int i = 1; i < SNAKE_LEN; i++)
{
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1])
return true;
}
return false;
}
```
希望能够帮到你,如果有任何疑问,可以随时问我哦!
用c++语言面对对象思想,再用vector构建二维数组,写出一个贪吃蛇代码。其中食物类构成,代码
好的,我会尽力回答你的问题。以下是基于C++语言和面向对象思想的贪吃蛇代码,其中使用了vector构建二维数组,同时实现了食物类。
```c++
#include <iostream>
#include <vector>
#include <conio.h>
#include <windows.h>
using namespace std;
// 坐标类
class Coordinate {
public:
int x;
int y;
Coordinate(int _x = 0, int _y = 0) {
x = _x;
y = _y;
}
};
// 食物类
class Food {
public:
Coordinate coordinate;
Food() {
srand((unsigned)time(NULL));
coordinate.x = rand() % 20;
coordinate.y = rand() % 20;
}
void generateFood() {
srand((unsigned)time(NULL));
coordinate.x = rand() % 20;
coordinate.y = rand() % 20;
}
};
// 贪吃蛇类
class Snake {
public:
vector<Coordinate> body;
Coordinate direction;
int length;
Snake() {
length = 3;
direction.x = 1;
direction.y = 0;
body.push_back(Coordinate(0, 0));
body.push_back(Coordinate(1, 0));
body.push_back(Coordinate(2, 0));
}
void move() {
// 计算蛇头新的位置
Coordinate newHead = body[length - 1];
newHead.x += direction.x;
newHead.y += direction.y;
// 判断蛇头是否与食物重合
bool isEatFood = (newHead.x == food.coordinate.x && newHead.y == food.coordinate.y);
// 将蛇头插入到身体最后面
body.push_back(newHead);
// 判断是否吃到了食物
if (!isEatFood) {
// 如果没有吃到食物,将蛇尾移除
body.erase(body.begin());
}
else {
// 如果吃到了食物,重新生成一个食物
food.generateFood();
length++;
}
}
bool isDead() {
// 判断蛇头是否超过边界
if (body[length - 1].x < 0 || body[length - 1].x >= 20 || body[length - 1].y < 0 || body[length - 1].y >= 20) {
return true;
}
// 判断蛇头是否与身体重合
for (int i = 0; i < length - 1; i++) {
if (body[i].x == body[length - 1].x && body[i].y == body[length - 1].y) {
return true;
}
}
return false;
}
private:
Food food;
};
// 游戏类
class Game {
public:
void start() {
while (true) {
// 清空屏幕
system("cls");
// 输出地图
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
bool isSnake = false;
// 判断该位置是否为蛇身
for (int k = 0; k < snake.length; k++) {
if (snake.body[k].x == j && snake.body[k].y == i) {
isSnake = true;
break;
}
}
// 输出地图
if (isSnake) {
cout << "■";
}
else if (food.coordinate.x == j && food.coordinate.y == i) {
cout << "★";
}
else {
cout << "□";
}
}
cout << endl;
}
// 判断是否死亡
if (snake.isDead()) {
cout << "Game Over" << endl;
break;
}
// 接收用户输入
if (_kbhit()) {
switch (_getch()) {
case 'w':
if (snake.direction.y != 1) {
snake.direction.x = 0;
snake.direction.y = -1;
}
break;
case 's':
if (snake.direction.y != -1) {
snake.direction.x = 0;
snake.direction.y = 1;
}
break;
case 'a':
if (snake.direction.x != 1) {
snake.direction.x = -1;
snake.direction.y = 0;
}
break;
case 'd':
if (snake.direction.x != -1) {
snake.direction.x = 1;
snake.direction.y = 0;
}
break;
}
}
// 移动蛇
snake.move();
// 延时
Sleep(100);
}
}
private:
Snake snake;
Food food;
};
int main() {
Game game;
game.start();
return 0;
}
```
其中,贪吃蛇类包含了蛇的身体、移动方向和长度等信息,食物类包含了食物的位置信息,游戏类包含了游戏的开始、结束和循环等逻辑。整个游戏的流程如下:
1. 初始化贪吃蛇和食物,输出地图;
2. 接收用户输入,移动蛇;
3. 判断是否死亡,如果死亡则结束游戏,否则继续循环;
4. 延时一段时间,再次循环。
希望这个代码能够帮助到你!