2048

3 篇文章 0 订阅
package com.tedu.Game2048;
	 
	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);//组件的x坐标,y坐标,组件的宽,组件的高
	        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));
//	              设置背景色(String 字体,int 风格 ,int 字号);
	                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);// 四舍五入 0<<1
	        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);//返回一个小于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();
	    }
	 
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值