长师数科Java实训(拼图游戏)

2024-01-08 04:38:36

长师数科Java实训(拼图游戏)

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:长江师范学院数科专业大二下Java期末实训拼图游戏


提示:以下是本篇文章正文内容,下面案例可供参考

一、源码

public class game_jframe extends JFrame implements KeyListener,ActionListener{
	int[][] data=new int[3][3];
	int x,y;//表示空白图片的位置
	//定义表示胜利的数组
    private int[][] win = new int[][]{
		{0, 1, 2},
        {3, 4, 5},
        {6, 7, 8}
		
};
	JMenuItem j1=new JMenuItem("重新游戏");
	JMenuItem j2=new JMenuItem("结束游戏");
	JMenuItem j3=new JMenuItem("关于游戏");
	JMenuItem j4=new JMenuItem("按w可一键通关");
	public game_jframe() {
		chuangti();
		caidan();
		daluan();
		image();
	    this.addKeyListener(this);
		this.setVisible(true);//可视化
	}
	private int stepCount;   //统计步数
	
	
	//窗体搭建
	public void chuangti() {
		this.setTitle("拼图游戏");//创建标题
	
		this.setSize(1000,700);//设置窗体大小
		this.setAlwaysOnTop(true);//页面锁定置前
		this.setLocationRelativeTo(null);//将页面居中
		this.setDefaultCloseOperation(3);//设置关闭模式
		this.setLayout(null);//取消默认的排列方式
		
	}
	//菜单搭建
	public void caidan() {
		JMenuBar jmbar=new JMenuBar();
		
		// JMenu jm=new JMenu("菜单");

		j1.addActionListener(this);
		j2.addActionListener(this);
		j3.addActionListener(this);
		j4.addActionListener(this);
		
		// jm.add(j1);
		// jm.add(j2);
		// jm.add(j3);
		
		jmbar.add(j1);
		jmbar.add(j2);
		jmbar.add(j3);
		jmbar.add(j4);
		
		this.setJMenuBar(jmbar);
	}
	//加载图片
	public void image() {
		this.getContentPane().removeAll();//删除原来的图片
		//开始插入图片
		if (isVictory()) {//判断是否胜利
            JLabel winJLabel = new JLabel(new ImageIcon("images\\win.png"));
            winJLabel.setBounds(203, 283, 197, 73);
            this.getContentPane().add(winJLabel);
        }
		for(int i=0;i<3;i++) {
			for(int j=0;j<3;j++) {
				ImageIcon imag=new ImageIcon("images\\"+data[i][j]+".jpg");
				JLabel jl=new JLabel(imag);
				jl.setBounds(j*100+140,i*100+140,100,100);
				jl.setBorder(new BevelBorder(1));
				this.getContentPane().add(jl);
			}
		}
		
		//加载步数显示
        JLabel step = new JLabel("步数:" + stepCount);
        step.setBounds(50, 30, 150, 40);
        this.getContentPane().add(step);
		//插入背景图篇
		ImageIcon im=new ImageIcon("images\\back.jpg");
		ImageIcon im1=new ImageIcon("images\\小新.jpg");
		JLabel jl=new JLabel(im);
		JLabel jl1=new JLabel(im1);
		jl.setBounds(450,100,390,390);
		jl1.setBounds(-100,0,1200,700);
		this.getContentPane().add(jl);
		this.getContentPane().add(jl1);
		this.repaint();//刷新
	}
	public boolean isVictory() {//胜利判断
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[0].length; j++) {
                if (data[i][j] != win[i][j]) return false;
            }
        }
        return true;
    }
	//打乱图片
	public void daluan() {
		int[] t={0,1,2,3,4,5,6,7,8};
		Random r=new Random();//随机函数打断图片
		for(int i=0;i<9;i++) {
			int index=r.nextInt(9);
			int c=t[index];
			t[index]=t[i];
			t[i]=c;
		}
		for(int i=0;i<9;i++) {
			if(t[i]==0) {
				x=i/3;
				y=i%3;
			}
			data[i/3][i%3]=t[i];
		}
	}
 
 
	@Override
	public void keyTyped(KeyEvent e) {//接口方法
		
		
	}

 
	@Override
	public void keyPressed(KeyEvent e) {
		
	}
	@Override
	public void keyReleased(KeyEvent e) {
		
		int code=e.getKeyCode();//获得键盘
		System.out.println(code);
		if(code==40) {
			//下
			if(x==2) {
				return ;
			}
			int c;
			c=data[x][y];
			data[x][y]=data[x+1][y];
			data[x+1][y]=c;
			x++;
			stepCount++;
			image();
		}
		else if(code==39) {
			//右
			if(y==2) {
				return ;
			}
			int c=data[x][y];
			data[x][y]=data[x][y+1];
			data[x][y+1]=c;
			y++;
			stepCount++;
			image();
		}
		else if(code==38) {
			//上
			if(x==0) {
				return ;
			}
			int c=data[x][y];
			data[x][y]=data[x-1][y];
			data[x-1][y]=c;
			x--;
			stepCount++;
			image();//加载图片
		}
		else if(code==37) {
			//左
			if(y==0) {
				return ;
			}
			int c=data[x][y];
			data[x][y]=data[x][y-1];
			data[x][y-1]=c;
			y--;
			stepCount++;
			image();
		}else if (code == 65) {   //press A -> 查看高清大图
            //清空界面的所有图片
            this.getContentPane().removeAll();
            //重新加载一张完整的图片
            JLabel all = new JLabel(new ImageIcon("images\\back 2.jpg"));
            all.setBounds(-100,0,1200,700);
            this.getContentPane().add(all);


            //刷新界面
            this.getContentPane().repaint();
		}
		else if (code == 87) {   //press W -> 一键通关
            data = new int[][]{
                    {0, 1, 2},
                    {3, 4, 5},
                    {6, 7, 8}
            };
			image();
			}
		
		//后面你可以自己分支中再定义一些快捷键
	}
 
 
	@Override
	public void actionPerformed(ActionEvent e) {
		
		Object s=e.getSource();//获取点击事件
		if(s==j1) {
			//重新游戏
			System.out.println("重新游戏");
			stepCount=0;
			daluan();
			image();

		}
		else if(s==j2) {
			//结束游戏
			System.out.println("结束游戏");
			System.exit(0);
		}
		else if(s==j3) {
		//关于游戏
            //创建弹框对象
            JDialog jDialog = new JDialog();
            //创建JLabel对象
            JLabel jLabel = new JLabel("		 是一个由Java编译的拼图小游戏,按A健可查看高清大图,按w健可一键通关");
            jLabel.setBounds(0, 0, 480, 480);  //jLabel设置大小
            jDialog.getContentPane().add(jLabel);       //添加jLabel
            jDialog.setSize(550, 200);       //弹框设置大小
            jDialog.setAlwaysOnTop(true);              //弹框置顶
            jDialog.setLocationRelativeTo(null);    //弹框居中
            jDialog.setModal(true);         //不关闭弹框无法进行游戏
            jDialog.setVisible(true);       //显示弹框
		}
		// else if(s==j4) {

		// }
	}
	}

二、使用步骤

1.引入库

代码如下(示例):

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
 
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
// import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.BevelBorder;

2.主函数

public class test{
	public static void main(String[] args) {
		new  game_jframe();
	}
} 

3.源码

上面的源码

三.效果

效果

总结

提示:这里对文章进行总结:

可以简单的用Java实训一个拼图游戏,用键盘控制,可重新开始,一键通关

长师数科Java实训(拼图游戏)

文章来源:https://blog.csdn.net/qinlin_K/article/details/135418433
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。