基于文本的游戏中的 C++ 输入
C++ input in text based games
我正在制作基于文本的冒险游戏。
在介绍中我让游戏询问玩家的名字,他们必须输入他们的名字,然后它会在输出中显示他们的名字。
cout << "U.S Soldier: Who's your name, Soldier?" << endl;
_getch();
cout << "Type Your name: ";
cin.getline(name, 50);
cout << "U.S Soldier: I'm DIAZ, now let's go, " << name << "!!" << endl;
然后它会转到另一个段(我使用void命令)。
void prologue()
{
system("cls");
cout << "----------------------- PROLOGUE -------------------------" << endl;
cout << "\n";
cout << "\n";
cout << "Diaz: come on, " << name << ", there's no time for rest!!" << endl;
}
但是在该段上,程序似乎忘记了上一段的输入(玩家姓名)。
它只显示为“1”,而不是我们之前输入的"name"
如何让程序在整个游戏过程中保留玩家姓名?
这是全部代码:
// getting player's name
void name()
{
system("cls");
char name[50];
cout << "U.S Soldier: Hey, Wake Up!!" << endl;
_getch();
cout << "You: (regain conciousness)" << endl;
_getch();
cout << "U.S Soldier: Who's your name, Soldier?" << endl;
_getch();
cout << "Type Your name: ";
cin.getline(name, 50);
system("cls");
cout << "U.S Soldier: Hey, Wake Up!!" << endl;
cout << "You: (regain conciousness)" << endl;
cout << "U.S Soldier: Who's your name, Soldier?" << endl;
cout << "U.S Soldier: I'm DIAZ, now let's go, " << name << "!!" << endl;
_getch();
prologue();
}
// Intro (Prologue)
void prologue()
{
system("cls");
cout << "----------------------- PROLOGUE -------------------------" << endl;
cout << "\n";
cout << "\n";
cout << "Diaz: come on, " << name << ", there's no time for rest!!" << endl;
}
您填充的 name
对于 name()
方法是本地的。
在 prologue()
中,name
是方法 name()
,而不是您期望的字符串。
您可以使 name
(字符串)成为全局的。我也会避免使用同名的变量和方法(至少在你更精通这门语言之前)。
你的答案就在你的问题本身。
如何让程序在整个游戏过程中保留玩家名称?
如果您了解变量的范围和生命周期,就会知道您填充的名称是在 name() 中声明的,因此它是该函数的本地名称,无法在该函数之外访问.要使其在整个程序中都可访问,请将其声明为全局变量。
另外,您在 prologue() 中使用的名称是函数名称(),而不是您填充的变量。
你可以考虑这样做cin.getline(name, 50);主要还是创建一个角色对象并将此名称分配给角色对象
如果您在 block/function 中声明一个变量,它是 block/function 的本地变量。在这里你可以在 name() 函数中使用 name 变量。要在另一个函数中使用它,要么全局声明它(即在所有函数之外),要么将它作为参数传递给 prologue() 函数。还要避免对不同的标识符使用 same/similar 名称。
我正在制作基于文本的冒险游戏。
在介绍中我让游戏询问玩家的名字,他们必须输入他们的名字,然后它会在输出中显示他们的名字。
cout << "U.S Soldier: Who's your name, Soldier?" << endl;
_getch();
cout << "Type Your name: ";
cin.getline(name, 50);
cout << "U.S Soldier: I'm DIAZ, now let's go, " << name << "!!" << endl;
然后它会转到另一个段(我使用void命令)。
void prologue()
{
system("cls");
cout << "----------------------- PROLOGUE -------------------------" << endl;
cout << "\n";
cout << "\n";
cout << "Diaz: come on, " << name << ", there's no time for rest!!" << endl;
}
但是在该段上,程序似乎忘记了上一段的输入(玩家姓名)。
它只显示为“1”,而不是我们之前输入的"name"
如何让程序在整个游戏过程中保留玩家姓名?
这是全部代码:
// getting player's name
void name()
{
system("cls");
char name[50];
cout << "U.S Soldier: Hey, Wake Up!!" << endl;
_getch();
cout << "You: (regain conciousness)" << endl;
_getch();
cout << "U.S Soldier: Who's your name, Soldier?" << endl;
_getch();
cout << "Type Your name: ";
cin.getline(name, 50);
system("cls");
cout << "U.S Soldier: Hey, Wake Up!!" << endl;
cout << "You: (regain conciousness)" << endl;
cout << "U.S Soldier: Who's your name, Soldier?" << endl;
cout << "U.S Soldier: I'm DIAZ, now let's go, " << name << "!!" << endl;
_getch();
prologue();
}
// Intro (Prologue)
void prologue()
{
system("cls");
cout << "----------------------- PROLOGUE -------------------------" << endl;
cout << "\n";
cout << "\n";
cout << "Diaz: come on, " << name << ", there's no time for rest!!" << endl;
}
您填充的 name
对于 name()
方法是本地的。
在 prologue()
中,name
是方法 name()
,而不是您期望的字符串。
您可以使 name
(字符串)成为全局的。我也会避免使用同名的变量和方法(至少在你更精通这门语言之前)。
你的答案就在你的问题本身。
如何让程序在整个游戏过程中保留玩家名称?
如果您了解变量的范围和生命周期,就会知道您填充的名称是在 name() 中声明的,因此它是该函数的本地名称,无法在该函数之外访问.要使其在整个程序中都可访问,请将其声明为全局变量。
另外,您在 prologue() 中使用的名称是函数名称(),而不是您填充的变量。
你可以考虑这样做cin.getline(name, 50);主要还是创建一个角色对象并将此名称分配给角色对象
如果您在 block/function 中声明一个变量,它是 block/function 的本地变量。在这里你可以在 name() 函数中使用 name 变量。要在另一个函数中使用它,要么全局声明它(即在所有函数之外),要么将它作为参数传递给 prologue() 函数。还要避免对不同的标识符使用 same/similar 名称。