24點游戲的開發(fā)和實現.doc_第1頁
24點游戲的開發(fā)和實現.doc_第2頁
24點游戲的開發(fā)和實現.doc_第3頁
24點游戲的開發(fā)和實現.doc_第4頁
24點游戲的開發(fā)和實現.doc_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

124點游戲的開發(fā)和實現摘要:近年來,隨著經濟的日益發(fā)展,人們的生活水平不斷提高,生活質量也在漸漸的改善。適當的娛樂游戲對人們的業(yè)余生活是不可必缺的。說到娛樂游戲,人們可能會想到網絡上許許多多讓人迷戀的網絡游戲,比如說,傳奇,奇跡,cs等等。是的,的確這些游戲給人們的業(yè)余生活添加了很多樂趣。借鑒網上的邊鋒游戲,我用vc+開發(fā)設計了24點游戲的實現算法,并在windows圖形環(huán)境下設計出一個人機交互的游戲系統(類似于紙牌游戲)。關鍵詞:窮舉法棧遞歸函數Thedevelopmentandrealizationof24piontsgameAbstract:Recently,withthedevelopmentofeconomic,thepeopleslifebecomesbetterandbetter,lifeconditionalsoisimprovingmoreandmore.Properrecreationisindispensableinthepeoplespasttimelife.Mentionedtothegame,peoplemayassociatemanyfascinatedonlinegames,suchasLegend,MU,CSandsoon.Certainly,thesegamesenrichpeopleslifewithmoreandmorejoys.Usingthewinggameforreference,Idevelopedanddesignedtherealizationarithmeticof24pointsgame.NextIdesignedahuman-computeralternantgamesystem(similartocardgame).Keyword:enumeratingmethodstackrecursivefunction2124點游戲算法實現1.124點游戲簡介要開發(fā)一個游戲不是那么容易的,哪怕是簡單的算術游戲。要是沒有一定的專業(yè)知識,沒有一定的思維能力是不行的。24點游戲是一個傳統的算術游戲,其游戲之精髓就是考驗人腦的反應能力。所謂24點游戲,就是通過加,減,乘,除4則運算,將給定的4個整數算出24。當然,傳統的紙牌游戲其數字是有限定范圍的,一般是從1到13。經統計,當算的目標數把24改為2的時候,獨立解數更多,就是解的形式趣于集中化,大多數最后一步用減法(如:2*8-3*5)。游戲時會感到單調。由于24的因數多,解的形式就豐富,能充分發(fā)掘游戲者數學發(fā)散思維能力。要做好一個簡單的24點游戲要具備很多知識。其中最主要的思想就是,24點的表達式要怎樣行成,這是此游戲的關鍵。而要做一個完美的24點紙牌游戲,則需要的知識將會更多?,F今,網絡上的紙牌游戲數不甚數,比較出名的有聯眾游戲,邊鋒游戲,qq游戲。當然,他們的開發(fā)隊伍龐大之極不是我們個人可以比及的。因此要一個人做好一個比較完美的游戲,是需要一定的游戲天分。以下我就開發(fā)24點游戲的幾個關鍵算法和分析做詳細的剖析。1.224點游戲的算法1.2.124點算法(1)24點游戲的算法,其中最主要的思想就是窮舉法。所謂窮舉法就是列出4個數字加減乘除的各種可能性,包括括號的算法。我們可以將表達式分成以下幾種:首先我們將4個數設為a,b,c,d,,其中算術符號有+,*,/,(,)。其中有效的表達式有a*(b-c/b),a*b-c*d,等等。列出所有有效的表達式。其中我們用枚舉類型將符號定義成數字常量,比如用1表示+,2表示-等。如下是我對窮舉法的一種編程語言。在編程的頭部要對變量做下定義。其中a,b,c,d的范圍是1到13。因為傳統的24點游戲是紙牌游戲,而紙牌游戲的數字就是從1到13,其中a是1,K是13,Q是12,J是11,其他的就是牌面的數字。這就需要在定義變量的時候要有限制。在vc+中的MFC編程中,在定義控件的變量范圍可以直接填寫變量的最大和最小,在此編程中的最大是13,最小是1。這就給編程寫語句帶3來了方便(因為其自動會生成語句)。下面我介紹下窮舉法的主要實現,我們知道要實現24點的算法,就是通過4個數字,4個運算符號和2對括號(最多為2對),通過各種組合判斷其結果是否為24。我們用a,b,c,d代替4個數字??紤]每種可能,總的算法就有7種可能。分別為:1,沒括號的(形如a*b*c*d);2有括號的(形如(a*b)*c*d);3有括號的(形如(a*b*c)*d);4有括號的(形如a*(b*c)*d);5有括號的(形如(a*b)*(c*d));6有括號的(形如(a*b)*c)*d);7有括號的(形如(a*(b*c)*d)。接下來就是對每一種進行分析判斷。我們拿2種情況做為例子,一種是沒括號的,一種有括號的。先拿沒括號的分析。我們知道沒括號的式子包括其運算符和數字總共為7個(3個運算符,4個數字),于是我們定義一個數組,用于存放運算符和數字。運算符我們可以用枚舉變量來定義,首先我們通過循環(huán)語句形成一個表達式子(但這個表達式的運算循序是亂的)。表達式子有很多種情況,利用循環(huán)語句我們可以一一將其寫出,例如(a+b+c+d,a+b+c-d,a+b+c*d,a+b+c/d.等等)生成表達式子的后,接著就是判別運算順序。在沒有括號存在的情況下,我們令其先運算*,/。這個順序的選擇很輕松,我們可以定義一個bool類型的函數,我們對數組進行掃描,當掃描到/,*,其返回真值,就直接進行運算。依次照樣進行掃描,當所有的/,*運算都進行為止,接著將/,*運算生成的結果合并棧(即將運算的結果放在一個變量中),接著就對其與下一個數字進行運算,直到所有的值都計算出來了,最后將最后運算結果放于一個變量中。我們將這個變量的值和24相減,假如其值是在1E-6之外,則說明此運算式能計算出24。接下來我們來做第2種有括號的算法,有括號的算法和沒括號的算法就是在判斷運算循序的時候有所差別。我們知道,括號就是用來改變運算順序而添加的。判斷括號的先后順序,我們同樣可以用一個bool類型的函數來判別,在生成表達式要判斷其運算順序時,我們首先掃描表達式存放的數組,假如掃描到左括號,則將先對左括號后面的式子進行運算,接著在是對/,*的優(yōu)先級進行計算。在第2種(形如(a*b)*c*d)的情況下,我們先將a,b先進行運算,生成其值,并將結果存放與另一個變量中,接著將得到的初步結果和c和d進行運算,最后得到總的結果。將其總結果和24相減,若其值小于1E-6則說明此表達式能算出24。接下來幾種有括號的算法和第2種情況類似,我們不做詳細的說明。以上就是窮舉法的基本實現算法。41.2.224點游戲算法(2)24點游戲的算法各種各樣,各有千秋,現在讓我們來討論另一種24點游戲算法。此算法是在dos下實現的,但其思想明確,語句簡短。其主要思想是簡化算法,他將24點的算法排序分成如下幾種,如下我們用a,b來代替變量。他將其分成如下6種情況,分別是a+b,a-b,b-a,a*b,a/b,b/a這6種情況,我們知道a+b和b+a是一樣的,a*b和b*a是一樣的。這樣就可以省去2種算法。提高系統的使用效率,內存占用量小。還有其第2個思想是在判別24點正確與否的時候,采用了與24點相減絕對直在1E-6之外則判別其為正確,這就給運算帶來了精確度,就如5551等的數字也可以輕松算出,不會略過了。如下我們通過一段程序來看看其主程序段。boolSearch(intn)if(n=1)if(fabs(number0-NUMBER_TO_CAL)PRECISION)coutexpression0endl;returntrue;elsereturnfalse;for(inti=0;in;i+)for(intj=i+1;jn;j+)doublea,b;stringexpa,expb;a=numberi;b=numberj;numberj=numbern-1;expa=expressioni;expb=expressionj;express

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論