版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、濱江學(xué)院軟件工程課程設(shè)計(jì)題 目 中國象棋打譜軟件 院 系 計(jì)算機(jī)系 專 業(yè) 網(wǎng)絡(luò)工程 組 員1 組 員2組 員3指導(dǎo)教師 吳婷婷二一六 年 十二 月 二十日- 46 -目錄:一、課程設(shè)計(jì)概述- 1 -1.1課程設(shè)計(jì)的內(nèi)容- 1 -1.2課程設(shè)計(jì)的目的- 1 -1.3課程設(shè)計(jì)的背景- 1 -二、可行性研究與需求分析- 2 -2.1要求- 2 -2.2用戶需求分析- 2 -2.3可行性分析- 3 -三項(xiàng)目的技術(shù)和方法- 3 -3.1 Java GUI功能- 3 -3.2 多線程功能- 4 -四總體設(shè)計(jì)- 4 -4.1功能圖- 5 -4.2流程圖- 5 -五詳細(xì)設(shè)計(jì):- 5 -5.1詳細(xì)設(shè)計(jì)思路-
2、5 -六測試:- 8 -七總結(jié):- 12 -八心得體會:- 12 -參考文獻(xiàn):- 12 -一、課程設(shè)計(jì)概述1.1課程設(shè)計(jì)的內(nèi)容中國象棋打譜軟件提供給用戶的一個(gè)能將對弈過程保存成文件 并可以重對弈過程 即復(fù)盤。主要功能有: 1. 制作棋譜, 2. 保存棋譜, 3. 演示棋譜。要求 中國象棋是雙方在有著9 條豎線和10 條橫線的棋盤上對弈的,豎線與橫線的交叉點(diǎn)稱做棋點(diǎn),每個(gè)棋子都是在棋點(diǎn)上行走,而不是在方格中行走,河界將棋盤分成兩個(gè)等份,每一邊都有一塊由9個(gè)點(diǎn)組成的"九宮", 棋子"將"、"帥"、"士" 只能在&quo
3、t;九宮"內(nèi)移動。并且 "將"、"帥" 每一步只可以水平或垂直移動一個(gè)棋點(diǎn)。 "士" 它只能在"九宮"內(nèi)移動,并且它每一步只可以沿對角線方向移動一個(gè)棋點(diǎn)。 "象" 它必須一步沿對角線方向走兩個(gè)棋點(diǎn),但它既不能過河,也不能跳過或穿越障礙,即象在走的過程中不能被"別眼"。 "馬" 每一步只可以水平或垂直移動一個(gè)棋點(diǎn),但必須按對角線方向,向左或右移動,中國象棋的馬不能跳過障礙,即在走的過程中不能被"別腿"。 "車"
4、; 可以水平或垂直方向移動任意個(gè)無阻礙的點(diǎn)。 "炮" 移動起來和車很類似,但它必須跳過一個(gè)棋子來吃掉對方的一個(gè)棋子,被跳過的那個(gè)棋子稱為橋或者屏風(fēng)。 "兵' 每步只能向前移動一個(gè)棋點(diǎn),過河以后,它便增加了向左右移動的能力,兵不允許向后移動。1.2課程設(shè)計(jì)的目的該軟件在計(jì)算機(jī)、軟件、網(wǎng)絡(luò)普及的今天作為一個(gè)小游戲供人們消遣。為類似AlphaGo(阿爾法)的人工智能軟件打下前期基礎(chǔ)鋪墊。同時(shí)象棋打譜軟件也為想研究象棋的棋手提供便利,方便棋手詳細(xì)的研究每個(gè)變化,每一步棋,鉆研棋術(shù)。通過軟件開發(fā)的實(shí)踐訓(xùn)練,進(jìn)一步掌握軟件工程的方法和技術(shù),提高軟件開發(fā)的實(shí)際能力,培養(yǎng)
5、工程設(shè)計(jì)能力和綜合分析、解決問題的能力。1.3課程設(shè)計(jì)的背景 隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,各行各業(yè)都在追求信息化,以防在信息時(shí)代落伍。計(jì)算機(jī)和軟件在幫助人們提高工作效率的同時(shí)也能夠幫助人們放松一下,緩解工作及平時(shí)緊張生活。供兩人下棋的棋類打譜軟件應(yīng)用廣泛,可以供沒有棋子棋盤的兩人當(dāng)時(shí)下棋,也可以用于下棋比賽結(jié)束后的棋手鉆研。適用人群也較廣泛,沒有象棋經(jīng)驗(yàn)的初學(xué)者,有一定象棋經(jīng)驗(yàn)的棋手,老少皆宜。二、可行性研究與需求分析2.1要求實(shí)現(xiàn)一個(gè)中國象棋對弈的軟件,實(shí)現(xiàn)中國象棋的規(guī)則:棋子共有三十二個(gè),分為紅、黑兩組,每組十六個(gè),各分七種,其名稱和數(shù)目如下所述。 (1) 紅棋子:帥一人
6、,車、馬、炮、相、士各兩個(gè),兵五個(gè)。 (2)黑棋子:將一個(gè),車、馬、炮、象、士各兩個(gè),卒五個(gè)。 (3)在對局時(shí),由執(zhí)紅棋的一方先走,雙方輪流各走一著,直至分出勝負(fù)或走成和棋為止。輪到走棋的一方,將某個(gè)棋子從一個(gè)交叉點(diǎn)到另一個(gè)空著的交叉點(diǎn),或者吃掉對方的棋子而占領(lǐng)叉點(diǎn),都算走了一著。雙方各走了一著,稱為一個(gè)回合。 (4)帥(將)每一著只許走一步,前進(jìn)、后退、橫走都可以,但不能走出“九宮”。帥和將不準(zhǔn)在同一直線上直接對面,如一方已先占據(jù),另一方必須回避。 (5)士每一著只許沿“九宮”斜線走一步,可進(jìn)可退。 相(象)不能越過“河界”,每一著斜走兩步,
7、可進(jìn)可退,即俗稱相(象)走田字。當(dāng)田字中心有別的棋子時(shí),俗稱塞相(象)眼,則不行走過去。 (6)馬每著走一直(或一橫)一斜,可進(jìn)可退,即俗稱“馬走日字”。如果在要去方向緊靠一直(或一橫)的地方,有別的棋子擋住,俗稱“蹩馬腿”,就不能走過去。 (7)車每一著可以直進(jìn)、直退、橫走,不限步數(shù)。 (8)炮在不吃子的時(shí)候,走法同車一樣。 (9)兵(卒)在沒有過“河界”前,每著只許向前直走一步;過“河界”后,每著可以向前走一步,也可以橫走一步,但不能后退。走一著棋時(shí),如果己方棋子能夠走到的位置有對方棋子存在,就可把對棋子吃掉而占領(lǐng)
8、那個(gè)位置。只有炮吃了必須隔一個(gè)棋子(無論是哪一方的)跳吃,即俗稱“炮打隔子”。除 帥(將)外,其它棋子都可以聽任對方吃,或主動送吃。一方的棋子攻擊對方的帥(將),并在下一著要把它吃掉,稱為“將軍”,或簡稱“將”。被“將軍”的一方必須立即“應(yīng)將”,即用自衛(wèi)的著法去化解被“將”的狀態(tài)。如果被“將軍”而無法“應(yīng)將”,就算被“將死”。輪到走棋的一方,帥(將)雖沒被對方“將軍”,卻被禁在一個(gè)位置上無路可走,同時(shí)己方其它棋子也都不能走動,就算被“困斃”。2.2用戶需求分析(1)系統(tǒng)運(yùn)行環(huán)境硬件環(huán)境:本系統(tǒng)適用于那種Inter386以上計(jì)算機(jī),內(nèi)存容量為128M,應(yīng)配備,鍵
9、盤,鼠標(biāo),顯示器等外部設(shè)備。 軟件環(huán)境:本系統(tǒng)的設(shè)計(jì)采用eclipse編寫。在Win8環(huán)境下測試通過 本游戲軟件在Windows平臺下都可以運(yùn)行。(2)用戶需求該軟件對用戶沒有限制,只需要用戶具備最基本的計(jì)算機(jī)常識,會使用鼠標(biāo),了解象棋規(guī)則即可。該軟件提供棋盤,具有保存棋譜,演示棋譜的功能,可供棋手二人下棋,也可以提供比賽結(jié)束后的棋術(shù)鉆研。2.3可行性分析隨著當(dāng)前計(jì)算機(jī)的發(fā)展越來越深入各行各業(yè),各行業(yè)對信息化智能化的依賴越高,計(jì)算機(jī)軟件也可以為棋類競技比賽提供便利,供人們下棋消遣。該軟件具有棋盤棋子實(shí)體象棋所不具備的有特點(diǎn),可以保存棋譜,演示棋譜。沒有實(shí)體棋子整理的麻煩,也
10、沒有實(shí)體棋子棋局易毀的特點(diǎn)。經(jīng)濟(jì)可行性:此軟件是一個(gè)較小型的軟件,從人力,財(cái)力與物力來講,投入是非常小的,只需要計(jì)算機(jī)即可,然而計(jì)算機(jī)在現(xiàn)在家家戶戶已成為標(biāo)配。操作可行性:本系統(tǒng)設(shè)計(jì)清晰,操作簡介,符合象棋設(shè)定,并達(dá)到操作過程中的直觀、方便、使用、安全等要求。技術(shù)可行性:本系統(tǒng)采用JAVA進(jìn)行編寫。使用的靈活性、良好的擴(kuò)展性、以及現(xiàn)在編程語言的發(fā)展和其他軟件的廣泛應(yīng)用,充分說明了本軟件在技術(shù)方面的可行性。使用環(huán)境可行性:現(xiàn)在信息社會發(fā)展迅速,家家戶戶都有電腦以及網(wǎng)絡(luò),人們都具有一定的計(jì)算機(jī)基礎(chǔ),包括老人。同時(shí),在計(jì)算機(jī)普及的今天,絕大多數(shù)軟件對計(jì)算機(jī)硬件的要求很低,基本的硬件條件就能夠滿足軟件
11、的使用,并且價(jià)格也能夠被人們所接受。簡單的象棋打譜軟件所需要具備的計(jì)算機(jī)知識很少,使用方法也較簡單易學(xué)易會。三項(xiàng)目的技術(shù)和方法3.1 Java GUI功能利用Java實(shí)現(xiàn)的俄羅斯方塊游戲幾乎能用到Java GUI(Graphical User Interface)的所有方面,其中包括Sun公司為Java提供的兩個(gè)圖形界面類庫。1、AWT(Abstract Windowing Toolkit),中文譯為抽象窗口工具包,AWT是Sun公司最早推出的GUI類庫,其中提供了建立和設(shè)置Java的圖形用戶界面的基本工具。AWT由Java中的java.awt包提供,里面包含了許多可用來建立與平臺無關(guān)的圖形用
12、戶界面(GUI)的類,這些類被稱為構(gòu)件(Components)。2、Swing包是Java Foundation Classes(JFC)的一部分,與AWT的重量級構(gòu)件不同,Swing中大部分是輕量級構(gòu)件。正是這個(gè)原因,Swing幾乎無所不能,不但有各式各樣先進(jìn)的構(gòu)件,而且更為美觀易用。所以一開始使用AWT的程序員很快就轉(zhuǎn)向使用Swing了。本設(shè)計(jì)中俄羅斯方塊的實(shí)現(xiàn)的界面,主要是采用了Swing類庫。(1本游戲的基本窗口類包括JFrame、JWindow、JPanel和JDialog等。(2)在這里原子構(gòu)件會用到標(biāo)簽類JLabel、按鈕類JButton、JColorChooser類文本域JTe
13、xtField。(3)對一個(gè)大的GUI程序而言通常包含各種菜單,俄羅斯方塊游戲中也包含許多種菜單,如JMenu、JMenuItem、JMenuBar等.(4)俄羅斯方塊中的處理事件一般會用到ActionEvent類、ActionListener類、KeyEvent類、KeyEvent類、KeyListener接口、KeyAdapter類。(5)俄羅斯方塊的主界面采用的是BorderLayout布局。BorderLayout由5個(gè)區(qū)域來放置構(gòu)件,分別標(biāo)記為North、South、East、West和Center。用add方法加入構(gòu)件時(shí)要用一個(gè)標(biāo)記來指定構(gòu)件放到5個(gè)區(qū)域中的哪一個(gè)。(6)使用Gra
14、phics類提供的繪圖方法“public void paint(Graphics g)”可以畫出線條、矩形、圓形等圖形。3.2 多線程功能俄羅斯方塊游戲的實(shí)現(xiàn)充分利用了Java的線程功能。由于游戲中方塊的動態(tài)性,每個(gè)方塊有一定的生命周期,所以選用線程來實(shí)現(xiàn)方塊。一個(gè)方塊用一個(gè)線程類對象實(shí)現(xiàn),該類繼承于Thread類,當(dāng)一個(gè)方塊出現(xiàn)時(shí)也就表示一個(gè)線程對象產(chǎn)生并開始運(yùn)行。通過對鍵盤消息的響應(yīng),實(shí)現(xiàn)移動、下落、變形等操作。在Java中可通過run()方法為線程指明要完成的任務(wù),用繼承Thread類,并覆蓋run方法和通過實(shí)現(xiàn)Runnable接口的類調(diào)用run()方法這兩種技術(shù)為線程提供run()方法
15、。四總體設(shè)計(jì) 本系統(tǒng)實(shí)現(xiàn)了三個(gè)功能,即新游戲:開始一局新的對弈;悔棋:將棋子返回剛才所處位置;退出:退出本程序;信息提示:提示當(dāng)前信息狀態(tài)。4.1功能圖4.1 功能圖4.2流程圖4.2 總體設(shè)計(jì)流程圖五詳細(xì)設(shè)計(jì):5.1詳細(xì)設(shè)計(jì)思路 由上述類圖進(jìn)行分析。中國象棋對弈系統(tǒng)的程序由文件Chess.java實(shí)現(xiàn)。Chess.java主要包括兩個(gè)類:一個(gè)是被定義為public類型的類,名為Chess,主要負(fù)責(zé)中國象棋對弈程序的執(zhí)行;另一個(gè)類名為ChessMainFrame,是程序的主框架類。程序中Chess類通過生成ChessMainFrame類的對象來執(zhí)行程序。 Che
16、ssMainFrame類主要包含四個(gè)模塊:生成圖形用戶界面模塊,完成按鈕的操作模塊,棋子操作模塊和棋子的移動規(guī)則模塊。其中其中棋子的移動規(guī)則被定義為內(nèi)部類,名為ChessRule。ChessRule類中的方法用于定義各個(gè)棋子的移動規(guī)則和吃子規(guī)則。(1)圖形用戶界面模塊 圖形用戶界面是ChessMainFrame類中的基本模塊,它的主要作用是定義 該類中所使用的變量和實(shí)例對象,通過構(gòu)造函數(shù)初始化圖形用戶界面,添加組件和棋子,注冊事件組件。(2)按鈕的操作模塊
17、60;程序中有三個(gè)按鈕,分別為“新游戲”按鈕,“悔棋”按鈕和“退出”按鈕。單擊“新游戲”按鈕時(shí),程序重新布置棋子,并將保存當(dāng)前操作Vector(向量)清空;單擊“悔棋” 按鈕時(shí),調(diào)用Vector中的數(shù)據(jù)進(jìn)行悔棋操作;單擊“退出”向量按鈕時(shí),程序會詢問是否退出,選“是”則退出對弈。5.1 按鈕功能模塊圖(3)棋子的操作模塊 棋子的操作模塊定義了線程,單擊棋子的時(shí)候,可以使棋子閃爍以實(shí)現(xiàn)棋子已經(jīng)被選取的效果,單擊棋子或移動時(shí),根據(jù)棋子的編號來判斷使用規(guī)則進(jìn)行移動或吃子。需要注意的是,移動和吃子是調(diào)用規(guī)則類模塊完成的。5.2棋子操作模塊功能圖(4)棋子的移動規(guī)則類模塊
18、移動規(guī)則類ChessRule分別定義中國象棋32個(gè)棋子的移動規(guī)則。32個(gè)棋子可分為6類棋子。每一類棋子各有兩個(gè)方法,定義這類棋子的移動規(guī)則和吃子規(guī)則。 棋子的移動規(guī)則如下所述。 (1) 帥(將)每次只許走一步,前進(jìn)、后退、橫走都可以,但不能走出“宮”。將和帥不準(zhǔn)在同一直線上面對面,如一方已占據(jù),另一方就必須回避。 (2) 士每次只許沿“九宮”斜線走一步,可進(jìn)可退。 (3)相(相)不能越過“河界”,每一次斜走兩步,可進(jìn)可退,即俗稱“相(象)走田”。當(dāng)田字中心有別的棋子時(shí),俗稱“塞相(象)眼”,則不許走過 去。 (4)馬每次走一
19、直(或一橫)一斜,可進(jìn)可退,即俗稱“馬走日”。如果在要去的方向有別的棋子擋住。俗稱“蹩馬腿”,則不許走過去。 (5)車每次可以直進(jìn)、直退、橫走,不限步數(shù)。 (6)炮在不吃子的時(shí)候,走法同車一樣。 (7)兵(卒)在沒有過“河界”前,每次只許向前直走一步;過“ 河界”后,每次可向前直走或橫走一步,但不能后退。 吃子規(guī)則: (8)在走棋時(shí),如果棋子能夠走到的位置有對方棋子存在,就可以把對方棋子吃掉而占領(lǐng)那個(gè)位置。只有炮在吃子時(shí)必須隔一個(gè)棋子跳吃,即俗稱“炮打隔子”。 (9)帥(將)
20、外其他棋子都可以聽任對方吃。吃子的一方必須立即把被吃掉的子從棋盤上拿掉。六測試:悔棋制作棋盤:保存棋盤:復(fù)盤(可重新演示):勝利:七總結(jié): 通過此次設(shè)計(jì),使我們對自己所學(xué)專業(yè)有了更深一層次的了解,并且有了一些切身的體會。在設(shè)計(jì)過程中,我認(rèn)識到光有計(jì)算機(jī)理論知識是不行的,還得有更豐富的實(shí)踐經(jīng)驗(yàn),也就是多動手、多動腦。此次收獲最大的要屬開發(fā)軟件、編寫代碼。開發(fā)出一個(gè)好的系統(tǒng),要細(xì)心,要有激情的態(tài)度,且持之有恒。 這個(gè)基于java中國象棋的編程,可以說還存在很多問題,有很多功能還有待擴(kuò)充。限于我們的編程技術(shù)水平,有很多更深層的技術(shù)未使用,但可以這樣說,這次課程設(shè)計(jì)只是一個(gè)開始,只
21、有以后通過不斷的努力、不斷的研究和學(xué)習(xí)、不斷的實(shí)踐,才能掌握更多的軟件設(shè)計(jì)的技術(shù)和方法,才能設(shè)計(jì)出更好更完善的軟件作品, 盡量吸收轉(zhuǎn)變?yōu)樽约旱闹R,才能做的更好,這些經(jīng)驗(yàn)是相當(dāng)寶貴的,為我們以后能夠編出更好的程序是一個(gè)良好的啟發(fā)。八心得體會:通過此次設(shè)計(jì),使我們對自己所學(xué)專業(yè)有了更深一層次的了解,并且有了一些切身的體會。在設(shè)計(jì)過程中,我認(rèn)識到光有計(jì)算機(jī)理論知識是不行的,還得有更豐富的實(shí)踐經(jīng)驗(yàn),也就是多動手、多動腦 。通過這次畢業(yè)設(shè)計(jì),我受到了一次用專業(yè)知識、專業(yè)技能分析和解決問題的全面系統(tǒng)的鍛煉。同時(shí)我在綜合知識的選用方面,在應(yīng)用軟件開發(fā)的基本思想、方法方面,以及在常用編程
22、設(shè)計(jì)思路技巧的掌握方面都能向前邁了一大步,為日后成為合格的應(yīng)用型人才打下良好的基礎(chǔ)。這次在指導(dǎo)老師的嚴(yán)格要求和耐心指導(dǎo)下,以及在同學(xué)的幫助下,基本上完成了設(shè)計(jì)任務(wù),限于我們的編程技術(shù)水平,有很多更深層的技術(shù)未使用,但可以這樣說,這次課程設(shè)計(jì)只是一個(gè)開始,只有以后通過不斷的努力、不斷的研究和學(xué)習(xí)、不斷的實(shí)踐,才能掌握更多的軟件設(shè)計(jì)的技術(shù)和方法,才能設(shè)計(jì)出更好更完善的軟件作品, 盡量吸收轉(zhuǎn)變?yōu)樽约旱闹R,才能做的更好,這些經(jīng)驗(yàn)是相當(dāng)寶貴的,為我們以后能夠編出更好的程序是一個(gè)良好的啟發(fā)。參考文獻(xiàn):1 JAVA2實(shí)用教程 清華大學(xué)出版社
23、 耿祥義、張躍平編 2008 2 徐慧慧,葉達(dá)峰,JFrame,JBuilder編程技術(shù)與實(shí)例,人民郵電出版社,2006 3 楊文龍,軟件工程,電子工業(yè)出版社,1997附錄:1. 象棋主類 文件ChineseChess.javapackage com.xmy;import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.Lin
24、kedList; public class ChineseChess extends JFrame implements ActionListener ChessBoard board = null; Demon demon = null; MakeChessManual record = null; Container con = null; JMenuBar bar; JMenu fileMenu; JMenuItem 制作棋譜, 保存棋譜, 演示棋譜; JFileChooser fileChooser = null; LinkedList 棋譜 = null; public Chines
25、eChess() bar = new JMenuBar(); fileMenu = new JMenu("中國象棋"); 制作棋譜 = new JMenuItem("制作棋譜"); 保存棋譜 = new JMenuItem("保存棋譜"); 保存棋譜.setEnabled(false); 演示棋譜 = new JMenuItem("演示棋譜"); fileMenu.add(制作棋譜); fileMenu.add(保存棋譜); fileMenu.add(演示棋譜); bar.add(fileMenu); setJMe
26、nuBar(bar); setTitle(制作棋譜.getText(); 制作棋譜.addActionListener(this); 保存棋譜.addActionListener(this); 演示棋譜.addActionListener(this); board = new ChessBoard(45, 45, 9, 10); record = board.record; con = getContentPane(); JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, board, record); sp
27、lit.setDividerSize(5); split.setDividerLocation(460); con.add(split, BorderLayout.CENTER); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(60, 20, 690, 540); fileChooser = new JFileChooser(); con.validate(); validate(); pu
28、blic void actionPerformed(ActionEvent e) if (e.getSource() = 制作棋譜) con.removeAll(); 保存棋譜.setEnabled(true); this.setTitle(制作棋譜.getText(); board = new ChessBoard(45, 45, 9, 10); record = board.record; JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, board, record); split.setDivider
29、Size(5); split.setDividerLocation(460); con.add(split, BorderLayout.CENTER); validate(); if (e.getSource() = 保存棋譜) int state = fileChooser.showSaveDialog(null); File saveFile = fileChooser.getSelectedFile(); if (saveFile != null && state = JFileChooser.APPROVE_OPTION) try FileOutputStream ou
30、tOne = new FileOutputStream(saveFile); ObjectOutputStream outTwo = new ObjectOutputStream(outOne); outTwo.writeObject(record.獲取棋譜(); outOne.close(); outTwo.close(); catch (IOException event) if (e.getSource() = 演示棋譜) con.removeAll(); con.repaint(); con.validate(); validate(); 保存棋譜.setEnabled(false);
31、 int state = fileChooser.showOpenDialog(null); File openFile = fileChooser.getSelectedFile(); if (openFile != null && state = JFileChooser.APPROVE_OPTION) try FileInputStream inOne = new FileInputStream(openFile); ObjectInputStream inTwo = new ObjectInputStream(inOne); 棋譜 = (LinkedList) inTw
32、o.readObject(); inOne.close(); inTwo.close(); ChessBoard board = new ChessBoard(45, 45, 9, 10); demon = new Demon(board); demon.set棋譜(棋譜); con.add(demon, BorderLayout.CENTER); con.validate(); validate(); this.setTitle(演示棋譜.getText() + ":" + openFile); catch (Exception event) JLabel label =
33、 new JLabel("不是棋譜文件"); label.setFont(new Font("隸書", Font.BOLD, 60); label.setForeground(Color.red); label.setHorizontalAlignment(SwingConstants.CENTER); con.add(label, BorderLayout.CENTER); con.validate(); this.setTitle("沒有打開棋譜"); validate(); else JLabel label = new JLa
34、bel("沒有打開棋譜文件呢"); label.setFont(new Font("隸書", Font.BOLD, 50); label.setForeground(Color.pink); label.setHorizontalAlignment(SwingConstants.CENTER); con.add(label, BorderLayout.CENTER); con.validate(); this.setTitle("沒有打開棋譜文件呢"); validate(); public static void main(Stri
35、ng args) new ChineseChess(); 2. 象棋棋盤類文件ChessBoard.javapackage com.xmy;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;
36、import javax.swing.JPanel;import javax.swing.SwingUtilities;public class ChessBoard extends JPanel implements MouseListener, MouseMotionListenerpublic ChessPoint point; public int unitWidth, unitHeight; private int x軸長, y軸長; private int x, y; private Image img; protected Image pieceImg; private bool
37、ean move = false; public String 紅方顏色 = "紅方", 黑方顏色 = "黑方" ChessPiece 紅車1, 紅車2, 紅馬1, 紅馬2, 紅相1, 紅相2, 紅帥, 紅士1, 紅士2, 紅兵1, 紅兵2, 紅兵3, 紅兵4, 紅兵5, 紅炮1, 紅炮2; ChessPiece 黑車1, 黑車2, 黑馬1, 黑馬2, 黑將, 黑士1, 黑士2, 黑卒1, 黑卒2, 黑卒3, 黑卒4, 黑卒5, 黑象1, 黑象2, 黑炮1, 黑炮2; int startX, startY; int startI, startJ; pub
38、lic boolean 紅方走棋 = true, 黑方走棋 = false; Rule rule = null; public MakeChessManual record = null; public ChessBoard(int w, int h, int r, int c) setLayout(null); addMouseListener(this); addMouseMotionListener(this); Color bc = getBackground(); unitWidth = w; unitHeight = h; x軸長 = r; y軸長 = c; point = new
39、 ChessPointr + 1c + 1; for (int i = 1; i <= r; i+) for (int j = 1; j <= c; j+) pointij = new ChessPoint(i * unitWidth, j * unitHeight, false); rule = new Rule(this, point); record = new MakeChessManual(this, point); img = Toolkit.getDefaultToolkit().getImage("board.jpg"); pieceImg =
40、Toolkit.getDefaultToolkit().getImage("piece.gif"); 紅車1 = new ChessPiece("車", Color.red, bc, w - 4, h - 4, this); 紅車1.set棋子類別(紅方顏色); 紅車2 = new ChessPiece("車", Color.red, bc, w - 4, h - 4, this); 紅車2.set棋子類別(紅方顏色); 紅馬1 = new ChessPiece("馬", Color.red, bc, w - 4,
41、 h - 4, this); 紅馬1.set棋子類別(紅方顏色); 紅馬2 = new ChessPiece("馬", Color.red, bc, w - 4, h - 4, this); 紅馬2.set棋子類別(紅方顏色); 紅炮1 = new ChessPiece("炮", Color.red, bc, w - 4, h - 4, this); 紅炮1.set棋子類別(紅方顏色); 紅炮2 = new ChessPiece("炮", Color.red, bc, w - 4, h - 4, this); 紅炮2.set棋子類別(
42、紅方顏色); 紅相1 = new ChessPiece("相", Color.red, bc, w - 4, h - 4, this); 紅相1.set棋子類別(紅方顏色); 紅相2 = new ChessPiece("相", Color.red, bc, w - 4, h - 4, this); 紅相2.set棋子類別(紅方顏色); 紅士1 = new ChessPiece("仕", Color.red, bc, w - 4, h - 4, this); 紅士1.set棋子類別(紅方顏色); 紅士2 = new ChessPiece
43、("仕", Color.red, bc, w - 4, h - 4, this); 紅士2.set棋子類別(紅方顏色); 紅帥 = new ChessPiece("帥", Color.red, bc, w - 4, h - 4, this); 紅帥.set棋子類別(紅方顏色); 紅兵1 = new ChessPiece("兵", Color.red, bc, w - 4, h - 4, this); 紅兵1.set棋子類別(紅方顏色); 紅兵2 = new ChessPiece("兵", Color.red, bc
44、, w - 4, h - 4, this); 紅兵2.set棋子類別(紅方顏色); 紅兵3 = new ChessPiece("兵", Color.red, bc, w - 4, h - 4, this); 紅兵3.set棋子類別(紅方顏色); 紅兵4 = new ChessPiece("兵", Color.red, bc, w - 4, h - 4, this); 紅兵4.set棋子類別(紅方顏色); 紅兵5 = new ChessPiece("兵", Color.red, bc, w - 4, h - 4, this); 紅兵5.
45、set棋子類別(紅方顏色); 黑將 = new ChessPiece("將", Color.black, bc, w - 4, h - 4, this); 黑將.set棋子類別(黑方顏色); 黑士1 = new ChessPiece("士", Color.black, bc, w - 4, h - 4, this); 黑士1.set棋子類別(黑方顏色); 黑士2 = new ChessPiece("士", Color.black, bc, w - 4, h - 4, this); 黑士2.set棋子類別(黑方顏色); 黑車1 = ne
46、w ChessPiece("車", Color.black, bc, w - 4, h - 4, this); 黑車1.set棋子類別(黑方顏色); 黑車2 = new ChessPiece("車", Color.black, bc, w - 4, h - 4, this); 黑車2.set棋子類別(黑方顏色); 黑炮1 = new ChessPiece("炮", Color.black, bc, w - 4, h - 4, this); 黑炮1.set棋子類別(黑方顏色); 黑炮2 = new ChessPiece("炮&
47、quot;, Color.black, bc, w - 4, h - 4, this); 黑炮2.set棋子類別(黑方顏色); 黑象1 = new ChessPiece("象", Color.black, bc, w - 4, h - 4, this); 黑象1.set棋子類別(黑方顏色); 黑象2 = new ChessPiece("象", Color.black, bc, w - 4, h - 4, this); 黑象2.set棋子類別(黑方顏色); 黑馬1 = new ChessPiece("馬", Color.black, b
48、c, w - 4, h - 4, this); 黑馬1.set棋子類別(黑方顏色); 黑馬2 = new ChessPiece("馬", Color.black, bc, w - 4, h - 4, this); 黑馬2.set棋子類別(黑方顏色); 黑卒1 = new ChessPiece("卒", Color.black, bc, w - 4, h - 4, this); 黑卒1.set棋子類別(黑方顏色); 黑卒2 = new ChessPiece("卒", Color.black, bc, w - 4, h - 4, this
49、); 黑卒2.set棋子類別(黑方顏色); 黑卒3 = new ChessPiece("卒", Color.black, bc, w - 4, h - 4, this); 黑卒3.set棋子類別(黑方顏色); 黑卒4 = new ChessPiece("卒", Color.black, bc, w - 4, h - 4, this); 黑卒4.set棋子類別(黑方顏色); 黑卒5 = new ChessPiece("卒", Color.black, bc, w - 4, h - 4, this); 黑卒5.set棋子類別(黑方顏色); point110.setPiece(紅車1, this); point210.setPiece(紅馬1, this); point310.setPiece(紅相1, this); point410.setPiece(紅士1, thi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026吉林松原市扶余市事業(yè)單位選拔招聘35人參考題庫附答案
- 風(fēng)險(xiǎn)科技平臺技術(shù)開發(fā)合同
- 立體倉庫防火應(yīng)急預(yù)案
- 歷史文化街區(qū)消防宣傳新媒體內(nèi)容審核記錄細(xì)則
- 2026新疆克拉瑪依市中西醫(yī)結(jié)合醫(yī)院(克拉瑪依市人民醫(yī)院)事業(yè)單位編制外人員招聘40人備考題庫完美版
- 2025貴州貴陽市烏當(dāng)區(qū)新天九年制學(xué)校秋季招聘第十六批臨聘教師2人備考題庫及答案1套
- 2026上海細(xì)胞與基因治療技術(shù)轉(zhuǎn)化平臺招聘工藝開發(fā)與生產(chǎn)工程師1名備考題庫含答案
- 高中畢業(yè)讀書申請書
- 高三在家上網(wǎng)課申請書
- 找學(xué)校要手機(jī)申請書
- GB/T 43869-2024船舶交通管理系統(tǒng)監(jiān)視雷達(dá)通用技術(shù)要求
- 藥店全年主題活動方案設(shè)計(jì)
- 病媒生物防制服務(wù)外包 投標(biāo)方案(技術(shù)方案)
- 年產(chǎn)6萬噸環(huán)氧樹脂工藝設(shè)計(jì)
- 軌道線路養(yǎng)護(hù)維修作業(yè)-改道作業(yè)
- 北師大版五年級數(shù)學(xué)上冊第七單元《可能性》教案
- 2023-2024學(xué)年上海市閔行區(qū)四上數(shù)學(xué)期末綜合測試試題含答案
- 解除勞動合同證明電子版(6篇)
- 呼吸科規(guī)培疑難病例討論
- 有關(guān)中國居民死亡態(tài)度的調(diào)查報(bào)告
- 核對稿100和200單元概述
評論
0/150
提交評論