选择你自己的冒险:将玩家字符串存储在数组中
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++ 本身及其功能的信息。
尝试使字符串 "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++ 本身及其功能的信息。