您的位置:首页 > 编程语言 > Java开发

JAVA 16方格排序游戏

2016-12-24 23:26 716 查看
有4*4的方格 其中有1-15个数  不重复   有一个空白格

每次点其中一个格子 如果该格子与空白格相连 则这两个交换

当1-15个数在这些格子中顺序或逆序显示 则成功

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import org.ietf.jgss.GSSManager;

import java.io.*;
import java.text.BreakIterator;
import java.util.*;
import java.util.logging.Handler;

public class Game extends JFrame{

JPanel mainPanel=new JPanel();
JButton button[][]=new JButton[4][4];
int data[][]=new int[4][4];
ArrayList<String> num=new ArrayList<String>();

public Game(){
super("16方格排序游戏");
Container c=this.getContentPane();
mainPanel.setLayout(new GridLayout(4, 4, 3, 3));
c.add(mainPanel);
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
button[i][j]=new JButton();
mainPanel.add(button[i][j]);
button[i][j].addActionListener(new Handler());
data[i][j]=0;
}
}
InitNum();
}

void InitNum(){
num.clear();
for(int i=0;i<16;i++){
num.add(String.valueOf(i));
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
Random r=new Random();
int index=r.nextInt(num.size());
String string=num.get(index);
if(string.equals("0")){
button[i][j].setText("");
data[i][j]=0;
}else{
button[i][j].setText(string);
data[i][j]=Integer.parseInt(string);
}
num.remove(index);
}
}
}

class Handler implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

if(e.getActionCommand().length()==0)
return;
int n=Integer.parseInt(e.getActionCommand());
int locationx = 0,locationy = 0;
int location = 0;
int aim=-1;//记录空白按钮位置
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(data[i][j]==n){
locationx=i;
locationy=j;
location=i*4+j;
}
}
}
int cand[]={location-1,location+1,location-4,location+4};
for(int i=0;i<4;i++){
if(check(cand[i])){
aim=cand[i];
}
}
if(aim>=0&&aim<16){
int temp=data[locationx][locationy];
button[aim/4][aim%4].setText(String.valueOf(temp));
data[aim/4][aim%4]=temp;
button[locationx][locationy].setText("");
data[locationx][locationy]=0;
}

if(isOver()){
int choice = JOptionPane.showConfirmDialog(null,JOptionPane.YES_NO_OPTION);
if(choice == JOptionPane.YES_OPTION)
InitNum();
else
System.exit(0);
}
}

boolean check(int index){
if(index>=0 && index<16 && data[(index)/4][(index)%4]==0)
return true;
return false;
}

boolean isOver(){
int i,j;
for(i=0;i<16;i++){
if(data[i/4][i%4]!=i)
break;
}
if(i==16)
return true;

for(i=0;i<15;i++){
if(data[i/4][i%4]!=i+1)
break;
}
if(i==15)
return true;

for(i=0,j=15;i<16;i++,j--){
if(data[j/4][j%4]!=i)
break;
}
if(i==16)
return true;

for(i=0,j=15;i<15;i++,j--){
if(data[j/4][j%4]!=i+1)
break;
}
if(i==15)
return true;

return false;
}

}

public static void main(String[] args){
Game game=new Game();
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setSize(300,300);
game.setVisible(true);
}

}


效果图:



  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: