數(shù)據(jù)結構課程設計_第1頁
數(shù)據(jù)結構課程設計_第2頁
數(shù)據(jù)結構課程設計_第3頁
數(shù)據(jù)結構課程設計_第4頁
數(shù)據(jù)結構課程設計_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、西華大學數(shù)學與計算機學院計算機系 期中考試實驗報告數(shù)據(jù)結構期中考試實驗報告課程名稱: 數(shù)據(jù)結構年級:2011級成績: 指導教師: 黃襄念姓名:徐千學期:2011-2012-2實驗名稱: 期中考試學號:312011080605334時間:2周說明1:本報告格式(編號、字體、字號、行距等)均不得作任何修改!說明2:嚴禁抄襲,否則以考試作弊論,成績零分,不得參與期末考試。說明3:考試實驗周結束后,提交考試文檔,并逐一面試。一、 開發(fā)環(huán)境1. 操作系統(tǒng):如Windows 7 旗艦版2. 開發(fā)工具:Java3. 依賴文檔:eclipse , JDK二、 運行環(huán)境1. 操作系統(tǒng):程序能夠運行的操作系統(tǒng),如

2、Windows XP ,Windows 7等。2. 依賴文檔:eclipse,JDK三、 程序說明1. 案例描述:這是一個簡單的下棋游戲,游戲的規(guī)則是:在3X3的棋盤上,紅方和藍方分別依次畫X或O。在行、列、對角線的方向上誰先連成一條直線,誰就勝利。計算機動態(tài)的給出提示信息并判斷勝負。2. 說明程序的主要功能和特點、關鍵技術或技術難點。功能:(1) 利用java編程環(huán)境,編寫了一個三子棋小游戲,(2) 利用java編程環(huán)境,實現(xiàn)了界面可視化(3) 顯示棋盤,給出提示信息和勝負結果判斷標準,允許紅藍兩方選擇先下還是后下。(4) 每一步都有圖形界面直觀的給出(5) 勝負有提示動態(tài)給出特點:(1)

3、利用了java開發(fā)工具及開發(fā)環(huán)境,采用eclipse開發(fā)工具實現(xiàn)了程序的界面性及可視化(2) 編寫相關計算代碼,實現(xiàn)了三子棋的基本游戲功能并能運行(3) 在進行游戲時,可通過游戲圖形界面動態(tài)的表現(xiàn)出游戲雙方所下棋的格子,并提示下一方下棋(4) 游戲的勝負可有計算機自己判斷,并動態(tài)的給出勝負或平局的信息。關鍵技術:(1) 界面的設計及開發(fā)(2) 游戲功能的實現(xiàn)(3) 功能代碼的編寫(4) 判斷勝負(5) 判斷某一格子是否應經(jīng)下過棋(6) 事件發(fā)生的實現(xiàn)3. 繪系統(tǒng)流程圖,即程序各個模塊(函數(shù))的調(diào)用流程,反映系統(tǒng)的總體情況。開始畫出棋盤初始化狀態(tài)選擇先走紅方先走話X另一方選擇一個空位置走棋沒分勝

4、負并有空?走一步棋沒分勝負還有空位置?輸出輸贏結果結束YYYN4. 程序運行時的主界面截圖:(圖幅不宜過大或過小,裁剪掉多余空白)5. 主要模塊說明,如下 (1) 棋盤的外觀設計與實現(xiàn)(采用雙重循環(huán)輸出的形式),方便,簡單 int x = 100; /距邊框左的距離 int y = 100; /距邊框上的距離 int c = 300; /距左邊第一根豎線的距離 int k = 300; /距上邊第一根豎線的距離 for (int i = 0; i < 300; i += 100) g.drawRect(x, y + i, c, k-i ); /畫出橫線;逐漸增加100 for (int

5、i = 0; i < 300; i += 100) g.drawRect(x + i, y, c - i, k); /畫出豎線 1、先畫四條橫線 2、再花豎線 3、最后得到棋盤(2) 棋子的設計及實現(xiàn)棋子圖形及O(使用數(shù)組ai及循環(huán)以及一個簡單的算法公式),使得輸出簡潔,方便;一個可由兩條斜線構成,用Java作出兩條相交的斜線即可表示出來。同理可得,可以做出一個來表示另一個棋子。第a1個棋子的坐標(120, 120, 180, 180); (180, 120, 120, 180); 第a2個棋子的坐標(220, 120, 280, 180); (280, 120, 220, 180);

