亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 利用c++編寫一個猜字游戲.txt

?? 利用C++編寫一個猜字游戲
?? TXT
字號:
 今天,我們要用C++來寫一個猜字母的游戲。不要擔心,做起來并不是那么難的。首先,我們必須了解一下游戲規則。

  一:玩家每次只能猜一個字母;

  二:玩家只能猜錯有限次,否則游戲失敗;

  三:猜錯的字母將被記錄下來;

  四:每次猜測后,游戲應顯示出當前猜出的殘缺單詞,以及當前猜錯的所有字母,和剩下的猜錯的機會;

  五:假設玩家猜的字母在單詞中,單詞中所有的該字母將被視為已猜出,例如:如果原單詞是apple,我們猜出了p,則程序應顯示當前猜出的殘缺單詞為-pp--。

  六:不得多次猜測同一個字母,因為這樣是浪費時間。

  一:準備工作:

   規則就是這么多,我們應該用C++代碼來實現它。首先,我們應考慮怎樣記錄單詞,其中包括原單詞、猜錯的字母、當前猜出的殘缺單詞。如果用傳統的C風格數組,這是很麻煩的,這用C風格字符串實現很困難。但C++為我們預先想到了這一切,C++中帶有一個功能強大的string類,它的聲明在頭文件string中。注意,cstring或string.h中只是包含了一些處理字符串的函數,不包括string類。要使用這個類,我們首先要知道它的構造函數,這樣才能創建string類對象。
    
構造函數 說明 
string(const char* s) 將string對象初始化為字符串s 
string(size_type n,char c) 將對象初始化為有n個元素的對象,它們都是字符c 
string(const string& str,size_type pos=0,size_type n=npos) 將對象初始化為str中,從第pos個元素開始的n個元素。 

   其實,這個類的構造函數遠不止這些,但我們開發這個游戲只用得到這些(也許還用不上這么多)。我們還要了解一些關于string類的知識。它重載了所有的關系操作符、可以用+=操作符把字符串、string類對象、字符加到對象的末尾。比如,我們可以寫出這樣的代碼:string a="butter"; string b="fly"; a+=b;這是十分方便的。它還重載了[]操作符,使我們完全可以像常規數組一樣用它。對于string類,我們還要初步了解一下它的輸入選項。它有operator>>,所以我們可以用cin進行輸入,并且它與istream中的cin的使用規則是一樣的。值得注意的一點是,string類是一個比較智能的類,它能夠自動調整字符串的長度,這樣,我們就不用擔心浪費空間或者輸入字符串超出對象末尾了。而我們常用的getline()函數呢?這是一個成員函數,所以不能進行重載。解決的辦法是,string類帶有一個getline()的非成員函數,它接受兩個參數,第一個是istream類對象,第二個是string類對象,并且去掉了長度參數,原因已經說了。所以,假設temp是一個string類對象,我們應這樣對它使用getline():getline(cin,string);看起來有點不好看,但實用。

  最后,要實現這個拼字游戲,我們必須在對象中查找字符。string類已經提供了這方面的函數了,請看下表(未完全列出)。
 
方法原型 說明 
size_type find(char ch,size_type pos=0)const; 從字符串的pos位置開始,查找字符ch,若找到,返回第一個ch所在的索引,
否則,返回string::npos。 
size_type find(const string& str,size_type pos=0)const; 從字符串的pos位置開始,查找字符串str,若找到,返回str的首字母所在的索引,否則,返回string::npos。 
size_type find (const char* s,size_type pos=0)const; 從字符串的pos位置開始,查找字符串s,若找到,返回s的首字母所在的索引,否則,返回string::npos。 


    舉例說明,若temp是一個string對象,內容為"apple",則temp.find('p')將返回1,即第一個字符p對應的索引。
二:游戲源代碼:



#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cctype>
using namespace std;
const int NUM = 26;
const string wordlist[NUM] = {"alabama", "choice", "usually",
"dangerous", "deer", "panda", "love", "health", "exciting",
"interesting", "administrator", "professional", "manage", "nonce", "onset",
"typeid", "quarter", "remote", "lovely", "car", "keeper",
"valid", "where", "mean", "important", "last"};//供游戲的單詞庫 

