方格游戏java_Java_Class 16方格拼图游戏

import java.awt.*;import java.awt.event.*;importjava.util.Random;import javax.swing.*;importjavax.swing.border.LineBorder;public class GameFrame extendsJFrame {/*** 菜单栏*/JMenuBar menuBar;/*** "菜单"选项*/JMenu menu;/*** "帮助"选项*/JMenu help;/*** "重新开始"选项*/JMenuItem mItem1;/*** "退出"选项*/JMenuItem mItem2;/*** "关于"选项*/JMenuItem hItem;/*** 游戏面板*/JPanel panel;/*** 游戏中的按钮*/JButton buttons[]= new JButton[16];/*** 按钮监听器*/GameListener listener;/*** 背景颜色*/Color backgruond=Color.DARK_GRAY;/*** 前景颜色*/Color foreground=Color.WHITE;/*** 游戏中的字体*/Font font= new Font("Consolas", Font.PLAIN, 14);publicGameFrame() {//TODO Auto-generated constructor stub

setSize(500, 520);

setLocationRelativeTo(null);

setResizable(false);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

menuBar= newJMenuBar();

menu= new JMenu("Menu");

menu.setForeground(foreground);

menu.setFont(font);

mItem1= new JMenuItem("Restart");

mItem1.setFont(font);

mItem1.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent e) {

init();

}

});

mItem2= new JMenuItem("Exit");

mItem2.setFont(font);

mItem2.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent e) {

System.exit(0);

}

});

menu.add(mItem1);

menu.add(mItem2);

help= new JMenu("Help");

help.setForeground(foreground);

help.setFont(font);

hItem= new JMenuItem("About");

hItem.setFont(font);

hItem.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null, "Maked by : 胡靖");

}

});

help.add(hItem);

menuBar.add(menu);

menuBar.add(help);

menuBar.setBackground(backgruond);

setJMenuBar(menuBar);

panel= newJPanel();

panel.setLayout(new GridLayout(4, 4));

add(panel);

setTitle("Loading...");

listener= newGameListener(buttons);for (int i = 0; i < 16; i++) {if (i == 15)

buttons[i]= new JButton(" ");elsebuttons[i]= new JButton("" + (i + 1));

buttons[i].setBackground(backgruond);

buttons[i].setForeground(foreground);

buttons[i].setBorder(newLineBorder(Color.GRAY));

buttons[i].setFont(new Font("Consolas", Font.PLAIN, 40));

buttons[i].addActionListener(listener);

panel.add(buttons[i]);

}

gameOn();

validate();

}/*** 初始话第一次游戏,并有动态初始化效果*/

public voidgameOn() {for (int i = 0; i < 16; i++)

buttons[i].setEnabled(false);

menu.setEnabled(false);

help.setEnabled(false);

Random random= newRandom();int d[] = { -4, 1, -1, 4};int p = 15;for (int i = 0; i < 1000; i++) { //打乱的次数

int tmp = random.nextInt(4);int next = p +d[tmp];if (p % 4 == 0 && next % 4 == 3 || p % 4 == 3 && next % 4 == 0)continue;if (next >= 0 && next < 16) {

String s=buttons[p].getText();

buttons[p].setText(buttons[next].getText());

buttons[next].setText(s);

p=next;try{

Thread.sleep(1);

}catch(InterruptedException e) {

e.printStackTrace();

}

}

}

judge();for (int i = 0; i < 16; i++)

buttons[i].setEnabled(true);

menu.setEnabled(true);

help.setEnabled(true);

}/*** 重新开始游戏的初始化,与第一次游戏使用的初始化方式不同*/

public voidinit() {for (int i = 0; i < 16; i++)

buttons[i].setEnabled(false);

Random random= newRandom();boolean flag[] = new boolean[16];for (int i = 0; i < 16; i++) {int tmp = random.nextInt(16);while(flag[tmp])

tmp= random.nextInt(16);if (tmp == 15)

buttons[i].setText(" ");elsebuttons[i].setText("" + (tmp + 1));

flag[tmp]= true;

}

judge();for (int i = 0; i < 16; i++)

buttons[i].setEnabled(true);

}/*** 判断生成的序列是否可行,如果不可行交换任意相邻两个按钮的文本即可*/

public voidjudge() {int sum = 0;int a[] = new int[16];for (int i = 0; i < 16; i++) {

String s=buttons[i].getText();if (s.equals(" "))

a[i]= 0;elsea[i]=Integer.parseInt(s);

}for (int i = 0; i < 15; i++) {if (a[i] == 0) {

sum+= i % 4;

sum+= i / 4;continue;

}for (int j = i + 1; j < 16; j++)if (a[i] >a[j])

sum++;

}if (sum % 2 == 0) {

String s= buttons[0].getText();

buttons[0].setText(buttons[1].getText());

buttons[1].setText(s);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值