C ++自定义用户输入命令 - 调用变量

时间:2014-11-16 01:59:22

标签: c++ command game-engine

我很感激帮助。我对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;

}

1 个答案:

答案 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不同,但良好编码指南表明标识符(名称)应该更加不同。这就是我在上面的示例中使用usernameEXPECTED_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;之前显示下一个命令提示符。