![象棋程序設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view/4e2a95f324076f99dd3b0e4088e6d14b/4e2a95f324076f99dd3b0e4088e6d14b1.gif)
![象棋程序設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view/4e2a95f324076f99dd3b0e4088e6d14b/4e2a95f324076f99dd3b0e4088e6d14b2.gif)
![象棋程序設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view/4e2a95f324076f99dd3b0e4088e6d14b/4e2a95f324076f99dd3b0e4088e6d14b3.gif)
![象棋程序設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view/4e2a95f324076f99dd3b0e4088e6d14b/4e2a95f324076f99dd3b0e4088e6d14b4.gif)
![象棋程序設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view/4e2a95f324076f99dd3b0e4088e6d14b/4e2a95f324076f99dd3b0e4088e6d14b5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
象棋程序設(shè)計(jì)象棋程序設(shè)計(jì)象棋程序設(shè)計(jì)象棋程序設(shè)計(jì)編制僅供參考審核批準(zhǔn)生效日期地址:電話:傳真:郵編:象棋程序設(shè)計(jì)課程設(shè)計(jì)目的Java語(yǔ)言是當(dāng)今流行的網(wǎng)絡(luò)編程語(yǔ)言,它具有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。面向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)今世界最流行的開(kāi)發(fā)方法,它不僅具有更貼近自然的語(yǔ)義,而且有利于軟件的維護(hù)和繼承。為了進(jìn)一步鞏固課堂上所學(xué)到的知識(shí),深刻把握J(rèn)ava語(yǔ)言的重要概念及其面向?qū)ο蟮奶匦?,鍛煉學(xué)生熟練的應(yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問(wèn)題的能力,開(kāi)設(shè)了一周的Java程序設(shè)計(jì)課程設(shè)計(jì)。通過(guò)此次課程設(shè)計(jì),鞏固所學(xué)Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯基本功,掌握J(rèn)DK、Editplus、Eclipse、JCreator等開(kāi)發(fā)工具的運(yùn)用,拓寬常用類庫(kù)的應(yīng)用。使學(xué)生通過(guò)該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知識(shí)加以融會(huì)貫通,全面掌握J(rèn)ava語(yǔ)言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法,為今后從事實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。2.設(shè)計(jì)方案論證功能描述象棋是中國(guó)一種流傳十分廣泛的游戲。下棋雙方根據(jù)自己對(duì)棋局形式的理解和對(duì)棋藝規(guī)律的掌握,調(diào)動(dòng)車馬,組織兵力,協(xié)調(diào)作戰(zhàn)在棋盤--這塊特定的戰(zhàn)場(chǎng)上進(jìn)行著象征性的軍事戰(zhàn)斗。本程序的功能就是將棋盤和棋子在電腦上模擬出來(lái),雙方可以通過(guò)鼠標(biāo)對(duì)己方棋子的操作進(jìn)行對(duì)弈。概要設(shè)計(jì)象棋,人人會(huì)走,把己方的棋子按不同棋子的規(guī)則放在棋盤合適的位置上。象棋包含三個(gè)要素:棋盤、棋子和規(guī)則。在本象棋程序的設(shè)計(jì)上,也大致遵循這三個(gè)要素,但是細(xì)化為四個(gè)方面:棋盤、棋盤上可以走棋的落子點(diǎn)、棋子和象棋規(guī)則。棋盤:繪制棋盤時(shí),進(jìn)行畫(huà)橫線,畫(huà)最左側(cè)的豎線,畫(huà)最右側(cè)的豎線,畫(huà)中間的豎線,畫(huà)斜線等操作。棋盤其實(shí)就是一張棋盤的圖形,我們要在計(jì)算機(jī)上的棋盤上落子并不像在現(xiàn)實(shí)生活中那么容易,這里說(shuō)的棋盤充其量只是背景。落子點(diǎn):真正落子的地方必須是我們?cè)趫D形界面上設(shè)定的落子點(diǎn)。落子點(diǎn)其實(shí)就是在圖形界面上定義一個(gè)應(yīng)該擺放棋子的點(diǎn)位置。棋子:包括棋子名和棋子顏色和棋子所屬方等信息。象棋規(guī)則:不同棋子只能按照各自的規(guī)則在這些設(shè)定的位置上擺放、搏殺。根據(jù)前面的細(xì)化,程序中分別設(shè)計(jì)了四個(gè)類對(duì)應(yīng)棋盤、落子點(diǎn)、棋子和象棋規(guī)則這四個(gè)方面。四個(gè)類幾乎包括了程序的全部,程序框圖如下圖所示:中國(guó)象棋棋子落子點(diǎn)繪制中國(guó)象棋棋子落子點(diǎn)繪制棋盤象棋規(guī)則畫(huà)斜線畫(huà)中間畫(huà)斜線畫(huà)中間豎線畫(huà)最右側(cè)豎線畫(huà)最左側(cè)豎線畫(huà)橫線棋子顏色棋子所屬方棋棋子名圖1.程序功能框圖詳細(xì)設(shè)計(jì)棋子類ChessSwing中并沒(méi)有棋子這個(gè)組建類,所以我們必須設(shè)計(jì)一個(gè)組件,棋子其實(shí)就是圓形的JLabel,但Swing中的JLabel組件是方形的,沒(méi)關(guān)系,利用JLabel我們可以創(chuàng)建圓形的JLabel組件——Chess。落子點(diǎn)類Point在平面中確定一個(gè)點(diǎn)需要X坐標(biāo)和Y坐標(biāo),在圖形界面中確定一個(gè)點(diǎn)同樣也需要X坐標(biāo)和Y坐標(biāo)。圖形界面的左上角的坐標(biāo)為(0,0),X數(shù)值往右增大,Y數(shù)值往下增大。落子點(diǎn)其實(shí)就是在圖形界面上定義一個(gè)應(yīng)該擺放棋子的點(diǎn)位置,棋子擺放在任何位置都視為非法,除了落子點(diǎn)。當(dāng)然,描述一個(gè)點(diǎn)位置僅僅是類Point的基本功能之一,他還需要知道這個(gè)點(diǎn)上是否已有棋子以及是什么棋子。棋盤類ChessBord棋盤其實(shí)就是我們看到的一個(gè)圖形界面,將棋盤設(shè)計(jì)為JPanel類,在Jpanel這個(gè)容器上,我們可以利用坐標(biāo)確定落子點(diǎn),也可以加入我們自定義的棋子組件。JPanel容器其實(shí)就像有底色的畫(huà)布,有了落子點(diǎn)和棋子,還需要我們自己畫(huà)橫線和豎線。ChessBord繼承了JPanel,覆寫(xiě)方法paintCompont,實(shí)例化JPanel時(shí),會(huì)自動(dòng)調(diào)用該方法。規(guī)則類ChessRuleChessRule類的作用就是判斷走棋是否合法。實(shí)現(xiàn)思路就是根據(jù)走棋的起點(diǎn)和終點(diǎn)計(jì)算走棋路線中是否有其他的棋子,再依據(jù)是何種棋子判斷走棋是否合法。類ChessFrame雖然上面4個(gè)類實(shí)現(xiàn)了象棋程序的所有功能,但還需要一個(gè)底層窗口容器加載ChessBoard這個(gè)JPanel。并添加相應(yīng)的菜單。3.設(shè)計(jì)結(jié)果與分析程序運(yùn)行之后,可以實(shí)現(xiàn)兩個(gè)人分別控制紅方和黑方的棋子進(jìn)行對(duì)弈,缺點(diǎn)就是程序過(guò)于簡(jiǎn)單,只能實(shí)現(xiàn)上述功能,不能悔棋,沒(méi)有計(jì)時(shí)功能,也不能實(shí)現(xiàn)人機(jī)對(duì)弈功能。程序運(yùn)行結(jié)果如下所示:圖2.Chess類的運(yùn)行結(jié)果“車”繪制“中國(guó)象棋棋盤”,通過(guò)定義劃?rùn)M線,畫(huà)左側(cè)的豎線,畫(huà)最右側(cè)的豎線,畫(huà)中間的豎線,畫(huà)斜線等操作,輸出程序的棋盤的運(yùn)行結(jié)果。圖3.中國(guó)象棋棋盤通過(guò)定義X坐標(biāo),Y坐標(biāo),和棋子,并將棋子加入到棋盤上的指定位置,輸出中國(guó)象棋開(kāi)局的程序運(yùn)行結(jié)果。圖4.中國(guó)象棋程序運(yùn)行效果圖——開(kāi)局圖5.中國(guó)象棋程序運(yùn)行效果圖——?dú)埦?.設(shè)計(jì)體會(huì)通過(guò)對(duì)java的課程設(shè)計(jì),針對(duì)java的書(shū)本知識(shí)得到了進(jìn)一步的鞏固,具體化就是加深了我對(duì)圖形用戶界面理解,對(duì)程序的深層理解,清楚程序中每一步的功能,在程序的運(yùn)行中是十分重要的,一個(gè)好的結(jié)構(gòu)在運(yùn)行中能夠充分的發(fā)揮程序的功能。把書(shū)本上學(xué)習(xí)到的知識(shí)應(yīng)用到實(shí)際中去,很好的鍛煉了我編寫(xiě)java語(yǔ)言的能力。結(jié)構(gòu)設(shè)計(jì)的合理性決定了這個(gè)程序的價(jià)值。在今后的學(xué)習(xí)中我要注意這方面,使得我的編程能力能有進(jìn)一步的提高。
在整個(gè)設(shè)計(jì)過(guò)程中,通過(guò)各種渠道獲取資料。利用周末去大的書(shū)店查資料,把重要的東西記錄下來(lái),也去圖書(shū)館借了一些相關(guān)的參考資料,同時(shí)還充分利用網(wǎng)上資源查一些資料。最后再綜合這些資料,在理工實(shí)驗(yàn)樓進(jìn)行具體的操作。從做課題設(shè)計(jì)的過(guò)程中,我的體會(huì)挺多的,感覺(jué)到只要有信心與耐心,沒(méi)有做不到的事情。因?yàn)樵谶@個(gè)過(guò)程中寫(xiě)代碼與調(diào)試的過(guò)程中確實(shí)需要耐心與信心,否則就不可能寫(xiě)完整??傊?,本次課程設(shè)計(jì)使自己收益非淺,為自己以后進(jìn)入社會(huì)工作提供了一次不可多得的鍛煉和實(shí)踐的機(jī)會(huì)。5.參考文獻(xiàn)[1].孫全黨
王吳迪
趙楓朝,Java程序設(shè)計(jì)應(yīng)用教程,電子工業(yè)出版社,
[2].雷之宇,Java項(xiàng)目開(kāi)發(fā)實(shí)踐—網(wǎng)絡(luò)篇,中國(guó)鐵道出版社,[3]陳軼.姚曉昆編著.Java程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo).北京:清華大學(xué)出版社,2006
[4]楊昭編著.二級(jí)Java語(yǔ)言程序設(shè)計(jì)教程.北京:中國(guó)水利水電出版社,2006
[5]趙文靖編著.Java程序設(shè)計(jì)基礎(chǔ)與上機(jī)指導(dǎo).北京:清華大學(xué)出版社,2006附錄import.*;import.*;importpublicclassChessextendsJLabel{ privateStringname;etPlayer().equals().getPlayer())){ returnfalse; } } returntrue; } returnfalse; } privatebooleancheckRule(Stringname){ if("車")){ if()==()||()==()){ if(hasBlock(name)==0){ returntrue; } } returnfalse; } if("馬")){ if()())==2*interval&&()())==interval) { if(hasBlock(name)==0){ returntrue; } }if()())==interval&&()())==2*interval) { if(hasBlock(name)==0){ returntrue; } } } if("象")){ if().getPlayer().equals("PlayerA")){ if()>4*interval+initY){ returnfalse; } } if().getPlayer().equals("PlayerB")){ if()<5*interval+initY){ returnfalse; } } if()())==2*interval&&()())==2*interval){ if(hasBlock(name)==0){ returntrue; } }}if("兵")){ if()<()){ returnfalse; } if()==()&&()())==interval){ returntrue; } if()>4*interval+initY){ if()==()&&()())==interval){ returntrue; } } } if("卒")){ if()>()){ returnfalse; } if()==()&&()())==interval){ returntrue; } if()<5*interval+initY){ if()==()&&()())==interval){returntrue;} }}if("士")){ if().getPlayer().equals("PlayerA")){ if()<3*interval+initX||()>2*interval+initY){ returnfalse; } if()>5*interval+initX||()>2*interval+initY){ returnfalse; } } if().getPlayer().equals("PlayerB")){ if()<3*interval+initX||()<7*interval+initY){ returnfalse; } if()>5*interval+initX||()<7*interval+initY){ returnfalse; } } if()())==interval&&()())==interval){ returntrue; } } if("將")){ if().getPlayer().equals("PlayerA")){ if()<3*interval+initX||()>2*interval+initY){ returnfalse; } if()>5*interval+initX||()>2*interval+initY){ returnfalse; } } if().getPlayer().equals("PlayerB")){ if()<3*interval+initX||()<7*interval+initY){ returnfalse; } if()>5*interval+initX||()<7*interval+initY){ returnfalse; } } if()==()&&()())==interval){ returntrue; } if()==()&&()())==interval){ returntrue; } } if("炮")){ if()==()||()==()){ if&&hasBlock(name)==1){ returntrue; }if(!&&hasBlock(name)==0){ returntrue; } } returnfalse; } returnfalse; } privateinthasBlock(Stringname){ intblocks=0; intpointsX=()())/interval; intpointsY=()())/interval; intstartX=()-initX)/interval; intstartY=()-initY)/interval; asChess){ blocks++; } } }else{ for(inti=1;i<pointsY;i++){ if(choicePoint[startY-i][startX].hasChess){ blocks++; } } } } if(pointsY==0){ if(endX>startX){ for(inti=1;i<pointsX;i++){ if(choicePoint[startY][startX+i].hasChess){ blocks++; } } }else{ for(inti=1;i<pointsX;i++){ if(choicePoint[startY][startX-i].hasChess){ blocks++; } } } }} if("象")){ if(endX<startX&&endY>startY){ if(choicePoint[startY+1][startX-1].getHasChess()){ blocks=1; } } if(endX<startX&&endY<startY){ if(choicePoint[startY-1][startX-1].getHasChess()){ blocks=1; } } if(endX>startX&&endY>startY){ if(choicePoint[startY+1][startX+1].getHasChess()){ blocks=1; } } if(endX>startX&&endY<startY){ if(choicePoint[startY-1][startX+1].getHasChess()){ blocks=1; } } } if("馬")){ if(pointsX==1){ if(endY>startY){ if(choicePoint[startY+1][startX].getHasChess()){ blocks=1;}}else{ if(choicePoint[startY-1][startX].getHasChess()){ blocks=1; } } } if(pointsX==2){ if(endX<startX){
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025車輛抵債合同書(shū)
- 2025煉化工程建設(shè)總承包合同
- 2025油漆工程承包合同
- 2024-2025學(xué)年新教材高中語(yǔ)文 第七單元 16.2 登泰山記說(shuō)課稿(1)部編版必修上冊(cè)
- 2024-2025學(xué)年高中地理 第1章 旅游和旅游資源 第2節(jié) 旅游資源的類型說(shuō)課稿 中圖版選修3
- 二手房交易時(shí)合同范例
- 飲料公司組建方案
- 《 負(fù)數(shù)》(說(shuō)課稿)-2023-2024學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)人教版
- 石材礦山起料方案
- 鑄造企業(yè)整治方案制定
- 上海市2024年中考化學(xué)真題(含答案)
- 油氣儲(chǔ)運(yùn)節(jié)能優(yōu)化方案
- 物流公司員工守則以及管理制度
- 2024人形機(jī)器人產(chǎn)業(yè)半年研究報(bào)告
- 購(gòu)買演唱會(huì)門票的合同模板
- 【基于現(xiàn)金流的企業(yè)財(cái)務(wù)風(fēng)險(xiǎn)探究文獻(xiàn)綜述4100字】
- 燃燒爆炸理論及應(yīng)用 課件 第1-3章 緒論、燃燒及其災(zāi)害、物質(zhì)的燃燒
- 事業(yè)單位網(wǎng)絡(luò)安全知識(shí)培訓(xùn)
- 2024年山東省第三屆中小學(xué)生海洋知識(shí)競(jìng)賽試題及答案(初中組)
- 2024年山東省春季高考技能考試汽車專業(yè)試題庫(kù)-上(單選題匯總)
- 《活著》讀書(shū)分享課件
評(píng)論
0/150
提交評(píng)論