明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

用VC編程完成“幸運(yùn)52”猜價(jià)格游戲

[摘要]文/王楨  看過(guò)中央電視臺(tái)李詠主持的“幸運(yùn)52”的觀眾一定不會(huì)忘記一個(gè)有趣的環(huán)節(jié)——“看商品猜價(jià)格”,整個(gè)過(guò)程緊張、扣人心弦,讓人有一種很強(qiáng)的參與感。想上電視臺(tái)?不太容易,編個(gè)程序自己玩玩,是個(gè)好主...
文/王楨

  看過(guò)中央電視臺(tái)李詠主持的“幸運(yùn)52”的觀眾一定不會(huì)忘記一個(gè)有趣的環(huán)節(jié)——“看商品猜價(jià)格”,整個(gè)過(guò)程緊張、扣人心弦,讓人有一種很強(qiáng)的參與感。想上電視臺(tái)?不太容易,編個(gè)程序自己玩玩,是個(gè)好主意。快快試一下吧!

  游戲設(shè)計(jì)規(guī)則


  按“開(kāi)始游戲”后,商品展臺(tái)將出現(xiàn)一款產(chǎn)品,計(jì)時(shí)器開(kāi)始計(jì)時(shí),必須在一分鐘內(nèi)猜出商品的價(jià)格。將所猜的價(jià)格輸入到編輯框中,按回車鍵或[確認(rèn)輸入]鍵,計(jì)算機(jī)將對(duì)輸入值進(jìn)行判斷,給出三種結(jié)果,即“高了”、“低了”及“完全正確”。根據(jù)提示做下一步判斷,如果判斷正確,則給出下一件商品,直到耗時(shí)結(jié)束。除了時(shí)間限制,限制每種商品競(jìng)猜的次數(shù)不超過(guò)十五次。要想過(guò)關(guān)可不那么容易!

  原理及功能實(shí)現(xiàn)

  本程序可以分成幾個(gè)功能模塊,游戲啟動(dòng)模塊、計(jì)時(shí)模塊、提交答案模塊、商品顯示模塊。下面具體介紹一個(gè)各模塊的功能。

  成員變量:

  int Imagecounter; //控制計(jì)時(shí)器

  int random[9]; //實(shí)現(xiàn)記憶已選商品

  int totalnum=0; //控制猜價(jià)次數(shù)

  int tmprandom; //標(biāo)識(shí)當(dāng)前商品號(hào)

  int recordersuccess; //標(biāo)識(shí)猜對(duì)次數(shù)

  IDI_time1~IDI_time13代表了每隔5秒的各種計(jì)時(shí)器狀態(tài)圖標(biāo)ID號(hào);

  IDI_commondity1~IDI_commondity10代表以上十種商品的圖標(biāo)ID號(hào);

  1、游戲啟動(dòng)模塊

  該模塊的啟動(dòng)是對(duì)應(yīng)于圖1中的[開(kāi)始游戲]按鈕,主要是設(shè)置計(jì)時(shí)時(shí)鐘,初始化一些變量參數(shù),并激活價(jià)格輸入編輯控件框,同時(shí)為玩家隨機(jī)調(diào)入第一件商品。

  2、計(jì)時(shí)模塊

  它利用發(fā)送的WM_TIMER消息,來(lái)處理關(guān)于游戲計(jì)時(shí)方面的事務(wù),在該消息的響應(yīng)函數(shù)OnTimer()中處理每隔5秒的圖標(biāo)動(dòng)態(tài)調(diào)入,這樣在對(duì)話框界面上會(huì)出現(xiàn)時(shí)鐘,直觀地提示玩家用時(shí)量,當(dāng)出現(xiàn)超時(shí),計(jì)時(shí)器消失,輸入編輯控件轉(zhuǎn)成非激活狀態(tài),同時(shí)彈出一個(gè)對(duì)話框提示。

  3、提交答案模塊

  該模塊的啟動(dòng)是對(duì)應(yīng)于圖1中的[確定輸入]按鈕,它負(fù)責(zé)處理用戶輸入的價(jià)格,并將它同商品的實(shí)際價(jià)格比較,并做出提示。如果正確,它將調(diào)用“商品顯示模塊”再次在商品展臺(tái)上顯示另一種商品,在這個(gè)模塊中我們加入了對(duì)一件商品所猜次數(shù)的記錄,并做出了相應(yīng)的處理,這也是為了增加游戲的難度。

  //判斷結(jié)果

  void CMyguessDlg::Onyes()

  {

   double tmpinputprice,tmprealprice;

   char tmpcharinputprice[10],*end;

   CString mystate;

   //將對(duì)話框輸入傳給它所捆綁的變量

   totalnum++;

   UpdateData(TRUE);

   m_digitalcontrol.SetFocus();

   m_digitalcontrol.SetSel(0,-1,FALSE);

   //如果沒(méi)有輸入價(jià)格則提示出錯(cuò)

   if(m_mydigital=="")

   {

  MessageBox("請(qǐng)輸入您猜的價(jià)格!","猜價(jià)格",MB_OK);

  return ;

   }

   //真實(shí)價(jià)格可以用API函數(shù)直接轉(zhuǎn)換

   tmprealprice=strtod(priceandname[tmprandom][0],&&end);

   //首先將CString型轉(zhuǎn)成Char型,再由Char型轉(zhuǎn)成Double類型;

   for(int i=0;i

  tmpcharinputprice[i]=m_mydigital.GetAt(i);

   tmpinputprice=strtod(tmpcharinputprice,&&end);

  //如果15次沒(méi)有猜中,中止游戲

  if(totalnum<=15){

  //做價(jià)格判斷!

  if(tmpinputprice>tmprealprice)

  {mystate="高了!";}

  else if(tmpinputprice

  {mystate="低了!";}

  else

  {

  //完全正確后應(yīng)作新的商品猜價(jià)處理!初始化并保存一些設(shè)置

  MessageBox("完全正確!","猜價(jià)格",MB_OK);

  //記錄猜中的次數(shù);

  recordersuccess++;

  continueguess();

  return ;

  }

  //......此處略,讀者應(yīng)加入判斷結(jié)果顯示代碼;

   }

   else

   {

  MessageBox("對(duì)不起,您已超過(guò)允許次數(shù)了!","警告提示",MB_OK);

  return ;

   }

  m_digitalcontrol.SetFocus();

  m_digitalcontrol.SetSel(0,-1,FALSE);

  }

  4、商品顯示模塊

  如果玩家在沒(méi)有超時(shí)或超次數(shù)的情況下猜對(duì)了價(jià)格,那么在“提交答案模塊”中將調(diào)用這一模塊,它會(huì)顯示出下一個(gè)不同的商品,同時(shí)調(diào)用“游戲啟動(dòng)模塊”。

  我們用random[9]數(shù)組來(lái)記錄商品的號(hào),用recordersuccess來(lái)記錄猜中的次數(shù),對(duì)不同的次數(shù)作相應(yīng)的商品選擇的處理,以達(dá)到顯示不同的商品的目的。

  結(jié)束語(yǔ)

  本程序還可以做更進(jìn)一步修改,比如現(xiàn)在的商品及價(jià)格都是以一種硬代碼的方式寫(xiě)入程序之中這樣顯得不太靈活,讀者可以設(shè)計(jì)一個(gè)“加入商品”的功能項(xiàng),另外還可以加上一個(gè)難度設(shè)置,對(duì)時(shí)間和所猜的次數(shù)作一些動(dòng)態(tài)調(diào)整,這些工作就留給聰明的讀者自己實(shí)現(xiàn)吧!