Java版2048游戲實現代碼
Frame.java ~ 9KB
package Java_2048;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;
@SuppressWarnings("serial")
public class Frame extends JFrame{
/**
* @param args
*/
Container thisContainer;
JLabel label;
JPanel panel1,panel2,panel3;
// JPanel panel3 = new JPanel();
JButton numBtn[][]=new JButton[4][4];
JButton controlBtn[]=new JButton[4];
JButton playAgainButton,exitButton;
int grid[][]=new int[4][4],score=0;
Action_2048 act=new Action_2048();
public void Init(){
this.setBounds(280,100,500,450);
this.setTitle("Java版2048");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label=new JLabel("Score:");
label.setForeground(Color.red);
thisContainer=this.getContentPane();
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
thisContainer.add(panel1,BorderLayout.NORTH);
thisContainer.add(panel2,BorderLayout.CENTER);
thisContainer.add(panel3,BorderLayout.SOUTH);
panel1.setLayout(new FlowLayout());
panel1.add(label);
//對數組面板panel2布局
panel2.setLayout(new GridLayout(4,4));
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
numBtn[i][j]=new JButton();
grid[i][j]=0;
numBtn[i][j]=new JButton(String.valueOf(grid[i][j]));
numBtn[i][j].setFont(new java.awt.Font("Segoe UI Symbol",1, 25));
// 設置背景色
numBtn[i][j].setBackground(Color.CYAN);
// 設置按鈕不要邊框
// numBtn[i][j].setBorderPainted(false);
//設置凸起來的按鈕,很多其他的swing也可用此方法
numBtn[i][j].setBorder(BorderFactory.createRaisedBevelBorder());
// 設置凹起來的按鈕,很多其他的swing也可用此方法
// numBtn[i][j].setBorder(BorderFactory.createLoweredBevelBorder());
panel2.add(numBtn[i][j]);
}
}
int k=(int)Math.round(Math.random()*15);
int i=k/4;
int j=k%4;
grid[i][j]=2;
numBtn[i][j].setText(String.valueOf(grid[i][j]));
//對方向控制按鈕進行布局以及對"退出"、"再來一局"進行布局
panel3.setLayout(new FlowLayout());
controlBtn[0] = new JButton("↑");
controlBtn[1] = new JButton("↓");
controlBtn[2] = new JButton("←");
controlBtn[3] = new JButton("→");
for(i=0;i<4;i++){
controlBtn[i].addActionListener(act);
panel3.add(controlBtn[i]);
}
playAgainButton=new JButton("再來一局");
exitButton=new JButton("退出");
playAgainButton.addActionListener(act);
exitButton.addActionListener(act);
panel3.add(exitButton);
panel3.add(playAgainButton);
this.setVisible(true);
}
class Action_2048 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int f=0,TongGuanF=0;
//"↑"————controlBtn[0]
if(e.getSource()==controlBtn[0]){
int i=0,j=0,n,t[]={0,0,0,0};
int b[][]=new int[4][4];
for(i=0;i<4;i++)
{
n=0;
for(j=0;j<4;j++)
{
b[j][i]=grid[j][i];
if(grid[j][i]!=0)
{
t[n++]=grid[j][i];
}
}
for(j=0;j<4;j++)
{
grid[j][i]=t[j];
numBtn[j][i].setText(String.valueOf(grid[j][i]));
t[j]=0; //避免下一列受上一列的影響
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(grid[i][j]!=b[i][j])
{
f=1;
break;
}
}
if(f==1)
break;
}
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
if((grid[j][i]==grid[j+1][i])&&(grid[j][i]!=0))
{
f=1;
grid[j][i]=2*grid[j][i];
numBtn[j][i].setText(String.valueOf(grid[j][i]));
score+=grid[j][i];
for(n=j+1;n<3;n++)
{
grid[n][i]=grid[n+1][i];
numBtn[n][i].setText(String.valueOf(grid[n][i]));
}
grid[n][i]=0;
numBtn[n][i].setText(String.valueOf(grid[n][i]));
}
}
}
}
if(e.getSource()==controlBtn[1]){
int i=0,j=0,n,t[]={0,0,0,0};
int b[][]=new int[4][4];
for(i=0;i<4;i++)
{
n=0;
for(j=0;j<4;j++)
{
b[j][i]=grid[j][i];
if(grid[j][i]!=0)
{
t[n++]=grid[j][i];
}
}
for(j=3;j>=0;j--)
{
if(n>0)
{
grid[j][i]=t[n-1];
numBtn[j][i].setText(String.valueOf(grid[j][i]));
n--;
}else{
grid[j][i]=0; //避免下一列受上一列的影響
numBtn[j][i].setText(String.valueOf(grid[j][i]));
}
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(grid[i][j]!=b[i][j])
{
f=1;
break;
}
}
if(f==1)
break;
}
for(i=0;i<4;i++)
{
for(j=3;j>0;j--)
{
if((grid[j][i]==grid[j-1][i])&&(grid[j][i]!=0))
{
f=1;
grid[j][i]=2*grid[j][i];
numBtn[j][i].setText(String.valueOf(grid[j][i]));
score+=grid[j][i];
for(n=j-1;n>0;n--)
{
grid[n][i]=grid[n-1][i];
numBtn[n][i].setText(String.valueOf(grid[n][i]));
}
grid[n][i]=0;
numBtn[n][i].setText(String.valueOf(grid[n][i]));
}
}
}
}
if(e.getSource()==controlBtn[2]){
int i=0,j=0,n,t[]={0,0,0,0};
int b[][]=new int[4][4];
for(i=0;i<4;i++)
{
n=0;
for(j=0;j<4;j++)
{
b[i][j]=grid[i][j];
if(grid[i][j]!=0)
{
t[n++]=grid[i][j];
}
}
for(j=0;j<4;j++)
{
grid[i][j]=t[j];
numBtn[i][j].setText(String.valueOf(grid[i][j]));
t[j]=0; //避免下一行受上一行的影響
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(grid[i][j]!=b[i][j])
{
f=1;
break;
}
}
if(f==1)
break;
}
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
if((grid[i][j]==grid[i][j+1])&&(grid[i][j]!=0))
{
f=1;
grid[i][j]=grid[i][j]*2;
numBtn[i][j].setText(String.valueOf(grid[i][j]));
score+=grid[i][j];
for(n=j+1;n<3;n++)
{
grid[i][n]=grid[i][n+1];
numBtn[i][n].setText(String.valueOf(grid[i][n]));
}
grid[i][n]=0;
numBtn[i][n].setText(String.valueOf(grid[i][n]));
}
}
}
}
if(e.getSource()==controlBtn[3]){
int i=0,j=0,n,t[]={0,0,0,0};
int b[][]=new int[4][4];
for(i=0;i<4;i++)
{
n=0;
for(j=0;j<4;j++)
{
b[i][j]=grid[i][j];
if(grid[i][j]!=0)
{
t[n++]=grid[i][j];
}
}
for(j=3;j>=0;j--)
{
if(n>0)
{
grid[i][j]=t[n-1];
n--;
t[n]=0;
numBtn[i][j].setText(String.valueOf(grid[i][j]));
}else{
grid[i][j]=0;
numBtn[i][j].setText(String.valueOf(grid[i][j]));
}
//避免下一行受上一行的影響
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(grid[i][j]!=b[i][j])
{
f=1;
break;
}
}
if(f==1)
break;
}
for(i=0;i<4;i++)
{
for(j=3;j>0;j--)
{
if((grid[i][j]==grid[i][j-1])&&(grid[i][j]!=0))
{
f=1;
grid[i][j]=grid[i][j]*2;
numBtn[i][j].setText(String.valueOf(grid[i][j]));
score+=grid[i][j];
for(n=j-1;n>0;n--)
{
grid[i][n]=grid[i][n-1];
numBtn[i][n].setText(String.valueOf(grid[i][n]));
}
grid[i][n]=0;
numBtn[i][n].setText(String.valueOf(grid[i][n]));
}
}
}
}
if(e.getSource()==playAgainButton){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
grid[i][j]=0;
numBtn[i][j].setText(String.valueOf(grid[i][j]));
}
}
int k=(int)Math.round(Math.random()*15);
int i=k/4;
int j=k%4;
grid[i][j]=2;
numBtn[i][j].setText(String.valueOf(grid[i][j]));
}
if(e.getSource()==exitButton){
System.exit(0);
}
//產生新數2、4
if(f==1){
int r[]=new int[16];
int n=0,i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if((grid[i][j]==0))
{
r[n]=i*4+j;
n++;
}
}
}
Random rd=new Random();
int k=rd.nextInt(n);
i=r[k]/4;
j=r[k]%4;
if((i+j)%5!=0)
{
grid[i][j]=2;
}
else{
grid[i][j]=4;
}
numBtn[i][j].setText(String.valueOf(grid[i][j]));
if(score>5000){
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(grid[i][j]==2048)
TongGuanF=1;
}
}
}
if(TongGuanF==1)
label.setText("恭喜過關!");
else
label.setText("Score: "+String.valueOf(score)+"分");
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame f=new Frame();
f.Init();
}
}
本文由用戶 xs8044 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!