《JAVA程序設(shè)計(jì)》課程設(shè)計(jì)五子棋小游戲
《《JAVA程序設(shè)計(jì)》課程設(shè)計(jì)五子棋小游戲》由會(huì)員分享,可在線閱讀,更多相關(guān)《《JAVA程序設(shè)計(jì)》課程設(shè)計(jì)五子棋小游戲(19頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 《JAVA程序設(shè)計(jì)》 課程設(shè)計(jì) 題 目: 五子棋小游戲 專(zhuān) 業(yè): 信息與計(jì)算科學(xué) 學(xué) 號(hào): 070930205等 姓 名: 指導(dǎo)教師: 成 績(jī): 二00九 年 十二 月 九 日 1.課程設(shè)計(jì)研究背景及意義 五子棋是一種兩人對(duì)弈的純策略型棋類(lèi)游戲,是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫
2、生,引人入勝;不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。 然則看似很簡(jiǎn)單的一個(gè)小游戲,卻對(duì)我們這組剛接觸JAVA編程的成員來(lái)說(shuō)卻是一個(gè)不錯(cuò)的挑戰(zhàn),由于水平不限不能做成和電腦進(jìn)行對(duì)戰(zhàn),也對(duì)于和其它電腦聯(lián)機(jī)對(duì)戰(zhàn)的模式不太清楚,故做成一個(gè)自己和自己對(duì)戰(zhàn)的五子棋來(lái)考驗(yàn)我們的JAVA的技術(shù)。 2.課程設(shè)計(jì)題目描述和要求 題目:五子棋小游戲 游戲主要界面如下: 游戲規(guī)則: 1,棋子分為黑白兩色,采用1919棋盤(pán)。 2,自己和自己對(duì)戰(zhàn),白子和黑子交替下,直到白子或黑子一方有五粒子連在一起,最先完成五粒子連在一起的一方為勝利的一方(可以是橫、豎、斜、反斜)。 3,
3、允許悔棋,且允許一直悔到棋盤(pán)上沒(méi)有棋子了,悔棋后允許恢復(fù)。當(dāng)悔棋后下子了,則不允許再恢復(fù)了。 4,有棋子的地方不允許再下棋子了 5,落子后不能移動(dòng)或拿掉。 7,勝利后,棋局重新開(kāi)始。 主要功能: 1,鼠標(biāo)點(diǎn)棋盤(pán)上的任意一點(diǎn),棋子會(huì)落入離這點(diǎn)最近的一個(gè)交叉點(diǎn)處。 2,白子和黑子交替下。 3,當(dāng)下到一半時(shí),可以保存進(jìn)度。 4,關(guān)閉再打開(kāi)后,可以重新讀取進(jìn)度再接著下。 5,允許悔棋,且允許一直悔到棋盤(pán)上沒(méi)有棋子了。 6,悔棋后允許恢復(fù)。當(dāng)悔棋后下子了,則不允許再恢復(fù)了。 7,下棋的過(guò)程中,隨時(shí)可以重新開(kāi)始。 8,有棋子的地方不允許再下子了。 9,當(dāng)悔到?jīng)]有棋子的時(shí)候會(huì)彈
4、出消息。 10,任意一方勝利后會(huì)彈出消息 11,恢復(fù)的步數(shù)超過(guò)了悔棋的步數(shù)的時(shí)候會(huì)彈出消息 12,當(dāng)任意一方勝利后,棋局重新開(kāi)始。 13,設(shè)有菜單欄,玩家可以點(diǎn)菜單來(lái)完成某種操作。 14,當(dāng)最小化后,能重新還原棋子(棋子不會(huì)消失)。 15,點(diǎn)菜單欄的“幫助”—>“關(guān)于…”會(huì)顯示這個(gè)課程設(shè)計(jì)小組的成員。 3.課程設(shè)計(jì)報(bào)告內(nèi)容 3.1 題目求解的理論依據(jù)及算法 1,利用JAVA的Swing組件可以實(shí)現(xiàn)游戲主界面的設(shè)置和菜單的添加。本次發(fā)開(kāi)的小游戲界面比較簡(jiǎn)單,就一個(gè)面板外加一個(gè)菜單欄,在面板中繪圖。菜單條中有三項(xiàng)分別為:文件(保存進(jìn)度、讀取進(jìn)度、退出),編輯(悔棋、恢復(fù)、
5、重來(lái)),幫助(關(guān)于…)。 2,利用JAVA的輸入輸出類(lèi)庫(kù)和文件操作來(lái)完成文件的讀寫(xiě)來(lái)完成保存進(jìn)度和讀取進(jìn)度的功能。 3,利用JAVA的事件處理來(lái)完成鼠標(biāo),菜單的事件處理。 4,利用JAVA的類(lèi)來(lái)生成棋子 5,利用JAVA的類(lèi)的繼承和多態(tài),自定義Mypanel來(lái)繼承JPanel,在Mypanel 中重寫(xiě)paintComponent()方法來(lái)實(shí)現(xiàn)畫(huà)在面板中圖形的重繪。 6,利用JAVA的繪圖類(lèi)Graphics在面板中繪制棋盤(pán),當(dāng)點(diǎn)鼠標(biāo)的時(shí)候繪制棋子,以及完成重繪。 7,利用JAVA的動(dòng)態(tài)數(shù)組ArrayList來(lái)存儲(chǔ)棋子的坐標(biāo)等等信息。 8,建立一個(gè)19*19的矩陣來(lái)存儲(chǔ)棋盤(pán)上黑白棋子
6、的信息,初始值全為0,例如:當(dāng)每12行7列下了一個(gè)黑子后,hflag[12][7]=1。如果是白子則bflag[12][7]=1下一個(gè)棋子便對(duì)勝負(fù)進(jìn)行一次判斷,當(dāng)hflag或bflag有五個(gè)1連在一起的時(shí)候則判hflag和bflag對(duì)應(yīng)的一方勝利。 9,建立一個(gè)棋子的類(lèi),有屬性: X:棋子在棋盤(pán)上的橫坐標(biāo)、Y: 棋子在棋盤(pán)上的縱坐標(biāo) num:這是玩家下的第幾個(gè)棋子 xflag:矩陣的行、yflag:矩陣的列 當(dāng)下一個(gè)棋子后產(chǎn)生一個(gè)棋子實(shí)例,將棋子在棋盤(pán)的位置和這是下的第幾個(gè)子以及第幾行和第幾列分別賦值給x,y,num,xflag,yflag。 10,當(dāng)num % 2==0的時(shí)候畫(huà)
7、白子,當(dāng)num % 2==1的時(shí)候畫(huà)黑子。 3.2 主要事件處理: 1,鼠標(biāo)事件處理(MouseListener): public void mouseClicked(MouseEvent e) { int x = e.getX();/**棋子在棋盤(pán)上的橫坐標(biāo)*/ int y = e.getY()/**棋子在棋盤(pán)上的縱坐標(biāo)*/; int it = 0, jt = 0; /**矩陣的行和列*/ //絕對(duì)定位棋子即當(dāng)點(diǎn)在交叉點(diǎn)附近,棋子會(huì)落在交叉點(diǎn) if (y > 53) {//下子不會(huì)落到菜單欄上,菜單和標(biāo)題共高53個(gè)像素 for (int i =
8、 0; i < 19; i++) { for (int j = 0; j < 19; j++) { if (pal.hen[i][j] - 13 <= x && (pal.hen[i][j] + 13) >= x&& (y - 53 >= pal.shu[i][j] - 13) && (y - 53 <= pal.shu[i][j] + 13)) { x = (int) pal.hen[i][j]; y = (int) pal.shu[i][j]; it = i; jt = j; } } } //當(dāng)絕對(duì)
9、定位交叉處沒(méi)有棋子時(shí)畫(huà)棋子 if (bflag[it][jt] == 0 && hflag[it][jt] == 0) { if (a % 2 == 0) { pal.drawBai(x, y); bflag[it][jt] = 1;//下了一子后這點(diǎn)便不能下子了 } if (a % 2 == 1) { pal.drawHei(x, y); hflag[it][jt] = 1; //下了一子后這點(diǎn)便不能下子了 } Qizi qi = new Qizi(x, y); //將信息保存在棋子屬
10、性中 qi.setFlagx(it); qi.setFlagy(jt); qi.setX(x); qi.setY(y); qi.setNum(a); pal.list.add(qi);// 把棋子實(shí)例保存到動(dòng)態(tài)數(shù)組中 huiqiNum = 0;//下子后,便不能悔棋了,悔棋步數(shù)重置為0 a++; } Shengfu();//每下一子對(duì)勝負(fù)情況進(jìn)行判斷 } 2、動(dòng)作事件處理(點(diǎn)菜單的時(shí)候)(ActionListener): public void actionPerformed(ActionEvent e) { i
11、f (e.getActionCommand().equals("保存進(jìn)度")) { handleSave(); } if (e.getActionCommand().equals("讀取進(jìn)度")) { handleRead(); } if (e.getActionCommand().equals("退出")) { System.exit(0); } if (e.getActionCommand().equals("悔棋")) { handleHuiqi(); } if (e.getActionCommand().
12、equals("恢復(fù)")) { handleHuifu(); } if (e.getActionCommand().equals("重來(lái)")) { Restart(); } if (e.getActionCommand().equals("關(guān)于...")) { handleAbout(); } 3、窗口事件處理(WindowAdapter): public void windowClosing(WindowEvent e) { System.exit(0); } 3.3 簡(jiǎn)要的操作流程(要求畫(huà)流程圖) 界面大體構(gòu)造
13、Restart handleHuifu handleHuiqi handleRead handleSave handAbout Exit(0) 退出 讀取進(jìn)度 保存進(jìn)度 悔棋 恢復(fù) 關(guān)于… 重來(lái) 幫助 文件 編輯 窗口事件處理(關(guān)閉) 窗口 菜單 鼠標(biāo)事件處理(下子) 簡(jiǎn)要的設(shè)計(jì)流程:創(chuàng)建窗口 初始化菜單、面板 對(duì)各個(gè)菜單項(xiàng)添加事件監(jiān)聽(tīng)以及鼠標(biāo)事件監(jiān)聽(tīng) 窗口事件處理 動(dòng)作事件處理 鼠標(biāo)事件處理 完成java源代碼編寫(xiě) 調(diào)試修改程序,完善功能 3.4事件處理的幾個(gè)重要方法: 1、保
14、存進(jìn)度(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.createNewFile(); FileOutputStream fout = new FileOutputStream(file);
15、 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.get(i).getX()); dout.writeIn
16、t(pal.list.get(i).getY()); } fout.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 2、讀取進(jìn)度(handleRead) public void handleRead() { int temp = filec.showOpenDialog(this); if (temp == JFileChooser.APPRO
17、VE_OPTION) { Restart();//讀取進(jìn)程前必須清空所有變量 String path = filec.getSelectedFile().getAbsolutePath(); file = new File(path); try { FileInputStream fout = new FileInputStream(file); DataInputStream din = new DataInputStream(fout); // readInt以4個(gè)字節(jié)表示一個(gè)Int,故要除4,一個(gè)循環(huán)讀了5次,故要除20 for (
18、int i = 0; i < file.length() / 20; i++) { Qizi te = new Qizi(); te.setFlagx(din.readInt()); te.setFlagy(din.readInt()); te.setNum(din.readInt()); te.setX(din.readInt()); te.setY(din.readInt()); a = te.getNum(); if (a % 2 == 0) { bflag[te.getFlagx()][te.g
19、etFlagy()] = 1; } if (a % 2 == 1) { hflag[te.getFlagx()][te.getFlagy()] = 1; } pal.list.add(te); } din.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } a++; } repaint()
20、; } 3、處理悔棋(handleHuiqi) public void handleHuiqi() { if (pal.list.size() > 0) { Qizi temp = pal.list.get(pal.list.size() - 1); pal.beiyong.add(temp); int tempx = temp.getFlagx(); int tempy = temp.getFlagy(); if (a % 2 == 1) { bflag[tempx][tempy] = 0; } if (a %
21、2 == 0) { hflag[tempx][tempy] = 0; } pal.list.remove(pal.list.size() - 1); a--; huiqiNum++; repaint(); } else { JOptionPane.showMessageDialog(this, "已經(jīng)沒(méi)棋子了!", "警告", JOptionPane.INFORMATION_MESSAGE); } } 4、處理恢復(fù)(handleHuifu) public void handleHuifu() {
22、 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) { bflag[tempx][tempy] = 1; } if (a % 2 == 0) { hflag[tempx][tempy] = 1; } pal.beiyong
23、.remove(pal.beiyong.size() - 1); a++; huiqiNum--; repaint(); } else { JOptionPane.showMessageDialog(this, "對(duì)不起,系統(tǒng)不充許恢復(fù)!", "警告",JOptionPane.INFORMATION_MESSAGE); } } 5、重來(lái)(Restart) public void Restart() { pal.list.clear(); for (int i = 0; i < 19; i++) { for (int j
24、= 0; j < 19; j++) { bflag[i][j] = 0; hflag[i][j] = 0; } } repaint(); } 6、處理關(guān)于…(handleAbout) public void handleAbout() { JOptionPane.showMessageDialog(this, ABOUT, "About", JOptionPane.INFORMATION_MESSAGE); } 7、判斷勝負(fù)(Shengfu) public void Shengfu() { /**是否白棋有五粒連在一起*/
25、 int ba = 0; /**是否黑棋有五粒連在一起*/ int he = 0; // 橫線上有五粒 for (int i = 0; i < 19; i++) { for (int j = 0; j < 15; j++) { if (bflag[i][j] == 1 && bflag[i][j + 1] == 1&& bflag[i][j + 2] == 1 && bflag[i][j + 3] == 1&& bflag[i][j + 4] == 1) { ba = 1; } if (hflag[i][j] ==
26、1 && hflag[i][j + 1] == 1&& hflag[i][j + 2] == 1 && hflag[i][j + 3] == 1&& hflag[i][j + 4] == 1) { he = 1; } } } // 豎線上有五粒斜、線上有五粒、反斜線上有五粒略,和第一種情況相似 if (ba == 1) { JOptionPane.showMessageDialog(this, "白棋勝利", "結(jié)果",JOptionPane.INFORMATION_MESSAGE); Restart(); } i
27、f (he == 1) { JOptionPane.showMessageDialog(this, "黑棋勝利", "結(jié)果",JOptionPane.INFORMATION_MESSAGE); Restart(); } 3.5 詳細(xì)操作步驟(含部分源程序代碼) 1,產(chǎn)生棋子的類(lèi)的主要屬性(文件Qizi.java) public class Qizi { private int x; //棋子在棋盤(pán)上的橫坐標(biāo) private int y; //棋子在棋盤(pán)上的縱坐標(biāo) private int num;// 這是玩家下的第幾個(gè)棋子 private int fl
28、agx; // 矩陣的行
private int flagy; // 矩陣的列
}
2,產(chǎn)生面板文件MyPanel.java的大概內(nèi)容:
public class MyPanel extends JPanel {
/**白子的圖片*/
Image bai;
/**黑子的圖片*/
Image hei;
/**19*19的棋盤(pán)圖片*/
Image qipan;
/**動(dòng)態(tài)數(shù)組,保存棋子實(shí)例*/
ArrayList
29、st
30、 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); } } } } //方法—畫(huà)白棋子 public void drawBai(int x, int y)
31、{ this.getGraphics().drawImage(bai, x - 12, y - 12, this); } //方法—畫(huà)白棋子 public void drawHei(int x, int y) { this.getGraphics().drawImage(hei, x - 12, y - 12, this); } //初始化棋盤(pán)交叉點(diǎn)坐標(biāo) public void startxy() { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { hen
32、[i][j] = 18.0+j * 25.8; shu[i][j] = 18.0+i * 25.8; } } } 3、五子棋的主要文件Wuziqi.java的大概內(nèi)容: public class Wuziqi extends JFrame implements MouseListener { final String ABOUT = "0709302班JAVA課程設(shè)計(jì)小組\n本組成員:\n組長(zhǎng):沈村敬\n組員:劉新琳、雷艷飛、李云、黃生涯"; JMenuBar mb; MyPanel pal; JMenu wenjian, bianji,
33、help; JMenuItem read, save, exit, huiqi, huifu, restart, about; Process pro = new Process(); JFileChooser filec = new JFileChooser(); File file; /** 控制白棋和黑棋的交替*/ int a; /**判斷坐標(biāo)上有沒(méi)有白子*/ int bflag[][] = new int[19][19]; /** 判斷坐標(biāo)上有沒(méi)有黑子*/ int hflag[][] = new int[19][19]; /**連續(xù)悔了幾步棋
34、*/ int huiqiNum = 0; /**標(biāo)題欄的圖標(biāo)*/ Image top; class Process implements ActionListener {// 處理菜單事件 public void actionPerformed(ActionEvent e) { 略,重復(fù) } public void handleSave() {// 保存文件 略,重復(fù) } public void handleRead() {// 讀取文件 略,重復(fù) } public void handleHuiqi() {// 處理悔棋
35、 略,重復(fù) } public void handleHuifu() {// 恢復(fù)悔棋 略,重復(fù) } public void handleAbout() {//彈出消息,小組名稱(chēng) 略 } public void Restart() {// 重新開(kāi)始 略,重復(fù) } public void init() {// 初始化菜單 略 } public void mouseClicked(MouseEvent e) {// 處理鼠標(biāo)點(diǎn)擊事件 略,重復(fù) } public void Shengfu() {// 判斷勝負(fù)
36、 略,重復(fù); } public Wuziqi() {// 構(gòu)造方法 /**設(shè)置框架大小*/ this.setSize(506, 556); /**設(shè)置標(biāo)題*/ this.setTitle("五子棋"); /**設(shè)置標(biāo)題圖標(biāo)*/ this.setIconImage(top); init(); /**獲取容器*/ Container co = getContentPane(); co.add(pal); /**使框架居中*/ Dimension c = Toolkit.getDefaultToolkit().g
37、etScreenSize(); Dimension self = this.getSize(); double x = c.getWidth() / 2 - self.getWidth() / 2; double y = c.getHeight() / 2 - self.getHeight() / 2; this.setLocation((int) x, (int) y); /**設(shè)置不能改變大小*/ this.setResizable(false); /**增加鼠標(biāo)事件偵聽(tīng)*/ this.addMouseListener(this); /
38、**初始化棋盤(pán)的坐標(biāo)*/ pal.startxy(); /**關(guān)閉窗口*/ this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); /**增加菜單*/ this.setJMenuBar(mb); /**顯示所有*/ this.setVisible(true); } // main() public static void main(String[]
39、 args) { new Wuziqi(); } } 3.6 程序調(diào)試出錯(cuò)信息及解決方法 制作過(guò)程中遇到的最主要的錯(cuò)誤如下:(這兩個(gè)錯(cuò)誤都困擾了我們相當(dāng)長(zhǎng)一段時(shí)間,很有代表性) 1,當(dāng)在框架里繪圖的時(shí)候,會(huì)重寫(xiě)paint()方法,但加了菜單后,菜單彈出再收縮后,界面不能及時(shí)刷新,會(huì)留下白色的一片。 解決方法: 寫(xiě)一個(gè)類(lèi)繼承JPanel類(lèi),重寫(xiě)paintComponent()方法,用這個(gè)方法代替paint()方法,可解決這個(gè)問(wèn)題。 2,下面是文件讀取的方法中一段代碼: try { FileInputStream fout = new FileInputStrea
40、m(file); DataInputStream din = new DataInputStream(fout); for (int i = 0; i < file.length()/5; i++) { Qizi te = new Qizi(); te.setFlagx(din.readInt()); te.setFlagy(din.readInt()); te.setNum(din.readInt()); te.setX(din.readInt()); te.setY(din.readInt());
41、 a = te.getNum(); if (a % 2 == 0) { bflag[te.getFlagx()][te.getFlagy()] = 1; } if (a % 2 == 1) { hflag[te.getFlagx()][te.getFlagy()] = 1; } pal.list.add(te); } din.close(); } catch (FileNotFoundException e) { e.printStackTrace();
42、 } catch (IOException e) { e.printStackTrace(); } 可以調(diào)試出這段代碼可以讀出數(shù)據(jù)但會(huì)有異常出現(xiàn),異常的名稱(chēng)叫java.io.EOFException出現(xiàn)這種錯(cuò)誤的原因是已經(jīng)到了文件末尾,但讀寫(xiě)還沒(méi)有結(jié)束。 解決辦法: 仔細(xì)分析后,我們發(fā)現(xiàn)我們是用writeInt()這個(gè)函數(shù)寫(xiě)的文件和readInt這個(gè)讀的文件,查了很多資料后我們終于發(fā)現(xiàn)這readInt()這個(gè)方法寫(xiě)讀一次會(huì)讀出4個(gè)字節(jié),所以我們只須把循環(huán)的次數(shù)從file.leng()/5(文件的長(zhǎng)度)控制在file.leng()/20就行了,即多除以4個(gè)字節(jié)。 3.7
43、 主要程序運(yùn)行結(jié)果 1、游戲運(yùn)行界面: 2、保存進(jìn)度界面: 3、打開(kāi)讀取進(jìn)度界面: 4、打開(kāi)幫助—>關(guān)于……彈出界面: 5、當(dāng)悔棋一直悔到棋盤(pán)上沒(méi)有棋子了會(huì)彈出: 6、當(dāng)你恢復(fù)的步數(shù)超過(guò)你悔棋的步數(shù)或者悔棋后又下子了,點(diǎn)恢復(fù)后會(huì)彈出以下消息: 7、勝利后會(huì)彈出消息: 3.8 心得體會(huì) 雖然只是一個(gè)看似很簡(jiǎn)單的小程序,但在開(kāi)發(fā)的過(guò)程中遇到了各種各樣的問(wèn)題,但最后都被我們小組成員在一起商量討論,并上網(wǎng)和到圖書(shū)館去求助、查閱資料,向老師請(qǐng)教,終于一個(gè)一個(gè)的問(wèn)題都被我們聯(lián)手解決了,在這其中我們都學(xué)到了很多東西,從一開(kāi)始看到出錯(cuò)就煩惱,變成了一
44、看到錯(cuò)誤就興奮。因?yàn)橹挥型ㄟ^(guò)不斷去解決錯(cuò)誤才能更好的提高我們自己的編程水平,通過(guò)這次的開(kāi)發(fā)過(guò)程后,我們意識(shí)到要多做這種還算比較大型的系統(tǒng)(游戲)才能使自己的水平得到質(zhì)的提高。同時(shí),在發(fā)開(kāi)過(guò)程中我們也意識(shí)到了我們的基礎(chǔ)還不是很扎實(shí),我們要走的路還很長(zhǎng),但我們堅(jiān)信,我們一直在路上,我們會(huì)不斷的超越自我,不斷的挑戰(zhàn)自我,總有一天,我們能在這個(gè)領(lǐng)域找到自己的一片天空。 4. 本組成員及分工: 組長(zhǎng):沈村敬(0709302-05) 組員:劉新琳(0709302-25)、雷艷飛(0709302-12)、李云(0709302-26)、黃生涯(0709302-01) 分工: 沈村敬:
45、菜單保存進(jìn)度和菜單讀取進(jìn)度事件的處理以及paintCompoent方法的重寫(xiě) 劉新琳:鼠標(biāo)事事件處理,游戲主界面的生成 雷艷飛:菜單重來(lái)事件處理和窗口事件處理以及棋盤(pán)交叉點(diǎn)坐標(biāo)的初始化 李去:菜單悔棋事件處理和菜單恢復(fù)事件處理以及棋子類(lèi)的編寫(xiě) 黃生涯:方法勝負(fù)判斷的編寫(xiě),菜單(關(guān)于)事件的處理 5.總結(jié) 通過(guò)這次的開(kāi)發(fā),我們一起討論,我們總結(jié)出有以下幾點(diǎn): 1, 一定要養(yǎng)成良好的寫(xiě)代碼的習(xí)慣,注意縮進(jìn)和一些變量名要取的有意義,一看就知道這是大概是控制什么東西的。 2, 代碼要減少控制語(yǔ)句的嵌套,不要過(guò)長(zhǎng),過(guò)長(zhǎng)多用函數(shù)來(lái)增加可讀性。 3, 養(yǎng)成寫(xiě)注釋的習(xí)慣,這樣你自己看的懂,別人也看得懂。 4, 算法很重要,寫(xiě)代碼之前先要弄清楚算法大概的流程。 5, 多和別人交流,這樣你的思想才不會(huì)局限。 6, 多上網(wǎng)查資料,網(wǎng)絡(luò)是把雙刃劍,但用于這方面是不會(huì)有什么很大的壞處的。 7, 多動(dòng)手,多試驗(yàn),在錯(cuò)誤中成長(zhǎng)。 參考書(shū)目:(五號(hào),宋體加粗) [1] 李尊朝,蘇軍,《JAVA語(yǔ)言設(shè)計(jì)》,中國(guó)鐵道出版社,2007年12月
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第7課時(shí)圖形的位置練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第1課時(shí)圖形的認(rèn)識(shí)與測(cè)量1平面圖形的認(rèn)識(shí)練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)1數(shù)與代數(shù)第10課時(shí)比和比例2作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)4比例1比例的意義和基本性質(zhì)第3課時(shí)解比例練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第7課時(shí)圓柱的體積3作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第1節(jié)圓柱的認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)2百分?jǐn)?shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)1負(fù)數(shù)第1課時(shí)負(fù)數(shù)的初步認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)考前模擬期末模擬訓(xùn)練二作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末豐收?qǐng)@作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單十二課件新人教版
- 標(biāo)準(zhǔn)工時(shí)講義
- 2021年一年級(jí)語(yǔ)文上冊(cè)第六單元知識(shí)要點(diǎn)習(xí)題課件新人教版
- 2022春一年級(jí)語(yǔ)文下冊(cè)課文5識(shí)字測(cè)評(píng)習(xí)題課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)4數(shù)學(xué)思考第1課時(shí)數(shù)學(xué)思考1練習(xí)課件新人教版