【问题标题】:Choose you own adventure: store player string in array选择你自己的冒险:将玩家字符串存储在数组中
【发布时间】:2015-04-27 05:08:05
【问题描述】:

试图使字符串“Abbot”成为我的 basePlayer 数组的 [1] 槽。基本上他们在开关中选择播放器,然后播放器字符串将存储在数组中。

第 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);
 }
 }

【问题讨论】:

  • 变量'player'的用途是什么?
  • 我可以把整个游戏脚本放在那里。
  • 我认为这个问题有太多未知数,无法回答,我建议您阅读提出好问题的指南,您更像是在问“我该怎么做游戏”而不是“我如何将字符串存储在数组中”,我不确定你在问什么。 stackoverflow.com/help/how-to-ask
  • 好了,感谢大家观看!如果您运行该程序,应该更容易知道我要做什么。对不起,如果我没有很好地解释。基本上试图制作一个包含 4 行信息的最终 basePlayer 数组。 {name, player, city, spirit}
  • 抱歉我的问题可能不好

标签: c++ arrays string variables store


【解决方案1】:

您需要做的是在设置播放器值后将播放器分配给 basePlayer[1]。

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

【讨论】:

  • 呜呜呜!!谢谢你!这解决了我的问题! :)
【解决方案2】:

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

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

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

【讨论】:

  • 感谢您的帮助!是的,我是新手,我可能应该做一些更简单的事情。我刚刚完成了这件事,哈哈
【解决方案3】:

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

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 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++ 本身及其功能。

【讨论】:

  • 好的,我现在就研究一下结构。我还没有了解它们。感谢您引起我的注意!
  • 在创建整个游戏之前,您可能需要研究结构以及更多关于 c++ 的信息。我记得当我开始游戏开发时,先学习你的工具,然后再用它们创造一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2017-12-18
相关资源
最近更新 更多