자바 대 터치 게임 실현

17833 단어 자바맞부딪치다
본 논문 의 사례 는 자바 가 충돌 에 대한 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
-게임 구현 기능:각각 두 장의 인접 한 이미지 버튼 을 눌 러 교환(중점 인접)하고,교 환 된 두 이미지 버튼 의 인접 한 수평 또는 수직 방향 에서 동일 한 이미지 가 정 해진 개 수 를 초과 하면(여 기 는 3 개 로 규정)모두 제거(공백 버튼 으로 설정)하고,위의 이미지 버튼 도 각각 아래로 이동 합 니 다.공백 을 보완 합 니 다.(그림 단추 와 공백 단 추 를 교환 하 는 것 으로 이해 할 수 있 습 니 다.)
-게임 디자인 아이디어:
1.그림 단추 배열 을 만 들 고 기본 속성 을 설정 합 니 다.
2.각 그림 단추 에 해당 하 는 ID 를 설정 하여 그림 정 보 를 표시 합 니 다.ID 가 같은 단추 에 대해 서도 그림 이 같 습 니 다.
3.연결 단 추 를 만 들 수 있 는 지 전역 적 으로 판단 하 는 함 수 를 설정 합 니 다.
4.전역 을 옮 겨 다 니 며 연 결 된 단추 이미지 ID 를 EMPTY 로 설정 하고 단 추 를 빈 단추 로 설정 합 니 다.
5.이동 함 수 를 설정 하고 공백 단 추 를 상부 비 공백 단추 와 교환 하 는 함 수 를 설정 하여 공백 단 추 를 상부 로 이동 합 니 다.
6.업데이트 함 수 를 설정 하고 상단 으로 이동 하 는 빈 단 추 를 무 작위 로 그림 과 일치 시 켜 계속 사용 합 니 다.
7.교환 버튼 함수 설정;
8.게임 의 점 수 를 기록 하고 목표 성적 을 확정 하면 게임 을 이 길 수 있다.
9.진 도 를 설정 하고 게임 진행 시간 을 기록한다.
10.시간 기록 기(타이머)설정 하기;
11.게임 인터페이스의 기본 정 보 를 디자인 한다(개인의 취향 에 따라 디자인 하면 된다).
-게임 코드

---mybutton ,              
package supperzzle;

import javax.swing.Icon;
import javax.swing.JButton;

public class MyButton extends JButton{
  private final int Width = 30;//       
  private final int Height = 30;
  private int ID;//     ID-----ID              

  private int buttonPosX = 0;
  private int buttonPosY = 0;

  public MyButton(int id, Icon icon)//    
  {
    this.setIcon(icon);
    this.ID = id;
    this.setSize(Width, Height);//         
    this.setFocusable(true);//        
    this.setBorderPainted(false);//    
    this.setContentAreaFilled(false);//         
  }

  public int GetID()
  {
    return ID;
  }
  public void SetID(int id)
  {
    this.ID = id;
  }
}

//-----        ,        --GamePanel ---              (     ,,                ,  )
package supperzzle;

