• 拼图游戏


    package cn.hncu.gui.swing;

    import java.awt.Dialog;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;

    public class LowLow extends JFrame implements ActionListener, MouseListener {
    String pic1 = "pictures\fff-";//被分割的小图的路径和名字
    String pic2 = "pictures\lll";//完整图的路径和名字
    int MouseCount = 0;//玩家的移动次数
    int number =200;//系统之前的移动次数,一定程度上可以控制图片乱序程度
    String DaAn = null;
    int brun = 15;
    MyJButton[] b = new MyJButton[16];
    MessageDialog dlg = new MessageDialog(this);
    Icon[] image = new Icon[16];
    int VisDong = -1;

    public LowLow(String str){
    super(str);
    setBounds(600,200,400,400);
    setResizable(false);
    getContentPane().setLayout(new GridLayout(4, 4));
    int[] Arr = Arr();

    for(int i =0 ;i<16;i++){
    image[i] = new ImageIcon(pic1+i+".png");
    }
    for(int i=0;i<16;i++){
    b[i]=new MyJButton(image[i],i);
    b[i].setSize(100, 100);
    getContentPane().add(b[i]);
    b[i].addActionListener(this);
    b[i].addMouseListener(this);
    }
    run();


    setVisible(true);
    }

    public void Rrun(int i){
    MyJButton bb = new MyJButton();
    bb.setIcon(b[brun].getIcon());bb.setZhi(b[brun].getZhi());
    b[brun].setIcon(b[brun+i].getIcon());b[brun].setZhi(b[brun+i].getZhi());
    b[brun+i].setIcon(bb.getIcon());b[brun+i].setZhi(bb.getZhi());
    brun+=i;
    }
    private void run() {
    int[] Arr = Arr();
    for(int i =0;i<number;i++){
    if(Arr[i]==-4&&brun-4>=0){//上
    Rrun(Arr[i]);
    DaAn = "下"+DaAn;
    }
    if(Arr[i]==4&&brun+4<=15){//下
    Rrun(Arr[i]);
    DaAn = "上"+DaAn;
    }
    if(Arr[i]==-1&&brun%4!=0){//左
    Rrun(Arr[i]);
    DaAn = "右"+DaAn;
    }
    if(Arr[i]==1&&(brun+1)%4!=0){//右
    Rrun(Arr[i]);
    DaAn = "左"+DaAn;
    }
    }
    System.out.println("必胜:"+DaAn);
    }

    public static void main (String[] args){
    new LowLow("低级拼图");

    }
    //产生随机数组
    public int[] Arr(){
    int[] t = {-1,1,-4,4};
    int[] a = new int[number];
    for(int i=0;i<number;i++){
    int temp = (int) (Math.random()*10)%4;
    a[i] = t[temp];
    }
    return a;
    }
    //判断是否移动
    public boolean Mo(int i){
    VisDong = -1;
    for(int j=0;j<16;j++){
    if(b[j].p==15){
    VisDong=j;
    break;
    }
    }
    if(i+1==VisDong||i-1==VisDong||i+4==VisDong||i-4==VisDong){
    return true;
    }
    return false;
    }

    //判断是否结束
    public boolean gameOver(){
    for(int i =0;i<16;i++){
    if(b[i].p!=i)return false;
    }
    return true;
    }

    class MyJButton extends JButton{
    private int p;
    private Icon image;
    public MyJButton(){

    }
    public MyJButton(Icon image,int p){
    super(image);
    this.p = p;
    }
    public int getZhi(){
    return p;
    }
    public void setZhi(int p){
    this.p=p;
    }
    }
    @Override
    public void actionPerformed(ActionEvent e) {
    MouseCount++;
    for(int i=0;i<16;i++){
    if(e.getSource()==b[i]&&Mo(i)){
    MyJButton bb = new MyJButton();
    bb.setIcon(b[i].getIcon());bb.setZhi(b[i].getZhi());
    b[i].setIcon(b[VisDong].getIcon());b[i].setZhi(b[VisDong].getZhi());
    b[VisDong].setIcon(bb.getIcon());b[VisDong].setZhi(bb.getZhi());
    }
    }
    if(gameOver()){
    JOptionPane.showMessageDialog(this, "恭喜您赢了!! 移动次数:"+MouseCount);
    System.out.println("恭喜您赢了!!");
    System.out.println("移动次数:"+MouseCount);
    }
    }

    @Override
    public void mouseClicked(MouseEvent e) {
    }

    @Override
    public void mousePressed(MouseEvent e) {
    for(int i=0;i<16;i++){
    if(e.getSource()==b[i]&&b[i].p==15){
    dlg.show("");
    }
    }
    }
    public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub

    }

    @Override
    public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub

    }
    //自定义的对话框类
    class MessageDialog extends JDialog{
    private JFrame jframe;
    private JLabel label;
    public MessageDialog(JFrame jframe){
    super(jframe,"原图",true);
    setBounds(150, 200, 400, 400);
    setDefaultCloseOperation(HIDE_ON_CLOSE);
    setResizable(false);
    label = new JLabel(new ImageIcon(pic2+".png"));
    getContentPane().add(label);
    }
    public void show(String str){
    label.setText(str);
    setVisible(true);
    }
    }
    }

  • 相关阅读:
    highcharts延迟加载及刷新数据
    canvas实现固定元素背景雪花效果
    jquery自定义分页插件(带回调函数)
    sqlserver error 40解决方案
    canvas实现刮图效果
    canvas转换图像格式及尺寸
    CentOS 7上安装.Net Core运行环境
    centos环境下docker安装redis并挂载外部配置和数据
    Linux mv命令
    .NetCore 3.x Signalr JavaScript客户端使用
  • 原文地址:https://www.cnblogs.com/1314wamm/p/5603703.html
Copyright © 2020-2023  润新知