21xrx.com
2024-11-22 05:54:34 Friday
登录
文章检索 我的文章 写文章
50行最简单代码实现C++贪吃蛇游戏
2023-07-05 00:51:29 深夜i     --     --
C++ 贪吃蛇 游戏 简单 代码

贪吃蛇游戏是经典的游戏,也是很多程序员写程序的练手项目。下面,我将给大家介绍如何使用最简单的50行代码实现C++贪吃蛇游戏。

首先,我们需要使用C++语言编写我们的代码。在这个项目中,我们会使用到几个关键的库函数和数据结构,包括:

1. Windows.h库:用于控制命令行窗口;

2. conio.h库:用于控制键盘输入;

3. vector容器:用于存储蛇的身体部分。

接下来,我们可以开始编写代码了。代码的基本框架如下:


#include <iostream>

#include <Windows.h>

#include <conio.h>

#include <vector>

using namespace std;

int main()

  // 初始化命令行窗口大小和标题

  // 初始化蛇和食物的位置和状态

  // 游戏循环

然后,我们可以将代码细化为若干个函数:

1. 初始化窗口函数:


void InitWindow(int width, int height, LPCWSTR lpszTitle)

{

  // 设置窗口大小

  HWND hwnd = GetForegroundWindow();

  RECT rcClient, rcWindow;

  POINT ptDiff;

  GetClientRect(hwnd, &rcClient);

  GetWindowRect(hwnd, &rcWindow);

  ptDiff.x = (rcWindow.right - rcWindow.left) - rcClient.right;

  ptDiff.y = (rcWindow.bottom - rcWindow.top) - rcClient.bottom;

  MoveWindow(hwnd, rcWindow.left, rcWindow.top, width + ptDiff.x, height + ptDiff.y, TRUE);

  // 设置窗口标题

  SetConsoleTitle(lpszTitle);

}

2. 显示蛇和食物函数:


void Draw(vector<COORD>& snake, COORD& food)

{

  // 隐藏光标

  HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

  CONSOLE_CURSOR_INFO cci;

  cci.bVisible = FALSE;

  cci.dwSize = 1;

  SetConsoleCursorInfo(hOut, &cci);

  // 清空窗口

  system("cls");

  for (int i = 0; i < 20; i++)

  {

    for (int j = 0; j < 20; j++)

    {

      if (i == 0 || i == 19 || j == 0 || j == 19)

      {

        COORD pos = i ;

        SetConsoleCursorPosition(hOut, pos);

        cout << '*';

      }

      else if (i == food.Y && j == food.X)

      {

        COORD pos = i ;

        SetConsoleCursorPosition(hOut, pos);

        cout << '@';

      }

      else

      {

        bool flag = false;

        for (int k = 0; k < snake.size(); k++)

        {

          if (i == snake[k].Y && j == snake[k].X)

          {

            COORD pos = i ;

            SetConsoleCursorPosition(hOut, pos);

            cout << 'O';

            flag = true;

            break;

          }

        }

        if (!flag)

        {

          COORD pos = i ;

          SetConsoleCursorPosition(hOut, pos);

          cout << ' ';

        }

      }

    }

  }

}

3. 移动蛇的身体函数:


void Move(vector<COORD>& snake, COORD& food, int& dir)

{

  // 获取键盘输入

  if (_kbhit())

  {

    int ch = _getch();

    if (ch == 72) dir = 1;

    else if (ch == 80) dir = 2;

    else if (ch == 75) dir = 3;

    else if (ch == 77) dir = 4;

  }

  // 移动蛇的身体

  COORD head = snake[0];

  switch (dir)

  {

  case 1:

    head.Y--;

    break;

  case 2:

    head.Y++;

    break;

  case 3:

    head.X--;

    break;

  case 4:

    head.X++;

    break;

  }

  for (int i = snake.size() - 1; i > 0; i--)

  {

    snake[i] = snake[i - 1];

  }

  snake[0] = head;

  // 撞墙或吃到食物

  if (head.X == 0 || head.X == 19 || head.Y == 0 || head.Y == 19)

  {

    exit(0);

  }

  else if (head.X == food.X && head.Y == food.Y)

  {

    food.X = rand() % 18 + 1;

    food.Y = rand() % 18 + 1;

    snake.push_back(snake[snake.size() - 1]);

  }

  // 撞自己

  for (int i = snake.size() - 1; i > 2; i--)

  {

    if (head.X == snake[i].X && head.Y == snake[i].Y)

    {

      exit(0);

    }

  }

  // 延迟

  Sleep(100);

}

4. 游戏循环函数:


void GameLoop()

{

  vector<COORD> snake;

  COORD head = 9;

  COORD food = 5;

  int dir = 4;

  snake.push_back(head);

  for (int i = 1; i < 5; i++)

  {

    COORD p = head.Y ;

    snake.push_back(p);

  }

  while (1)

  {

    // 显示蛇和食物

    Draw(snake, food);

    // 移动蛇的身体

    Move(snake, food, dir);

  }

}

最后,我们将上面定义的函数在main函数中调用即可:


int main()

{

  // 初始化窗口

  InitWindow(400, 400, L"Greedy Snake");

  // 进入游戏循环

  GameLoop();

  return 0;

}

至此,我们已经成功地编写了一个最简单的C++贪吃蛇游戏程序,只需50行代码就实现了。是不是很简单呢?

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复