import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class GamePanel extends JPanel implements ActionListener{
  private final int row = 10;
  private final int col = 10;
  private final int lineCount = 3;//        
  private int grade = 0;//    
  private final int score = 10;//               

  public MyButton mybutton[] = new MyButton[row*col];//            

  private final int countImage = 7;
  private ImageIcon imageIcon[] = new ImageIcon[countImage];//      
  private final int EMPTY = -1;

  private Random random = new Random();

  private int posx = 0;
  private int posy = 0;//             
  private boolean IsSecond = false;


  public GamePanel()//         ----      ,       ,         
  {
    this.setLayout(new GridLayout(row,col,0,0));//            ---row col 
    for(int i = 0; i < countImage; i++)//       
    {
//     Image image = Toolkit.getDefaultToolkit().getImage("F:/Image/supperzzle/angrybird"+i+".png");
      Image image = Toolkit.getDefaultToolkit().getImage("F:/Image/LinkGame/pic"+i+".png");
      imageIcon[i] = new ImageIcon(image);//                
    }
    for(int i = 0; i < row; i++)
    {
      for(int j = 0; j < col; j++)
      {
        int index = random.nextInt(countImage);//                
        mybutton[i*col+j] = new MyButton(index,imageIcon[index]);//            
        mybutton[i*col+j].addActionListener(this);//        
        mybutton[i*col+j].setEnabled(false);//       
        this.add(mybutton[i*col+j]);//          
      }
    }
  }

  public boolean YesOrNoThreeLink(int x, int y)//                     id     
  {
    int linked = 1;
    //                
    for(int i = x-1; i >= 0; i--)
    {
      if(mybutton[i*col+y].GetID() == mybutton[x*col+y].GetID())
      {
        linked++;
      }
      else
      {
        break;
      }
    }
    for(int i = x+1; i < row; i++)//        
    {
      if(mybutton[i*col+y].GetID() == mybutton[x*col+y].GetID())
      {
        linked++;
      }
      else
      {
        break;
      }
    }
    if(linked >= lineCount)
    {
      return true;
    }
    //                   
    linked = 1;
    for(int i = y-1; i >= 0; i--)//      
    {
      if(mybutton[x*col+i].GetID() == mybutton[x*col+y].GetID())
      {
        linked++;
      }
      else
        break;
    }
    for(int i = y+1; i < col; i++)//      
    {
      if(mybutton[x*col+i].GetID() == mybutton[x*col+y].GetID())
      {
        linked++;
      }
      else
        break;
    }
    if(linked >= lineCount)//           
    {
      return true;
    }
    return false;
  }

  public void RemoveLink(int x, int y)//    ID          ID EMPTY,     
  {
    int linked1 = 0;
    int linked2 = 0;
    int tempxStart = x;
    int tempxEnd = x;//               ID   x  
    int tempyStart = y;
    int tempyEnd = y;//               ID   y  
    //          ---   
    for(int i = x-1; i >= 0; i--)//        
    {
      if(mybutton[i*col+y].GetID() == mybutton[x*col+y].GetID())
      {
        linked1++;
        tempxStart = i;
      }
      else
      {
        break;
      }
    }
    for(int i = x+1; i < row; i++)//        
    {
      if(mybutton[i*col+y].GetID() == mybutton[x*col+y].GetID())
      {
        linked1++;
        tempxEnd = i;
      }
      else
      {
        break;
      }
    }
    if(linked1 + 1 >= lineCount)
    {
      for(int i = tempxStart; i <= tempxEnd; i++)
      {
        mybutton[i*col+y].SetID(EMPTY);
      }
//     grade += linked*score;
      grade += linked1*score;
    }
    //         ---   
    for(int i = y-1; i >= 0; i--)//      
    {
      if(mybutton[x*col+i].GetID() == mybutton[x*col+y].GetID())
      {
        linked2++;
        tempyStart = i;
      }
      else
        break;
    }
    for(int i = y+1; i < col; i++)//      
    {
      if(mybutton[x*col+i].GetID() == mybutton[x*col+y].GetID())
      {
        linked2++;
        tempyEnd = i;
      }
      else
        break;
    }
    if(linked2+1 >= lineCount)//           
    {
      for(int i = tempyStart; i <= tempyEnd; i++)
      {
        mybutton[x*col+i].SetID(EMPTY);
      }
//     grade += score*linked;
      grade += score*linked2;
    }
    grade += score;
  }

  public int GetGrade()//    
  {
    return grade;
  }

  public void SetGrade(int n)
  {
    this.grade = n;
  }

  public void SwapElement(int x, int y)//    
  {
    if(x >= 0 && x < row && y >= 0 && y < col)
    {
      if(!IsSecond)//       
      {
        posx = x;
        posy = y;
        IsSecond = true;
        System.out.println("     :posx->"+posx+" posy->"+posy);
      }
      else//       
      {
        //            
        System.out.println(" 2   :x->"+x+" y->"+y);
        if(1 == Math.abs(posx - x) && posy == y
        || 1 == Math.abs(posy - y) && posx == x)//          
        {
          //   
          System.out.println("  ");
          int temp = mybutton[posx*col+posy].GetID();
          mybutton[posx*col+posy].SetID(mybutton[x*col+y].GetID()); 
          mybutton[x*col+y].SetID(temp);
//         showImageButton();
          mybutton[x*col+y].setIcon(imageIcon[temp]);
          mybutton[posx*col+posy].setIcon(imageIcon[mybutton[posx*col+posy].GetID()]);
          //   
          if(YesOrNoThreeLink(x,y) || YesOrNoThreeLink(posx,posy))
          {
            if(YesOrNoThreeLink(x,y))
            {
              RemoveLink(x,y);
              GameFrame.texteara.setText(Integer.toString(GetGrade()));
            }
            if(YesOrNoThreeLink(posx,posy))
            {
              RemoveLink(posx,posy);
              GameFrame.texteara.setText(Integer.toString(GetGrade()));
            }
            //     ,             
            DownButton();
            //  
            UpDateButton();
            showImageButton();
            GameFrame.texteara.setText(Integer.toString(GetGrade()));
            while(GlobalSearch(1))//    
            {
              GlobalSearch(0);//  
              DownButton();
              UpDateButton();
              showImageButton();
              GameFrame.texteara.setText(Integer.toString(GetGrade()));
            }
          }
          else
          {
            //            
            temp = mybutton[posx*col+posy].GetID();
            mybutton[posx*col+posy].SetID(mybutton[x*col+y].GetID()); 
            mybutton[x*col+y].SetID(temp);
//           showImageButton();
            mybutton[x*col+y].setIcon(imageIcon[temp]);
            mybutton[posx*col+posy].setIcon(imageIcon[mybutton[posx*col+posy].GetID()]);
          }
        }
        IsSecond = false;
      }
    }
  }

  public void DownButton()//             ,             
  {
    for(int i = row-1; i > 0; i--)// --       
    {
      for(int j = 0; j < col; j++)// ---      
      {
        if(mybutton[i*col+j].GetID() == EMPTY)//           ID   
        {
          //       EMPTY   
          for(int k = i-1; k >= 0; k--)
          {
            if(mybutton[k*col+j].GetID() != EMPTY)
            {
              int id = mybutton[i*col+j].GetID();
              mybutton[i*col+j].SetID(mybutton[k*col+j].GetID());
              mybutton[k*col+j].SetID(id);
              break;
            }
          }
        }
      }
    }
  }

  public boolean GlobalSearch(int flag)//    
  {
    if(flag == 1)//----------                    
    {
      for(int i = 0; i < row; i++)
      {
        for(int j = 0; j < col; j++)
        {
          if(YesOrNoThreeLink(i,j))
          {
            return true;
          }
        }
      }
    }
    else if(flag == 0)//-------          EMPTY
    {
      for(int i = 0; i < row; i++)
      {
        for(int j = 0; j < col; j++)
        {
          RemoveLink(i,j);
        }
      }
      return true;
    }

    return false;
  }

  public void showImageButton()//               
  {
    for(int i = 0; i < row; i++)
    {
      for(int j = 0; j < col; j++)
      {
        mybutton[i*col+j].setIcon(imageIcon[mybutton[i*col+j].GetID()]);
      }
    }
  }

  public void UpDateButton()//         id----- EMPTY         ID
  {
    for(int i = 0; i < row; i++)
    {
      for(int j = 0; j < col; j++)
      {
        if(mybutton[i*col+j].GetID() == EMPTY)
        {
          int index = random.nextInt(countImage);
          mybutton[i*col+j].SetID(index);
        }
      }
    }
  }

  public int GetRow()
  {
    return row;
  }
  public int GetCol()
  {
    return col;
  }

  public void actionPerformed(ActionEvent e)//    
  {
    for(int i = 0; i < row; i++)
    {
      for(int j = 0; j < col; j++)
      {
        if(e.getSource() == mybutton[i*col+j])//      
        {
          SwapElement(i,j);
          GameFrame.texteara.setText(Integer.toString(GetGrade()));
          break;
        }
      }
    }
    if(grade > 8000 && GameFrame.timer.isRunning())
    {
      JOptionPane.showConfirmDialog(null, "     ", "Win", JOptionPane.CLOSED_OPTION);
      for(int i = 0; i < row; i++)
      {
        for(int j = 0; j < col; j++)
        {
          mybutton[i*col+j].setEnabled(false);
          GameFrame.buttonstart.setEnabled(true);
          GameFrame.timer.stop();
        }
      }
    }
  }

}