int main()
{
 srand(time(0));
 char play;
 cout << "Will you play a word game? <y/n> ";
 cin >> play;
 play = tolower(play);
 while(play=='y')
 {
  string first(wordlist[rand()%NUM]);//隨機選擇單詞 
  int length=first.length();
  string player(length,'-');//玩家猜測的單詞 
  string badguess;//猜錯的字母集合 
  int guesses=10;//猜錯的機會 
  char guess;
  cout<<"您有"<<guesses<<"次猜錯的機會。\n";
  cout<<"您的單詞:"<<player<<'\n';
  while(guesses>0&&player!=first)
  {
   cout<<"請您猜吧!";
   cin>>guess;
   if(badguess.find(guess)!=string::npos||player.find(guess)!=string::npos)
   {
    cout<<"對不起,這個字母您已經猜過了。";
    continue;
   }//判斷是否已經猜過 
   int temp=first.find(guess);
   if(temp==string::npos)
   {
    cout<<"啊!猜錯了。\n";
    guesses--;
    badguess+=guess;
   }//猜錯后的處理 
   else
   {
    player[temp]=guess;
    temp=first.find(guess,temp+1);
    while(temp!=string::npos)//繼續搜索該字符,看是否單詞中有多個該字符 
    {
     player[temp]=guess;
     temp=first.find(guess,temp+1);
    }
   }
   cout<<"您還剩下"<<guesses<<"次猜錯的機會。\n";
   cout<<"您當前猜出的單詞:"<<player<<'\n'; 
   cout<<"您當前猜錯的字母集合:"<<badguess<<'\n'; 
  } 
  if(guesses==0)
   cout<<"對不起,您失敗了。\n";
  else
   cout<<"您真棒!\n";
   cout<<"正確單詞為:"<<first<<'\n';
   cout << "Will you play again? <y/n> "; 
   cin>>play;
 }

 system("PAUSE");
 return 0;
} 



  下面是運行結果:

    Will you play a word game? <y/n> 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? <y/n> 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”都顯示出來了
    您當前猜錯的字母集合:
    
  大家若有興趣,可以對這個程序進行擴充,比如加入難度選擇、最后給出對玩家的評價等。最后,希望大家能通過這個范例,更加熱愛C++!






