![《JAVA程序設計》課程設計五子棋小游戲_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/6/44ddfa73-075d-447e-8693-d85a8c1a3f3f/44ddfa73-075d-447e-8693-d85a8c1a3f3f1.gif)
![《JAVA程序設計》課程設計五子棋小游戲_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/6/44ddfa73-075d-447e-8693-d85a8c1a3f3f/44ddfa73-075d-447e-8693-d85a8c1a3f3f2.gif)
![《JAVA程序設計》課程設計五子棋小游戲_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/6/44ddfa73-075d-447e-8693-d85a8c1a3f3f/44ddfa73-075d-447e-8693-d85a8c1a3f3f3.gif)
![《JAVA程序設計》課程設計五子棋小游戲_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/6/44ddfa73-075d-447e-8693-d85a8c1a3f3f/44ddfa73-075d-447e-8693-d85a8c1a3f3f4.gif)
![《JAVA程序設計》課程設計五子棋小游戲_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/6/44ddfa73-075d-447e-8693-d85a8c1a3f3f/44ddfa73-075d-447e-8693-d85a8c1a3f3f5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、java程序設計課程設計題 目: 五子棋小游戲 專 業(yè): 信息與計算科學 學 號: 070930205等 姓 名: 指導教師: 成 績: 二00九 年 十二 月 九 日1.課程設計研究背景及意義五子棋是一種兩人對弈的純策略型棋類游戲,是起源于中國古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫生,引人入勝;不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。然則看似很簡單的一個小游戲,卻對我們這組剛接觸java編程的成員來說卻是一個不錯的挑戰(zhàn),由于水平不限不能做成和電腦進行對戰(zhàn),也對于和其它電腦聯(lián)機對戰(zhàn)的模式不太清楚,故做成一個自己和自己對戰(zhàn)的五子棋來考驗
2、我們的java的技術。2.課程設計題目描述和要求題目:五子棋小游戲游戲主要界面如下:游戲規(guī)則:1,棋子分為黑白兩色,采用1919棋盤。2,自己和自己對戰(zhàn),白子和黑子交替下,直到白子或黑子一方有五粒子連在一起,最先完成五粒子連在一起的一方為勝利的一方(可以是橫、豎、斜、反斜)。3,允許悔棋,且允許一直悔到棋盤上沒有棋子了,悔棋后允許恢復。當悔棋后下子了,則不允許再恢復了。4,有棋子的地方不允許再下棋子了5,落子后不能移動或拿掉。7,勝利后,棋局重新開始。主要功能:1,鼠標點棋盤上的任意一點,棋子會落入離這點最近的一個交叉點處。2,白子和黑子交替下。3,當下到一半時,可以保存進度。4,關閉再打開后
3、,可以重新讀取進度再接著下。5,允許悔棋,且允許一直悔到棋盤上沒有棋子了。6,悔棋后允許恢復。當悔棋后下子了,則不允許再恢復了。7,下棋的過程中,隨時可以重新開始。8,有棋子的地方不允許再下子了。9,當悔到沒有棋子的時候會彈出消息。10,任意一方勝利后會彈出消息11,恢復的步數(shù)超過了悔棋的步數(shù)的時候會彈出消息12,當任意一方勝利后,棋局重新開始。13,設有菜單欄,玩家可以點菜單來完成某種操作。14,當最小化后,能重新還原棋子(棋子不會消失)。15,點菜單欄的“幫助”“關于”會顯示這個課程設計小組的成員。3.課程設計報告內容3.1 題目求解的理論依據及算法1,利用java的swing組件可以實現(xiàn)
4、游戲主界面的設置和菜單的添加。本次發(fā)開的小游戲界面比較簡單,就一個面板外加一個菜單欄,在面板中繪圖。菜單條中有三項分別為:文件(保存進度、讀取進度、退出),編輯(悔棋、恢復、重來),幫助(關于)。2,利用java的輸入輸出類庫和文件操作來完成文件的讀寫來完成保存進度和讀取進度的功能。3,利用java的事件處理來完成鼠標,菜單的事件處理。4,利用java的類來生成棋子5,利用java的類的繼承和多態(tài),自定義mypanel來繼承jpanel,在mypanel 中重寫paintcomponent()方法來實現(xiàn)畫在面板中圖形的重繪。6,利用java的繪圖類graphics在面板中繪制棋盤,當點鼠標的時
5、候繪制棋子,以及完成重繪。7,利用java的動態(tài)數(shù)組arraylist來存儲棋子的坐標等等信息。8,建立一個19*19的矩陣來存儲棋盤上黑白棋子的信息,初始值全為0,例如:當每12行7列下了一個黑子后,hflag127=1。如果是白子則bflag127=1下一個棋子便對勝負進行一次判斷,當hflag或bflag有五個1連在一起的時候則判hflag和bflag對應的一方勝利。9,建立一個棋子的類,有屬性:x:棋子在棋盤上的橫坐標、y: 棋子在棋盤上的縱坐標num:這是玩家下的第幾個棋子xflag:矩陣的行、yflag:矩陣的列當下一個棋子后產生一個棋子實例,將棋子在棋盤的位置和這是下的第幾個子以
6、及第幾行和第幾列分別賦值給x,y,num,xflag,yflag。10,當num % 2=0的時候畫白子,當num % 2=1的時候畫黑子。3.2 主要事件處理:1,鼠標事件處理(mouselistener):public void mouseclicked(mouseevent e) int x = e.getx();/*棋子在棋盤上的橫坐標*/int y = e.gety()/*棋子在棋盤上的縱坐標*/;int it = 0, jt = 0; /*矩陣的行和列*/絕對定位棋子即當點在交叉點附近,棋子會落在交叉點if (y 53) /下子不會落到菜單欄上,菜單和標題共高53個像素for (i
7、nt i = 0; i 19; i+) for (int j = 0; j 19; j+) if (pal.henij - 13 = x& (y - 53 = pal.shuij - 13) & (y - 53 = pal.shuij + 13) x = (int) pal.henij;y = (int) pal.shuij;it = i; jt = j;/當絕對定位交叉處沒有棋子時畫棋子if (bflagitjt = 0 & hflagitjt = 0) if (a % 2 = 0) pal.drawbai(x, y);bflagitjt = 1;/下了一子后這點便不能下子了if (a %
8、2 = 1) pal.drawhei(x, y);hflagitjt = 1; /下了一子后這點便不能下子了qizi qi = new qizi(x, y); /將信息保存在棋子屬性中qi.setflagx(it); qi.setflagy(jt);qi.setx(x); qi.sety(y); qi.setnum(a);pal.list.add(qi);/ 把棋子實例保存到動態(tài)數(shù)組中huiqinum = 0;/下子后,便不能悔棋了,悔棋步數(shù)重置為0a+;shengfu();/每下一子對勝負情況進行判斷2、動作事件處理(點菜單的時候)(actionlistener):public void a
9、ctionperformed(actionevent e) if (e.getactioncommand().equals(保存進度) handlesave();if (e.getactioncommand().equals(讀取進度) handleread();if (e.getactioncommand().equals(退出) system.exit(0);if (e.getactioncommand().equals(悔棋) handlehuiqi();if (e.getactioncommand().equals(恢復) handlehuifu();if (e.getactionco
10、mmand().equals(重來) restart();if (e.getactioncommand().equals(關于.) handleabout();3、窗口事件處理(windowadapter):public void windowclosing(windowevent e) system.exit(0);3.3 簡要的操作流程(要求畫流程圖)界面大體構造restarthandlehuifuhandlehuiqihandlereadhandlesavehandaboutexit(0)退出讀取進度保存進度悔棋恢復關于重來幫助文件編輯窗口事件處理(關閉)窗口菜單鼠標事件處理(下子)簡要
11、的設計流程:創(chuàng)建窗口初始化菜單、面板對各個菜單項添加事件監(jiān)聽以及鼠標事件監(jiān)聽窗口事件處理動作事件處理鼠標事件處理完成java源代碼編寫調試修改程序,完善功能3.4事件處理的幾個重要方法:1、保存進度(handlesave)public void handlesave() int temp = filec.showsavedialog(this);if (temp = jfilechooser.approve_option) string path=filec.getselectedfile().getabsolutepath();file = new file(path);try file.c
12、reatenewfile();fileoutputstream fout = new fileoutputstream(file);dataoutputstream dout = new dataoutputstream(fout);for (int i = 0; i pal.list.size(); i+) dout.writeint(pal.list.get(i).getflagx();dout.writeint(pal.list.get(i).getflagy();dout.writeint(pal.list.get(i).getnum();dout.writeint(pal.list.
13、get(i).getx();dout.writeint(pal.list.get(i).gety();fout.close(); catch (filenotfoundexception e) e.printstacktrace(); catch (ioexception e) e.printstacktrace();2、讀取進度(handleread)public void handleread() int temp = filec.showopendialog(this);if (temp = jfilechooser.approve_option) restart();/讀取進程前必須清
14、空所有變量string path = filec.getselectedfile().getabsolutepath();file = new file(path);try fileinputstream fout = new fileinputstream(file);datainputstream din = new datainputstream(fout);/ readint以4個字節(jié)表示一個int,故要除4,一個循環(huán)讀了5次,故要除20for (int i = 0; i 0) qizi temp = pal.list.get(pal.list.size() - 1);pal.beiy
15、ong.add(temp);int tempx = temp.getflagx();int tempy = temp.getflagy();if (a % 2 = 1) bflagtempxtempy = 0;if (a % 2 = 0) hflagtempxtempy = 0;pal.list.remove(pal.list.size() - 1);a-;huiqinum+;repaint(); else joptionpane.showmessagedialog(this, 已經沒棋子了!, 警告,joptionpane.information_message);4、處理恢復(handle
16、huifu)public void handlehuifu() if (huiqinum 0) qizi temp = pal.beiyong.get(pal.beiyong.size() - 1);pal.list.add(temp);int tempx = temp.getflagx();int tempy = temp.getflagy();if (a % 2 = 1) bflagtempxtempy = 1;if (a % 2 = 0) hflagtempxtempy = 1;pal.beiyong.remove(pal.beiyong.size() - 1);a+;huiqinum-
17、;repaint(); else joptionpane.showmessagedialog(this, 對不起,系統(tǒng)不充許恢復!, 警告,joptionpane.information_message);5、重來(restart)public void restart() pal.list.clear();for (int i = 0; i 19; i+) for (int j = 0; j 19; j+) bflagij = 0;hflagij = 0;repaint();6、處理關于(handleabout)public void handleabout() joptionpane.sh
18、owmessagedialog(this, about, about,joptionpane.information_message);7、判斷勝負(shengfu)public void shengfu() /*是否白棋有五粒連在一起*/int ba = 0;/*是否黑棋有五粒連在一起*/int he = 0;/ 橫線上有五粒for (int i = 0; i 19; i+) for (int j = 0; j 15; j+) if (bflagij = 1 & bflagij + 1 = 1& bflagij + 2 = 1 & bflagij + 3 = 1& bflagij + 4 =
19、 1) ba = 1;if (hflagij = 1 & hflagij + 1 = 1& hflagij + 2 = 1 & hflagij + 3 = 1& hflagij + 4 = 1) he = 1;/ 豎線上有五粒斜、線上有五粒、反斜線上有五粒略,和第一種情況相似if (ba = 1) joptionpane.showmessagedialog(this, 白棋勝利, 結果,joptionpane.information_message);restart();if (he = 1) joptionpane.showmessagedialog(this, 黑棋勝利, 結果,jopti
20、onpane.information_message);restart();3.5 詳細操作步驟(含部分源程序代碼)1,產生棋子的類的主要屬性(文件qizi.java)public class qizi private int x; /棋子在棋盤上的橫坐標private int y; /棋子在棋盤上的縱坐標private int num;/ 這是玩家下的第幾個棋子private int flagx; / 矩陣的行private int flagy; / 矩陣的列2,產生面板文件mypanel.java的大概內容:public class mypanel extends jpanel /*白子的
21、圖片*/image bai;/*黑子的圖片*/image hei;/*19*19的棋盤圖片*/image qipan;/*動態(tài)數(shù)組,保存棋子實例*/arraylist list = new arraylist();/*動態(tài)數(shù)組,暫存悔棋時從list移出的棋子實例*/arraylist beiyong = new arraylist();/*保存棋盤交叉點的橫坐標*/double hen = new double1919;/*保存棋盤交叉點的縱坐標*/double shu = new double1919;/重寫這個方法用來完成圖形的重繪protected void paintcomponent
22、(graphics g) g.drawimage(qipan, 0, 0, this);if (list.size() != 0) for (int i = 0; i list.size(); i+) qizi qizi = (qizi) list.get(i);if (i % 2 = 0) g.drawimage(bai, qizi.getx() - 12, qizi.gety() - 12, this); else g.drawimage(hei, qizi.getx() - 12, qizi.gety() - 12, this);/方法畫白棋子public void drawbai(in
23、t x, int y) this.getgraphics().drawimage(bai, x - 12, y - 12, this);/方法畫白棋子public void drawhei(int x, int y) this.getgraphics().drawimage(hei, x - 12, y - 12, this);/初始化棋盤交叉點坐標public void startxy() for (int i = 0; i 19; i+) for (int j = 0; j 19; j+) henij = 18.0+j * 25.8;shuij = 18.0+i * 25.8;3、五子棋的
24、主要文件wuziqi.java的大概內容:public class wuziqi extends jframe implements mouselistener final string about = 0709302班java課程設計小組n本組成員:n組長:沈村敬n組員:劉新琳、雷艷飛、李云、黃生涯;jmenubar mb;mypanel pal;jmenu wenjian, bianji, help;jmenuitem read, save, exit, huiqi, huifu, restart, about;process pro = new process();jfilechoose
25、r filec = new jfilechooser();file file;/* 控制白棋和黑棋的交替*/int a;/*判斷坐標上有沒有白子*/int bflag = new int1919;/* 判斷坐標上有沒有黑子*/int hflag = new int1919;/*連續(xù)悔了幾步棋*/int huiqinum = 0;/*標題欄的圖標*/image top;class process implements actionlistener / 處理菜單事件public void actionperformed(actionevent e) 略,重復public void handlesa
26、ve() / 保存文件略,重復public void handleread() / 讀取文件略,重復public void handlehuiqi() / 處理悔棋略,重復public void handlehuifu() / 恢復悔棋略,重復public void handleabout() /彈出消息,小組名稱略public void restart() / 重新開始略,重復public void init() / 初始化菜單略public void mouseclicked(mouseevent e) / 處理鼠標點擊事件略,重復public void shengfu() / 判斷勝負略
27、,重復;public wuziqi() / 構造方法/*設置框架大小*/this.setsize(506, 556);/*設置標題*/this.settitle(五子棋);/*設置標題圖標*/this.seticonimage(top);init();/*獲取容器*/container co = getcontentpane();co.add(pal);/*使框架居中*/dimension c = toolkit.getdefaulttoolkit().getscreensize();dimension self = this.getsize();double x = c.getwidth()
28、 / 2 - self.getwidth() / 2;double y = c.getheight() / 2 - self.getheight() / 2;this.setlocation(int) x, (int) y);/*設置不能改變大小*/this.setresizable(false);/*增加鼠標事件偵聽*/this.addmouselistener(this);/*初始化棋盤的坐標*/pal.startxy();/*關閉窗口*/this.addwindowlistener(new windowadapter() public void windowclosing(windowe
29、vent e) system.exit(0););/*增加菜單*/this.setjmenubar(mb);/*顯示所有*/this.setvisible(true);/ main()public static void main(string args) new wuziqi();3.6 程序調試出錯信息及解決方法制作過程中遇到的最主要的錯誤如下:(這兩個錯誤都困擾了我們相當長一段時間,很有代表性)1,當在框架里繪圖的時候,會重寫paint()方法,但加了菜單后,菜單彈出再收縮后,界面不能及時刷新,會留下白色的一片。解決方法:寫一個類繼承jpanel類,重寫paintcomponent()方
30、法,用這個方法代替paint()方法,可解決這個問題。2,下面是文件讀取的方法中一段代碼:try fileinputstream fout = new fileinputstream(file);datainputstream din = new datainputstream(fout);for (int i = 0; i 關于彈出界面:5、當悔棋一直悔到棋盤上沒有棋子了會彈出:6、當你恢復的步數(shù)超過你悔棋的步數(shù)或者悔棋后又下子了,點恢復后會彈出以下消息:7、勝利后會彈出消息:3.8 心得體會雖然只是一個看似很簡單的小程序,但在開發(fā)的過程中遇到了各種各樣的問題,但最后都被我們小組成員在一起商
31、量討論,并上網和到圖書館去求助、查閱資料,向老師請教,終于一個一個的問題都被我們聯(lián)手解決了,在這其中我們都學到了很多東西,從一開始看到出錯就煩惱,變成了一看到錯誤就興奮。因為只有通過不斷去解決錯誤才能更好的提高我們自己的編程水平,通過這次的開發(fā)過程后,我們意識到要多做這種還算比較大型的系統(tǒng)(游戲)才能使自己的水平得到質的提高。同時,在發(fā)開過程中我們也意識到了我們的基礎還不是很扎實,我們要走的路還很長,但我們堅信,我們一直在路上,我們會不斷的超越自我,不斷的挑戰(zhàn)自我,總有一天,我們能在這個領域找到自己的一片天空。4. 本組成員及分工:組長:沈村敬(0709302-05)組員:劉新琳(070930
32、2-25)、雷艷飛(0709302-12)、李云(0709302-26)、黃生涯(0709302-01)分工:沈村敬:菜單保存進度和菜單讀取進度事件的處理以及paintcompoent方法的重寫劉新琳:鼠標事事件處理,游戲主界面的生成雷艷飛:菜單重來事件處理和窗口事件處理以及棋盤交叉點坐標的初始化李去:菜單悔棋事件處理和菜單恢復事件處理以及棋子類的編寫黃生涯:方法勝負判斷的編寫,菜單(關于)事件的處理5.總結通過這次的開發(fā),我們一起討論,我們總結出有以下幾點:1, 一定要養(yǎng)成良好的寫代碼的習慣,注意縮進和一些變量名要取的有意義,一看就知道這是大概是控制什么東西的。2, 代碼要減少控制語句的嵌套
33、,不要過長,過長多用函數(shù)來增加可讀性。3, 養(yǎng)成寫注釋的習慣,這樣你自己看的懂,別人也看得懂。4, 算法很重要,寫代碼之前先要弄清楚算法大概的流程。5, 多和別人交流,這樣你的思想才不會局限。6, 多上網查資料,網絡是把雙刃劍,但用于這方面是不會有什么很大的壞處的。7, 多動手,多試驗,在錯誤中成長。參考書目:(五號,宋體加粗)1 李尊朝,蘇軍,java語言設計,中國鐵道出版社,2007年12月ut2apodfxxc02gybkskcww97mrqqwhoj5tl15zt6jipyytycummtarp3v1n5luizi3xh3bhwyreko8d9g7nmzqowpjetldrw08gvs
34、8dsdqqygc3ce7moo2tlf0jf1gk74iuxybmtivr97ckrfvqult5fn2t6mpjr6rbzvpsortzvij5nb5ndvvsr4iwr1twlfkglspzuhrjq3cmzu98euouijdlszqpmvrw9zkupxf8wfug9l2g9277g2rtipa1ypczeuqxpkbhtvdcooqozxuz3vjrzmocijym62zchmeootyes8ebmm932tbz2yo09rtszeys8zrd2yktj8l6jeazvajnfbtrylvsm6ofbftoxvrffn7owiygjlamkunxjybz5rrb7r4vsur9zp
35、fzfmfsjhcfca37lnw2vvlrkn7r8psz1bn6oric5hu5z6hcxayqynpog8duybawqsl20csg06dh2sm8hltgpkicskrgopdpuhbj1lmpk7lydvc6nnmwl3fwhzftfvyaary7lhssxj10v3ph3y19bxyr77ib7cpzsu2tijqe3hkqkkau9kskcphkxuikvvyjzpg2yijrkqfbggovyqkuxnwi9omnjtt6qilzxtyrf7d20fbmabcfiixrqkusvnxbppfuxyq1fjskfsubkgs2duvqc9sz4jkbgn4qqv66pyoarjurnfj3txyfclzieeptwfjthpheipdfnqnr2hjqkv2dzwtmpdjqkbcxmovdsjqctjagjmdlskpgad2s0h0vmzgaht36gyuez7umank1ndreubeqdgrx0venqg
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年二年級數(shù)學教師工作總結模版(3篇)
- 2025年個人居間協(xié)議(4篇)
- 2025年中外貨物買賣合同標準樣本(2篇)
- 化妝品儲存運輸服務合同
- 農產品城鄉(xiāng)配送合同范本
- 醫(yī)療設備緊急運輸合同
- 咨詢公司裝修居間協(xié)議范本
- 服裝物流配送標準合同樣本
- 醫(yī)院窗簾改造工程施工方案
- 萊州花紋藝術漆施工方案
- 準備單元 雪地上的“足跡”(教學設計)-2023-2024學年五年級下冊科學大象版
- NB-T32042-2018光伏發(fā)電工程建設監(jiān)理規(guī)范
- 中國電信入職流程
- 宇航用商業(yè)現(xiàn)貨(COTS)器件保證指南-編制說明
- 音樂學科閱讀方案
- 《立體倉庫鋼結構貨架技術規(guī)范(征求意見稿)》
- 2024年貴州蔬菜集團有限公司招聘筆試參考題庫附帶答案詳解
- 2024江蘇省四校聯(lián)考高三下學期開學考化學試題及答案
- 《玩手機的危害》課件
- 《社區(qū)康復》課件-第二章 社區(qū)康復的內容
- 2024年廣東省普通高中學業(yè)水平考試(化學)考試大綱
評論
0/150
提交評論