freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

24點(diǎn)游戲的開發(fā)和實(shí)現(xiàn)—計(jì)算機(jī)畢業(yè)設(shè)計(jì)-文庫吧資料

2024-12-07 07:44本頁面
  

【正文】 s(a[5])+abs(a[6]) +abs(a[7])+abs(a[8])+abs(a[9])+abs(a[10])+abs(a[11])+abs(a[12])+abs(a[13])。 } if(c[i]==m_iNum[2]) { a[i]。i++) { if(c[i]==m_iNum[0]) { a[i]。 } } } for(i=1。 start=temp+1。start=0。i14。 length=()。)。)) { (j,39。(getath==39。)amp。 } if((getatq==39。 (j+1,1)。c39。239。amp。139。 length=()。)。)) { (j,39。(getath==39。)amp。 } if((getatq==39。 (j+1,1)。a39。039。amp。139。 int getath=(j+1)。jlength1。 } else if(errorNum==1) { MessageBox(輸入括號(hào)不匹配 ) } else if(errorNum==2) { MessageBox(表達(dá)式不存在 )。 m_edit3=dd。 UpdateData(true)。 har * sz=new char[nLength]。 UpdateData(FALSE)。 int length=()。//用于在輸入框中輸入字符的變量 UpdateData(true)。//用于判斷輸入數(shù)字和牌面數(shù)字是否匹配 rrorNum=3。 } 24 點(diǎn)算法表達(dá)式的判別程序 int temp=0。//合并結(jié)果 return TRUE。 double dRes = CalcOneExpress(iNumMaths, 7)。 iNumMaths[5][0] = threeOP。//表明第一個(gè)輸入的字符為變量還是運(yùn)算符號(hào) iNumMaths[3][0] = twoOP。 threeOP++) { iNumMaths[1][0] = oneOP。 twoOP++) for (int threeOP=eAdd。 oneOP++)//通過循環(huán)語句實(shí)現(xiàn)運(yùn)算順序 for (int twoOP=eAdd。 for (int oneOP = eAdd。 iNumMaths[4][1]=eNumber。 iNumMaths[0][1]=eNumber。 iNumMaths[4][0]=iNumInput[k]。 } iNumMaths[0][0]=iNumInput[i]。l4。k++) { if(k==i||k==j) { continue。 } for(int k=0。j4。i4。 { // a * b * c * d 7 number int iNumMaths[7][2]。 } BOOL CalcArray1(int iNumInput[], CStringamp。 } if (CalcArray7(iNumArr, strResult)) 調(diào)用 CalcArray7 函數(shù)判斷其是否能算出 { return TRUE。 } if (CalcArray4iNumArr, strResult)) 調(diào)用 CalcArray4 函數(shù)判斷其是否能算出 { return TRUE。 } if (CalcArray2(iNumArr, strResult)) //調(diào)用 CalcArray2 函數(shù)判斷其是否能算出24 { return TRUE。 iNumArr[3] = iNum4。 iNumArr[1] = iNum2。 strResult) // { //括號(hào)的幾種情況 //無括號(hào) //2 (a b) c d 同 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 int iNumArr[4]。 如上我們看到界面中彈出了“計(jì)算正確”的消息框,實(shí)現(xiàn)了 24 點(diǎn)游戲表達(dá)式的最后判別。 以下是輸入正確表達(dá)式,并得出 24 點(diǎn)算法后的界面顯示。在第三個(gè)窗口中輸入“方法”倆漢字 的時(shí)候,我們看到了“輸入語法錯(cuò)誤”的提示。 其中的 3 個(gè)錯(cuò)誤我們可以清楚的看到,當(dāng)我們看到在第一個(gè)窗口中輸入了與紙牌數(shù)字不正確的數(shù)字之后,提示了“請注意輸入的數(shù)值是否正確”。接著我們來看看表達(dá)式輸時(shí)產(chǎn)生的一些錯(cuò)誤信息提示,包括語法錯(cuò)誤,括號(hào)匹配,數(shù)字匹配等。在請輸入牌面的輸入框中默認(rèn)了牌面數(shù)字全為 1,當(dāng)然我么可以將其改寫,比如我們改為 3 4 3 5 并按下確定,則彈出如下窗口。 如下分細(xì)節(jié)對系統(tǒng)實(shí)現(xiàn)進(jìn)行分析,首先我們來看下按下設(shè)置牌面產(chǎn)生的效果。在菜單中有文件和幫助兩個(gè)主菜單。 從界面中我們看到了其中的主要功能都 具備了。通過游戲的連接,編譯并運(yùn)行。 游戲的實(shí)現(xiàn)其具體的函數(shù) 游戲?qū)崿F(xiàn)后的主要界面 完成了以上 4 大節(jié)工作之后,一個(gè)簡單的 24 點(diǎn)游戲程序就基本生成了。這就實(shí)現(xiàn)了簡單的游戲開始控制。}} 其中在控件中我們添加了控件 BUTTOM5,用于控制游戲的開始。 (CButton*)CWnd::GetDlgItem(IDC_BUTTON2)EnableWindow(FALSE)。 (CButton*)CWnd::GetDlgItem(IDC_BUTTON5)EnableWindow(FALSE)。因此要控制游戲的開始結(jié)束也是游戲中必要的控件。在如上程序中, id 為IDCBUTTON5 的空件在時(shí)間結(jié)束的時(shí)候要消除灰化。其中還用到了控制時(shí)間秒數(shù)的變量 timercount,在如上函數(shù)中其最大直為 30,則說明游戲?qū)⒃?30 秒內(nèi)結(jié)束。} 查看如上函數(shù),我們看到的關(guān)鍵函數(shù)就只有一個(gè),那就是 KillTimer 函數(shù)。 timercount=30。 UpdateData(FALSE)。 timercount。 UpdateData(true)。時(shí)鐘的設(shè)置在 vc++鐘也是比較簡單的,其中用到的函數(shù)也非常簡介,接著讓我們來看看其簡單的程序。 其他一些控件的設(shè)置 時(shí)鐘的設(shè)置 時(shí)鐘是用來控制游戲速度,和提高的人的智力所必需的控件。 以上是完成一個(gè)簡單 24 點(diǎn)游戲必要的程序設(shè)計(jì),接著我介紹下游戲中其他的一些控件。 ::StretchBlt(hDesDC1, rectdate[i]., rectdate[i]., width, height, hSrcDC1, 0, 0, , ,+SRCCOPY)。 SelectObject(hSrcDC1, rectdate[i].hBitmap)。i++) { rectdate[i].hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),rec GetObject(rectdate[i].hBitmap, sizeof BITMAP, amp。 // device context for painting for(i=0。 void CWorkView::OnPaint() //重新繪制牌面的程序 { int i。刷新函數(shù)可以令原有的界面撤消 ,然后在重新繪制界面。因此,重新發(fā)牌也是其中很重要的算法。 重新發(fā)牌的函數(shù) 重新開始游戲的算法簡介。大小我們可以對其很好的做控制,而花色則沒有相映的程序代碼。通過以上的查找我們可以找到紅心 10。比如我們要拿一張紅桃 10,則具備兩個(gè)條件的數(shù)組值只有一個(gè)。這樣做的目的是為了有利于判別其花色。接著我們定義一個(gè) a[52],將 52 張牌按順序依次存放于數(shù)組中。既然我們在做界面的時(shí)候已經(jīng)給 52張牌給了命名,則我們只要對 52張牌的花色進(jìn)行分類。這是游戲中的一個(gè)關(guān)鍵,也是程序成功與否的關(guān)鍵因素。在 API中生成圖片我們用到了繪制圖片的功能和刷新功能。只是 大小上有點(diǎn)差別,比如高度,左右位置等都應(yīng)該有相應(yīng)的變化。 rectdate[0].firstrect =rectdate[0].originrect。 rectdate[0]. =rectdate[0]. =50。 rectdate[0]. =rectdate[0]. =50。其次就是要定義一個(gè)矩形空間,此函數(shù)的定義在 c++中有著現(xiàn)存的函數(shù)。首先我們要指定牌面存放的位置,位置的研究是很重要的。牌面做好了,接下來就是要怎樣在游戲界面中形成牌面。比如,我們命名黑桃 k 為 a13,桃花 k 為 b13,梅花 k為 c13,方快 k為 d13。因此給其中的牌面文件命名時(shí)要有統(tǒng)一性,又要有區(qū)別性。將其中的 52 張牌存放為 52個(gè)圖片文件。其函數(shù)形式為 rand() %52+1;其中形成的 0到 51個(gè)數(shù)將代表一 副撲克牌中的 52張。通過調(diào)用 Rand()函數(shù)就可以生成隨即數(shù)據(jù),但隨即函數(shù)生成的數(shù)字是凌亂無序的,它范圍很大,因此必須對它加以限定范圍,這時(shí)我們用到了一個(gè)方法,就是用整除求余的方法。其中最主要的函數(shù)就是一個(gè)隨即函數(shù) rand(),此函數(shù)是 c++系統(tǒng)中自帶的函數(shù), 存放于 頭文件中。在這里我們使用整除求余功能,如: b[1]=rand()%52+1 這樣每次輸出隨即數(shù)就不會(huì)大于 52 了,達(dá)到了預(yù)期的效果。但是這里產(chǎn)生的隨即數(shù)都是任意的,可能大于 52。我們先將每個(gè)數(shù)和數(shù)組相連接起來。發(fā)牌算發(fā)也是一個(gè)直的考慮是關(guān)鍵。這樣 52 張牌就對應(yīng)了 52 個(gè)圖形文件。并且將其中的 52 張紙牌牌面進(jìn)行系統(tǒng)化的命名。界面需要通過截圖來獲得。 紙牌游戲界面的算法 獲得紙牌界面的函數(shù) 接下來是紙牌游戲的制作,要做紙牌游戲。最后,判斷括號(hào)匹配的時(shí)候只要求出數(shù)組中所有數(shù)字的絕對值之和,如果其值不為 0則說明括號(hào)沒匹配,否則就是匹配的。在判斷括號(hào)匹配的時(shí)候,我們可以定義一整形數(shù)組變量 a[]和 2 個(gè)整形變量 count1,count2另其初始 值全為 0,當(dāng)遇到左括號(hào)字符是另其變量 a[0]++,并且 count1++;如過遇到第 2 個(gè)左括號(hào)則 a[1]++,并且 count1++,其中數(shù)組的序號(hào)值 1 有 count1控制(即如 count1=1 則序號(hào)為 1),同理第 3個(gè)左括號(hào),第 4個(gè)左括號(hào)都是同樣的語句。接著是判斷,輸入的數(shù)字和系統(tǒng)給的直是否一樣,這也非常的簡單。因此我們在判斷輸入表達(dá)式是否錯(cuò)誤的時(shí)候就可以利用此種思維方法。接著在往棧中推入 b, d,我們看到在 d 后又出現(xiàn)了 *號(hào),著將離 *最近的兩個(gè)變量進(jìn)行想乘,并且合并棧,將結(jié)果存放于棧中。假如,中間遇到了運(yùn)算符號(hào),就如在 c 后面遇到了 *號(hào),則系統(tǒng)將離 *號(hào)最近的兩個(gè)變量進(jìn)行乘運(yùn)算,得到一個(gè)結(jié)果。其實(shí),逆波蘭的思想是利用了棧的功能。我們可以看出,逆波蘭式可以將有括號(hào)的表 達(dá)式省略括號(hào),那為什么其能省略括號(hào)呢,正就是逆波蘭式的實(shí)現(xiàn)方法。逆波蘭式的思想是這樣的:比如我們現(xiàn)在輸入一串運(yùn)算符號(hào)和一些整形類型的變量,他能通過一定的算法順序進(jìn)性排列 。我們可以輕松的將其判斷出來。特別是對表達(dá)式運(yùn)算順序和表達(dá)式輸入正確與否能輕易的做出。要進(jìn)行表達(dá)式的判別,我們必須要用編譯原理。然而要做到表達(dá)式真正的符和要求,其需要對其采取一定的措施。則說明此游戲沒有做任何的表達(dá)式判別,至少?zèng)]有對輸入數(shù)字進(jìn)行控制。我們可輸入 1*2*3*4 這個(gè)算式子。假設(shè)現(xiàn)在你要測試這個(gè)游戲的表達(dá)式判別怎么樣。我們舉個(gè)例子說明下,假設(shè)現(xiàn)在我們已經(jīng)開始某一個(gè) 24 點(diǎn)紙牌游戲,然后按下開始鍵。表達(dá)式的判別是除了算法之后的首當(dāng)其沖也解決的問題。因?yàn)樗隙ㄊ菦]有優(yōu)化。因此判斷優(yōu)化與否的關(guān)鍵就是,判斷其中間過程是否有 小數(shù)結(jié)果生成,并討論其用不存在小數(shù)中間結(jié)果的算法是否可行。 還有我們假定,在能用中間過程為全整數(shù),而某種表達(dá)式中間過程則存在著小數(shù)結(jié)果,則認(rèn)為后者算法是不優(yōu)化的。因此,對于逆波蘭式相同,但實(shí)際程序中不同的程序,就可以判斷其優(yōu)化程度。說明兩者運(yùn)算的結(jié)果是一樣的。那我們在程序中要如何設(shè)置其最簡單的算法呢。通過逆波蘭式的判定,求出其最優(yōu)化的算法。先重加法算起,依次算到除法(被除數(shù)不為零)為止。并且在此遞歸的過程中實(shí)現(xiàn)了,表達(dá)式的 4則運(yùn)算,然而在以上的遞歸函數(shù)中已經(jīng)考 慮到了各種算法的可能性。 24 點(diǎn)算法的多樣性(即多解的算法和優(yōu)化算法)的討論 我們拿遞歸算法來分析其算法的多樣性。 24 點(diǎn)游戲的算法有多種多樣,以上我只是簡單對 2種不同思想的算法做了簡短的介紹,當(dāng)然還有些算法也是大同小異,我們也不逐一列出了。還有一點(diǎn)就是,簡化式子的算法。 我們可以舉個(gè)例子如 5 5 5 1 ,其中的運(yùn)算就牽涉到了小數(shù),其算法為( 51/5)*5。假如在運(yùn)算中遇到了小數(shù)的式子不算,則此種判別是正確的,但 24 點(diǎn)游戲是允許中間過程存在有限小數(shù),甚至是無限循環(huán)小數(shù)。同樣的道理可以 得出其返回值的正假,由此判斷出 24 點(diǎn)的生成算法。如果,其返回直為否,則說明不能算出 2
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1