【正文】
種判別是正確的,但 24 點(diǎn)游戲是允許中間過(guò)程存在有限小數(shù),甚至是無(wú)限循環(huán)小數(shù)。 24 點(diǎn)算法的多樣性(即多解的算法和優(yōu)化算法)的討論 我們拿遞歸算法來(lái)分析其算法的多樣性。那我們?cè)诔绦蛑幸绾卧O(shè)置其最簡(jiǎn)單的算法呢。因此判斷優(yōu)化與否的關(guān)鍵就是,判斷其中間過(guò)程是否有 小數(shù)結(jié)果生成,并討論其用不存在小數(shù)中間結(jié)果的算法是否可行。假設(shè)現(xiàn)在你要測(cè)試這個(gè)游戲的表達(dá)式判別怎么樣。要進(jìn)行表達(dá)式的判別,我們必須要用編譯原理。我們可以看出,逆波蘭式可以將有括號(hào)的表 達(dá)式省略括號(hào),那為什么其能省略括號(hào)呢,正就是逆波蘭式的實(shí)現(xiàn)方法。因此我們?cè)谂袛噍斎氡磉_(dá)式是否錯(cuò)誤的時(shí)候就可以利用此種思維方法。 紙牌游戲界面的算法 獲得紙牌界面的函數(shù) 接下來(lái)是紙牌游戲的制作,要做紙牌游戲。發(fā)牌算發(fā)也是一個(gè)直的考慮是關(guān)鍵。其中最主要的函數(shù)就是一個(gè)隨即函數(shù) rand(),此函數(shù)是 c++系統(tǒng)中自帶的函數(shù), 存放于 頭文件中。因此給其中的牌面文件命名時(shí)要有統(tǒng)一性,又要有區(qū)別性。其次就是要定義一個(gè)矩形空間,此函數(shù)的定義在 c++中有著現(xiàn)存的函數(shù)。只是 大小上有點(diǎn)差別,比如高度,左右位置等都應(yīng)該有相應(yīng)的變化。接著我們定義一個(gè) a[52],將 52 張牌按順序依次存放于數(shù)組中。大小我們可以對(duì)其很好的做控制,而花色則沒(méi)有相映的程序代碼。 void CWorkView::OnPaint() //重新繪制牌面的程序 { int i。 ::StretchBlt(hDesDC1, rectdate[i]., rectdate[i]., width, height, hSrcDC1, 0, 0, , ,+SRCCOPY)。 UpdateData(true)。} 查看如上函數(shù),我們看到的關(guān)鍵函數(shù)就只有一個(gè),那就是 KillTimer 函數(shù)。 (CButton*)CWnd::GetDlgItem(IDC_BUTTON5)EnableWindow(FALSE)。 游戲的實(shí)現(xiàn)其具體的函數(shù) 游戲?qū)崿F(xiàn)后的主要界面 完成了以上 4 大節(jié)工作之后,一個(gè)簡(jiǎn)單的 24 點(diǎn)游戲程序就基本生成了。 如下分細(xì)節(jié)對(duì)系統(tǒng)實(shí)現(xiàn)進(jìn)行分析,首先我們來(lái)看下按下設(shè)置牌面產(chǎn)生的效果。在第三個(gè)窗口中輸入“方法”倆漢字 的時(shí)候,我們看到了“輸入語(yǔ)法錯(cuò)誤”的提示。 iNumArr[1] = iNum2。 } if (CalcArray7(iNumArr, strResult)) 調(diào)用 CalcArray7 函數(shù)判斷其是否能算出 { return TRUE。j4。 } iNumMaths[0][0]=iNumInput[i]。 for (int oneOP = eAdd。//表明第一個(gè)輸入的字符為變量還是運(yùn)算符號(hào) iNumMaths[3][0] = twoOP。 } 24 點(diǎn)算法表達(dá)式的判別程序 int temp=0。 UpdateData(FALSE)。 } else if(errorNum==1) { MessageBox(輸入括號(hào)不匹配 ) } else if(errorNum==2) { MessageBox(表達(dá)式不存在 )。amp。 } if((getatq==39。)。239。)amp。 length=()。 } } } for(i=1。 } else{ if(dd==24) MessageBox(計(jì)算正確 )。 char temppath[80]。 if(tempdate[i]==51) { tempdate[i]=0。i++) { rectdate[i].file=pathname[tempdate[i]]。當(dāng)鼠標(biāo)點(diǎn)中并移動(dòng)的時(shí)候,我們使用刷新界面句柄,計(jì)算出鼠標(biāo)移動(dòng)的坐標(biāo),并通過(guò)坐標(biāo)定位將其紙牌重新畫(huà)于界面上。這就缺少了人與人之間的對(duì)比,使得自己的智力沒(méi)有了一個(gè)比較。積分功能和難度設(shè)置是相對(duì)應(yīng)的,可以如下實(shí)現(xiàn),每次游戲開(kāi)始的時(shí)候,選擇難度(其中分為高,低 2 種),假如在要求時(shí)間內(nèi)算出 24 點(diǎn),成功則加 10 分,若未能算出則扣除 10分,最后在游戲退出的時(shí)候顯示總分。在此我僅將網(wǎng)絡(luò)游戲制作的一些技術(shù)和 24 點(diǎn)游戲網(wǎng)絡(luò)版的構(gòu)思做如下的研究。因此,要將 24 點(diǎn)游戲改成網(wǎng)絡(luò)版,其需要好好的構(gòu)思。我們知道一個(gè)好的游戲是需要大家的支持的,是為大家而設(shè)計(jì)的。那我們的服務(wù)器端是如何進(jìn)行處理的呢?其實(shí)在這里我們就充分用到了線程池技術(shù)。大家都知道,我們的服務(wù)器要頻繁的響應(yīng)客戶端的消息同時(shí)要將消息發(fā)送到客戶端,并且還要處理服務(wù)器后臺(tái)游戲 World 的運(yùn)行。找出這些東西的基本的屬性和彼此間的關(guān)系。 總的來(lái)說(shuō),系統(tǒng)的開(kāi)發(fā)過(guò)程是較為枯燥和辛苦的,但你一旦成功地設(shè)計(jì)出一個(gè)能順利運(yùn)行的,且切合實(shí)際 有使用價(jià)值的游戲系統(tǒng) ,并得到別人的肯定時(shí),這種快樂(lè)是無(wú)法言表的,這也將會(huì)是對(duì)我們所付出的努力的最好的回報(bào)。 usually there was an officer on the seat w ith the driver and more officers in the back seat. They splashed more mud than the camions even and if one of the officers in the bac k was very small and sitting between two generals, he himself so small that you could not see his face but only the top of his cap and his narrow bac k, and if the car went especially fast it was probably the King. He lived in Udine and came out in this way nearly every day to see how things were going, and things went very badly. At the start of the winter came the permanent rain and with the rain came the cholera. But it was checked and in the end only seven thousand died of it in the army. ERNEST HEMINGWAY was born in Oak Park, Illinois, in 1899, and began his writing career for _The Kansas City Star_ in 1917. During the First World War he volunteered as an ambulance driver on the Italian front but was invalided home, having been seriously wounded while serving with the infantry. In 1921 He mingway settled in Paris, where he became part of the expatriate circle of Gertrude Stein, F. Scott Fitzgerald, Ezra Pound, and Ford Madox Ford. His first book, _Three Stories and Ten Poems_, was published in Paris in 1923 and was followed by the short story selection _In Our Time_, which marked his American debut in 1925. With the appearance of _The Sun Also Rises_ in 1926, Hemingway became not only the voice of the lost generation but the preeminent writer of his time. This was followed by _Men Without Women_ in 1927, when Hemingway returned to the United States, and his novel of the Italian front, _A Farewell to Arms_ (1929). In the 1930s, Hemingway settled in Key West, and later in Cuba, but he traveled widely to Spain, Italy, and Africaand wrote about his experiences in _Death in the Afternoon_ (1932), his classic treatise on bullfighting, and _Green Hills of Africa_ (1935), an account of biggame hunting in Africa. Later he reported on the Spanish Civil War, which became the background for his brilliant war novel, _For Whom the Bell Tolls_ (1939), hunted Uboats in the Caribbean, and covered the E uropean front during the Second World War. Hemingway39。通過(guò)這次畢業(yè)設(shè)計(jì)使我有了一次實(shí)踐的機(jī)會(huì),親身體會(huì)到了去開(kāi)發(fā)一個(gè)小型游戲系統(tǒng)的酸甜苦辣,增強(qiáng)了我的動(dòng)手能力,并對(duì)開(kāi)發(fā)一個(gè)游戲系統(tǒng)的步驟有了更為明確的了解,同時(shí),還使我對(duì) vc++編程有了更加深刻的理解,積累了一定的經(jīng)驗(yàn),為我以后能更好的走向工作崗位提供了幫助。系統(tǒng)要實(shí)現(xiàn)的功能都要在這個(gè)階段中確定下來(lái) 。因此很好的處理好內(nèi) 存池處理技術(shù)是非常重要的。而對(duì)于這些已經(jīng)分成的各個(gè)微小的時(shí)間片而言,在各個(gè)不同時(shí)間片中要處理的用戶請(qǐng)求和需要發(fā)送到用戶端的游戲數(shù)據(jù)量也將是不一樣的。 首先解釋一下協(xié)議的概念,協(xié)議大家都了解是一種通信規(guī)則,例如: TCP/IP,UDP 等等,這些是我們?cè)诰W(wǎng)絡(luò)通信過(guò)程中所處理使用的協(xié)議。因此我建議網(wǎng)絡(luò)版 24 點(diǎn)應(yīng)該按如下方案開(kāi)發(fā)。畢竟,它的實(shí)現(xiàn)簡(jiǎn)單,過(guò)程簡(jiǎn)介,只要腦子轉(zhuǎn)的快就可以獲的勝利。我們判別在生成 24 點(diǎn)算法的時(shí)候,在對(duì)每個(gè)中間過(guò)程進(jìn)行判斷,假如中間結(jié)果和一個(gè)整數(shù)相減范圍在( 01)之間,則說(shuō)明中間過(guò)程運(yùn)用到了小數(shù),則將其設(shè)置為高級(jí)難度。因此光顧積分而沒(méi)排行,這是沒(méi)有任何意義的。而要完成紙牌的拖動(dòng)來(lái)行成表達(dá)式,這就需要對(duì)紙牌移動(dòng)到的范圍進(jìn)行嚴(yán)格的計(jì)算,比如牌的長(zhǎng)和寬要控制的很好,什么范圍內(nèi)是一張牌的范圍,什么范圍是一個(gè)運(yùn)算符號(hào)圖形標(biāo)志的范圍 ,要精確的定位。要達(dá)到這兩個(gè)要求這必須實(shí)現(xiàn)紙牌的選取和拖放技術(shù)。 } } } if(tempdate[i]13)//判斷牌的花色為方塊 { m_iNum[i]=tempdate[i]+1。//將 52 紙牌文件路徑按順序依次存放于數(shù)組中 for(i=0。 UpdateData(FALSE)。i++) { if(c[i]==m_iNum[0]) { a[i]。i14。(getath==39。c39。 length=()。)amp。039。jlength1。 har * sz=new char[nLength]。//用于判斷輸入數(shù)字和牌面數(shù)字是否匹配 rrorNum=3。 iNumMaths[5][0] = threeOP。 oneOP++)//通過(guò)循環(huán)語(yǔ)句實(shí)現(xiàn)運(yùn)算順序 for (int twoOP=eAdd。 iNumMaths[4][0]=iNumInput[k]。 } for(int k=0。 } BOOL CalcArray1(int iNumInput[], CStringamp。 iNumArr[3] = iNum4。 以下是輸入正確表達(dá)式,并得出 24 點(diǎn)算法后的界面顯示。在請(qǐng)輸入牌面的輸入框中默認(rèn)了牌面數(shù)字全為 1,當(dāng)然我么可以將其改寫(xiě),比如我們改為 3 4 3 5 并按下確定,則彈出如下窗口。通過(guò)游戲的連接,編譯并運(yùn)行。 (CButton*)CWnd::GetDlgItem(IDC_BUTTON2)EnableWindow(FALSE)。其中還用到了控制時(shí)間秒數(shù)的變量 timercount,在如上函數(shù)中其最大直為 30,則說(shuō)明游戲?qū)⒃?30 秒內(nèi)結(jié)束。 timercount。 以上是完成一個(gè)簡(jiǎn)單 24 點(diǎn)游戲必要的程序設(shè)計(jì),接著我介紹下游戲中其他的一些控件。 // device context for painting for(i=0。 重新發(fā)牌的函數(shù) 重新開(kāi)始游戲的算法簡(jiǎn)介。這樣做的目的是為了有利于判別其花色。在 API 中生成圖片我們用到了繪制圖片的功能和刷新功能。