gpt4 book ai didi

时间:2019-03-08 标签:c++tron2darrayrepeating

转载 作者:行者123 更新时间:2023-11-28 07:17:21 25 4
gpt4 key购买 nike

我试图让一条轨迹出现在玩家自行车后面,但由于某种原因,玩家每次移动时并没有在玩家后面出现一个“x”,而是玩家实际上会复制自己。这听起来有点令人困惑,但你应该自己编译这段代码,看看我的意思。我想做的只是在玩家身后留下“x”的痕迹,而不是让玩家留下“P”的痕迹。谢谢

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

//prototype functions used
void DisplayMap();
void PlayerBike();
void setCursorTo();
void SetBike();
//global variables that will be used by different functions
int PlayerX = 10;
int PlayerY = 70;
bool GameOver = false;
const int H = 25; // const variable so it doesnt change size
const int W = 82;// const variable so it doesnt change size
char Map[H][W]; // char map with HxW
char trail = 'x'; // this is where the trail is initialized as a *
int main()
{

SetBike();
DisplayMap();
while (GameOver == false){
setCursorTo();

PlayerBike();



} // end while loop

return 0;
}//end main



void DisplayMap(){ // display map function

for(int i = 0; i < H; i++ ){
for(int j = 0; j < W; j++){

if(i == 0 || i == 24 || j == 0 || j == 81 ){ Map[i][j] = 'x';} // characters in row 24x81 are changed to x
cout << Map[i][j]; // output map
} // end for loop
cout << "\n"; // create new line to output the map correctly

} //end for loop


} // end DisplayMap function


void SetBike(){

Map[PlayerX] [PlayerY] = 'P';

}
void PlayerBike(){
Map[PlayerY][PlayerX]= trail; // I would like this trail to repeat behind the player but it does not appear at all.
if (kbhit()) {// get user key input
char GetCh = getch(); // GetCh equal to the button the user presses
if (GetCh == 'w'){PlayerX = PlayerX - 1; Trailx = Trailx -1;}
else if (GetCh == 's'){PlayerX = PlayerX +1; Trailx = Trailx +1;}
else if (GetCh == 'd'){PlayerY = PlayerY +1;}
else if (GetCh == 'a'){PlayerY = PlayerY - 1;}
}// end kbhit
}// end PlayerBike function

void setCursorTo() // stops constant flashing on the map
{
HANDLE handle;
COORD position;
handle = GetStdHandle(STD_OUTPUT_HANDLE);
position.X = 0;
position.Y = 0;
SetConsoleCursorPosition(handle, position);
}

最佳答案

您的 DisplayMap 函数有缺陷。

首先,您似乎不仅显示 map ,而且还在积极修改它。将绘制边框放入一个单独的 initMap 函数中,该函数还会将所有其他位置清零为一个空格(看来您还没有这样做,所以也许这就是出错的地方) .您只需调用一次 initMap

接下来,不要在DisplayMap 函数中绘制播放器P。在进入游戏循环之前绘制此一次。然后:如果用户按下了一个有效的移动键,

  1. 在玩家的位置放置一个x
  2. 更新玩家位置
  3. 在新位置放一个P
  4. 调用DisplayMap重绘屏幕
  5. 你会看到这条路保持不变。

可能的改进:通过更新位置接受“移动”命令之前,检查 map 是否包含空格或其他内容。如果包含空格,则可以执行移动;如果不是,则播放爆炸动画 (*oO*+.)。此外,请考虑在您最喜欢的 C 引用资料中查找 switch 语句,以避免无穷无尽的 if..else 序列。

关于时间:2019-03-08 标签:c++tron2darrayrepeating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022492/

25 4 0