如何在到达特定坐标时调用函数

How to call a funcion when a specific coordinate is reached

本文关键字:坐标 调用 函数      更新时间:2023-10-16

这里有一个简单的迷宫游戏。但是,当玩家"O"到达迷宫中的特定点时,我怎么可能调用函数或做其他事情呢?假设他到达右下角,在他到达那里之后,屏幕应该立即清除。

       #include<iostream>
        #include<windows.h>
        #include<conio.h>
        using namespace std;

        char map[20][40] = {
         "#######################################",
start -->"#O         X    XXXXX             XX  #",
         "#          X      XX        XXXX   XXX#",
         "#  XXXXXXXXXXXXX  XXXXXXXX    XX      #",
         "#  XX        XXX              XXXXX   #",
         "#  XXXX      XXX  XXXX   X    XX  X   #",
         "#     X     XXXX  X  X   X    XX  X   #",
         "#  XX X     X     X  X   X    XX  X X #",
         "#  XX X     X     X  X   XX       X X #",
         "#  XX X           X  XX  XXXXXXX    X #",
         "#   X          XXXXX           XXXXXX #",
         "#X  X    X     X   X  X     XXXXX   X #",
         "#X  X    XXX   X   X  X  XXXXX  X   X #",
         "#X  X      X   X      XXXX      X   X #",
         "#   X  XX  X   XXXX   X     XX  X   X #",
         "#  XXXXXX  X      X   X    XX         #",
         "#          X          X    XXXX X XXXX#",
         "#         XXXXXXXX    X    X    X    z#",  //<--where the O arrives
         "#######################################"
        };
        int x = 1, y = 1;
        bool game_running = true;
        int main()
        {
            while(game_running == true)
                 {
            HANDLE hStdout;
            COORD destCoord;
            hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
            //position cursor at start of window
            destCoord.X = 0;
            destCoord.Y = 0;
            SetConsoleCursorPosition(hStdout, destCoord);
            Sleep(100);
                  for(int display = 0; display < 20; display++)
                     {
                       cout<<map[display]<<endl;
                     }
                    if(GetAsyncKeyState(VK_DOWN))
                      {
                       int y2 = y + 1;
                       if(map[y2][x] == ' ')
                         {
                          map[y][x] = ' ';
                          y++;
                          map[y2][x] = 'O';
                          }
                      }
                 if(GetAsyncKeyState(VK_UP))
                    {
                     int y2 = y - 1;
                     if(map[y2][x] == ' ')
                       {
                        map[y][x] = ' ';
                        y--;
                        map[y2][x] = 'O';
                       }
                    }
                  if(GetAsyncKeyState(VK_RIGHT))
                    {
                     int x2 = x + 1;
                     if(map[y][x2] == ' ')
                       {
                        map[y][x] = ' ';
                        x++;
                        map[y][x] = 'O';
                       }
                    }
    if(GetAsyncKeyState(VK_LEFT))
                {
                 int x2 = x - 1;
                 if(map[y][x2] == ' ')
                   {
                    map[y][x] = ' ';
                    x--;
                    map[y][x] = 'O';
                   }
                }
               if(GetAsyncKeyState(VK_ESCAPE))
                 {
                  game_running = false;
                 }
             }
             system("pause>nul");
             cout<<"GAME OVER"<<endl;
        return 0;
    }

OO方式

  1. 创建一个包含人物位置的类
  2. put getter &获取坐标
  3. 的设置
  4. 创建一个子类接口,并为这个接口创建一个setter(这就是所谓的观察者模式)
  5. 当调用坐标的setter时,调用接口上的函数。
  6. 让另一个类实现这个接口。

功能方式

每次更改x或y时调用一个函数,然后根据它们的位置将其分配给更有趣的函数。