黑白棋_java論文_第1頁
黑白棋_java論文_第2頁
黑白棋_java論文_第3頁
黑白棋_java論文_第4頁
黑白棋_java論文_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、X X X X 大 學(xué)Java語言程序設(shè)計(jì)課程設(shè)計(jì)(論文)題目: java黑白棋 院(系): 專業(yè)班級(jí): 學(xué) 號(hào): 學(xué)生姓名: 指導(dǎo)教師: 教師職稱: 起止時(shí)間: 第1章 課程設(shè)計(jì)目的與要求1.1設(shè)計(jì)目的將理論教學(xué)中涉及到的知識(shí)點(diǎn)貫穿起來,對不同的數(shù)據(jù)類型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計(jì)題目進(jìn)行綜合性應(yīng)用,對所學(xué)知識(shí)達(dá)到融會(huì)貫通的程度。通過課程設(shè)計(jì),學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:(1)進(jìn)一步鞏固、加深學(xué)生所學(xué)專業(yè)課程JAVA語言教程的基本理論知識(shí),理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問題,解決問題的能力。(2)全面考核學(xué)生所掌握的基本理論知識(shí)及其實(shí)際業(yè)務(wù)能力,從而達(dá)到提高

2、學(xué)生素質(zhì)的最終目的。(3)利用所學(xué)知識(shí),開發(fā)小型應(yīng)用系統(tǒng),掌握運(yùn)用JAVA語言編寫調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn)練獨(dú)立開發(fā)應(yīng)用系統(tǒng),進(jìn)行數(shù)據(jù)處理的綜合能力。(4)對于給定的設(shè)計(jì)題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。(5)掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。(6)熟練掌握J(rèn)AVA語言的基本語法,靈活運(yùn)用各種數(shù)據(jù)類型。(7)進(jìn)一步掌握在集成環(huán)境下如何調(diào)試程序和修改程序。1.2實(shí)驗(yàn)環(huán)境硬件要求能運(yùn)行Windows 操作系統(tǒng)的微機(jī)系統(tǒng)。JAVA語言應(yīng)用程序開發(fā)軟件使用:VJAVA 系統(tǒng),或其他JAVA語言應(yīng)用程序開發(fā)軟件。1.3預(yù)備知識(shí)熟悉JAVA語言程序設(shè)計(jì)的基本知識(shí)及VJAVA編輯器的使用方法。1.4

3、設(shè)計(jì)要求1.仔細(xì)分析設(shè)計(jì)題目,畫出程序流程圖,編寫程序源代碼。2.積極上機(jī)調(diào)試源程序,增強(qiáng)編程技巧與調(diào)程能力。3.認(rèn)真書寫課程設(shè)計(jì)預(yù)習(xí)報(bào)告,課程設(shè)計(jì)說明書。4.遵守課程設(shè)計(jì)要求和機(jī)房管理制度,服從指導(dǎo)教師的安排,確保課程設(shè)計(jì)的順利完成課程設(shè)計(jì)內(nèi)容。第2章 課程設(shè)計(jì)內(nèi)容2.1 課題描述黑白棋,又叫翻轉(zhuǎn)棋(Reversi)、蘋果棋或奧賽羅棋(Othello)。一般棋子雙面為黑白兩色,故稱“黑白棋”。因?yàn)樾衅逯畷r(shí)將對方棋子翻轉(zhuǎn),變?yōu)榧悍狡遄?,故又稱“翻轉(zhuǎn)棋”。棋子雙面為紅、綠色的稱為“蘋果棋”。 黑白棋的前身是英國人發(fā)明的翻轉(zhuǎn)棋(Reversi),后來由日本的長谷川五郎加以改進(jìn),并改稱為奧賽羅棋(O

4、thello),國內(nèi)習(xí)慣上稱之為黑白棋。這個(gè)棋類游戲在西方較為流行,但在中國起步較晚,還不很普及。黑白棋作為一個(gè)棋類競技運(yùn)動(dòng),在民間十分流行,為了熟悉黑白棋規(guī)則及技巧,以及研究簡單的人工智能,決定用Java開發(fā)黑白棋游戲。主要完成了人機(jī)對戰(zhàn)功能,有很好的可擴(kuò)展性。在人機(jī)對弈中通過深度搜索和估值模塊,來提高電腦棋手的智能。分析估值模塊中的影響精準(zhǔn)性的幾個(gè)要素,以及提出若干提高精準(zhǔn)性的辦法,以及對它們搜索的節(jié)點(diǎn)數(shù)進(jìn)行比較,在這些算法的基礎(chǔ)上分析一些提高提高電腦AI方案,如遞歸算法、電腦學(xué)習(xí)等。算法的研究有助于理解程序結(jié)構(gòu),增強(qiáng)邏輯思維能力,在其他人工智能方面也有很大的參考作用。盡管黑白棋的規(guī)則比較