//                ,       --GameFrame ,           
package supperzzle;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.Timer;

public class GameFrame extends JFrame implements ActionListener{
  private JPanel paneone = new JPanel();
  public static JButton buttonstart = new JButton("    ");
  private JButton buttonend = new JButton("    ");
  private JLabel labelGrade = new JLabel("    ");
  private JLabel labelTime = new JLabel("    ");
  public static JTextField texteara = new JTextField(10);//       
  GamePanel gamepanel = new GamePanel();
  private int gamerow = gamepanel.GetRow();
  private int gamecol = gamepanel.GetCol();
  private JProgressBar progressbar = new JProgressBar();//       
  public static Timer timer;//         


  public GameFrame()
  {
    Container con = this.getContentPane();
    con.setLayout(new BorderLayout());
    paneone.setLayout(new FlowLayout());
    paneone.add(buttonstart);//      
    paneone.add(labelGrade);//       
    paneone.add(texteara);//     
    paneone.add(labelTime);//       
    paneone.add(progressbar);//       
    paneone.add(buttonend);//      
    con.add(paneone,BorderLayout.NORTH);
    con.add(gamepanel,BorderLayout.CENTER);
    this.setBounds(300, 0, 600, 700);
    this.setTitle("     ");
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//      

    buttonstart.addActionListener(this);
    buttonend.addActionListener(this);

  }

