【问题标题】:C++ Custom User input command - Call VariblesC++ 自定义用户输入命令 - 调用变量
【发布时间】:2014-11-16 01:59:22
【问题描述】:

感谢您的帮助。我真的不擅长 c++,我喜欢建设性的批评。我正在构建一个基于文本的游戏,我目前正在设置所有功能和系统。我的问题是我需要一种方法让用户能够随时输入“统计信息”之类的内容并将它们打印在屏幕上。目前我不知道该怎么做。我不知道这是否可能,但我是否能够始终显示统计信息。您知道您何时在 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;

}

【问题讨论】:

  • 问题:你在c++中做到这一点吗?如果你想学习(游戏)编程,有更简单的语言(即 Lua)和框架可以让你专注于制作游戏。我敢打赌,某个地方甚至还有一个文字冒险制作者。

标签: c++ command game-engine


【解决方案1】:

删除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;
}

您的标识符不应仅因大小写而异。尽管编译器会将usernameUSERNAME 区别对待,但良好的编码指南 声明标识符(名称)应该更加不同。这就是我在上面的示例中使用usernameEXPECTED_USERNAME 的原因。关于更好的可读性的东西。

一致性

您使用std::string 类型作为username,但您使用char [20] 作为男孩的名字。保持一致,所有类型都使用std::string

输入暂停

在不按 Enter 的情况下尝试检测按键并不像等待他们按 Enter 那样便携。
试试这个:
std::cout

停止清屏

非常烦人。可能有信息可以通过向后滚动来检索,但您坚持清除屏幕。格式不好。

别睡觉

输入会等待用户按下回车键,所以不需要休眠。睡眠不是便携式的。

此外,如果您要欺骗人们输入错误密码,那么当他们输入有效密码时您也需要睡觉。

不要使用非便携式控制台技巧

在现代,控制台程序在窗口中运行;也许是终端模拟器。控制台窗口不是标准的。不要依赖颜色或清除屏幕或移动光标。每次都展示你需要的东西。

如果您想使用图形,请开发 GUI 应用程序。

编辑 1:命令驱动架构
你需要有一个设计或架构师遵循这个伪代码:

While true
{
  Input User's text   
  if    User entered quit command, exit program.
  else  Execute a function based on the Users text  
}

这将允许用户随时输入命令“stats”。
如果您希望用户在显示文本时输入命令,这是可能的,但会增加更多的复杂性。

游戏的动作应该足够快,以便在用户输入“stats”之前显示下一个命令提示符。

【讨论】:

  • 感谢批评,但没有回答我的问题
  • 您需要重新设计或重新设计您的程序。你的程序需要从用户那里输入文本,然后根据输入的文本执行一个函数。
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 2011-06-25
  • 2014-06-10
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多