?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产欧美一区二区| 日韩欧美中文一区二区| 日韩1区2区3区| 亚洲国产精品高清| 欧美日韩一区二区电影| 春色校园综合激情亚洲| 免费人成在线不卡| 日韩高清不卡在线| www.欧美日韩国产在线| 国产91精品一区二区麻豆网站| 国产又黄又大久久| 国产自产2019最新不卡| 国产一区二区三区香蕉| 欧美日韩免费在线视频| 国产精品国产三级国产普通话99| 国产精品福利av | 中文字幕不卡在线观看| 奇米亚洲午夜久久精品| 99久久精品免费看| 欧美亚洲一区二区在线观看| 91久久精品一区二区二区| 91免费国产在线| 欧美日韩一本到| 亚洲精品国产高清久久伦理二区| 亚洲第一成年网| 日韩成人免费看| 欧美日本乱大交xxxxx| 久久天堂av综合合色蜜桃网| 国产欧美一区二区三区网站| 1024国产精品| 午夜精品久久久久久| 六月丁香综合在线视频| 国产综合色视频| 精品国产人成亚洲区| 欧美激情在线看| 成人午夜看片网址| 国产午夜精品一区二区| 亚洲成人免费观看| 欧美视频一区二区三区四区| 亚洲观看高清完整版在线观看| 国产精品资源在线| 欧美特级限制片免费在线观看| 一区二区三区在线视频播放 | 国产一区二三区| 久久久久久亚洲综合| 天堂成人国产精品一区| 久久精品国产亚洲5555| 精品免费一区二区三区| 亚洲精品免费视频| 欧美伊人久久大香线蕉综合69| 亚洲视频香蕉人妖| 国产精品996| 国产精品毛片a∨一区二区三区| 另类中文字幕网| 国产喂奶挤奶一区二区三区| 成人av电影免费观看| 精品国产乱子伦一区| 国产精品一卡二卡| 亚洲欧美一区二区三区极速播放| 精品一区二区在线观看| 欧美婷婷六月丁香综合色| 日韩av中文字幕一区二区| 欧美一区二区三区四区高清| 国产精品自拍在线| 亚洲精品伦理在线| 日韩视频在线观看一区二区| 成人av集中营| 亚洲va国产va欧美va观看| 久久只精品国产| 欧美影院精品一区| 国内精品久久久久影院薰衣草| 国产精品久久久久影院亚瑟| 精品视频一区二区三区免费| 91久久线看在观草草青青| 久久精品男人天堂av| 欧美中文字幕一区二区三区| 欧美国产精品一区| 欧美色偷偷大香| 成a人片国产精品| 日韩精品成人一区二区在线| 国产精品久久久久久久久快鸭| 91精品国产综合久久久久久| 亚洲自拍与偷拍| 欧美人妖巨大在线| 成人激情文学综合网| 日本少妇一区二区| 自拍偷拍欧美精品| 亚洲人吸女人奶水| 久久夜色精品国产噜噜av| 欧美四级电影网| 一本到高清视频免费精品| 中文字幕亚洲成人| 精品国产乱码久久久久久老虎| 欧美亚洲免费在线一区| 成人一级片在线观看| 麻豆成人免费电影| 国产日韩欧美麻豆| 精品久久久久久久人人人人传媒| 91美女片黄在线| 97久久精品人人澡人人爽| 国产一区二区不卡在线 | 午夜不卡av免费| 亚洲精品免费在线观看| 亚洲视频 欧洲视频| 国产精品国产三级国产a| 欧美经典一区二区三区| 欧美精品一区二区高清在线观看| 51精品秘密在线观看| 欧美色图激情小说| 在线观看视频91| 欧美主播一区二区三区| 欧美性高清videossexo| 欧美在线观看18| 欧美伊人精品成人久久综合97| 色国产精品一区在线观看| 99久久亚洲一区二区三区青草| 成人精品免费视频| 99精品在线观看视频| 99精品国产91久久久久久| 91在线无精精品入口| 99v久久综合狠狠综合久久| 91麻豆国产在线观看| 一本色道**综合亚洲精品蜜桃冫| 91传媒视频在线播放| 91成人在线观看喷潮| 欧美日韩情趣电影| 欧美sm极限捆绑bd| 国产亚洲精品免费| 国产精品女同一区二区三区| 国产精品天干天干在线综合| 中文字幕一区二区三区不卡| 亚洲视频香蕉人妖| 天天操天天干天天综合网| 免费成人小视频| 国产成a人亚洲| 色婷婷精品久久二区二区蜜臂av| 色婷婷国产精品| 欧美精品v日韩精品v韩国精品v| 国产乱人伦偷精品视频不卡| 成人ar影院免费观看视频| 91蝌蚪porny九色| 在线不卡一区二区| 久久久久久夜精品精品免费| 久久先锋影音av鲁色资源| 亚洲三级电影网站| 日韩av不卡在线观看| 欧美亚洲国产一区二区三区| 欧美日韩免费视频| 久久这里只有精品6| 亚洲欧美成人一区二区三区| 免费在线看成人av| 91丝袜国产在线播放| 日韩一二三区不卡| 中文字幕一区二区三区四区| 五月天精品一区二区三区| 国产电影一区在线| 国产精品一区专区| 色综合久久六月婷婷中文字幕| 欧美卡1卡2卡| 亚洲人一二三区| 久久se精品一区二区| 一本到三区不卡视频| 欧美成人aa大片| 午夜精品久久久久久久蜜桃app| 国产成人综合亚洲91猫咪| 欧美日韩国产天堂| 国产精品传媒入口麻豆| 美女高潮久久久| 欧美视频中文一区二区三区在线观看| 精品第一国产综合精品aⅴ| 一区二区三区精密机械公司| 国产麻豆成人精品| 在线成人小视频| 亚洲人成网站色在线观看| 国产乱码字幕精品高清av| 欧美精品乱码久久久久久| 18欧美乱大交hd1984| 国产高清不卡一区二区| 91精品国产综合久久久蜜臀粉嫩| 一区二区在线观看不卡| 国产91丝袜在线播放九色| 欧美色手机在线观看| 亚洲男人电影天堂| 不卡一区二区中文字幕| 久久久久久久久伊人| 麻豆91在线看| 日韩三级视频在线观看| 日韩电影在线观看一区| 在线观看成人免费视频| 一区二区三区高清| 欧美亚洲国产怡红院影院| 最新不卡av在线| jvid福利写真一区二区三区| 国产午夜亚洲精品理论片色戒| 久久99久久精品| 精品久久人人做人人爽| 91网站在线播放| 亚洲男人的天堂在线aⅴ视频| 99久久精品国产一区| 最新日韩在线视频|