java連連看課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  Java課程設(shè)計(jì)報(bào)告</p><p> 題目:連連看</p><p> 姓名:</p><p> 學(xué)號(hào):</p><p> 起止時(shí)間:2012.3.19-2012.4.17</p><p> 自評(píng)成績(jī):優(yōu)秀</p><p> 理由:實(shí)現(xiàn)了連連看游戲的基本功能,增添了暫停,重

2、置,提示,消除等附加功能。時(shí)間條和消除效果的動(dòng)畫(huà)表示。</p><p><b>  【選題背景】: </b></p><p>  連連看游戲經(jīng)驗(yàn),玩法簡(jiǎn)單,休閑,益智,趣味,廣受歡迎。</p><p><b>  【選題目的】:</b></p><p>  學(xué)會(huì)JAVA程序開(kāi)發(fā)的環(huán)境搭建與配置,并在

3、實(shí)際運(yùn)用中學(xué)習(xí)和掌握J(rèn)AVA程序開(kāi)發(fā)的全過(guò)程。進(jìn)一步熟悉掌握J(rèn)AVA程序設(shè)計(jì)語(yǔ)音的基礎(chǔ)內(nèi)容,如用戶圖形界面設(shè)計(jì)、JAVA多線程編程、JAVA數(shù)據(jù)庫(kù)編程等。通過(guò)親自動(dòng)手寫(xiě)程序,拓展知識(shí)面,鍛煉調(diào)試能力。</p><p>  【系統(tǒng)分析與設(shè)計(jì)】:</p><p>  功能分析:實(shí)現(xiàn)連連看的基本游戲功能和重置、提示、消除功能</p><p>  設(shè)計(jì):通過(guò)對(duì)圖片的調(diào)用以及

4、設(shè)置是否可見(jiàn)來(lái)完成連連看的效果</p><p>  【課程設(shè)計(jì)中碰到的問(wèn)題及解決方案】:</p><p>  1.不知道如何進(jìn)行對(duì)數(shù)組中兩個(gè)元素是否可以消除的判斷</p><p>  2.時(shí)間條的動(dòng)態(tài)表現(xiàn)</p><p><b>  解決方案:</b></p><p>  對(duì)每個(gè)相同圖案進(jìn)行循環(huán)判

5、斷,直到找出滿足條件的情況</p><p>  boolean verticalMatch(Point a, Point b) // 豎線上的判斷 </p><p>  boolean horizonMatch(Point a, Point b) // 橫線上的判斷</p><p>  2.為了保證動(dòng)畫(huà)過(guò)程和游戲過(guò)程的平行運(yùn)行,因此將動(dòng)畫(huà)分離成一個(gè)獨(dú)立的控件,并且要

6、保證動(dòng)畫(huà)有自己?jiǎn)为?dú)的線程來(lái)運(yùn)行。當(dāng)每次用戶的分?jǐn)?shù)發(fā)生變化時(shí),我們可以使用 setScore(int l, int c) 方法同步分?jǐn)?shù)顯示的動(dòng)畫(huà)效果。</p><p><b>  【程序輸出結(jié)果】:</b></p><p><b>  游戲開(kāi)始</b></p><p><b>  提示功能</b><

7、;/p><p><b>  消除功能</b></p><p><b>  游戲結(jié)束</b></p><p><b>  關(guān)于</b></p><p>  【總結(jié)自己的體會(huì)和收獲】:</p><p>  通過(guò)這次課程設(shè)計(jì)我學(xué)到了不少東西,也發(fā)現(xiàn)了大量的問(wèn)題,同

8、時(shí)在設(shè)計(jì)的過(guò)程中也發(fā)現(xiàn)了自己的不足之處,對(duì)以前學(xué)過(guò)的知識(shí)理解的不夠深刻。對(duì)JAVA運(yùn)用圖片的調(diào)用和設(shè)置是否可見(jiàn)有了新的了解。但在部分功能的實(shí)現(xiàn)上還是有所不足,老師和同學(xué)都給予了很多幫助。讓我懂得了JAVA的重要性和如何應(yīng)用到實(shí)踐后上。</p><p><b>  【程序代碼另附】:</b></p><p>  ImageFactory</p><p

