자바 대 터치 게임 실현
-게임 구현 기능:각각 두 장의 인접 한 이미지 버튼 을 눌 러 교환(중점 인접)하고,교 환 된 두 이미지 버튼 의 인접 한 수평 또는 수직 방향 에서 동일 한 이미지 가 정 해진 개 수 를 초과 하면(여 기 는 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();
}
}
-실행 결과이것 은 실행 후의 게임 시작 화면 입 니 다:
이것 은 시작 후의 화면 을 클릭 하 는 것 입 니 다.그러면 당신 은 당신 의 작은 게임 을 시작 할 수 있 습 니 다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.