Java实战---拼图游戏

这篇具有很好参考价值的文章主要介绍了Java实战---拼图游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1:拼图游戏的介绍

2:实战演示

(1)整体的窗体搭建

(2)菜单的搭建

(3)加载图片

(4)图片顺序的打乱

(5)实现图片的移动以及可以创建一些快捷键

(6)点击事件的实现

3:拼图游戏完整代码的演示


1:拼图游戏的介绍

Java实战拼图游戏,我大致分为六个部分。

(1)整体的窗体搭建

(2)菜单的搭建

(3)加载图片

(4)图片顺序的打乱

(5)实现图片的移动以及可以创建一些快捷键

(6)点击事件的实现

2:实战演示

(1)整体的窗体搭建

整体的窗体搭建我们需要用到Java中的JFrame类,具体的用法我在代码中标了注释

public void chuangti() {
		this.setTitle("拼图游戏");//创建标题
		this.setSize(700,650);//设置窗体大小
		this.setAlwaysOnTop(true);//页面锁定置前
		this.setLocationRelativeTo(null);//将页面居中
		this.setDefaultCloseOperation(3);//设置关闭模式
		this.setLayout(null);//取消默认的排列方式,因为后面自己想要设置一些排列方式
		
	}

(2)菜单的搭建

菜单就是一些点击功能的意思,如“重新游戏”,“结束游戏”之类的。菜单的搭建细分的话要用到三个类,从大到小是JMenuBar,JMenu,JMenuItem。这里我们只用到了前面两个类,代码如下:

public void caidan() {
		JMenuBar jmbar=new JMenuBar();
		
		JMenu jm=new JMenu("功能");
		
		JMenuItem j1=new JMenuItem("重新游戏");
	    JMenuItem j2=new JMenuItem("结束游戏");//后面如果要是遇到鼠标的点击事件,就放到
                                                //  成员变 量位置,供全局使用
                                                        
		
		j1.addActionListener(this);
		j2.addActionListener(this);
		
		jm.add(j1);
		jm.add(j2);
		
		jmbar.add(jm);
		
		this.setJMenuBar(jmbar);
	}

(3)加载图片

图片的加载,首先要知道自己的图片所放的位置还有给图片取的名字,我是按照1,2,3数字来取的,后面放到数组中好实现。接下来我们看下代码:

public void image() {
		this.getContentPane().removeAll();;//删除原来的图片
		//开始插入图片
		for(int i=0;i<4;i++) {
			for(int j=0;j<4;j++) {
				ImageIcon imag=new ImageIcon("D:\\java\\eclipse\\eclipseinstall\\installers bags\\game\\animal\\animal5\\"+data[i][j]+".jpg");
				JLabel jl=new JLabel(imag);
				jl.setBounds(j*80+110,i*80+100,80,80);//设置位置
				jl.setBorder(new BevelBorder(1));//将图片设置成嵌入式的感觉
				this.getContentPane().add(jl);//图片添加上去
			}
		}
		//插入背景图篇
		ImageIcon im=new ImageIcon("D:\\java\\eclipse\\eclipseinstall\\installers bags\\game\\login\\background.png");
		JLabel jl=new JLabel(im);
		jl.setBounds(50,15,470,390);
		this.getContentPane().add(jl);
		
		this.repaint();//刷新
	}

(4)图片顺序的打乱

这个实现就是按照前面图片所取的名字来随机获取,得到随机图片,具体如下:

public void daluan() {
		int[] t={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<16;i++) {
			int index=r.nextInt(16);
			int c=t[index];
			t[index]=t[i];
			t[i]=c;
		}
		for(int i=0;i<16;i++) {
			if(t[i]==0) {
				x=i/4;
				y=i%4;
			}
			data[i/4][i%4]=t[i];
		}
	}
//因为data数组全局使用,所以设置成了全局变量

(5)实现图片的移动以及可以创建一些快捷键

图片的移动,仔细想想其实就是将拼图中空白图片的位置与所对应的方向的图片交换位置而已,那也就是说将data数组中的元素互换,再重新加载图片即可。而这上下移动就需要用到键盘监听,在键盘上按的键,控制台就会收到一个唯一的编号(如输入a,会得到65,但是注意这不是ASCII值,只是一个普通的编号)知道这些其实就是一个简单的if分支语句,难点主要是大家不太熟悉使用键盘监听机制—KeyListener,所以直接看代码吧:

