giegie666 发表于 2021-12-23 14:49:51

在这代码哪里加上异常处理合适

package game;

import game.Frame;

public class Maingame {
        public static void main(String[] args) {
            Frame game2048= new Frame();
               
        }
}



package game;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
public class Frame extends JFrame//调用窗口类的方法就要引用Jframe。

{
          private static int[][] block_Data = new int;
          //定义newData数组用于暂存处理中的数组
                  private static int[][] newData=new int;
          //定义newData2数组用于暂存移动前中的数组
                  private static int[][] newData2=new int;
          private static JLabel[][] block_Lable = new JLabel;        //与数组对应的标签
        //构造函数
        public Frame()
        {
                //初始化窗体大小位置等
                initBasic();
                //初始化空块
                initEmptyBlocks();
                //初始化两个初始值到block_Data数组中,并设置block_Label中对应块的图像
                initData();
                //鼠标监听,设置窗口可关闭
                this.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e){
                                System.exit(0);
                        }
                });
                //键盘监听,获取方向键执行操作
                this.addKeyListener(new KeyAdapter(){
                public void keyPressed(KeyEvent event)
                {    int k =event.getKeyCode();
                //暂时先存好移动前的数组
                   for(int m=0; m<4; m++)
                      {for(int n=0; n<4; n++)
                             {newData2=block_Data;}
                      }
                        switch(k)
                        {
                        case 37:left(); break;
                        case 38:up();   break;
                        case 39:right();break;
                        case 40:down(); break;
                        }
                        yesornoMove();
               
                        boolean havemove =yesornoMove();
                        if(havemove==true)
                        {Frame.createOneRandomNumber();}
                        upDateUI(block_Data);
                        gamestate();
                }
        });
                //可视化
                setVisible(true);
        }
        private void initBasic()
        {
                this.setTitle("2048小游戏");       
                this.setSize(750, 800);               
                this.setLocation(700, 100);       
                this.setLayout(null);               
                this.setDefaultCloseOperation(EXIT_ON_CLOSE);        //设置窗体x为默认关闭窗口
        }       
      
        private void initEmptyBlocks()
        {
               
            
                for(int i=0; i<4; i++)
                {
                        for(int j=0; j<4; j++)
                        {
                               
                                block_Lable = new JLabel(" ",JLabel.CENTER);
                                Font font = new Font("Verdana",Font.BOLD , 55);      
                                block_Lable.setFont(font);      
                                block_Lable.setForeground(Color.darkGray);       //设置文字的颜色
                                block_Lable.setBounds(10+i*180, 10+j*180, 160, 160);
                                block_Lable.setOpaque(true);
                                block_Lable.setBackground(Color.lightGray);
                                this.add(block_Lable);
                        }
                }
        }
            
        //游戏开始时需调用两次生成随机块的方法
        public static void initData()
                {
                        for(int n=0; n<2; n++)
                        {
                                createOneRandomNumber();
                        }
                }
               
        public static void createOneRandomNumber()
                {
                        int i,j;
                        Random random = new Random();
                        //0到4之间的随机int值,包含0而不包含4,直到二维数组中有个元素为0
                        i = random.nextInt(4);
                        j = random.nextInt(4);
                        while(true)
                        {
                                if(block_Data == 0)
                                {
                                        break;
                                }
                                else
                                {
                                        i = random.nextInt(4);
                                        j = random.nextInt(4);
                                }
                        }
                        block_Data=2;
                        if(block_Data!=0)
                        block_Lable.setText(block_Data+"");
                        else
                        block_Lable.setText(" ");
                }
        public static void upDateUI(int[][] block_Data)
                {
               
                        for(int i=0; i<4; i++)
                        {
                                for(int j=0; j<4; j++)
                                {
                                        if(block_Data!=0)
                                                block_Lable.setText(block_Data+"");
                                                else
                                                block_Lable.setText(" ");
                                }
                        }
                }
        public static void reSetBlocks()
                {
                        for(int i=0; i<4; i++)
                        {
                                for(int j=0; j<4; j++)
                                {
                                        block_Data = 0;
                                        if(block_Data!=0)
                                                block_Lable.setText(block_Data+"");
                                                else
                                                block_Lable.setText(" ");
                                }
                        }
                }
                        public void gamestate()
                        {
                                //胜利
                                for(int i=0; i<4; i++)
                                {
                                        for(int j=0; j<4; j++)
                                        {
                                                if(block_Data == 1024)
                                                {
                                                       
                                                        int result = JOptionPane.showConfirmDialog(null, "你赢啦,再来一局?", "游戏结果",JOptionPane.YES_NO_OPTION);
                                                        //选择YES重新开始游戏
                                                        if(result == 0)
                                                        {
                                                                Frame.reSetBlocks();
                                                                Frame.initData();
                                                        }
                                                        //选择NO则退出游戏程序
                                                        else
                                                        {
                                                                System.exit(0);
                                                        }
                                                       
                                                }
                                        }
                                }
                                //失败
                                if(block_DataIsFull() && !canMove())
                                {
                                        int result = JOptionPane.showConfirmDialog(null, "竟然输了,再来一局?", "游戏结果", JOptionPane.YES_NO_OPTION);
                                        if(result == 0)
                                        {
                                                Frame.reSetBlocks();
                                                Frame.initData();
                                        }
                                        else
                                        {System.exit(0);}
                                        //return;
                                }
                        }
                        //空格是否以满函数
                        private boolean block_DataIsFull()
                        {
                                for(int i=0; i<4; i++)
                                {
                                        for(int j=0; j<4; j++)
                                        {
                                                if(block_Data == 0)
                                                {
                                                        return false;
                                                }
                                        }
                                }
                                return true;
                        }
                        //是否可移动函数(格子已满情况下)
                        private boolean canMove()
                        {
                                for(int i=0; i<3; i++)
                                {
                                        for(int j=0; j<3; j++)
                                        {
                                                if(block_Data==block_Data||block_Data==block_Data)
                                                        return true;
                                        }
                                }
                                for(int i=0; i<3; i++)
                                {
                                        //第4行左右相邻是否有相等的
                                        if(block_Data==block_Data)
                                                return true;
                                        if(block_Data==block_Data)
                                                return true;
                                }
                                //以上情况均没有,即不可移动
                                return false;
                        }
       
                       
                        private static boolean yesornoMove()
                        {
                                for(int i=0; i<4; i++)
                              {
                                        for(int j=0; j<4; j++)
                                     {if(block_Data!=newData2)
                                        return true;
                                     }
                              }
                                return false;
                        }
                       
                        publicstatic void reverse()
                        {
                                for(int i=0; i<=3; i++)
                                        for(int j=0; j<=3; j++)
                          newData=block_Data;
                               
                                for(int i=0; i<4; i++)
                                        for(int j=0; j<4; j++)
                                                block_Data=newData;       
                        }
                       
                        public static void transpose()
                        {
                                for(int i=0; i<4; i++)
                                        for(int j=0; j<4; j++)
                                                newData=block_Data;
                                for(int i=0; i<4; i++)
                                        for(int j=0; j<4; j++)
                                                block_Data=newData;       
                        }
                        //移动覆盖函数(有0就移动并覆盖**默认左移**)
                        public static void coverup()
                        {
                        for(int k=0;k<=2;k++)
                                for(int i=0; i<4; i++)
                                        for(int j=0; j<3; j++)
                                                if(block_Data==0)
                                                {
                                                        block_Data=block_Data;
                                                        block_Data=0;
                                                }
                               
                        }
                        //合并函数,每行有相同的就加起来**默认左移**
                        //放到靠左的元素里,靠右一个位置置0,默认coverup函数已执行
                        public static void merge()
                        {
                                for(int i=0; i<4; i++)
                                        for(int j=0; j<3; j++)
                                        if(block_Data==block_Data&&block_Data!=0)
                                                {
                                                block_Data=block_Data*2;
                                                block_Data=0;
                                                }
                        }
                        public static void up()
                        {
                                transpose();
                                coverup();
                                merge();
                                coverup();
                                transpose();
                        }
                public static void down()
                        {
                   transpose();
                   reverse();
                   coverup();
                       merge();
                       coverup();
                       reverse();
                               transpose();
                        }
                public static void left()
                        {
                        coverup();
                        merge();
                        coverup();
                        }
                public static void right()
                        {
                        reverse();
                        coverup();
                        merge();
                        coverup();
                        reverse();
                        }
}

giegie666 发表于 2021-12-23 15:42:20

我想加一个异常处理。。。
页: [1]
查看完整版本: 在这代码哪里加上异常处理合适