9、>  package nicholas.game.kyodai;</p><p>  import javax.swing.ImageIcon;</p><p>  import java.net.*;</p><p>  public class ImageFactory {</p><p>  private static Imag

10、eFactory imagefactory;</p><p>  private static ImageIcon images[];</p><p>  private ImageFactory() {</p><p>  images = new ImageIcon[54];</p><p>  URLClassLoader loader

11、 = (URLClassLoader)getClass().getClassLoader();</p><p>  for(int i=0;i<39;i++) {</p><p>  images[i] = new ImageIcon(getClass().getResource("images/"+i+".gif"));</p>

12、<p><b>  }</b></p><p>  images[39] = new ImageIcon(getClass().getResource("images/dots.gif"));</p><p>  images[40] = new ImageIcon(getClass().getResource("images

13、/ico.gif"));</p><p>  images[41] = new ImageIcon(getClass().getResource("images/topbar.gif"));</p><p>  images[42] = new ImageIcon(getClass().getResource("images/splash.gif&q

14、uot;));</p><p>  images[43] = new ImageIcon(getClass().getResource("images/sico.gif"));</p><p><b>  }</b></p><p>  public ImageIcon getImageicon(int i) {</p

15、><p>  return images[i];</p><p><b>  }</b></p><p>  public static synchronized ImageFactory getInstance() {</p><p>  if(imagefactory != null) {</p><

16、p>  return imagefactory;</p><p><b>  } else {</b></p><p>  imagefactory = new ImageFactory();</p><p>  return imagefactory;</p><p><b>  }</b>

17、</p><p><b>  }</b></p><p><b>  }</b></p><p>  KyodaiGrid</p><p>  package nicholas.game.kyodai;</p><p>  import java.awt.*;</p&g

18、t;<p>  import javax.swing.*;</p><p>  public class KyodaiGrid extends JLabel {</p><p>  private int xpos;</p><p>  private int ypos;</p><p>  public KyodaiGrid(

19、int x, int y) {</p><p><b>  xpos = x;</b></p><p><b>  ypos = y;</b></p><p>  this.setHorizontalAlignment(SwingConstants.CENTER);</p><p><b>

20、;  }</b></p><p>  public int getXpos() {</p><p>  return xpos;</p><p><b>  }</b></p><p>  public int getYpos() {</p><p>  return ypos;<

21、;/p><p><b>  }</b></p><p>  public boolean isPassable() {</p><p>  return !isVisible();</p><p><b>  }</b></p><p><b>  }</b>

22、;</p><p><b>  LevelInfo</b></p><p>  package nicholas.game.kyodai;</p><p>  import java.io.Serializable;</p><p>  public class LevelInfo implements Serializ

23、able {//xBound為行號(hào),yBound為列號(hào)</p><p>  private int xBound;</p><p>  private int yBound;</p><p>  public LevelInfo() {</p><p>  xBound = 16;</p><p>  yBound =

24、 9;</p><p><b>  }</b></p><p>  public LevelInfo(int x, int y){</p><p>  xBound = x;</p><p>  yBound = y;</p><p><b>  }</b></p>

25、;<p>  public int getXBound() {</p><p>  return xBound;</p><p><b>  }</b></p><p>  public int getYBound() {</p><p>  return yBound;</p><p&

26、gt;<b>  }</b></p><p><b>  }</b></p><p>  MainFrame.java</p><p>  package nicholas.game.kyodai;</p><p>  import java.awt.*;</p><p> 

27、 import java.awt.event.*;</p><p>  import java.io.*;</p><p>  import javax.swing.*;</p><p>  import nicholas.swing.AboutDialog;</p><p>  import nicholas.swing.JSplashWi