6、第a3個棋子的坐標(320, 120, 380, 180); (380, 120, 320, 180); 第a4個棋子的坐標(120, 220, 180, 280); (180, 220, 120, 280); 第a5個棋子的坐標(220, 220, 280, 280); (280, 220, 220, 280); 第a6個棋子的坐標(320, 220, 380, 280); (380, 220, 320, 280); 第a7個棋子的坐標(120, 320, 180, 380); (180, 320, 120, 380); 第a8個棋子的坐標(220, 320, 280, 380); (280

7、, 320, 220, 380); 第a9個棋子的坐標(320, 320, 380, 380); (380, 320, 320, 380);g.setColor(Color.red); /畫出紅色的,并使 i=0,j ji=1;for(int i=1;i<=9;i+)int n=i%3; /取余,使得可以用循環(huán)畫出棋盤int m=n*n*150-n*350+320; /簡單的公式畫出其中一條線的坐標int s=n*n*150-n*350+380; /再畫出另一根斜線起始坐標int o=(i-1)/3;int p=(o*100+120);int w=(o*100+180);g.drawLi

8、ne(m, p, s, w); /(位置坐標及大小) g.drawLine(s, p, m, w); 1、先畫一條斜線 2、再畫另一條斜線,形成第a1個棋子畫(125, 125, 50, 50); /圓心坐標及大小第a2個棋子畫(225, 125, 50, 50); 第a3個棋子畫(325, 125, 50, 50); 第a4個棋子畫 (125, 225, 50, 50); 第a5個棋子畫(225, 225, 50, 50); 第a6個棋子畫(325, 225, 50, 50); 第a7個棋子畫 (125, 325, 50, 50); 第a8個棋子畫(225, 325, 50, 50); 第a

9、9個棋子畫 (325, 325, 50, 50);g.setColor(Color.blue); /畫出藍色的for(int i=1;i<=9;i+)int n=i%3;int m=n*n*150-n*350+325;int o=(i-1)/3;int p=(o*100+125);g.drawOval(m, p, 50, 50);(3) 定義棋盤中某一格子中所代表的數(shù),及所有的格子數(shù)為19public int mm(int x, int y) /某一區(qū)域內(nèi)定義小方框內(nèi)的數(shù)字大小if (x >= 100 && x < 200 && y >=

10、 100 && y < 200) a = 1; else if (x >= 200 && x < 300 && y >= 100 && y < 200) a = 2; else if (x >= 300 && x < 400 && y >= 100 && y < 200) a = 3; else if (x >= 100 && x < 200 && y >= 200 &&a

11、mp; y < 300) a = 4; else if (x >= 200 && x < 300 && y >= 200 && y < 300) a = 5; else if (x >= 300 && x < 400 && y >= 200 && y < 300) a = 6; else if (x >= 100 && x < 200 && y >= 300 && y < 4

12、00) a = 7; else if (x >= 200 && x < 300 && y >= 300 && y < 400) a = 8; else if (x >= 300 && x < 400 && y >= 300 && y < 400) a = 9; else a = 0; return a; (5) 布局:JButton chongxin, huanse; /添加按鍵/按鈕的兩種形式chongxin = new JButton("

13、重新開始紅隊先下"); huanse = new JButton("重新開始藍隊先下"); /定義按鍵:JLabel wenbenkuang; /定義文本框/文本框的三種形式: wenbenkuang .setText(" 游戲已結束,請重新開始 "); wenbenkuang.setText(" 此位置有棋子,請另選位置重新下棋 "); /提示已有棋子wenbenkuang.setText(""); /未結束前,該文本框不會出現(xiàn)文字 Container c = getContentPane(); /定義

14、容器 c.setLayout(new FlowLayout(); /布局 c.add(wenbenkuang, BorderLayout.SOUTH); /布置容器的邊框布局 addMouseListener(new MouseAdapter() /文本框的顯示提示(5)勝負的判斷(1) 當某一線三個棋子均為同一種棋子時,那種棋子的選手勝判斷依據(jù)一橫或一豎或?qū)蔷€為同一棋子(2) 當棋子填滿棋盤時,平局public void dd() /判斷是否贏了的各種情況if (某連線上三點為) 紅方勝;if (某連線上三點為) 藍方勝;if (棋子下滿棋盤) 平局; Return 結果;l 主要數(shù)據(jù)結構

15、的名稱、優(yōu)缺點(選用的理由);l 該數(shù)據(jù)結構的邏輯結構圖、存儲結構的類型定義(代碼描述); l 該模塊用到的主要算法名稱和思想;(若無,略)l 該算法有何優(yōu)缺點(選用的理由);(若無,略)四、 程序測試為保證程序的正確性,有較少Bug,需進行各種測試。針對程序的主要模塊,給出測試內(nèi)容、方案、結論:1. 測試模塊的名稱、功能、輸入輸出、傳入傳出參數(shù)個數(shù)與數(shù)據(jù)類型;1) 測試內(nèi)容 根據(jù)模塊的功能、輸入輸出、參數(shù)等,需要測試以下內(nèi)容:l 一、對棋盤的測試:(1) 棋盤的布局(2) 棋盤的輸出(3) 鼠標事件的發(fā)生于相應與否(4) 對按鈕的測試(5) 對文本框的測試l 二、對棋子的形狀設計與輸出(1)

16、 在棋盤格子中準確的坐標位置(2) 雙方棋子的形狀與l 三、勝負的測試(1) 某一方勝的測試(2) 平局的測試2) 測試方案l 針對棋盤的測試內(nèi)容及數(shù)據(jù):(1)棋盤外框的大小setSize(500, 500);(2) 棋盤格子的起始坐標及相鄰橫豎線間的距離int x = 100; /距邊框左的距離 int y = 100; /距邊框上的距離 int c = 300; /距左邊第一根豎線的距離 int k = 300; /距上邊第一根豎線的距離 for (int i = 0; i < 300; i += 100) g.drawRect(x, y + i, c, k-i ); /畫出橫線 f