public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		int code=e.getKeyCode();//获得键盘
		System.out.println(code);
		if(code==40) {
			//下
			if(x==3) {
				return ;
			}
			int c;
			c=data[x][y];
			data[x][y]=data[x+1][y];
			data[x+1][y]=c;
			x++;
			image();
		}
		else if(code==39) {
			//右
			if(y==3) {
				return ;
			}
			int c=data[x][y];
			data[x][y]=data[x][y+1];
			data[x][y+1]=c;
			y++;
			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--;
			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--;
			image();
		}
		
		//后面你可以自己分支中再定义一些快捷键
	}

(6)点击事件的实现

点击事件的实现其实与前面第二点菜单的搭建离不开,菜单搭建里面有重新游戏这个功能,可是点了之后并未有什么反应,这是为什么呢?因为我们并未给这个选项添加事件,换句话说我们并未给重新游戏这四个字添加它应该去做的事情,既然点击,那么我们就需要用到行为监听机制(它只分为空格和点击),具体代码如下:

public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object s=e.getSource();//获取点击事件
		if(s==j1) {
			//重新游戏
			System.out.println("点击了重新游戏");
			daluan();
			image();
		}
		else if(s==j2) {
			//结束游戏
			System.out.println("点击了结束游戏");
			System.exit(0);
		}
	}

3:拼图游戏完整代码的演示

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.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.BevelBorder;

public class game_jframe extends JFrame implements KeyListener,ActionListener{
	int[][] data=new int[4][4];
	int x,y;//表示空白图片的位置
	JMenuItem j1=new JMenuItem("重新游戏");
	JMenuItem j2=new JMenuItem("结束游戏");
	
	public game_jframe() {
		chuangti();
		caidan();
		daluan();
		image();
	    this.addKeyListener(this);
		this.setVisible(true);//可视化
	}
	
	
	//窗体搭建
	public void chuangti() {
		this.setTitle("拼图游戏");//创建标题
		this.setSize(700,650);//设置窗体大小
		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);
		
		jm.add(j1);
		jm.add(j2);
		
		jmbar.add(jm);
		
		this.setJMenuBar(jmbar);
	}
	//加载图片
	public void image() {
		this.getContentPane().removeAll();;//删除原来的图片
		//开始插入图片
		for(int i=0;i<4;i++) {
			for(int j=0;j<4;j++) {
				ImageIcon imag=new ImageIcon("D:\\java\\eclipse\\eclipseinstall\\installers bags\\game\\animal\\animal5\\"+data[i][j]+".jpg");
				JLabel jl=new JLabel(imag);
				jl.setBounds(j*80+110,i*80+100,80,80);
				jl.setBorder(new BevelBorder(1));
				this.getContentPane().add(jl);
			}
		}
		//插入背景图篇
		ImageIcon im=new ImageIcon("D:\\java\\eclipse\\eclipseinstall\\installers bags\\game\\login\\background.png");
		JLabel jl=new JLabel(im);
		jl.setBounds(50,15,470,390);
		this.getContentPane().add(jl);
		
		this.repaint();//刷新
	}
	//打乱图片
	public void daluan() {
		int[] t={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<16;i++) {
			int index=r.nextInt(16);
			int c=t[index];
			t[index]=t[i];
			t[i]=c;
		}
		for(int i=0;i<16;i++) {
			if(t[i]==0) {
				x=i/4;
				y=i%4;
			}
			data[i/4][i%4]=t[i];
		}
	}


	@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) {
		// TODO Auto-generated method stub
		int code=e.getKeyCode();//获得键盘
		System.out.println(code);
		if(code==40) {
			//下
			if(x==3) {
				return ;
			}
			int c;
			c=data[x][y];
			data[x][y]=data[x+1][y];
			data[x+1][y]=c;
			x++;
			image();
		}
		else if(code==39) {
			//右
			if(y==3) {
				return ;
			}
			int c=data[x][y];
			data[x][y]=data[x][y+1];
			data[x][y+1]=c;
			y++;
			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--;
			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--;
			image();
		}
		
		//后面你可以自己分支中再定义一些快捷键
	}


	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object s=e.getSource();//获取点击事件
		if(s==j1) {
			//重新游戏
			System.out.println("点击了重新游戏");
			daluan();
			image();
		}
		else if(s==j2) {
			//结束游戏
			System.out.println("点击了结束游戏");
			System.exit(0);
		}
	}
}