28、ndow;</p><p>  public class MainFrame extends JFrame implements ActionListener {</p><p>  private JMenuItem aboutItem;//菜單欄</p><p>  private JMenuItem exitItem;</p><p>

29、  private JMenuItem startItem;</p><p>  private JMenuItem optionItem;</p><p>  private JMenuItem tipItem;</p><p>  private JMenuItem refreshItem;</p><p>  private JMenu

30、Item logItem;</p><p>  private JMenuItem bombItem;</p><p>  private JMenuItem pauseItem;</p><p>  private MainPanel mainPanel;//完成主要功能</p><p>  private LevelInfo levelI

31、nfo;</p><p>  public MainFrame() {</p><p>  super("連連看");</p><p>  levelInfo = new LevelInfo();//設(shè)定游戲大小</p><p>  setMenuBar();//設(shè)置菜單</p><p><b

32、>  setUI();</b></p><p>  setIconImage(ImageFactory.getInstance().getImageicon(43).getImage());</p><p>  setSize(650,520);</p><p>  Dimension screen = getToolkit().getScreen

33、Size();</p><p>  setLocation((screen.width-getSize().width)/2, (screen.height-getSize().height)/2);</p><p>  this.setVisible(true);</p><p>  addWindowListener(</p><p> 

34、 new WindowAdapter() {</p><p>  public void windowClosing(WindowEvent e) {</p><p>  System.exit(0);</p><p><b>  }</b></p><p><b>  }</b></p>

35、;<p><b>  );</b></p><p><b>  }</b></p><p>  private void setMenuBar() {</p><p>  JMenu fileMenu = new JMenu("游戲(G)");</p><p>  

36、JMenu helpMenu = new JMenu("幫助(H)");</p><p>  JMenu contMenu = new JMenu("輔助(C)");</p><p>  fileMenu.setMnemonic('G');</p><p>  helpMenu.setMnemonic('

37、;H');</p><p>  contMenu.setMnemonic('C');</p><p>  startItem = new JMenuItem("開(kāi)局(N)");</p><p>  startItem.setMnemonic('N');</p><p>  sta

38、rtItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0));</p><p>  pauseItem = new JMenuItem("暫停(P)");</p><p>  pauseItem.setMnemonic('P');</p><p>  pauseIt

39、em.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAUSE,0));</p><p>  refreshItem = new JMenuItem("刷新(R)");</p><p>  refreshItem.setMnemonic('R');</p><p>  refr

40、eshItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));</p><p>  tipItem = new JMenuItem("提示(T)");</p><p>  tipItem.setMnemonic('T');</p><p>  tipItem.se

41、tAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0));</p><p>  optionItem = new JMenuItem("選項(xiàng)(O)...");</p><p>  optionItem.setMnemonic('O');</p><p>  logItem = n

42、ew JMenuItem("排行榜(B)...");</p><p>  logItem.setMnemonic('B');</p><p>  exitItem = new JMenuItem("退出(X)");</p><p>  exitItem.setMnemonic('X');<

43、/p><p>  aboutItem = new JMenuItem("關(guān)于(A)...");</p><p>  aboutItem.setMnemonic('A');</p><p>  aboutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));</

44、p><p>  bombItem = new JMenuItem("炸彈(M)");</p><p>  bombItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,0));</p><p>  bombItem.setMnemonic('M');</p>

45、<p>  startItem.addActionListener(this);</p><p>  pauseItem.addActionListener(this);</p><p>  refreshItem.addActionListener(this);</p><p>  tipItem.addActionListener(this);&l

46、t;/p><p>  optionItem.addActionListener(this);</p><p>  logItem.addActionListener(this);</p><p>  exitItem.addActionListener(this);</p><p>  aboutItem.addActionListener(th

47、is);</p><p>  bombItem.addActionListener(this);</p><p>  fileMenu.add(startItem);</p><p>  fileMenu.add(pauseItem);</p><p>  contMenu.add(refreshItem);</p><

48、;p>  contMenu.add(bombItem);</p><p>  contMenu.add(tipItem);</p><p>  fileMenu.addSeparator();</p><p>  fileMenu.add(exitItem);</p><p>  helpMenu.add(aboutItem);<

49、/p><p>  helpMenu.add(contMenu);</p><p>  JMenuBar bar = new JMenuBar();</p><p>  bar.add(fileMenu);</p><p>  bar.add(helpMenu);</p><p>  setJMenuBar(bar);<

