我很感激帮助。我对c ++非常苛刻,我喜欢建设性的批评。我建立一个基于文本的游戏,我目前正在设置所有的功能和系统。我的问题是,我需要一种方法让用户能够随时输入类似于" stats"并将它们打印在屏幕上。目前我不知道该怎么做。我不知道这是否可能,但我能够总是显示统计数据。你知道当你在cmd中它显示你的目录时,我希望它在那里,但在我的游戏中。继承源,我知道它的混乱
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <ConsoleColor.h>
using namespace std;
//STAT VARS
int hp=100;
//Login VARS
const string USERNAME = "user";
const string PASSWORD = "123456";
string username, password;
int main()
{
login:
cout<< "================" <<endl;
cout<< "======Login=====" <<endl;
cout<< "================" <<endl;
cout<< "\n Username: ";
cin >> username;
cout<< endl;
cout<< "Enter Password : ";
cin >> password;
cout<< endl;
if(username == USERNAME && password == PASSWORD)
{
system("cls");
cout << green << "CORRECT" <<white<< endl;
Sleep(1000);
system("cls");
goto correct;
}
else
{
system("cls");
cout <<red<< "Invalid login details" <<white<< endl;\
Sleep(1000);
system("cls");
goto login;
}
correct:
char name[20];
cout <<"What do they call you boy?" << endl;
cin.getline(name, 20);
cout << "You should keep moving, " << name << ".Were running out of daylight." << endl;
cout << "\n ***** Press Any Key To Continue *****" << endl;
_getch();
return 0;
}
答案 0 :(得分:2)
goto
while ((username != EXPECTED_USERNAME)
&& (password != EXPECTED_PASSWORD))
{
// No need to clear the screen.
cout<< "\n Username: ";
cin >> username;
cout<< endl;
cout<< "Enter Password : ";
cin >> password;
cout<< endl;
}
您的标识符不应仅因具体情况而异。虽然编译器会将username
视为与USERNAME
不同,但良好编码指南表明标识符(名称)应该更加不同。这就是我在上面的示例中使用username
和EXPECTED_USERNAME
的原因。关于更好的可读性的东西。
std::string
使用username
类型,但您使用char [20]
作为男孩的名字。保持一致,对所有类型使用std::string
。
尝试在不按Enter键的情况下检测按键,并不像等待他们按回车那样便携
试试这个:
std :: cout&lt;&lt; &#34;准备好后按ENTER键。\ n&#34 ;;
std :: cin.ignore(100000,&#39; \ n);
非常讨厌。可能会有通过向后滚动检索的信息,但您坚持要清除屏幕。形式不好。
输入将等待用户按Enter键,因此无需睡眠。睡眠不便携。
另外,如果你要欺骗别人输入错误密码,你也需要在输入有效密码时入睡。
在现代,控制台程序在一个窗口中运行;也许是一个终端模拟器。控制台窗口不是标准的。不要依赖颜色或清除屏幕或移动光标。每次显示您需要的内容。
如果您想使用图形,请开发GUI应用程序。
编辑1:命令驱动架构
您需要有一个设计或架构师遵循此伪代码:
While true
{
Input User's text
if User entered quit command, exit program.
else Execute a function based on the Users text
}
这将允许用户输入命令&#34; stats&#34; 随时。
如果您希望用户在显示文本时输入命令,则可能会增加复杂性。
游戏的动作应足够快,以便在用户输入&#34; stats&#34;之前显示下一个命令提示符。