5、簡單,但它所包括的豐富戰(zhàn)略,不亞于那些相當(dāng)“經(jīng)典”的策略游戲。其中人工智能部分,由于采用了大量的搜索算法,其中很多被利用到各方面。2.2 系統(tǒng)設(shè)計(jì)近來隨著計(jì)算機(jī)的快速發(fā)展,各種各樣的電腦游戲?qū)映霾桓F,使得我們能有更多的娛樂項(xiàng)目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢。其中戰(zhàn)勝過國際象棋世界冠軍-卡斯帕羅夫的“深藍(lán)”便是最具說服力的代表,其它像圍棋的“手淡”、象棋的“將族”等也以其優(yōu)秀的人工智能深受棋迷喜愛。 越來越多的具有智能的機(jī)器進(jìn)入了人類的生活,人工智能的重要性如今顯而易見。自己對人工智能比較感興趣,而黑白棋游戲程序的開發(fā)實(shí)現(xiàn)這個(gè)課題,正

6、好提供給我這樣一個(gè)研究的機(jī)會(huì),通過對人工智能中博弈方面的研究(人機(jī)對弈),讓我在簡單的人機(jī)對弈全局設(shè)計(jì),以及具體到相關(guān)算法上有了深入的了解。人工智能屬于計(jì)算機(jī)科學(xué)的領(lǐng)域,它以計(jì)算機(jī)技術(shù)為基礎(chǔ),近幾十年來,它的理論和技術(shù)已經(jīng)日益成熟,應(yīng)用領(lǐng)域也正在不斷擴(kuò)大,顯示出強(qiáng)大的生命力。人工智能大致可以分成幾個(gè)學(xué)科,它們每一個(gè)都是獨(dú)特的,但是它們常常又互相結(jié)合起來完成設(shè)計(jì)任務(wù),這時(shí),這些學(xué)科之間的差別就變的很模糊。人工智能在專家系統(tǒng),自然語言理解,自動(dòng)定理證明,自動(dòng)程序設(shè)計(jì),人工智能在機(jī)器人學(xué)、模式識(shí)別、物景分析、數(shù)據(jù)庫的智能檢索、機(jī)器下棋(實(shí)質(zhì)上是博弈論問題)和家用電器智能化等領(lǐng)域都有廣泛的應(yīng)用。而這個(gè)

7、課題就是和人工智能中的博弈論領(lǐng)域緊密相關(guān)的。這個(gè)題目核心是人工智能和Socekt編程,并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技術(shù),正在各行各業(yè)廣泛滲透。智能已經(jīng)成為當(dāng)今各種新產(chǎn)品、新裝備的發(fā)展方向。所以,趁著這個(gè)機(jī)會(huì),對人工智能中比較容易實(shí)現(xiàn)的人機(jī)博弈進(jìn)行了解研究學(xué)習(xí),也是很實(shí)用且很有必要的。電腦究竟能否最終戰(zhàn)勝人腦?這是大家一直在探索的問題。自從1997年黑白棋程序Logistello戰(zhàn)勝冠軍棋手村上健以來,電腦程序已經(jīng)把人類棋手遠(yuǎn)遠(yuǎn)拋在后面。目前,程序可以記住大量的開局定式、可以正確地判斷局面的優(yōu)劣、可以思考到二十幾步之后的局面,這都是

8、人類棋手遠(yuǎn)不能及的。然而,電腦的這一切又都是人類所賦予的,因此究竟電腦和人腦孰優(yōu)孰劣,還難以定論。2.2.1功能分析吃子規(guī)則:采用夾吃的原則,左圖用紅色標(biāo)記的是黑方可落子的位置。當(dāng)黑方落子之后,則夾在兩黑子中間的白子都將變?yōu)楹谧?。右圖是落子后的棋盤布局,藍(lán)色標(biāo)記的是白方可落子的位置。夾子的方向包含:水平、豎直、斜對角2.2.2面向?qū)ο笤O(shè)計(jì)總體流程:2.2.2類成員描述輸出成績:輸出最后的勝利者結(jié)果2.3程序?qū)崿F(xiàn)2.3.1源碼分析import java.awt.Color;import java.awt.Graphics;import java.awt.event.MouseAdapter;im