50、;/p><p><b>  }</b></p><p>  private void setUI() {</p><p>  mainPanel = new MainPanel(levelInfo);</p><p>  getContentPane().add(mainPanel,BorderLayout.CENTER);

51、</p><p><b>  }</b></p><p>  public static void main(String args[]) {</p><p>  MainFrame application = new MainFrame();</p><p><b>  }</b></p&g

52、t;<p>  private void showAboutDialog() {</p><p>  String s1="作者: 曲一鳴";</p><p>  String s2="郵箱: 421992774@qq.com";</p><p>  String s3="Have Fun!

53、!";</p><p>  TextArea ta=new TextArea();</p><p>  ta.setText(s1+"\n"+"\n"+"\n"+s2+"\n"+"\n"+"\n"+s3);</p><p>  ta.se

54、tEditable(false);</p><p>  JFrame f=new JFrame("關(guān)于");</p><p>  f.setLocation(300, 300);</p><p>  f.setSize(200,200);</p><p>  f.add(ta);</p><p> 

55、 f.setBackground(new Color(200,120,150));</p><p>  f.setResizable(false);</p><p>  f.setVisible(true);</p><p><b>  }</b></p><p>  public void actionPerforme

56、d(ActionEvent ae) {</p><p>  if(ae.getSource()==startItem) {</p><p>  mainPanel.restart();</p><p>  } else if(ae.getSource()==pauseItem) {</p><p>  mainPanel.setPaused(

57、!mainPanel.isPaused());</p><p>  } else if(ae.getSource()==exitItem) {</p><p>  System.exit(0);</p><p>  } else if(ae.getSource()==aboutItem) {</p><p>  showAboutDialog

58、();</p><p>  } else if(ae.getSource()==bombItem) {</p><p>  mainPanel.useBomb();</p><p>  } else if(ae.getSource()==refreshItem) {</p><p>  mainPanel.refresh();</p&g

59、t;<p>  } else if(ae.getSource()==tipItem) {</p><p>  mainPanel.showNext();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b

60、></p><p>  MainPanel.java</p><p>  package nicholas.game.kyodai;</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  import java.util

61、.Vector;</p><p>  import javax.swing.*;</p><p>  import javax.swing.border.Border;</p><p>  import nicholas.game.kyodai.*;</p><p>  public class MainPanel extends JPane

62、l {</p><p>  private int BOMB = 5;</p><p>  private int BOMBP = 200;</p><p>  private int REFRESH = 4;</p><p>  private int REFRP = 250;</p><p>  private i

63、nt TIP = 7;</p><p>  private int TIPP = 120;</p><p>  private int PROGRESS = 1200;</p><p>  private int xBound;</p><p>  private int yBound;</p><p>  priva

64、te int pcount;</p><p>  private int score;</p><p>  private int refreshcount;</p><p>  private int bombcount;</p><p>  private int tipcount;</p><p>  priva

65、te LevelInfo levelInfo;</p><p>  private GridMouseAdapter gma;</p><p>  private KyodaiGrid grid[][];</p><p>  private KyodaiGrid nexts, nexte;</p><p>  private Border s

66、electedBorder;</p><p>  private Border opaqueBorder;</p><p>  private Border tipBorder;</p><p>  private Vector path[];</p><p>  private Thread pthread;</p><

67、p>  private JProgressBar progress;</p><p>  private JLabel scoreLabel;</p><p>  private JLabel refreshLabel;</p><p>  private JLabel bombLabel;</p><p>  private JLab

68、el tipLabel;</p><p>  private JPanel gridPanel;</p><p>  private boolean wingame;</p><p>  public MainPanel(LevelInfo li) {</p><p>  super(new BorderLayout());</p>

69、;<p>  levelInfo = li;</p><p>  path = new Vector[3];</p><p>  path[0] = new Vector();</p><p>  path[1] = new Vector();</p><p>  path[2] = new Vector();</p>

70、;<p>  setBackground(Color.black);</p><p>  gma = new GridMouseAdapter();</p><p>  opaqueBorder = BorderFactory.createLineBorder(getBackground());</p><p>  //selectedBorder =

71、 BorderFactory.createLineBorder(Color.red);</p><p>  selectedBorder = BorderFactory.createLineBorder(Color.red);</p><p>  tipBorder = BorderFactory.createLineBorder(Color.green);</p><

72、p>  setGridPanel();</p><p>  setStatusPanel();</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  *設(shè)置狀態(tài)面板</b></p><p>

73、<b>  */</b></p><p>  private void setStatusPanel() {</p><p>  wingame = false;</p><p>  JPanel panel = new JPanel();</p><p>  panel.setBackground(Color.blac

74、k);</p><p>  JLabel label = new JLabel("剩余時(shí)間:");</p><p>  label.setForeground(Color.white);</p><p>  panel.add(label);</p><p>  progress = new JProgressBar(0,

75、PROGRESS);//時(shí)間條顯示</p><p>  progress.setValue(PROGRESS);</p><p>  progress.setPreferredSize(new Dimension(400,20));</p><p>  progress.setForeground(Color.blue);</p><p> 

76、 progress.setBorderPainted(false);</p><p>  panel.add(progress);</p><p>  score = 0;</p><p>  scoreLabel = new JLabel(""+score);</p><p>  scoreLabel.setForegr

77、ound(Color.yellow);</p><p>  scoreLabel.setFont(new Font("Dialog",Font.BOLD,25));</p><p>  scoreLabel.setHorizontalAlignment(SwingConstants.RIGHT);</p><p>  scoreLabel.set

78、PreferredSize(new Dimension(100,20));</p><p>  panel.add(scoreLabel);</p><p>  add(panel,BorderLayout.NORTH);</p><p>  panel = new JPanel();</p><p>  panel.setBackgroun

79、d(Color.black);</p><p>  label = new JLabel("剩余提示:");</p><p>  label.setForeground(Color.yellow);</p><p>  panel.add(label);</p><p>  tipcount = TIP;</p>

80、;<p>  tipLabel = new JLabel(""+tipcount);</p><p>  tipLabel.setForeground(Color.green);</p><p>  panel.add(tipLabel);</p><p>  label = new JLabel("剩余炸彈:"

81、);</p><p>  label.setForeground(Color.yellow);</p><p>  panel.add(label);</p><p>  bombcount = BOMB;</p><p>  bombLabel = new JLabel(""+bombcount);</p>

82、<p>  bombLabel.setForeground(Color.green);</p><p>  panel.add(bombLabel);</p><p>  label = new JLabel("可用刷新:");</p><p>  label.setForeground(Color.yellow);</p>

83、;<p>  panel.add(label);</p><p>  refreshcount = REFRESH;</p><p>  refreshLabel = new JLabel(""+refreshcount);</p><p>  refreshLabel.setForeground(Color.green);<

84、/p><p>  panel.add(refreshLabel);</p><p>  add(panel,BorderLayout.SOUTH);</p><p>  pthread = new ProgressThread();</p><p>  pthread.start();</p><p><b> 

85、 }</b></p><p>  private void setGridPanel() {//完成布局</p><p>  gridPanel = new JPanel();</p><p>  gridPanel.setBackground(getBackground());</p><p>  xBound = levelI

86、nfo.getXBound()+2;</p><p>  yBound = levelInfo.getYBound()+2;</p><p>  gridPanel.setLayout(new GridLayout(yBound,xBound,0,0));</p><p>  grid = new KyodaiGrid[yBound][xBound];</p&

87、gt;<p>  int count = 0;</p><p>  int sub = levelInfo.getXBound()*levelInfo.getYBound()/4;</p><p>  KyodaiGrid temp[] = new KyodaiGrid[xBound*yBound];</p><p>  for(int y=0;y&l

88、t;yBound;y++) {</p><p>  for(int x=0;x<xBound;x++) {</p><p>  grid[y][x] = new KyodaiGrid(x, y);</p><p>  if(x==0||x==(xBound-1)||y==0||y==(yBound-1)) {</p><p>  gri

89、d[y][x].setIcon(ImageFactory.getInstance().getImageicon(39));</p><p>  grid[y][x].setVisible(false);</p><p><b>  } else {</b></p><p>  grid[y][x].setIcon(ImageFactory.ge

90、tInstance().getImageicon(count%sub));</p><p>  grid[y][x].setBorder(opaqueBorder);</p><p>  grid[y][x].addMouseListener(gma);</p><p>  temp[count] = grid[y][x];</p><p>

91、<b>  count++;</b></p><p><b>  }</b></p><p>  gridPanel.add(grid[y][x]);</p><p><b>  }</b></p><p><b>  }</b></p>&

92、lt;p>  JPanel t = new JPanel();</p><p>  t.setBackground(Color.black);</p><p>  t.add(gridPanel);</p><p>  add(t,BorderLayout.CENTER);</p><p>  shuffle(temp, count);

93、</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  *開(kāi)始新游戲</b></p><p><b>  */</b></p><p>  public void resta

94、rt() {//重新開(kāi)始</p><p>  resetStatusPanel();</p><p>  resetGridPanel();</p><p><b>  }</b></p><p><b>  /**</b></p><p>  *重置面板狀態(tài)和游戲圖標(biāo)<

95、;/p><p><b>  */</b></p><p>  private void resetStatusPanel() {</p><p>  wingame = false;</p><p>  score = 0;</p><p>  scoreLabel.setText("&qu

96、ot;+score);</p><p>  bombcount = BOMB;</p><p>  bombLabel.setText(""+bombcount);</p><p>  refreshcount = REFRESH;</p><p>  refreshLabel.setText(""+r

97、efreshcount);</p><p>  tipcount = TIP;</p><p>  tipLabel.setText(""+tipcount);</p><p>  progress.setValue(PROGRESS);</p><p>  pthread.resume();</p><

98、;p><b>  }</b></p><p>  private void resetGridPanel() {</p><p>  int count = 0;</p><p>  int sub = (xBound-2)*(yBound-2)/4;</p><p>  KyodaiGrid temp[] = n

99、ew KyodaiGrid[xBound*yBound];</p><p>  for(int y=1;y<yBound-1;y++) {</p><p>  for(int x=1;x<xBound-1;x++){</p><p>  grid[y][x].setIcon(ImageFactory.getInstance().getImageicon(

100、count%sub));</p><p>  grid[y][x].setBorder(opaqueBorder);</p><p>  grid[y][x].setVisible(true);</p><p>  temp[count] =grid[y][x];</p><p><b>  count++;</b>&l

101、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  shuffle(temp,count);</p><p><b>  }</b></p><p><b>  /**</b></

102、p><p><b>  *暫停</b></p><p><b>  */</b></p><p>  public void setPaused(boolean p) {</p><p><b>  if(p) {</b></p><p>  pthread

103、.suspend();</p><p>  gridPanel.setVisible(false);</p><p><b>  } else {</b></p><p>  pthread.resume();</p><p>  gridPanel.setVisible(true);</p><p&

104、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  *是否暫停</b></p><p><b>  */</b></p><

105、p>  public boolean isPaused() {</p><p>  return !gridPanel.isVisible();</p><p><b>  }</b></p><p><b>  /**</b></p><p>  *沒(méi)有布局存在時(shí)勝利</p>

106、<p><b>  *計(jì)算得分</b></p><p><b>  */</b></p><p>  private void win() {</p><p>  wingame = true;</p><p>  pthread.suspend();</p><p&g

107、t;  score += progress.getValue()/20+bombcount*BOMBP+refreshcount*REFRP+tipcount*TIPP;</p><p>  scoreLabel.setText(""+score);</p><p><b>  }</b></p><p>  private

108、 void shuffle(KyodaiGrid array[], int count) {</p><p>  if(wingame) return;</p><p><b>  do {</b></p><p>  setVisible(false);</p><p><b>  int j,k;</

109、b></p><p>  Icon temp;</p><p>  for(int i=0;i<count;i++) {</p><p>  j = (int)(Math.random()*count);</p><p>  k = (int)(Math.random()*count);</p><p> 

110、 temp = array[k].getIcon();</p><p>  array[k].setIcon(array[j].getIcon());</p><p>  array[j].setIcon(temp);</p><p><b>  }</b></p><p>  setVisible(true);<

111、/p><p>  } while(!findPair());</p><p><b>  }</b></p><p>  public void refresh() {</p><p>  if(wingame||progress.getValue()==0||refreshcount==0) return;</p&g

112、t;<p>  KyodaiGrid temp[] = new KyodaiGrid[xBound*yBound];</p><p>  int count = 0;</p><p>  for(int y=1;y<yBound-1;y++) {</p><p>  for(int x=1;x<xBound-1;x++) {</p&g

113、t;<p>  if(grid[y][x].isVisible()) {</p><p>  grid[y][x].setBorder(opaqueBorder);</p><p>  temp[count] = grid[y][x];</p><p><b>  count++;</b></p><p>

114、<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(count!=0) {</p><p>  refreshcount--;</p><p>  refreshLabel.s

115、etText(""+refreshcount);</p><p>  shuffle(temp,count);</p><p>  } else win();</p><p><b>  }</b></p><p>  private boolean xdirect(KyodaiGrid start,

116、 KyodaiGrid end,Vector path) {</p><p>  if(start.getYpos()!=end.getYpos()) return false;</p><p>  int direct = 1;</p><p>  if(start.getXpos()>end.getXpos()) {</p><p>

117、;  direct = -1;</p><p><b>  }</b></p><p>  path.removeAllElements();</p><p>  for(int x=start.getXpos()+direct;x!=end.getXpos()&&x<xBound&&x>=0;x+=

118、direct) {</p><p>  if(grid[start.getYpos()][x].isVisible()) return false;</p><p>  path.add(grid[start.getYpos()][x]);</p><p><b>  }</b></p><p>  path.add(e

119、nd);</p><p>  return true;</p><p><b>  }</b></p><p>  private boolean ydirect(KyodaiGrid start, KyodaiGrid end,Vector path) {</p><p>  if(start.getXpos()!=e

120、nd.getXpos()) return false;</p><p>  int direct = 1;</p><p>  if(start.getYpos()>end.getYpos()) {</p><p>  direct = -1;</p><p><b>  }</b></p><

121、p>  path.removeAllElements();</p><p>  for(int y=start.getYpos()+direct;y!=end.getYpos()&&y<yBound&&y>=0;y+=direct) {</p><p>  if(grid[y][start.getXpos()].isVisible()) r

122、eturn false;</p><p>  path.add(grid[y][start.getXpos()]);</p><p><b>  }</b></p><p>  path.add(end);</p><p>  return true;</p><p><b>  }&l

123、t;/b></p><p>  private int findPath(KyodaiGrid start, KyodaiGrid end) {</p><p>  //0 conner</p><p>  if(xdirect(start,end,path[0])) {</p><p><b>  return 1;<

124、/b></p><p><b>  }</b></p><p>  if(ydirect(start,end,path[0])) {</p><p><b>  return 1;</b></p><p><b>  }</b></p><p> 

125、 //1 conner</p><p>  KyodaiGrid xy = grid[start.getYpos()][end.getXpos()];</p><p>  if(!xy.isVisible()&&xdirect(start,xy,path[0])&&ydirect(xy,end,path[1])) {</p><p>

126、<b>  return 2;</b></p><p><b>  }</b></p><p>  KyodaiGrid yx = grid[end.getYpos()][start.getXpos()];</p><p>  if(!yx.isVisible()&&ydirect(start,yx,pat

127、h[0])&&xdirect(yx,end,path[1])) {</p><p><b>  return 2;</b></p><p><b>  }</b></p><p>  //2 conner</p><p><b>  //up</b></p

128、><p>  path[0].removeAllElements();</p><p>  for(int y=start.getYpos()-1;y>=0;y--) {</p><p>  xy = grid[y][start.getXpos()];</p><p>  yx = grid[y][end.getXpos()];</p

129、><p>  if(xy.isVisible()) break;</p><p>  path[0].add(xy);</p><p>  if(!yx.isVisible()&&xdirect(xy,yx,path[1])&&ydirect(yx,end,path[2])) {</p><p><b>

130、  return 3;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //down</b></p><p>  path[0].removeAllElements();</p>&l

131、t;p>  for(int y=start.getYpos()+1;y<yBound;y++) {</p><p>  xy = grid[y][start.getXpos()];</p><p>  yx = grid[y][end.getXpos()];</p><p>  if(xy.isVisible()) break;</p>&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論