java拼图游戏(待优化)

news/2024/7/8 2:37:00 标签: python, 开发语言

启动类

package com.yx.ui;

public class App {
//启动入口
	public static void main(String[] args) {
		//如果想要开启一个界面,就创建谁的对象
//	new DengJFrame();	
//	new ZCJFrame();
	new GameJFrame();
	}

}

游戏类

package com.yx.ui;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.ImageIcon;
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;

public class GameJFrame extends JFrame implements KeyListener{
		//创建二维数组
		int[][]date=new int[4][4];
		//记录空白方块的位置
		int x=0;
		int y=0;
		//游戏界面,所有跟游戏有关的代码
	public GameJFrame() {
		//初始化界面
		jmian();
		
		//初始化菜单
		caidan();
		
		//初始化数据
		daluan();
		
		//初始化图片
		tupian();
		
		//展示出来
		this.setVisible(true);
		
	}
	
	//初始化数据(打乱)
	private void daluan() {
		//需求:
		//把一个一维数组中的数据: 0~15 打乱顺序
		//然后再按照4个一组的方式添加到二维数组当中
		
		//定义一个一维数组
		int[]temp= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
		//打乱数组中的数据的顺序
		//遍历数组,得到每一个元素,拿着每一个元素跟随机索引上的数据进行交换
		Random r=new Random();
		for(int i=0;i<temp.length;i++) {
			//获取随机索引
		int x=r.nextInt(temp.length);
		//交换数据
		int temp1=temp[i];
		temp[i]=temp[x];
		temp[x]=temp1;
		}
		//给二维数组添加数据
		//遍历一维数组temp得到每个元素,将每个元素添加到二维数组中
		//i=0		0  0
		//i=1		0  1
		//i=2		0  2.....
		for(int i=0;i<temp.length;i++) {
			if(temp[i]==0) {
				x=i/4;
				y=i%4;
			}else {
				date[i/4][i%4]=temp[i];
			}
			
		}
	}
	//初始化图片
	