上面那个是拼图游戏类,想要运行必须要有main函数作为程序入口,所以还要在建立一个测试类


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

Java实战---拼图游戏

 具体的大小大家自己调整,我们没有调整,坐标大小都是自己瞎编的!文章来源地址https://www.toymoban.com/news/detail-482445.html

到了这里,关于Java实战---拼图游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java基础阶段项目 ---- 拼图游戏(含讲解以及源代码)

    此项目为java基础的阶段项目,此项目涉及了基础语法,面向对象等知识,具体像语法基础如判断,循环,数组,字符串,集合等…; 面向对象如封装,继承,多态,抽象类,接口,内部类等等…都有涉及。此项目涉及的内容比较多,作为初学者可以很好的将前面的知识串起来。此项目拿来练手以

    2024年02月09日
    浏览(33)
  • 【拼图】拼图游戏-微信小程序开发流程详解

    还记得小时候玩过的经典拼图游戏吗,上小学时,在路边摊用买个玩具,是一个正方形盒子形状,里面装的是图片分割成的很多块,还差一块,怎么描述好呢,和魔方玩具差不多,有没有听说叫二维的魔方,这里用小程序把它实现,有感兴趣的同学可以来看看 此文章适合新手

    2024年02月09日
    浏览(30)
  • Python编写游戏——拼图游戏

    Python编写游戏需要用到pgzrun模块。但不能用pip install pgzrun进行安装,正确的库名是pgzero,pip install pgzero。  Python版本:Python 3.6.4或以上版本。 pgzrun模块以及一些Python自带的标准模块。 安装Python并添加到环境变量,pip安装需要的相关模块即可。 Python在各个领域都有着丰富的第

    2024年01月17日
    浏览(26)
  • 小学生python游戏编程4----拼图游戏

    主要内容是设计开发一个趣味拼图游戏,其功能是对加载的图片进行分割(如分割5×5矩阵或其他类型矩阵),上篇文章讲了,具体可看小学生python游戏编程3----拼图游戏-准备(https://blog.csdn.net/fqfq123456/article/details/127173684),把分隔的图片加载到游戏界面,随机打乱顺序,用户

    2023年04月10日
    浏览(31)
  • Qt实现简单拼图游戏

    自己简单实现了下拼图功能.本来开始只是想显示个图片的。 ![请添加图片描述](https://img-blog.csdnimg.cn/c71922e2babf4404bf2805129f13ff76.gif 提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例): 代码如下(示例): 代码如下(示例): 代码如下(示例): 源码下载

    2024年02月12日
    浏览(34)
  • Unity小游戏——迷你拼图

    拼图演示 资源:  链接:https://pan.baidu.com/s/1BGeSmRCO_WZRUyl3MxefGw  提取码:0n4a 排列拼图碎片,拼出最后的图案。可以点住碎片的任意位置拖动;点击\\\"重来\\\"按钮,可以回到最初状态重新开始。 有很多电脑游戏的原型来自于现实世界中的玩具,拼图游戏就是其中的一个代表。 本

    2024年02月14日
    浏览(32)
  • 用JavaScript做一个拼图游戏

    喜欢的可以复制下面完整代码查看效果在自己本地查看效果 实现难度:不算大,毕竟是小游戏 开发工具: html,css,js,jquery 新增严谨模式判定(2023.06.04) 非严谨判定:数字按顺序排即可 例:1,2,3,【空卡槽】,4,5,6,7,8 严谨判定:数字按顺序排,且空卡槽必须在最

    2024年02月07日
    浏览(33)
  • python小游戏 拼图小游戏设计与实现

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 拼图小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 游戏规则: 将图像

    2024年02月08日
    浏览(38)
  • 拼图小游戏(实现游戏主界面)(未连接数据库)

    基于IDEA,创建窗体进行游戏 默认的用户名和密码为:zhangsan,123                                         lisi,1234

    2024年01月16日
    浏览(38)
  • 前端技术搭建拼图小游戏(内含源码)

    上周我们实通过前端基础实现了俄罗斯方块游戏,今天还是继续按照我们原定的节奏来带领大家完成一个拼图游戏,功能也比较简单简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript在前端中的作用, 在前面的文章当中我们也提及到我们在本系列的专

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包