java課程設(shè)計(jì)報(bào)告-五子棋_第1頁
已閱讀1頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論