2012-11-07 71 views
0

我有點超出這裏。我的任務是爲我的C++類創建一個僞掃雷遊戲。所有的根編碼都完成了,我現在要做的就是爲它創建一個很酷的菜單。目前我所擁有的是:我正嘗試爲我的班級創建掃雷遊戲的初始屏幕

#include <iostream> 
#include <cstdlib> 

using namespace std; 

bool menu() 
{ 
int inpt; 

bool exitVar; 

system("cls"); 

cout << "    _  _ _ _  _ _ _ _ " << endl 
     << "    |_|_ _|_| |_| |_|_ |_| |_|_|_| " << endl 
     << "    |_|_|_|_|_| |_| |_|_|_ |_| |_|_ " << endl 
     << "    |_| |_| |_| |_| |_| |_|_|_| |_|_| " << endl 
     << "    |_|  |_| |_| |_| |_|_| |_|_ _ " << endl 
     << "    |_|  |_| |_| |_|  |_| |_|_|_| " << endl 
     << "    _ _ _  _ _ _ _ _ _ _ _ _  _ _ _ _ _  " << endl 
     << "    _|_|_| |_|  |_| |_|_|_| |_|_|_| |_|_|_ |_|_|_| |_|_|_ " << endl 
     << "   |_|_ |_| _ |_| |_|_ |_|_ |_|_|_| |_|_ |_|_|_| " << endl 
     << "    |_|_ |_|_|_|_|_| |_|_| |_|_| |_|_| |_|_| |_|_|_ " << endl 
     << "    _ _|_| |_|_| |_|_| |_|_ _ |_|_ _ |_|  |_|_ _ |_| |_|_ " << endl 
     << "   |_|_| |_|  |_| |_|_|_| |_|_|_| |_|  |_|_|_| |_| |_| " << endl; 

cout << "\n   Welcome to Psuedo Mine Sweeper!!\n\n\n\n"; 

cout << "Please choose from one of the following options:\n"; 
cout << "1 - Play Psuedo Mine Sweeper!\n"; 
cout << "2 - Exit Program :(\n\n"; 
cout << "(1 or 2):"; 
cin >> inpt; 

while (inpt < 1 || inpt > 2 || cin.fail()) 
{ 
    cin.clear(); 
    cin.ignore(); 

    cout << "Please enter a valid menu choice : "; 
    cin >> inpt; 
} 


if (inpt = 1) 
    exitVar = true; 
else 
    exitVar = false; 
return exitVar; 
} 

很簡單。我想要做的是創建一個屏幕,用戶可以使用UP和DOWN鍵盤鍵選擇START或EXIT,然後按ENTER確認其選擇。我認爲這將通過Java中的事件或類似的事情來完成。但在C++中,我不知道該怎麼做。我所需要的只是一些幫助入門。我的介紹C++書不包括這樣的東西。

再次,我期待創建一個簡單的啓動畫面,類似於您在舊的任天堂遊戲中找到的東西。我會圍繞自己打一些球,但我認爲這將是一個要求朝正確方向前進的好地方。

感謝您的幫助!

回答

1

您完成此操作的方式取決於平臺。如果您只是使用控制檯,則可能需要使用某種類型的庫來幫助設置文本的樣式(例如,反轉所選菜單項的字符和背景)。我對這些都不太熟悉,但是嘗試搜索curses庫作爲從哪裏開始的例子。

這並不像聽起來那麼容易。根據庫的工作方式,每當用戶發送輸入,存儲當前選擇的菜單項索引時,都需要重新繪製啓動畫面,並根據是否選擇菜單項來選擇性地重新着色該菜單項。

獲取輸入也將取決於平臺,特別是獲取箭頭鍵輸入對控制檯來說非常棘手。使用數字要容易得多,因爲您只需讀取一個字符並將其用作菜單索引(即如果用戶點擊1鍵,則選擇第一個菜單索引)。

+0

我遇到的問題是如何處理特定的用戶輸入。例如,我如何驗證用戶是否僅擊中了Enter鍵?我可以參考十六進制值嗎? –

+1

@DustinBurns它取決於您使用的輸入法。我已經使用了除cin上的提取操作符之外的任何東西,但我相信你可以像cin.getline(some_buffer)那樣來讀取一行輸入。如果該行的長度爲0,則知道用戶沒有輸入任何內容(在沒有任何輸入的情況下點擊輸入)。 – Telgin