  public void actionPerformed(ActionEvent e)
  {
    if(e.getSource() == buttonstart)//      
    {
      gamepanel.SetGrade(0);//      
      buttonstart.setEnabled(false);
      progressbar.setMaximum(100);//            
      progressbar.setMinimum(0);
      progressbar.setStringPainted(true);
      timer = new Timer(800,new TimeListener());
      timer.start();
      for(int i = 0; i < gamerow; i++)
      {
        for(int j = 0; j < gamecol; j++)
        {
          gamepanel.mybutton[i*gamecol+j].setEnabled(true);
        }
      }
      initGame();
      texteara.setText(Integer.toString(gamepanel.GetGrade()));
    }
    if(e.getSource() == buttonend)
    {
      System.exit(1);
    }
  }

  public void initGame()
  {
    while(gamepanel.GlobalSearch(1))
    {
      gamepanel.GlobalSearch(0);
      gamepanel.DownButton();
      gamepanel.UpDateButton();
      gamepanel.showImageButton();
    }
  }

  class TimeListener implements ActionListener//               
  {
    int times = 0;
    public void actionPerformed(ActionEvent e)
    {
      progressbar.setValue(times++);
      if(times > 100)
      {
        timer.stop();
        for(int i = 0; i < gamerow; i++)
        {
          for(int j = 0; j < gamecol; j++)
          {
            gamepanel.mybutton[i*gamecol+j].setEnabled(false);
          }
        }
        buttonstart.setEnabled(true);
      }
    }
  }

  public static void main(String[] args) {
    GameFrame gameframe = new GameFrame();
  }

}
-실행 결과
이것 은 실행 후의 게임 시작 화면 입 니 다:

이것 은 시작 후의 화면 을 클릭 하 는 것 입 니 다.그러면 당신 은 당신 의 작은 게임 을 시작 할 수 있 습 니 다!

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기