版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p> 軟件開發(fā)平臺(tái)……………………………</p><p> 游戲設(shè)計(jì)思路…………………………</p><p> 小游戲五子棋的開發(fā)過程………………</p><p> JAVA基礎(chǔ)知識(shí)………………………</p><p> 啟動(dòng)程序的分
2、析……………………</p><p> 游戲設(shè)計(jì)過程………………………</p><p> 第三章 總結(jié)…………………………………………</p><p> 第四章 參考文獻(xiàn)……………………………………</p><p> 第五章 附錄…………………………………………</p><p><b> 第一章
3、</b></p><p><b> 游戲設(shè)計(jì)思路 :</b></p><p><b> 第二章 </b></p><p> java程序基礎(chǔ)知識(shí)</p><p> 本系統(tǒng)有4個(gè)程序每個(gè)程序都導(dǎo)入了不同的包和類運(yùn)用了不同的所學(xué)知識(shí)。不同的類和包提供的方法、類型等都不同,本程序還使
4、用了繼承。以至使其能夠完成不同的功能。本節(jié)主要講述本系統(tǒng)所使用的基礎(chǔ)知識(shí)。</p><p><b> 類的基礎(chǔ)</b></p><p><b> <1、類的定義</b></p><p> JAVA中的類實(shí)質(zhì)上是一種對(duì)象類型,它是對(duì)具有相同屬性和相同行為對(duì)象的一種抽象。類是java程序中最小的組成單位。</
5、p><p> <2、 Java中類定義的格式為:</p><p> [類修飾符] class 類名 [extends 基類] [implements 接口]</p><p> {// 成員變量聲明 (Member variable declaration)</p><p> // 成員方法聲明 (Member method d
6、eclaration)}</p><p> 其中,class、extends和implements都是Java的關(guān)鍵字。類修飾符、extends和implements是關(guān)于修飾符、繼承和接口的內(nèi)容。</p><p><b> 2、繼承</b></p><p> 繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)語言的一個(gè)重要特征,通過繼承可以實(shí)現(xiàn)代碼的復(fù)用。Jav
7、a語言中,所有的類都是直接或間接的繼承 java.lang.object類而得到的。被繼承的類稱為基類或父類,繼承而的來的類成為子類。子類繼承基類的方法和屬性,同時(shí)也可以修改基類的方法和屬性 ,并增加自己新的屬性和方法。Java不支持多重繼承。即一個(gè)子類不能擁有兩個(gè)或以上的父類。</p><p><b> 3、包</b></p><p><b> <
8、;1、包的定義 </b></p><p> 在Java中,把相關(guān)的代碼組織到一起,稱為“包”。包市一種將相關(guān)類、接口或其他包組織起來的集合體,目的是為了將包含類代碼的文件組織起來,易于查找和使用。</p><p> <2、包的語法及導(dǎo)入:</p><p> Package PackageName; //包的定義</p>&
9、lt;p> Import java.awt.Color //導(dǎo)入包關(guān)鍵字Import</p><p><b> 4、接口</b></p><p><b> <1、接口的定義</b></p><p> Java中的接口可以看成是一種抽象類,它是一些抽象方法和常量的集合,其主要作用是使得處于不同層次
10、上以至于互不相干的類能夠執(zhí)行相同的操作,引用相同的值,而且在一個(gè)類中可以同時(shí)實(shí)現(xiàn)來自不同接口中的多種方法。</p><p> <2、接口的定義和實(shí)現(xiàn)</p><p> Interface 接口名{//抽象方法} //定義接口</p><p> Class 類名 implements 接口名稱{// 類體} 實(shí)現(xiàn)接口</p><p&
11、gt;<b> 5、線程</b></p><p><b> <1、線程的定義</b></p><p> 即同時(shí)執(zhí)行多個(gè)程序段,每個(gè)程序段都是一個(gè)線程。</p><p><b> <2、線程的周期</b></p><p> 線程的周期包括新建(new)、就緒
12、(start())、執(zhí)行(run())、阻塞(sleep()、wait()、suspend()、輸入/輸出流中發(fā)生線程阻塞)、死亡(stop()、destroy())。</p><p><b> 創(chuàng)建線程的方法:</b></p><p> 一種是創(chuàng)建Thread類的子類。另一種是實(shí)現(xiàn)Runnable接口.而本系統(tǒng)采用的是接口的方式。</p><
13、p> 6.Applet小應(yīng)用程序</p><p> <1、 小應(yīng)用程序與應(yīng)用程序的區(qū)別:</p><p> 小應(yīng)用程序沒有主方法不能單獨(dú)運(yùn)行。而應(yīng)用程序是擁有主方法的是可以單獨(dú)運(yùn)行的。</p><p> <2、Applet 的執(zhí)行方式</p><p> 它有兩種:一種是瀏覽器中執(zhí)行,另一種是使用Appletvie
14、wer()命令執(zhí)行。本系統(tǒng)的兩個(gè)小應(yīng)用程序都是采用編制html以瀏覽器形式執(zhí)行。</p><p> <3、Applet主類的一般框架結(jié)構(gòu)圖</p><p> Import java.awt.*;</p><p> Import java.applet.*;</p><p> Public class 類名 extends App
15、let{</p><p> Public void init(){//初始化變量、設(shè)置字體、裝載圖片}</p><p> Public void start(){//啟動(dòng)程序執(zhí)行或恢復(fù)程序執(zhí)行}</p><p> Public void stop(){//掛起正在執(zhí)行的程序,暫停程序}</p><p> Public viod des
16、troy(){終止程序的執(zhí)行釋放資源}</p><p> Public viod paint(Graphics g){// 完成繪制圖形等操作}}</p><p><b> 7、異常處理</b></p><p><b> <1、異常處理概念</b></p><p> 異常是Java程序
17、運(yùn)行出現(xiàn)的錯(cuò)誤。</p><p><b> <2、異常處理機(jī)制</b></p><p> 異常處理機(jī)制:當(dāng)try子句中拋出的異常屬于某個(gè)catch子句的異常類時(shí),該catch子句捕獲到異常,并且系統(tǒng)自動(dòng)將異常類的實(shí)例傳遞給catch子句的異常類對(duì)象。在catch子句中,可以從異常類對(duì)象中獲取異常細(xì)節(jié),并可通過該對(duì)象使用異常類中的方法,對(duì)異常進(jìn)行相應(yīng)的處理。&
18、lt;/p><p><b> 啟動(dòng)程序的分析</b></p><p> 本程序主要是為了啟動(dòng)主程序所使用。讓使用者有個(gè)等待時(shí)間。本程序運(yùn)用了多線程機(jī)制使其能同時(shí)進(jìn)行多個(gè)任務(wù)。</p><p> 導(dǎo)入的各包詳細(xì)見后附錄。</p><p> public class Exec { //測(cè)試類</p>&
19、lt;p> public static void main(String[] args) {// 顯示帶有啟動(dòng)進(jìn)度條的歡迎窗體</p><p> new DemoWindow(); //實(shí)例化一個(gè)對(duì)象}</p><p><b> }</b></p><p> class DemoWindow extends JWindow i
20、mplements Runnable { // 帶有啟動(dòng)進(jìn)度條的歡迎窗體類</p><p> private JProgressBar progress = new JProgressBar(1, 100); // 進(jìn)度條</p><p> ImagePanel ip = new ImagePanel(); // 圖片面板</p><p> pub
21、lic DemoWindow() { // 構(gòu)造函數(shù)</p><p> add(ip, BorderLayout.CENTER); // 窗體布局</p><p> add(progress, BorderLayout.SOUTH); //將進(jìn)度條放在邊界布局管理器南邊</p><p> progress.setStringPainted(tru
22、e); // 設(shè)置進(jìn)度條</p><p> progress.setBorderPainted(false);</p><p> progress.setString("正在啟動(dòng)應(yīng)用程序...");</p><p> progress.setForeground(Color.blue);</p><p> prog
23、ress.setBackground(Color.white);</p><p> setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); // 設(shè)置窗體光標(biāo)</p><p> // 設(shè)置窗體正好顯示整個(gè)圖片</p><p><b> pack();</b></p>
24、<p> // 設(shè)置窗體居中顯示</p><p> Toolkit theKit = getToolkit();</p><p> Dimension wndSize = theKit.getScreenSize();</p><p> setLocation((wndSize.width - ip.getWidth()) / 2, (wndS
25、ize.height - ip</p><p> .getHeight()) / 2);</p><p> setVisible(true); // 設(shè)置窗體為可見</p><p> this.toFront();// 將當(dāng)前窗體置于屏幕所有窗體的前面</p><p> Thread splashThread = new Thread
26、(this); //新建線程</p><p> splashThread.start(); // 啟動(dòng)改變進(jìn)度條的線程}</p><p> public void run() { // 改變進(jìn)度條的線程方法</p><p> try { //異常處理機(jī)制</p><p> for (int i = 0; i
27、< 100; i++) { // 循環(huán)100次</p><p> Thread.sleep(100); // 暫停0.1秒</p><p> progress.setValue(progress.getValue() + 1); // 累加進(jìn)度條的進(jìn)度</p><p><b> }</b></p><p&
28、gt; if (progress.getValue()==100) 判斷進(jìn)度條的值是否是100</p><p> { jsb dd=new jsb("我的記事本"); 若是則實(shí)例化jsb對(duì)象即啟動(dòng)主程序</p><p><b> }}</b></p><p> catch (Exception e) { 若出
29、現(xiàn)異常則打印出相應(yīng)的消息</p><p> System.out.println(e.getMessage());}</p><p> this.dispose(); // 釋放窗體資源</p><p><b> }}</b></p><p> class ImagePanel extends JPanel {
30、 // 圖片面板</p><p> Image image = null; // 圖片內(nèi)容</p><p> public ImagePanel() { // 構(gòu)造函數(shù)</p><p> MediaTracker tracker = new MediaTracker(this); // 創(chuàng)建MediaTracker類變量,以加載圖片,它可以
31、保證圖片加載完畢后才會(huì)進(jìn)行下一步操作</p><p> try { //異常處理</p><p> image = Toolkit.getDefaultToolkit().getImage("images/tl.jpg"); // 加載圖片</p><p> tracker.addImage(image, 0); // 等待圖片加載
32、完畢</p><p> tracker.waitForID(0);}</p><p> catch (Exception e) { //若出現(xiàn)異常則打印出消息</p><p> System.out.println(e.getMessage());}</p><p> setPreferredSize(new Dimension(
33、image.getWidth(this), image</p><p> .getHeight(this))); // 設(shè)置圖片面板的大小正好容納整個(gè)圖片}</p><p> public void paintComponent(Graphics g) { // 重載的繪圖函數(shù),繪制指定圖片</p><p> super.paintComponent(g);
34、 //調(diào)用基類的方法</p><p> g.drawImage(image, 0, 0, this);}} </p><p> 第三節(jié) 游戲設(shè)計(jì)過程</p><p> 本程序是根據(jù)小游戲五子棋開發(fā)出來的,從游戲開始到結(jié)束,此下為小部分代碼分析:</p><p> 新建一個(gè)java文件:</p><p>&
35、lt;b> 2. 編寫代碼</b></p><p><b> 運(yùn)行</b></p><p><b> 總分析:</b></p><p> 設(shè)計(jì)了游戲按照棋子的二維數(shù)組進(jìn)行繪制棋子,玩家下棋后,程序修改數(shù)組相應(yīng)位置,設(shè)置isPlayer1值,然后重新繪制(repaint),就更新了棋盤界面。由于游戲
36、的功能簡單,也為了使游戲的操作盡可能的簡便,我不在游戲進(jìn)入時(shí)設(shè)計(jì)菜單,而是直接開始對(duì)戰(zhàn),在對(duì)戰(zhàn)界面,設(shè)置了重新開始和退出的按鈕。即運(yùn)行即玩,可以悔檔,存檔,取檔,重開</p><p><b> 總結(jié)</b></p><p> 1.Java發(fā)展到現(xiàn)在,按應(yīng)用來分主要分為三大塊:J2SE,J2ME和J2EE,這也就是Sun ONE(Open NetEnvironmen
37、t)體系。</p><p> 2.Java語法:I/O包,Util包,Lang包.</p><p> 3.Servlet:就是服務(wù)器端小程序,他負(fù)責(zé)生成發(fā)送給客戶端的HTML文件。JSP在執(zhí)行時(shí),也是先轉(zhuǎn)換成Servlet再運(yùn)行的。雖說JSP理論上可以完全取代Servlet,這也是SUN推出JSP的本意,可是Servlet用來控制流程跳轉(zhuǎn)還是挺方便的,也令程序更清晰。</p>
38、;<p> 4.Javabean:可以把你的JSP中的Java代碼封裝起來,便于調(diào)用也便于重用</p><p><b> 參考文獻(xiàn)</b></p><p> 1、Java語言程序設(shè)計(jì) 主編: 賈振華 副主編:黃榮盛 賈振旺</p><p> 2、www.baidu.com 查詢相關(guān)資料</p><
39、p> 3、王克宏.Java技術(shù)及其應(yīng)用 北京:高等教育出版社,1994</p><p> 4、林邦杰,徹底研究Java2。北京:電子工業(yè)出版社,2002</p><p> 5、溫平進(jìn)、張威等。Instant Java2 實(shí)例解析。北京:北京希望電子出版社,2002</p><p> 6、林建銘.精通Java2.北京:科學(xué)出版社,2001</p&
40、gt;<p> 7、王勝捷.Java程序設(shè)計(jì)。北京:中國鐵道出版社,2002</p><p> 8、東方華人.Java2入門與提高.北京:清華大學(xué)出版社,2000</p><p> 9、洪威恩.Java2面向?qū)ο蟪绦蛟O(shè)計(jì).北京:中國鐵道出版社 2002</p><p> 10、杜江、沈應(yīng)逵。Java2實(shí)例教程.北京:清華大學(xué)出版社,2003&l
41、t;/p><p> 11、金勇化、曲俊生等.Java網(wǎng)絡(luò)高級(jí)教程.北京:北京希望電子出版社,2002</p><p> 12、張利國.Java實(shí)用案例教程。北京:清華大學(xué)出版社, 2003</p><p> 13、孫一林.Java語言程序設(shè)計(jì).北京:清華大學(xué)出版社,2001</p><p> 14、殷兆麟.Java語言程序設(shè)計(jì).北京:高
42、等教育出版社,2002</p><p> 15、殷兆麟..Java網(wǎng)絡(luò)編程基礎(chǔ).北京大學(xué)出版社,2004</p><p> 16、教育部考試中心.全國計(jì)算機(jī)等級(jí)考試大綱(2004年)版.北京:高等教育出版社,2004</p><p> 17、孫燕.Java程序設(shè)計(jì)培訓(xùn)教程.北京:清華大學(xué)出版社,2002</p><p><b>
43、; 附錄(代碼)</b></p><p> import java.util.*;</p><p> import java.io.*;</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import j
44、ava.applet.*;</p><p> import javax.swing.*;</p><p> class Gobang extends JFrame implements Runnable, ActionListener{</p><p> final static int Player=1;</p><p> fina
45、l static int AI =-1;</p><p> ClassLoader cl = this.getClass().getClassLoader();</p><p> Toolkit tk = Toolkit.getDefaultToolkit();</p><p> int length=14, game_state, winner, check
46、, step;</p><p> int grid[][] = new int[length][length];</p><p> int locX, locY /* 囪竚 */, count /* 硈囪計(jì) */, x, y /* 既竚 */, displace_x=0, displace_y=0 /* 簿秖 */, direction;</p><p&g
47、t; ArrayList steps = new ArrayList(); /* 癘魁囪˙ */</p><p> JPopupMenu control_menu = new JPopupMenu(); /* 齡匡蟲 */</p><p> JMenuItem[] command = new JMenuItem[4];</p><p> String[
48、] command_str={"囪", "郎", "弄郎", "秨"};</p><p> int[][] dir = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} };</p><p> boolean[
49、] dir2 = new boolean[8]; </p><p> boolean turn;</p><p> String message;</p><p> final JDialog dialog = new JDialog(this, "叫匡", true);</p><p> Font font=n
50、ew Font("new_font", Font.BOLD, 20);</p><p> Grid grids[][] = new Grid[length][length];</p><p><b> Image </b></p><p> white= tk.getImage(cl.getResource("
51、;res/white.png"));</p><p><b> Image </b></p><p> black= tk.getImage(cl.getResource("res/black.png"));</p><p> Image title= tk.getImage(cl.getResource(&
52、quot;res/title.png"));</p><p> Image temp;</p><p> JPanel boardPanel, bigpanel;</p><p> JRadioButton[] choice = new JRadioButton[2];</p><p> final static int S
53、tart =0;</p><p> final static int Select =1;</p><p> final static int Playing =2;</p><p> final static int End =3;</p><p> final static int nil=-1; /* 礚よ */</p&
54、gt;<p> final static int oblique_1 =0; /* オ */</p><p> final static int oblique_2 =1; /* オ */</p><p> final static int horizontal =2; /* 絹 */</p><p> final stati
55、c int vertical=3; /* */</p><p> Gobang ( ){</p><p> super("き囪"); </p><p> boardPanel = new JPanel();</p><p> boardPanel.setLayout(new GridLayout(lengt
56、h, length, 0, 0));</p><p> boardPanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);</p><p> for(int i=0; i<length; i++)</p><p> for(int j=0; j<length; j++)
57、 {</p><p> grids[i][j] = new Grid(i, j); </p><p> boardPanel.add(grids[i][j]);</p><p><b> }</b></p><p> bigpanel = new JPanel();</p><p>
58、bigpanel.add(boardPanel, BorderLayout.CENTER);</p><p> getContentPane().add(bigpanel, BorderLayout.SOUTH); </p><p> game_state=Start;</p><p> ThreadStart(); </p><
59、;p> dialog.setSize(160, 100);</p><p> dialog.setResizable(false);</p><p> dialog.setLocationRelativeTo(null);</p><p> ButtonGroup choice_group = new ButtonGroup();</p>
60、<p> JPanel choice_menu = new JPanel(); </p><p> choice[0] = new JRadioButton("堵", new ImageIcon(black), true);</p><p> choice[1] = new JRadioButton("フ", new Image
61、Icon(white));</p><p> for(int i=0; i<choice.length; i++) {</p><p> choice_menu.add(choice[i]);</p><p> choice_group.add(choice[i]); }</p><p> for(int i=0; i<c
62、ommand.length; i++){</p><p> command[i] =new JMenuItem(command_str[i]);</p><p> command[i].addActionListener(this);</p><p> control_menu.add(command[i]);}</p><p> J
63、Button select = new JButton("絋﹚");</p><p> JPanel select_menu = new JPanel(); </p><p> select_menu.add(select);</p><p> select.addActionListener(this);</p><p
64、> dialog.getContentPane().add(choice_menu, BorderLayout.NORTH);</p><p> dialog.getContentPane().add(select_menu, BorderLayout.CENTER);</p><p> setIconImage(title);</p><p> se
65、tResizable(false);</p><p> setSize(300, 335);</p><p> setVisible(true);</p><p> setLocationRelativeTo(null); }</p><p> public static void main(String[] arg) {</p
66、><p> Gobang application = new Gobang(); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }</p><p> public void actionPerformed(ActionEvent event) {</p><p> if( event.ge
67、tSource().equals(command[0]) ) {</p><p> if(steps.size()!=0)</p><p><b> undo();</b></p><p><b> }</b></p><p> else if(event.getSource().equa
68、ls(command[1]) )</p><p><b> Save();</b></p><p> else if(event.getSource().equals(command[2]) )</p><p><b> Load();</b></p><p> else if(event.
69、getSource().equals(command[3]) )</p><p> ReStart();</p><p><b> else</b></p><p><b> {</b></p><p> if(choice[1].isSelected())</p><p
70、><b> {</b></p><p> temp=white; white=black; black=temp; }</p><p> dialog.dispose(); } }</p><p> public void WinCheck() {</p><p> check = turn? Play
71、er: AI;</p><p> direction=oblique_1;</p><p> WinCheck2(); }</p><p> public void WinCheck2() {</p><p><b> count=1;</b></p><p> switch(direc
72、tion) {</p><p> case oblique_1: displace_x=1;</p><p> displace_y=-1;</p><p> direction=oblique_2;</p><p><b> break;</b></p><p> case obli
73、que_2: displace_x=displace_y=1;</p><p> direction=horizontal; </p><p><b> break;</b></p><p> case horizontal: displace_x=1;</p><p> displace_
74、y=0;</p><p> direction=vertical; </p><p> break; </p><p> case vertical: displace_x=0;</p><p> displace_y=1;</p><p
75、> direction=nil;</p><p><b> break; }</b></p><p> x=locX+displace_x;</p><p> y=locY+displace_y;</p><p> while(x>=0 && x<length &&a
76、mp; y>=0 && y<length && grid[x][y]==check) {</p><p> count=count+1;</p><p> x=x+displace_x;</p><p> y=y+displace_y; }</p><p> x=locX-displac
77、e_x;</p><p> y=locY-displace_y;</p><p> while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check) {</p><p> count=count+1;<
78、/p><p> x=x-displace_x;</p><p> y=y-displace_y; } </p><p> if(count>=5) {</p><p> game_state=End;</p><p> winner=check;</p><p> Th
79、readStart();</p><p><b> }</b></p><p> else if(direction!=nil)</p><p> WinCheck2(); }</p><p> public void ReStart() {</p><p> for(int i=0;
80、i<length; i++)</p><p> for(int j=0; j<length; j++)</p><p> grids[i][j].Initial();</p><p><b> winner=0;</b></p><p> steps.clear();</p><p
81、> game_state=Playing; }</p><p> public void gobangRandom() {</p><p> displace_y=0;</p><p><b> do</b></p><p> { displace_x=(int)(Math.random()*8);&l
82、t;/p><p> x =locX+dir[displace_x][0];</p><p> y =locY+dir[displace_x][1]; </p><p> if(!dir2[displace_x])</p><p><b> {</b></p><p> displace_y
83、=displace_y+1;</p><p> dir2[displace_x]=true;</p><p><b> }</b></p><p> }while((x<0 || x>=length || y<0 || y>=length || grid[x][y]!=0) && displace_
84、y<8);</p><p> for(int i=0; i<8; i++)</p><p> dir2[i]=false;</p><p> if(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0)<
85、;/p><p> setMark(x, y);</p><p><b> else</b></p><p> gobangRandom2(); }</p><p> private void gobangRandom2() {</p><p><b> do {</b>
86、;</p><p> x=(int)(Math.random()*length);</p><p> y=(int)(Math.random()*length);</p><p> }while(grid[x][y]!=0);</p><p> setMark(x, y);</p><p><b>
87、 }</b></p><p> private void gobangAI()</p><p><b> {</b></p><p> boolean play=true;</p><p> for(int i=2; i>0; i--) {</p><p> play
88、=!play;</p><p> gobangAI4(play);</p><p><b> if(turn)</b></p><p><b> return;</b></p><p><b> }</b></p><p> for(int i
89、=7; i>=4; i--)</p><p><b> {</b></p><p> play=!play;</p><p><b> step=i/2;</b></p><p> gobangAI2(play);</p><p><b> if(t
90、urn)</b></p><p><b> return;</b></p><p><b> }</b></p><p> gobangAI5();</p><p><b> if(!turn)</b></p><p> goban
91、gRandom();</p><p><b> }</b></p><p> private void gobangAI2(boolean player)</p><p><b> {</b></p><p> check = player? Player: AI;</p>&
92、lt;p> for(int i=0; i<length; i++)</p><p> for(int j=0; j<length; j++) {</p><p><b> if(turn)</b></p><p><b> break;</b></p><p> if(g
93、rid[i][j] == check)</p><p><b> {</b></p><p><b> count=1;</b></p><p> direction=oblique_1;</p><p> gobangAI3(i, j);</p><p><b
94、> } } }</b></p><p> private void gobangAI3(int x, int y)</p><p> { if(count==1) {</p><p><b> locX=x;</b></p><p><b> locY=y;</b>
95、</p><p><b> }</b></p><p> switch(direction)</p><p><b> {</b></p><p> case oblique_1: displace_x=1;</p><p> displace_y=-1;</
96、p><p><b> break;</b></p><p> case oblique_2: displace_x=displace_y=1;</p><p><b> break;</b></p><p> case horizontal: displace_x=1;</p>&
97、lt;p> displace_y=0;</p><p> break; </p><p> case vertical: displace_x=0;</p><p> displace_y=1;</p><p><b> break;</b></p>
98、<p><b> }</b></p><p> x=x+displace_x;</p><p> y=y+displace_y;</p><p> if(x>=0 && x<length && y>=0 && y<length && gri
99、d[x][y]==check)</p><p><b> {</b></p><p> count=count+1;</p><p> if(count==step)</p><p><b> {</b></p><p> if(x+displace_x>=0
100、 && x+displace_x<length && y+displace_y>=0 && y+displace_y<length && grid[x+displace_x][y+displace_y]==0)</p><p><b> {</b></p><p> if(x-ste
101、p*displace_x<0 || x-step*displace_x>=length || y-step*displace_y<0 || y-step*displace_y>=length || !gobang_SpaceAI(x+displace_x, y+displace_y) || (grid[x-step*displace_x][y-step*displace_y]!=0 && step
102、<3) ) /* 癸翴猵 */</p><p> gobangAI3_2(); </p><p><b> else </b></p><p> setMark2(x+displace_x, y+displace_y); }</p><p><b> else</b>&
103、lt;/p><p> gobangAI3_2(); }</p><p><b> else</b></p><p> gobangAI3(x, y); }</p><p><b> else</b></p><p> gobangAI3_2(); }</p&
104、gt;<p> private void gobangAI3_2() {</p><p> if(direction!=vertical) {</p><p><b> count=1;</b></p><p> direction=direction+1;</p><p> gobangAI3
105、(locX, locY); } }</p><p> private void gobangAI4(boolean player) {</p><p> check = player? Player: AI;</p><p> for(int i=0; i<length; i++)</p><p> for(int j=0;
106、j<length; j++) {</p><p><b> if(turn)</b></p><p><b> break;</b></p><p> if(grid[i][j]==0) {</p><p> direction=oblique_1;</p><p
107、><b> locX=i;</b></p><p><b> locY=j;</b></p><p> gobangAI4();</p><p><b> }</b></p><p><b> }</b></p><p&
108、gt;<b> }</b></p><p> private void gobangAI4() {</p><p><b> count=0;</b></p><p> switch(direction) {</p><p> case oblique_1: displace_x=1;&l
109、t;/p><p> displace_y=-1;</p><p> direction=oblique_2;</p><p><b> break;</b></p><p> case oblique_2: displace_x=displace_y=1;</p><p> directio
110、n=horizontal; </p><p><b> break;</b></p><p> case horizontal: displace_x=1;</p><p> displace_y=0;</p><p> direction=vertical;
111、 </p><p> break; </p><p> case vertical: displace_x=0;</p><p> displace_y=1;</p><p> direction=nil;</p><p><b> break
112、; }</b></p><p> x=locX+displace_x;</p><p> y=locY+displace_y;</p><p> while(x>=0 && x<length && y>=0 && y<length && grid[x][y]=
113、=check) {</p><p> count=count+1;</p><p> x=x+displace_x;</p><p> y=y+displace_y;</p><p><b> }</b></p><p> x=locX-displace_x;</p>&
114、lt;p> y=locY-displace_y; </p><p> while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check) {</p><p> count=count+1;</p><p>
115、; x=x-displace_x;</p><p> y=y-displace_y; }</p><p> if(count>=4)</p><p> setMark(locX, locY);</p><p> else if(direction!=nil)</p><p> gobangAI4()
116、; }</p><p> private void gobangAI5() {</p><p> for(int i=0; i<length; i++)</p><p> for(int j=0; j<length; j++) {</p><p><b> if(turn)</b></p&g
117、t;<p><b> break;</b></p><p> if(grid[i][j]==-1) {</p><p> direction=oblique_1;</p><p><b> locX=i;</b></p><p> locY=j; gobangAI5_2(
118、); } }}</p><p> private void gobangAI5_2() { </p><p><b> count=0;</b></p><p> switch(direction){</p><p> case oblique_1: displace_x=1;</p>&l
119、t;p> displace_y=-1;</p><p> direction=oblique_2;</p><p><b> break;</b></p><p> case oblique_2: displace_x=displace_y=1;</p><p> direction=horizontal
120、; </p><p><b> break;</b></p><p> case horizontal: displace_x=1;</p><p> displace_y=0;</p><p> direction=vertical; </p><
121、;p> break; </p><p> case vertical: displace_x=0;</p><p> displace_y=1;</p><p> direction=nil;</p><p><b> break; }</b></p>
122、;<p> x=locX+displace_x;</p><p> y=locY+displace_y;</p><p> while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && count<
123、4) {</p><p> count=count+1;</p><p> x=x+displace_x;</p><p> y=y+displace_y;</p><p><b> }</b></p><p> x=locX-displace_x;</p><p&g
124、t; y=locY-displace_y;</p><p> if(count==4 && x>=0 && x<length && y>=0 && y<length && grid[x][y]==0)</p><p> setMark(locX+displace_x, locY+d
125、isplace_y);</p><p> else if(count>1) {</p><p> count = count==4? 3: count;</p><p> while(x>=0 && x<length && y>=0 && y<length && g
126、rid[x][y]==0 && count<4) {</p><p> count=count+1;</p><p> x=x-displace_x;</p><p> y=y-displace_y; } </p><p> if(count==4)</p><p> s
127、etMark(locX+displace_x, locY+displace_y);</p><p> else if(direction!=nil)</p><p> gobangAI5_2(); }</p><p> else if(direction!=nil)</p><p> gobangAI5_2(); }</p&g
128、t;<p> private boolean gobang_SpaceAI(int x, int y) /* 璸衡逞緇フ竚 */</p><p> { int space=0;</p><p><b> do</b></p><p> { space=space+1;</p><p> x
129、=x+displace_x;</p><p> y=y+displace_y;</p><p> }while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && space<4);</p><p
130、> if(space+count>=5) /* 逞緇フ?qǐng)訾捆吵s絬ぇ */</p><p> return true;</p><p><b> else</b></p><p><b> {</b></p><p><b> space=0;</b>
131、</p><p> x=locX-displace_x;</p><p> y=locY-displace_y; </p><p> while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 &&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java五子棋課程設(shè)計(jì)
- java課程設(shè)計(jì)--五子棋
- 五子棋java課程設(shè)計(jì)
- 五子棋java課程設(shè)計(jì)
- 五子棋java語言課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--五子棋游戲
- java課程設(shè)計(jì)--對(duì)戰(zhàn)五子棋
- java課程設(shè)計(jì)報(bào)告---java 五子棋游戲設(shè)計(jì)
- java課程設(shè)計(jì)-五子棋游戲
- 五子棋-課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--人機(jī)對(duì)弈五子棋
- java課程設(shè)計(jì)報(bào)告---單機(jī)版五子棋
- 五子棋課程設(shè)計(jì)
- java五子棋實(shí)習(xí)報(bào)告
- java課程設(shè)計(jì)五子棋(附源代碼)
- java_五子棋小游戲課程設(shè)計(jì)
- 五子棋游戲課程設(shè)計(jì)報(bào)告
- 五子棋畢業(yè)課程設(shè)計(jì)報(bào)告
- c++五子棋課程設(shè)計(jì)報(bào)告
- 面向?qū)ο蟪绦蛟O(shè)計(jì)---五子棋-java課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論