如何用C++編寫猜字遊戲(2)?

Tags: 單詞, 猜字, 猜錯,

else

cout<<"您真棒!\n";

cout<<"正確單詞為:"<

cout << "Will you play again? ";

cin>>play;

 }

 system("PAUSE");

 return 0;

}

下面是執行結果:

Will you play a word game? y

您有10次猜錯的機會。

您的單詞:------------

請您猜吧!a

您還剩下10次猜錯的機會。

您當前猜出的單詞:----------a-

您當前猜錯的字母集合:

請您猜吧!s

您還剩下10次猜錯的機會。

您當前猜出的單詞:-----ss---a-

您當前猜錯的字母集合:

請您猜吧!p

您還剩下10次猜錯的機會。

您當前猜出的單詞:p----ss---a-

您當前猜錯的字母集合:

請您猜吧!o

您還剩下10次猜錯的機會。

您當前猜出的單詞:p-o--ss-o-a-

您當前猜錯的字母集合:

請您猜吧!r

您還剩下10次猜錯的機會。

您當前猜出的單詞:pro--ss-o-a-

您當前猜錯的字母集合:

請您猜吧!f

您還剩下10次猜錯的機會。

您當前猜出的單詞:prof-ss-o-a-

您當前猜錯的字母集合:

請您猜吧!e

您還剩下10次猜錯的機會。

您當前猜出的單詞:profess-o-a-

您當前猜錯的字母集合:

請您猜吧!i

您還剩下10次猜錯的機會。

您當前猜出的單詞:professio-a-

您當前猜錯的字母集合:

請您猜吧!n

您還剩下10次猜錯的機會。

您當前猜出的單詞:professiona-

您當前猜錯的字母集合:

請您猜吧!l

您還剩下10次猜錯的機會。

您當前猜出的單詞:professional

您當前猜錯的字母集合:

您真棒!

正確單詞為:professional

Will you play again? n

請按任意鍵繼續. . .

三:程式分析

程式的執行結果大家都看到了,符合該遊戲的規則,隨機性也較強,這就是C++的強大。

 我們判斷字母是否已經被猜過,是這樣做的:

if(badguess.find(guess)!=string::npos

player.find(guess)!=string::npos)

{

 cout<<"對不起,這個字母您已經猜過了。";

 continue;

}//判斷是否已經猜過

因為如果字母被猜過,那麼它要麼在玩家猜出的殘缺單詞中,要麼處於錯誤字母集合中,我們用find函式在這兩處分別進行了搜尋。

  對於猜錯後的處理,我們又是這樣做的:

int temp=first.find(guess);

if(temp==string::npos)

{

 cout<<"啊!猜錯了。\n";

 guesses--;

 badguess+=guess;

}//猜錯後的處理

  首先,我們查詢這個字元是否在單詞中出現。如果沒有出現,find函式將返回string::npos。npos是一個常量,比string能儲存的最大元素數多1。如果沒有出現,我們先是將猜錯的機會減去一次,再用了這個程式碼:badguess+=guess;將錯誤的字母加入badguess物件中。想想,這要用常規字元陣列有多難?

  最後,如果temp不是string::npos,那麼我們就說玩家猜對了。但可能這個單詞中有多個這樣的字母,所以,我們這樣做了:

temp=first.find(guess,temp+1);

while(temp!=string::npos)//繼續搜尋該字元,看是否單詞中有多個該字元

{

 player[temp]=guess;

 temp=first.find(guess,temp+1);

}

這樣一來,逐步縮小區間,直到確認單詞中再無這個字元為止。大家從執行結果中也可以看到這一點:

您當前猜出的單詞:----------a-

您當前猜錯的字母集合:

請您猜吧!s

您還剩下10次猜錯的機會。

您當前猜出的單詞:-----ss---a-//將兩個“s”都顯示出來了

您當前猜錯的字母集合:

相關問題答案