	private void tupian() {
		
	//清空图片
		this.getContentPane().removeAll();
		
		
	//先加载的图片在上方
		
		//把内循环执行4次
		for(int i=0;i<4;i++) {
			//一行添加4张图片
			for(int j=0;j<4;j++) {
				//获取图片序号
				int num=date[i][j];
				//创建JLabel对象(管理容器)
				JLabel jLabel=new JLabel(new ImageIcon("image/animal/animal3/"+num+".jpg"));
			//指定图片位置
				jLabel.setBounds(105*j+83, 105*i+134, 105, 105);
				//给图片添加边框
				jLabel.setBorder(new BevelBorder(1));
				//0让图片凸起来,1让图片凹下去
			//将管理容器添加到容器内
			this.getContentPane().add(jLabel);
			
			}
			
		}

		//添加背景
		
		JLabel ba=new JLabel(new ImageIcon("image/background.png"));
		ba.setBounds(40, 40, 508, 560);
		this.getContentPane().add(ba);
		
		//刷新界面
		this.getContentPane().repaint();
		
		
}
	private void caidan() {
		//创建菜单对象
		JMenuBar cdan=new JMenuBar();
		//创建菜单上面两个选项对象(功能  关于我们)
		JMenu gn=new JMenu("功能");
		JMenu gywm=new JMenu("关于我们");
		//创建选项下面的条目对象
		JMenuItem cxyx=new JMenuItem("重新游戏");
		JMenuItem cxdr=new JMenuItem("重新登入");
		JMenuItem gbyx=new JMenuItem("关闭游戏");
		
		JMenuItem gzh=new JMenuItem("公众号");
		//将每一个选项下面的条目添加到选项中
		gn.add(cxyx);
		gn.add(cxdr);
		gn.add(gbyx);
		
		gywm.add(gzh);
		//将菜单里面的两个选项添加到菜单当中
		cdan.add(gn);
		cdan.add(gywm);
		
		//给整个界面设置菜单
		this.setJMenuBar(cdan);
	}
	private void jmian() {
		//设置窗体的宽高
		this.setSize(603,680);
		//标题
		this.setTitle("拼图游戏");
		//置顶
		this.setAlwaysOnTop(true);
		//居中
		this.setLocationRelativeTo(null);
		//关闭模式
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//取消默认的居中放置
		this.setLayout(null);
		//添加键盘事件
		this.addKeyListener(this);
	}
	public static void main(String[] args) {
		
		
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void keyReleased(KeyEvent e) {
		//上下左右进行判断
		int code=e.getKeyCode();
		if(code==38) {
		System.out.println("向上移动");
		if(x==3) {
			//表示空白方块已经在最下方了,他的下面没有图片在能移动了
			return;
		}
		
		
		//把空白方块下方的数字往上移动
		//x,y 表示空白方块
		//x+1,y表示空白方块的数字
		date[x][y]=date[x+1][y];
		date[x+1][y]=0;
		x++;
		tupian();
		
		
		
		
		}else if(code==40) {
			System.out.println("向下移动");
			if(x==0) {
				return;
			}
			//把空白方块上方的数字往下移动
			date[x][y]=date[x-1][y];
			date[x-1][y]=0;
			x--;
			tupian();
		}else if(code==37) {
			//把空白方块右方的数字往下移动
			System.out.println("向左移动");
			if(y==3) {
				return;
			}
			date[x][y]=date[x][y+1];
			date[x][y+1]=0;
			y++;
			tupian();
		}else if(code==39) {
			//把空白方块左方的数字往下移动
			System.out.println("向右移动");
			if(y==0) {
				return;
			}
			date[x][y]=date[x][y-1];
			date[x][y-1]=0;
			y--;
			tupian();
		}
		
	}

}

展示

 


http://www.niftyadmin.cn/n/5194895.html

相关文章

JDK1.5 新特性【反射】

前言 今天复习一下反射&#xff0c;说是复习&#xff0c;基本上已经忘干净了&#xff0c;只知道用Spring、Mybatis、JavaFX 的时候加个注解&#xff0c;具体原理就不知道了。所以必须再深入学习一下。 1、设计一个框架&#xff1f; 设计一个框架需要什么技术&#xff1f; 反…

ESP32 Arduino实战协议篇-低功耗蓝牙 (BLE)

ESP32 不仅配备 Wi-Fi,还配备蓝牙和低功耗蓝牙 (BLE)。这篇文章简要介绍了 ESP32 的 BLE。首先,我们将探讨什么是 BLE 以及它的用途,然后我们将使用 Arduino IDE 查看 ESP32 的一些示例。为了简单介绍,我们将创建一个 ESP32 BLE 服务器,以及一个用于查找该服务器的 ESP32 …

SpringBoot中日志的使用log4j

SpringBoot中日志的使用log4j 项目中日志系统是必不可少的&#xff0c;目前比较流行的日志框架有 log4j、logback 等&#xff0c;这两个框架的作者是同一个 人&#xff0c;Logback 旨在作为流行的 log4j 项目的后续版本&#xff0c;从而恢复 log4j 离开的位置。 另外 slf4j(…

INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能

近年来&#xff0c;日志管理平台越来越流行。使用日志管理平台可以实时地、统一地、方便地管理和查看日志&#xff0c;挖掘日志数据价值&#xff0c;驱动运维、运营&#xff0c;提升服务管理效率。 方案架构 Beats 是轻量级采集器&#xff0c;包括 Filebeat、Metricbeat 等。E…

IC设计企业,如何安全、可控、高效的传输设计文档和研发数据?

近年来&#xff0c;半导体的应用领域不断拓展&#xff0c;在全球经济和社会发展中的重要性与日俱增&#xff0c;半导体芯片是数字经济的核心&#xff0c;承载着现代产业发展&#xff0c;具有举足轻重的价值。从半导体行业的角度&#xff0c;IC设计是关键的一环&#xff0c;我国…

Halcon (5):Halcon Solution Guide I basics 导论解析

文章目录 文章专栏前言文章目录翻译文档的说明 结论LOL比赛结局 文章专栏 Halcon开发 前言 今天开始看Halcon的官方文档。由于市面上的教学主要是以基础的语法&#xff0c;算子简单介绍为主。所以我还是得看官方的文本。别的不多说了。有道词英语词典&#xff0c;启动。 还有…

JAVA小游戏 “拼图”

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav…

针对CSP-J/S的每日一练:Day9

一、审题 题目描述 众所周知&#xff0c;光年是一种距离单位&#xff0c;1光年9460730472580800米。今年5月6日&#xff0c;天文学家在最新一期《天文学与天体物理学》杂志上称&#xff0c;他们发现了一个距离地球只有1000光年的黑洞&#xff0c;这是迄今为止在肉眼可见的恒星…