17、or (int i = 0; i < 300; i += 100) g.drawRect(x + i, y, c - i, k); /畫出豎線 (3)JButton chongxin, huanse; JLabel wenbenkuang; 測試結論:該棋盤利用了循環(huán)輸出,簡潔,但如果沒有向其他人相應的說明,其他人不宜看懂l 針對棋子的形狀設計與輸出測試內(nèi)容,測試數(shù)據(jù)是:紅色:g.setColor(Color.red);g.drawLine(m, p, s, w); /(位置坐標及大小) g.drawLine(s, p, m, w); 循環(huán)輸出for(int i=1;i<=9;i+

18、)藍色的:g.setColor(Color.blue); /畫出藍色的圓 for(int i=1;i<=9;i+) g.drawOval(m, p, 50, 50); /(位置坐標,大小) bi = 0;測試結論:(1)調(diào)用函數(shù),利用循環(huán)反復輸出 (2)在java中使用java相應的畫線及畫圓函數(shù),形象的畫出了棋子 (3)通過測試,鼠標監(jiān)聽器及觸發(fā)器正常運行,每一個棋盤格子里可 以準確的畫出相應的棋子 l 對勝負的判斷的測試內(nèi)容及數(shù)據(jù):數(shù)據(jù)內(nèi)容:public void dd() /判斷是否贏了的各種情況if (jj1 = 1 && jj2 = 1 && j

19、j3 = 1)|(jj4 = 1 && jj5 = 1 && jj6 = 1) |(jj7 = 1 && jj8 = 1 && jj9 = 1)|(jj1 = 1 && jj5 = 1 && jj9 = 1)|(jj3 = 1 && jj5 = 1 && jj7 = 1)|(jj1 = 1 && jj4 = 1 && jj7 = 1)|(jj2 = 1 && jj5 = 1 && jj8 = 1)|(jj

20、3 = 1 && jj6 = 1 && jj9 = 1) wenbenkuang.setForeground(Color.BLUE); ying = true; if (jj1 = 2 && jj2 = 2 && jj3 = 2)|(jj4 = 2 && jj5 = 2 && jj6 = 2) |(jj7 = 2 && jj8 = 2 && jj9 = 2)|(jj1 = 2 && jj5 = 2 && jj9 = 2)|(jj3 =

21、2 && jj5 = 2 && jj7 = 2)|(jj1 = 2&& jj4 = 2 && jj7 =2)|(jj2 = 2&& jj5 = 2 && jj8 = 2)|(jj3 = 1 && jj6 = 1 && jj9 = 1) wenbenkuang.setForeground(Color.BLUE); ying = true; if (s1 = 1 && s2 = 1 && s3 = 1 && s4 = 1 && s5 = 1 && s6 = 1 &

溫馨提示

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

評論

0/150

提交評論