选择你自己的冒险:将玩家字符串存储在数组中

Choose you own adventure: store player string in array

尝试使字符串 "Abbot" 成为我的 basePlayer 数组的 [1] 槽。基本上他们 select 开关中的播放器然后播放器字符串将存储在数组中。

第 118 行

非常感谢您的帮助,如果您复制、粘贴、编译和 运行,程序将 运行。 感谢您的观看!!

    #include <iostream>
    #include <string>
    #include <windows.h>
    #include <cmath>
    #include <cstring>
    #include <cstdlib>

    using namespace std;

int main(){
Beep(251.63,100);
Beep(329.63,100);
Beep(392,100);
Beep(251.63,100);
Beep(329.63,100);
Beep(392,100);
Beep(251.63,100);
Beep(329.63,100);
Beep(392,100);

string playerList[6] = {"Abbot", "Seer", "Hellion", "Vagabond", "Knave","##QUIT##"};
string cityList[4] = {"city1","city2","city3","city4"};
string spiritList[4] = {"spirit1","spirit2","spirit3","spirit4",};
string yesNo[2] = {"yes","no"};
string name;
string player;
string city;
string spirit;
string basePlayer[4] = {name, player, city, spirit};



int pointer = 0;

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
cout << "What is your name?" << endl;
cin >> name;
cout << "your name is " << name << "?" << endl;
basePlayer[0] = name;

while(true){

    system("cls");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
    cout << basePlayer[0]<<" please choose your Adventurer:\n*tab* for description\n\n";


    for (int row = 0; row < 6; ++row){
        if(row == pointer){
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);
            cout << playerList[row] << endl;}

        else{
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
            cout << playerList[row] << endl;}}

 while(true){

 if (GetAsyncKeyState(VK_UP) != 0){
        Beep(800,50);
    pointer -= 1;
    if (pointer == -1){
        pointer = 0;}
            break;}

 else if (GetAsyncKeyState(VK_DOWN) != 0){
        Beep(800,50);
    pointer += 1;
    if (pointer == 6){
        pointer = 0;}
            break;}

 else if (GetAsyncKeyState(VK_TAB) != 0){
        Beep(1200,50);
        Beep(1000,50);

    switch(pointer){
    case 0:{
        system("cls");
        cout << "AbbotFacts.\n\n*RightArrow* to become the Abbot\n*ArrowDown* to return to TitleScreen";
        Sleep(1000);
    }
        break;
    case 1:{
        system("cls");
        cout << "SeerFacts.\n\n*RightArrow* to become the Sear\n*ArrowDown* to return to TitleScreen";
        Sleep(1000);
    }
        break;
    case 2:{
        system("cls");
        cout << "HellionFacts.\n\n*RightArrow* to become the Hellion\n*ArrowDown* to return to TitleScreen";
        Sleep(1000);
    }
        break;
    case 3:{
        system("cls");
        cout << "VagabondFacts.\n\n*RightArrow* to become the Vagabond\n*ArrowDown* to return to TitleScreen";
        Sleep(1000);
    }
        break;
    case 4:{
        system("cls");
        cout << "KnaveFacts.\n\n*RightArrow* to become the Knave\n*ArrowDown* to return to TitleScreen";
        Sleep(1000);
    }
        break;
    case 5:{return 0;}
        break;
        break;}}

 else if (GetAsyncKeyState(VK_RIGHT) != 0){
        Beep(1000,50);
        Beep(1200,50);


    switch(pointer){
    case 0:{
        system("cls");
        player = "Abbot";
        cout << basePlayer[0] << ", You have chosen the "<< basePlayer[1] << endl;


        Sleep(1000);
    }

        break;
    case 1:{
        system("cls");
        cout << "You have chosen the Seer"<< endl;
        player="Seer";
        cout << basePlayer[1] << endl;
        Sleep(1000);
    }
        break;
    case 2:{
        system("cls");
        cout << "You have chosen the Hellion"<< endl;
        player="Hellion";
        cout << basePlayer[1] << endl;
        Sleep(1000);
    }
        break;
    case 3:{
        system("cls");
        cout << "You have chosen the Vagabond" << endl;
        player="Vagabond";
        cout << basePlayer[1] << endl;
        Sleep(1000);
    }
        break;
    case 4:{
        system("cls");
        cout << "You have chosen the Knave"<< endl;
        player="Knave";
        cout << basePlayer[1] << endl;
        Sleep(1000);
    }
        break;
    case 5:{return 0;
    break;}
    break;}}
 }
 Sleep(150);
 }
 }

我建议您阅读一下字符数组在 C++ 中的工作原理以及内存分配。

如果您想要一个更简单的解决方案,您可能会喜欢 std 字符串库,它会为您处理大部分内存和复制端。

我认真地认为你可能想先尝试一些更简单的东西,或者至少看看 oop 设计,在这种情况下这可能更简单。

你要做的就是在设置player值后将player分配给basePlayer[1]。

switch(pointer){
case 0:{
    player = "Abbot";
    basePlayer[1] = player;
    cout << "You have chosen the "<< basePlayer[1] << endl;

将此数据存储在结构中而不是数组中会好得多。这将允许您对可能未表示为字符串的其他播放器数据进行分组。

struct PlayerData
{
  std::string m_Name;
  std::string m_Player;
  std::string m_City;
  std::string m_Spirit;
  int m_MaxHealth;
};
...
PlayerData basePlayer;

basePlayer.m_Name = playerList[playerSelection];

更好的是,为什么不 class 存储此数据,允许您控制对它的访问并执行对数据的操作。

class Player
{
public:
  Player( const std::string& name, const std::string& player, const std::string& city, const std::string& spirit );
  virtual ~Player();

  std::string GetName() const;
  void ReduceHealth( int damage );

private:

  std::string m_Name;
  std::string m_Player;
  std::string m_City;
  std::string m_Spirit;
  int m_MaxHealth;

};

在尝试编写整个游戏之前,您可能需要阅读更多有关 C++ 本身及其功能的信息。