版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 1 引言3</b></p><p> 1.1五子棋介紹3</p><p> 1.2選題背景和動機3</p><p> 1.3系統(tǒng)所要解決的問題3</p><p><b> 2
2、系統(tǒng)框架5</b></p><p><b> 2.1 棋盤類6</b></p><p> 2.1.1 主要成員變量說明:6</p><p> 2.1.2 清空棋盤——Clear6</p><p> 2.1.3 繪制棋子——Draw6</p><p> 2.1.4
3、左鍵消息——OnLButtonUp7</p><p> 2.1.5載入棋盤7</p><p> 2.1.6 對方落子完畢——Over7</p><p> 2.1.7 設(shè)置游戲模式——SetGameMode7</p><p> 2.1.8 勝負的判斷——Win7</p><p> 2.2 游戲模式類
4、8</p><p><b> 3關(guān)鍵技術(shù)9</b></p><p> 3.1 棋盤對話框的制作9</p><p> 3.1.1 對話框機制9</p><p> 3.1.3 棋子10</p><p> 3.2 人機對弈10</p><p> 3.2.1
5、 難度的選擇10</p><p> 3.2.2 機器的落子判斷11</p><p><b> 4運行結(jié)果15</b></p><p> 4.1開發(fā)環(huán)境及運行環(huán)境15</p><p> 4.1.1開發(fā)環(huán)境15</p><p> 4.1.2運行環(huán)境15</p>&l
6、t;p> 4.2運行圖示15</p><p> 4.2.1 棋盤顯示15</p><p> 4.2.2 開始的選擇對話框16</p><p> 4.2.3 主界面中的游戲難度選項16</p><p> 4.2.4 電腦的應(yīng)對17</p><p><b> 5調(diào)試分析19</
7、b></p><p><b> 6總結(jié)21</b></p><p><b> 參考文獻22</b></p><p><b> 1 引言</b></p><p><b> 1.1 五子棋介紹</b></p><p>
8、 五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(Five in a Row的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。</p><p> 五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學的高深學問“陰陽易
9、理”;它既有簡單易學的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。它是中西文化的交流點,是古今哲理的結(jié)晶。</p><p> 1.2選題背景和動機</p><p> 隨著社會的發(fā)展,越來越多人接觸和使用計算機,網(wǎng)上進行的棋類運動也隨之普及。許多人喜歡上了下棋,但有時又苦于沒有對手。作
10、為一個計算機專業(yè)的學生,我對五子棋有很濃厚的興趣,平時也一直和同學下棋,有時也和電腦下棋,我對計算機人機對弈智能算法如何與人腦對抗產(chǎn)生了極大的興趣,當然人機對弈的算法有很多種,許多人也對此有所研究。有些算法的智能程度甚至已經(jīng)與人腦不相上下。這類程序的開發(fā)最重要的莫過于智能算法的實現(xiàn),然后就是判斷勝負的方法。當前網(wǎng)絡(luò)上流傳的五子棋游戲功能并不盡善盡美,其中最主要的問題就是人機對戰(zhàn)和網(wǎng)絡(luò)對戰(zhàn)不能夠一起實現(xiàn),所以我決定開發(fā)[1]一個既能夠人機
11、對戰(zhàn),又能夠進行網(wǎng)絡(luò)對戰(zhàn)的五子棋系統(tǒng)。</p><p> 1.3系統(tǒng)所要解決的問題</p><p> 1)棋盤和棋子的繪制。</p><p> 2)計算機對下一步落棋的計算</p><p><b> 3) 棋盤的載入</b></p><p><b> 4)難度的模式選擇<
12、/b></p><p><b> 5)棋盤狀態(tài)的判定</b></p><p><b> 2 系統(tǒng)框架</b></p><p><b> 五子棋系統(tǒng)框架:</b></p><p><b> 圖2 系統(tǒng)框架圖</b></p><
13、;p> 考慮到整個的下棋過程(無論對方是電腦或是其他網(wǎng)絡(luò)玩家)可以分為:己方落子、等待對方落子、對方落子、設(shè)置己方棋盤數(shù)據(jù)這一系列過程,因此一人游戲類、二人游戲類和棋盤類之間的關(guān)系是不同的。</p><p><b> 2.1 棋盤類 </b></p><p> 整個架構(gòu)的核心部分,類名為CTable。封裝了棋盤的各種可能用到的功能,如保存棋盤數(shù)據(jù)、初始化、
14、判斷勝負等。用戶操作主界面,主界面與CTable進行交互來完成對游戲的操作。</p><p> 2.1.1主要成員變量說明:</p><p> 棋盤等待標志——m_bWait與m_bOldWait</p><p> 由于在玩家落子后需要等待對方落子,m_bWait標志就用來標識棋盤的等待狀態(tài)。當m_bWait為TRUE時,是不允許玩家落子的。</p>
15、;<p> 在人人對弈模式下,玩家之間需要互相發(fā)送諸如悔棋、和棋這一類的請求消息,在發(fā)送請求后等待對方回應(yīng)時,也是不允許落子的,所以需要將m_bWait標志置為TRUE。在收到對方回應(yīng)后,需要恢復原有的棋盤等待狀態(tài),所以需要另外一個變量在發(fā)送請求之前保存棋盤的等待狀態(tài)做恢復之用,也就是m_bOldWait。</p><p> 等待標志的設(shè)置,由成員函數(shù)SetWait和RestoreWait完成。
16、</p><p> 2.1.2 清空棋盤——Clear</p><p> 在每一局游戲開始的時候都需要調(diào)用這個函數(shù)將棋盤清空,也就是棋盤的初始化工作。在這個函數(shù)中,主要發(fā)生了這么幾件事情:</p><p> 將m_data中每一個落子位都置為無子狀態(tài)(-1)。</p><p> 按照傳入的參數(shù)設(shè)置棋盤等待標志m_bWait,以供先、后
17、手的不同情況之用。</p><p> 2.1.3 繪制棋子——Draw</p><p> 這無疑是很重要的一個函數(shù),它根據(jù)參數(shù)給定的坐標和顏色繪制棋子。繪制的詳細過程如下:</p><p> 將給定的棋盤坐標換算為繪圖的像素坐標。</p><p> 根據(jù)坐標繪制棋子位圖。</p><p> 在剛繪制完成的棋子
18、四周繪制最后落子指示矩形。</p><p> 2.1.4 左鍵消息——OnLButtonUp</p><p> 作為棋盤唯一響應(yīng)的左鍵消息,也需要做不少的工作:</p><p> 如果棋盤等待標志m_bWait為TRUE,則直接發(fā)出警告聲音并返回,即禁止落子。</p><p> 如果點擊時的鼠標坐標在合法坐標(0, 0)~(14, 1
19、4)之外,亦禁止落子。</p><p> 如果走的步數(shù)大于1步,方才允許悔棋。</p><p> 進行勝利判斷,如勝利則修改UI狀態(tài)并增加勝利數(shù)的統(tǒng)計。</p><p> 如未勝利,則向?qū)Ψ桨l(fā)送已經(jīng)落子的消息。</p><p> 落子完畢,將m_bWait標志置為TRUE,開始等待對方回應(yīng)。</p><p>&
20、lt;b> 載入棋盤</b></p><p> 尋找棋盤位圖,通過簡單的代碼載入位圖,直接完成繪制棋盤工作,免去</p><p> 了大量繪制棋盤的多余操作。</p><p> 2.1.6 對方落子完畢——Over</p><p> 在對方落子之后,仍然需要做一些判斷工作,這些工作與OnLButtonUp中的類似。
21、 </p><p> 2.1.7 設(shè)置游戲模式——SetGameMode</p><p> 這個函數(shù)通過傳入的游戲模式參數(shù)對m_pGame指針進行了初始化,,就可以利用繼承和多態(tài)特點來使m_pGame指針使用相同的調(diào)用來完成不同的工作了,事實上,COneGame::Init和CTwoGame::Init都是不同的。</p><p> 2.1.8 勝負的判斷——
22、Win</p><p> 這是游戲中一個極其重要的算法,用來判斷當前棋盤的形勢是哪一方獲勝。</p><p> 其詳細內(nèi)容在關(guān)鍵技術(shù)一節(jié)。</p><p><b> 2.2 游戲模式類</b></p><p> 用來管理人機對弈人人對弈兩種游戲模式,類名為CGame。CGame是一個抽象類,經(jīng)由它派生出一人游戲類
23、COneGame和網(wǎng)絡(luò)游戲類CTwoGame,如圖2.2:</p><p> 圖2.2 CGame類派生關(guān)系</p><p> 這樣,CTable類就可以通過一個CGame類的指針在游戲初始化的時候根據(jù)具體游戲模式的要求實例化COneGame或CTwoGame類的對象來區(qū)分人機對弈還是人人對弈;然后利用多態(tài)性,使用CGame類提供的公有接口就可以完成不同游戲模式下的不同功能了。<
24、/p><p><b> 3關(guān)鍵技術(shù)</b></p><p> 3.1 棋盤對話框的制作</p><p> 3.1.1 對話框機制</p><p> 顯示對話框供人選擇下棋模式</p><p> BOOL CBestDlg::OnInitDialog() //初始化對話框</p>
25、<p><b> {</b></p><p> CDialog::OnInitDialog();</p><p> m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p> SetIcon(m_hIcon, TRUE);//設(shè)置大圖標</p>
26、<p> SetIcon(m_hIcon, FALSE);//設(shè)置小圖標</p><p> Name1Edit().SetWindowText(g_strName1);//載入用戶名1 </p><p> Name2Edit().SetWindowText(g_strName2);//載入用戶名2</p><p> Name3Edit().Se
27、tWindowText(g_strName3);//載入用戶名3</p><p> char str[4]; //定義4個字符的字符串</p><p> wsprintf(str,"%d",g_nTime1);// wsprintf(緩沖區(qū),格式,要格式化的值);</p><p> Time1Edit().SetWindowText(str
28、)// 設(shè)置主窗口中空間(ID)的文字或標題;</p><p> wsprintf(str,"%d",g_nTime2);//用來格式化字符串</p><p> Time2Edit().SetWindowText(str);</p><p> wsprintf(str,"%d",g_nTime3);</p>
29、<p> Time3Edit().SetWindowText(str);</p><p> return TRUE;</p><p><b> }</b></p><p><b> 3.1.2 棋盤</b></p><p><b> 用于載入棋盤</b>&
30、lt;/p><p> m_pDibBoard->LoadDib(IDDIB_BOARD);//載入棋盤位圖,</p><p> m_pDibBoard->MakeBitmap(pDC);//繪制棋盤上的坐標,方便下子</p><p><b> 3.1.3 棋子</b></p><p><b>
31、用于畫棋子</b></p><p> CRect CPenteDlg::GetCurStoneArea(CPoint point)//獲得棋子的坐標</p><p><b> {</b></p><p> int nXd = point.x-m_wStoneWidth/2; //棋子橫坐標
32、 </p><p> int nYd = point.y-m_wStoneHeight/2;//棋子縱坐標</p><p> return CRect(nXd, nYd, nXd+m_wStoneWidth, nYd+m_wStoneHeight);//返回棋子的寬度高度</p><p><b> } </b>&
33、lt;/p><p><b> 3.2 人機對弈</b></p><p> 3.2.1 難度的選擇</p><p> 它能讓玩家選擇適合自己的難度</p><p><b> 設(shè)置電腦難易程度:</b></p><p> BOOL CRecordDlg::OnInitDia
34、log() //初始化對話框</p><p><b> {</b></p><p> CDialog::OnInitDialog();</p><p> m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//載入主框架圖標</p><p> SetIcon(m_h
35、Icon, TRUE);// 設(shè)置大圖標</p><p> SetIcon(m_hIcon, FALSE);// 設(shè)置小圖標</p><p> CString str;//聲明字符串</p><p> if (g_nSkill == 1)//如果技術(shù)為1</p><p><b> {</b></p
36、><p> str.LoadString(g_bChineseIDS_BEGINNER_CHINESE:IDS_BEGINNER_ENGLISH);//載入顯示初學者難度位圖,并用中文或者英文顯示說明</p><p> SkillEdit().SetWindowText(str);//設(shè)置難度窗口</p><p> NameEdit().SetWindowText
37、(g_strName1);//設(shè)置窗口,用于輸入姓名</p><p><b> }</b></p><p> else if (g_nSkill == 2)//如果技術(shù)為2</p><p><b> {</b></p><p> str.LoadString(g_bChineseIDS_IN
38、TERMEDIATE_CHINESE:IDS_INTERMEDIATE_ENGLISH); 載入中級難度位圖,并顯示</p><p> SkillEdit().SetWindowText(str);</p><p> NameEdit().SetWindowText(g_strName2);</p><p><b> }</b><
39、;/p><p> if (g_nSkill == 3)//如果難度為3</p><p><b> {</b></p><p> str.LoadString(g_bChineseIDS_EXPERT_CHINESE:IDS_EXPERT_ENGLISH); //載入專家級難度位圖,并顯示</p>&l
40、t;p> SkillEdit().SetWindowText(str);</p><p> NameEdit().SetWindowText(g_strName3);</p><p><b> }</b></p><p> NameEdit().SetFocus();對之前設(shè)置的窗口設(shè)置鍵盤焦點</p><p&
41、gt; return TRUE;</p><p><b> FALSE</b></p><p><b> }</b></p><p> 3.2.2 機器的落子判斷</p><p> 它使電腦能夠根據(jù)人的走棋加以應(yīng)對</p><p> 人與機器對弈,機器是如何判斷的
42、呢?</p><p> 此時就需要引入人機對弈智能算法:</p><p><b> 算法如下:</b></p><p> CPoint CPenteDlg::UrgentPoint(BYTE byColor)//聲明緊迫度函數(shù)</p><p> { </p><p>
43、int i, i0, j, j0; </p><p> BeginWaitCursor();///是建立等待光標</p><p> CPoint ptUrgent[2025], ptInit(-1,-1);//建立最大緊迫度2025</p><p> for (i=0; i<2025; ++i)//初始化i</p>
44、<p> ptUrgent[i] = ptInit;初始化i點的緊迫度</p><p> nGrade1 = Judge(i, j, (char)(byColor+1));//獲取對方緊迫度 </p><p> nGrade2 = Judge(i,
45、j, (char)(!byColor+1)); //不同緊迫度,賦予不同度權(quán)值 </p><p> if (g_nSkill == 1) //初學者難度</p><p><b> { </b></p><p&g
46、t; switch (nGrade1) //轉(zhuǎn)向等級1,并對它賦權(quán)值,用于判斷電腦下棋位子</p><p><b> { </b></p><p> case 0 : nUrgent1 = 0; break;//在情況0下對緊迫度為1的點賦
47、予權(quán)值0</p><p> case 1 : nUrgent1 = 2; break;//在情況1下對緊迫度為1的點賦予權(quán)值4</p><p> case 2 : nUrgent1 = 4; break;//以下的以此類
48、推,直到賦予40</p><p> case 3 : nUrgent1 = 5; break; </p><p> case 4 : nUrgent1 = 8; break; <
49、/p><p> case 5 : nUrgent1 = 10; break; </p><p> case 6 : nUrgent1 = 11; break; </p><p><b
50、> …… </b></p><p> case 16 : nUrgent1 = 32; break; </p><p> case 17 : nUrgent
51、1 = 34; break; </p><p> case 18 : nUrgent1 = 36; break; </p><p> case 19 : nUrgent1
52、0; = 38; break; </p><p> case 20 : nUrgent1 = 40; break; </p><p> default : nUrgent1 = 4
53、0; break; </p><p> } </p><p> switch (nGrade2)//轉(zhuǎn)向等級2</p><p><b> {</b></p><p> case 0 : nUrgent2 = 1; break;/
54、/在情況0時對緊迫度未2的點賦予權(quán)值1,</p><p> case 1 : nUrgent2 = 3; break;//以下的以此類推直到賦予41為止</p><p> case 2 : nUrgent2 = 6; break;</p><p> case 3 : nUrgent2 = 7; break;</p><p
55、> case 4 : nUrgent2 = 9; break;</p><p> case 5 : nUrgent2 = 21; break;//對緊迫度為2的點賦予在不同的情況下賦予不同的權(quán)值</p><p> case 6 : nUrgent2 = 22; break;</p><p> case 7 : nUrgent2 =
56、23; break;</p><p> case 8 : nUrgent2 = 24; break;</p><p> case 9 : nUrgent2 = 25; break;</p><p> case 10 : nUrgent2 = 26; break;</p><p> case 11
57、 : nUrgent2 = 27; break;</p><p> case 12 : nUrgent2 = 28; break;</p><p> case 13 : nUrgent2 = 29; break;</p><p> case 14 : nUrgent2 = 30; break;</p>&l
58、t;p> case 15 : nUrgent2 = 31; break;</p><p> case 16 : nUrgent2 = 33; break; </p><p> case 17 : nUrgent2 = 35; break;</p><p> case 18 : nUrgent2 = 37; break;
59、</p><p> case 19 : nUrgent2 = 39; break;</p><p> case 20 : nUrgent2 = 41; break;</p><p> default : nUrgent2 = 41; break;</p><p><b> }</
60、b></p><p> }nUrgent = min(nUrgent1,nUrgent2)*45 + max(nUrgent1, nUrgent2);// 如上算法既考慮了對手的權(quán)值,也考慮了自己緊迫點的權(quán)值,通過賦予不同緊迫點不同的權(quán)值,綜合起來且根據(jù)總和最大的來確定自己的下子點,由此而實現(xiàn)了人機的對弈。通過如下計算公式求出了最緊急的
61、下子點:</p><p> ptUrgent[nUrgent] = ptCurrent; //獲取具有最小緊迫度的點</p><p><b> }</b></p><p><b> } </b></p><p> for (i=0;
62、160; i<2025; ++i) // 初始化i</p><p> if (ptUrgent[i] != ptInit) //如果緊迫點權(quán)值i不等于初始值 break; </p><p> EndWaitCursor();//結(jié)束等待光標
63、; </p><p> if (ptUrgent[i] == ptInit)//如果緊迫點權(quán)值i等于初始值 &
64、#160;</p><p><b> { </b></p><p> CString str1, str2; 聲明2個字符串</p><p> str1.LoadString(IDS_DRAW_CHINESE);//載入中文圖片</p><p> str2.Lo
65、adString(IDS_TITLE_CHINESE);//載入中文標題 </p><p> MessageBox(str1, str2);//出現(xiàn)顯示平局的對話框 </p><p><b> } </b></p><p> return ptUrgent[i];//返回最小的
66、點 }</p><p><b> 4運行結(jié)果</b></p><p> 4.1開發(fā)環(huán)境及運行環(huán)境</p><p> 4.1.1 開發(fā)環(huán)境</p><p> Intel® Pentium® 4 2.0GHz,512M內(nèi)存,80G硬盤</p><p> Mic
67、rosoft® Windows? XP</p><p> Microsoft® Visual C++ 6.0</p><p><b> 4.1.2運行環(huán)境</b></p><p> Intel® Pentium® 2及以上處理器,32M以上內(nèi)存,4G以上硬盤</p><p>
68、 Microsoft® Windows? 9X/NT操作系統(tǒng)</p><p> 800*600或以上的屏幕分辨率</p><p> 4.2運行圖示 </p><p> 4.2.1 棋盤顯示</p><p> 通過載入棋盤位圖達到了如下效果:</p><p> 圖4.2.1. 五子棋棋盤&l
69、t;/p><p> 4.2.2 開始的選擇對話框</p><p> 開始的選擇對話框能讓你選擇與電腦下棋還是與人下棋,以及誰執(zhí)黑先手。</p><p> 圖4.2.2 選擇對話框</p><p> 4.2.3 主界面中的游戲難度選項</p><p> 通過主界面中的游戲難度選項,能選擇適合自己的難度等級,與電腦
70、對弈。</p><p> 圖4.2.3 游戲難度選擇</p><p> 4.2.4 電腦的應(yīng)對</p><p> 圖4.2.4.1 沖3的情況</p><p> 沖3這點的權(quán)值最大,電腦選擇此點。</p><p> 圖4.2.4.2 沖4的情況</p><p> 這時沖4權(quán)值經(jīng)
71、計算最大,故電腦選擇此點。</p><p> 圖4.2.4.3 防守的情況</p><p><b> 5調(diào)試分析</b></p><p> 在調(diào)試過程出我的算法出了點問題,特別是對于緊迫點權(quán)值的計算,之后同學求助于CSDN上面的帖子,我修改了自己的算法。并理解了算法實現(xiàn)要領(lǐng):</p><p> 電腦下子實際上是分
72、兩個步驟的,第一個步驟是盡可能的收集棋盤格局的信息,并且使這些信息以一定的格式存放再內(nèi)存中,以便于第二步的處理。第二個步驟就是,對收集到的信息進行分析處理,即要給出一個規(guī)則,用窮舉搜索的辦法遍歷所有收集到的信息,搜索的過程實際上是用所定下的規(guī)則去衡量每一點的權(quán)值,搜索的目的是為了找到一個權(quán)值最大的點,這個點就是當前的最優(yōu)解,也就是應(yīng)該下的子。 </p><p> 舉個例子來說:如果在第一步中,先遍歷棋盤上的每一
73、個點,即對于每一個點,我們假定這個點放上黑子,這時候就判斷這個黑子放上去后,會形成多少個活2、活3、活4和5子連珠,然后把對應(yīng)的數(shù)值記下,然后再假定這個點放白棋,又會形成多少個活2、活3、活4和五,當然你也可以用兩個</p><p> 下面就是如何利用所得到的信息去下棋了:</p><p> 這個過程也是遍歷分析所得的信息的過程。對上面的信息,我們可以很好的處理。比如,假定四三是必勝的
74、,則我們給他的權(quán)值就很大比如100吧,而活二給的權(quán)值應(yīng)該比較小,就給1吧。然后你可以得到一個權(quán)值的計算公式,</p><p><b> 舉例說:</b></p><p> 權(quán)值=活二的個數(shù)×1+活三的個數(shù)×5+活四的個數(shù)×10+四三的個數(shù)×100</p><p> 就是類似這樣的公式,只要得出權(quán)值最
75、大點,并判斷己方下個子的權(quán)值大于對手的URGENTPOINT的權(quán)值的話,這個位置就是你下一步所要下子的點。</p><p> 下棋是就是遍歷每一個點的信息,對每一個點計算權(quán)值,找到權(quán)值最大的就是要下的點了。上面說了用兩個數(shù)組分別保存黑子和白子的信息也是有必要的,因為可以計算出某一點對黑白雙方的重要程度。就是說如果輪到你下白子了,你光看哪一點對白子有利也不行呀,還要看哪些點對黑子有利,并且要比較這種有利的程度。如
76、果你放某一點能成活3,而別人放另一點就是四三了,你就要搶先吧那一點占了。</p><p> 如上算法既考慮了對手的權(quán)值,也考慮了自己緊迫點的權(quán)值,通過賦予不同緊迫點不同的權(quán)值,綜合起來且根據(jù)總和來確定自己的下子點,由此而實現(xiàn)了人機的對弈。通過如下計算公式求出了最緊急的下子點:</p><p> 當遇到問題時,我求助于論壇,與許多人交流了有關(guān)人工智能算法的思想,許多程序員回了帖子,并教了
77、我許多技巧,我很感謝他們。這個五子棋本來是沒有聲音的,我覺得缺乏趣味,于是便添加了一些聲音文件,當出現(xiàn)重復地點下子的ERROR,獲勝以及重新開始游戲時,都會有一小段音效,我想這也許也會是一點小小的改變吧。</p><p><b> 6總結(jié)</b></p><p> 為期1個學期的程序設(shè)計課,學到的是我大學中最受益的東西。</p><p>
78、 首先,在知識方面,我了解了許多C++MFC的知識以及相關(guān)應(yīng)用。對系統(tǒng)的完成五子棋這個小游戲有了深刻的認識。這次的課程設(shè)計,不僅令我掌握了五子棋的人工智能算法,同時也培養(yǎng)了我的動手和實踐創(chuàng)新能力。我學會了如何把理論用于實際應(yīng)用中去。我深深的感到獨立思考,與他們探討,一起研究一個項目是多么快樂的事情。當我在設(shè)計過程中出現(xiàn)困難,并出現(xiàn)疑惑時,我求助于老師,并且通過GOOGLE獲取了許多有助于我程序設(shè)計課題的相關(guān)知識。谷歌為我們中國乃至全世界
79、學生提供了一個良好的索取知識的平臺,通過這個媒介,我們學到了許多,而當我們充分利用起網(wǎng)絡(luò)資源時,我們會受益匪淺。</p><p> 其次,通過這次課程設(shè)計,我把理論與實際結(jié)合了起來,平時的我只去網(wǎng)上與別人下五子棋或者在自己的電腦上與電腦下,可是,我現(xiàn)在已經(jīng)能夠和自己所編寫的人工智能的對手進行下棋,我感到無比幸福。我從一個被動的知識接受者,正在慢慢轉(zhuǎn)變?yōu)橐粋€敢于主動發(fā)現(xiàn)問題,并主動去實踐嘗試的人,我想這對我來說是
80、一大進步。</p><p> 我想我的五子棋可以在把英雄榜做的更輝煌些,讓人盡情享受到勝利的喜悅,并增加一些挑戰(zhàn)功能,比如說誰能在動用最少棋子的情況下戰(zhàn)勝專家級電腦,就把此人名字加入英雄榜速勝一欄。</p><p> 最后我要感謝我程序設(shè)計的指導老師**老師,她在我最初做這項目的時候給與了幫助,提供了指導。同時我也要感謝GOOGLE,他也是我解決困惑的最好的老師。</p>
81、<p> 這次的課程設(shè)計會令我很難忘。</p><p><b> 參考文獻</b></p><p> [01]設(shè)計模式——可復用面向?qū)ο筌浖幕A(chǔ),Erich Gamma/Richard Helm/Ralph Johnson/John Vlissides著,李英軍/馬曉星/蔡敏/劉建中 等譯,機械工業(yè)出版社</p><p>
82、 [02] 深入淺出MFC(第2版),侯俊杰著,華中科技大學出版社</p><p> [03] A Beginner 's Guide to Pointers,Andrew Peace</p><p> [04] Microsoft® Visual C++.NET 技術(shù)內(nèi)幕(第6版),George Shepherd/David Kruglinski著,潘愛民譯,清華大
83、學出版社</p><p> [05] Visual C++網(wǎng)絡(luò)通信協(xié)議分析與應(yīng)用實現(xiàn),汪曉平/鐘軍 等編著,人民郵電出版社</p><p> [06] C++編程思想,Bruce Eckel著,劉宗田/邢大紅/孫慧杰 等譯,機械工業(yè)出版社</p><p> [07] 21天學通C++,Jesse Liberty著,康博創(chuàng)作室譯,人民郵電出版社</p>
84、;<p> [08] C++標準程序庫,Nicolai M.Josuttis著,侯捷/孟巖 譯,華中科技大學出版社</p><p> [09] Windows程序設(shè)計,Charles Petzold著,北京博彥科技發(fā)展有限公司譯,北京大學出版社</p><p> [10] Visual C++.NET網(wǎng)絡(luò)編程,易君 編著,中國鐵道出版社</p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五子棋-課程設(shè)計報告
- 五子棋課程設(shè)計
- java課程設(shè)計報告-五子棋
- 五子棋游戲課程設(shè)計報告
- java五子棋課程設(shè)計
- java課程設(shè)計--五子棋
- 五子棋java課程設(shè)計
- 五子棋java課程設(shè)計
- 五子棋java語言課程設(shè)計報告
- c++五子棋課程設(shè)計報告
- java課程設(shè)計--五子棋游戲
- java課程設(shè)計--對戰(zhàn)五子棋
- 五子棋c++課程設(shè)計
- 五子棋c++課程設(shè)計
- 五子棋小游戲課程設(shè)計
- c語言五子棋課程設(shè)計
- c語言圖形五子棋課程設(shè)計報告
- c語言圖形五子棋課程設(shè)計報告
- 人工智能課程設(shè)計報告-五子棋
- java課程設(shè)計-五子棋游戲
評論
0/150
提交評論