9、port java.awt.event.MouseEvent;import java.util.ArrayList;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;/* * 黑白棋面板 * * author hyg * */public class HbPanel extends JPanel private static int BLACK = 1; private static int WHITE = -1; int qizi = new int88; int curQiz

10、i = BLACK; / 當(dāng)前走棋方 ArrayList a = new ArrayList(); ArrayList tmp = new ArrayList(); / 在指定位置畫棋子 private void drawQizi(int i, int j) Graphics g = this.getGraphics(); if (qiziij = BLACK) g.setColor(Color.BLACK); else if (qiziij = WHITE) g.setColor(Color.WHITE); g.fillOval(55 + 50 * i, 55 + 50 * j, 40, 4

11、0); /* * Create the panel */ public HbPanel() super(); addMouseListener(new MouseAdapter() public void mouseClicked(final MouseEvent e) int x = e.getX(); int y = e.getY(); System.out.println(x + , + y); / 計(jì)算索引 int i = (x - 50) / 50; int j = (y - 50) / 50; System.out.println(i + , + j); if (i = 8 | j

12、 = 8 | qiziij != 0) / 如果指定位置超出范圍或已經(jīng)有棋子,直接返回。 return; if (checkLocation(curQizi, i, j) / 判斷當(dāng)前位置是否可以放棋子 / 如果可以 / 1. 畫出棋子 qiziij = curQizi; drawQizi(i, j); / 3. 判斷對方是否有棋可走,如有 if (checkNext(-1 * curQizi) / 2. 交換走棋方 curQizi *= -1; else if (checkNext(curQizi) / 有無,判斷自己是否有棋可走,如有,給出提示 JOptionPane.showConfir

13、mDialog(null, (curQizi = BLACK ? 白方 : 黑方) + 無棋可走, + (curQizi = 1 ? 黑方 : 白方) + 繼續(xù),提示, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE); else / 游戲結(jié)束 JOptionPane.showConfirmDialog(null, 雙方都無棋可走,游戲結(jié)束, 游戲結(jié)束, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE);); qizi33 = WHITE; / 1為黑,-

14、1為白,0為無棋子 qizi34 = BLACK; qizi43 = BLACK; qizi44 = WHITE; / qizi10 = 1; / / Graphics g = getGraphics(); setBackground(Color.CYAN); /* * 驗(yàn)證參數(shù)代表的走棋方是否還有棋可走 * param i 代表走棋方,1為黑方,-1為白方 * return true/false */ protected boolean checkNext(int i) return true; protected boolean checkLocation(int cur, int i,

15、int j) return toLeft(cur,i,j); /* * 從當(dāng)前位置開始向左驗(yàn)證, * 驗(yàn)證過程中,j不變,i減小。 * param cur 走棋方顏色 * param i 橫坐標(biāo) * param j 縱坐標(biāo) * return */ private boolean toLeft(int cur, int i, int j) System.out.println(向左搜索+(cur=1?黑:白)+色棋子); boolean result = false; if(i 0; m-) if(qizimj = cur) result = true; break; if(result) Sy

16、stem.out.println(左側(cè)搜索成功); else System.out.println(左側(cè)搜索失敗); return result; Override public void paint(Graphics g) super.paint(g); / 當(dāng)前走棋方 if (curQizi = 1) / 黑色 g.setColor(Color.BLACK); else if (curQizi = -1) / 白色 g.setColor(Color.WHITE); g.fillOval(5, 5, 40, 40); g.setColor(Color.BLACK); / 畫橫線 for (i

17、nt i = 0; i = 8; i+) g.drawLine(50, 50 * i + 50, 450, 50 * i + 50); / 畫豎線 for (int i = 0; i = 8; i+) g.drawLine(50 * i + 50, 50, 50 * i + 50, 450); / 畫標(biāo)志 String xl = A, B, C, D, E, F, G, H ; String yl = 1, 2, 3, 4, 5, 6, 7, 8 ; for (int i = 0; i yl.length; i+) g.drawString(xli, 50 * i + 72, 40); g.d

18、rawString(yli, 40, 50 * i + 80); / 畫棋子 for (int i = 0; i 8; i+) for (int j = 0; j 8; j+) if (qiziij != 0) / if (qiziij = 1) / 黑色 g.setColor(Color.BLACK); else if (qiziij = -1) / 白色 g.setColor(Color.WHITE); g.fillOval(55 + 50 * i, 55 + 50 * j, 40, 40); public static void main(String args) JFrame f = new JFrame(); HbPanel p = new HbPanel(); f.setContentPane(p); f.setSize(500, 500); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true);2.3.2運(yùn)行結(jié)

溫馨提示

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

最新文檔

評論

0/150

提交評論