在这代码哪里加上异常处理合适
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();
}
}
我想加一个异常处理。。。
页:
[1]