java做的拼图游戏怎么实现更换图片哦

作者&投稿:劳彪 (若有异议请与网页底部的电邮联系)
用java做拼图游戏,怎么把图片切割成不规则形状?~

以我现在的知识,我还不知道如何更简单的去做。
但如果以实现方式来讲,
一种是人工将图片这种形状

一种是 非常麻烦,需要程序进行大量计算。要对图片转换成 int 数值 有所了解
我想我只能提供你思路,因为具体实现是比较麻烦的
因为我不是讲语文的,不知道能不能说明白,比较意识流。。。

人工将图片的几种形状画出一种以指定颜色背景的半透明的图,,
比如方案为
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■□■□□■□□■□□■□■■
□□□□□□□□□□□□□□□□
□□■□□□□■■□□□□■□□
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■■■□□■■■■□□■■■■
■■■■□□■■■■□□■■■■

我想我画的试例图你明白了吧,是可以进行对接拼图的


一个比如说红色图片 4*4大小的,那么他转成int数据时就是
0xffff0000 0xffff0000 0xffff0000 0xffff0000
0xffff0000 0xffff0000 0xffff0000 0xffff0000
0xffff0000 0xffff0000 0xffff0000 0xffff0000
0xffff0000 0xffff0000 0xffff0000 0xffff0000
0x后面的ff表示是不透明的
第二个ff及后面的4个0表示图片颜色前2位是红中间是绿最后是蓝 这一点你可以用photoshop去查看
比如我上面第一张图的数据,转成int 数据时,就应该是

A B C D
1 0xffff0000 0xffff0000 0xffff0000 0xffff0000
2 0xffff0000 0xffff0000 0xffff0000 0x00ffffff
3 0xffff0000 0xffff0000 0xffff0000 0xffff0000
4 0xffff0000 0xffff0000 0xffff0000 0x00ffffff
5 0xffff0000 0xffff0000 0x00ffffff 0xffff0000

其中 D2 D4 及C5的位置是透明的0x00表示透明
说到这,也就是说,你应该能通过你生成的那几个指定的图片获得这几个图片对应的数据模板
之后你将你的要拼图的图片,按你设计好的模板拼图方式,生成图片块 注意,因为你要的效果是两个图片对接的,所以在生成的时候,也要注意,是对接的

如果你做到这一步,(或说成,你能想明白到这一步,哪怕不知道怎么做,没关系)

你这时应该能得到每块图片,和每块图片对应的是哪种模板
将这块图片转成int 数组形式的 数据文件。
之后将这个数据文件与对应的模板数据文件进行对应,
当发现你的模板的数据值为0x00ffffff时,就说明这个位置的颜色应该是透明的,这时因为你的图片数据与模版数据ID是相对应的,直接找到图片数据ID,将他的值改为0x00ffffff就可以了。

到这一步,你应该可以实现将所有分割后的图片,在数据上转换成了你想要的样子。
这时,你只要通过一些函数将数据文件转换成图片格式就行了。


因为我做的是手机方面的,你用的可能是J2SE吧,API我不是很熟,不能提供具体的方法。

public static void cut(String srcImageFile, String descDir, int destWidth,
int destHeight) {
try {
Image img;
ImageFilter cropFilter;
// 读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getHeight(); // 源图宽度
int srcHeight = bi.getWidth(); // 源图高度
if (srcWidth > destWidth && srcHeight > destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
destWidth = 200; // 切片宽度
destHeight = 150; // 切片高度
int cols = 0; // 切片横向数量
int rows = 0; // 切片纵向数量
// 计算切片的横向和纵向数量
if (srcWidth % destWidth == 0) {
cols = srcWidth / destWidth;
} else {
cols = (int) Math.floor(srcWidth / destWidth) + 1;
}
if (srcHeight % destHeight == 0) {
rows = srcHeight / destHeight;
} else {
rows = (int) Math.floor(srcHeight / destHeight) + 1;
}
// 循环建立切片
// 改进的想法:是否可用多线程加快切割速度
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
// 四个参数分别为图像起点坐标和宽高
// 即: CropImageFilter(int x,int y,int width,int height)
cropFilter = new CropImageFilter(j * 200, i * 150,
destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(image.getSource(),
cropFilter));
BufferedImage tag = new BufferedImage(destWidth,
destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null); // 绘制缩小后的图
g.dispose();
// 输出为文件
ImageIO.write(tag, "JPEG", new File(descDir
+ "pre_map_" + i + "_" + j + ".jpg"));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

编写拼图按钮的监听器类,该类为主类的内部类。
在actionPerformed()方法中,首先获得空白按钮和被单击按钮的所在行和列,
然后判断这两个按钮是否相邻,如果相邻则将被单击按钮显示的图片移动到空白按钮上,并令被单击按钮显示空白图片,以及将在类中声明的空白按钮对象设置为被单击的按钮对象
思路就这样,我给你个示例代码,你参考参考哦:
class ImgButtonAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
String emptyName = emptyButton.getName();
char emptyRow = emptyName.charAt(0);
char emptyCol = emptyName.charAt(1);
JButton clickButton = (JButton) e.getSource();
String clickName =clickButton.getName();
char clickRow = clickName.charAt(0);
char clickCol = clickName.charAt(1);

if(Math.abs(clickRow - emptyRow) + Math.abs(clickCol - emptyCol) == 1) {
emptyButton.setIcon(clickButton.getIcon()) ;
clickButton.setIcon(new ImageIcon("img/00.jpg"));
emptyButton = clickButton;
}
}
}
大概就这样了
希望对你有帮助哈


什么是nft销售
区块链之所以被称为“价值互联网”,是因为其补足了互联网的最后一块拼图,在不需要第三方中介的前提下解决交易的“双花问题”,NFT目前是这个“价值互联网”上的一颗闪亮明珠。 那么,NFT具体用在哪儿呢? 其实NFT的应用场景很多,像本文开头提到的佳士得拍卖的NFT数字艺术品,艺术品本身是基于区块链技术的,NFT即代表作品...

广河县13470614972: 下了一个Java手机拼图游戏想把它的图片换成自己的,该怎么做,急急急急急
塔秋盖菲: java手机游戏一般是jar格式的吧你可以对其解压然后找到它里面的默认的图片然后找一张大小一样的,修改它的名字跟默认的一样,应该就可以了

广河县13470614972: 在Java中,按按钮,可以换图片 -
塔秋盖菲: 代码就不写了,基本最为简单的思路是想办法得到一个小鸟在飞和蝴蝶在飞并且背景相同的图片 在点击按钮添加动作事件,在动作接口实现类中的目标方法中实现交替绘制这个2个图片就可以实现. 如果背景单纯采用一个图片那就需要在这个背景图片上分别交替绘制不具备任何背景的蝴蝶和小鸟的图片,这样可能稍难一些吧

广河县13470614972: Java中JFrame框架,怎样用run()实现图片的更换 ?懂的告诉我下 谢谢了!!! -
塔秋盖菲: 就是一个线程嘛!在线程开始时获取一个时间点---加载图片--获取时间点,在这里三个步骤里设置一个循环.ok,大概就是这样子了.

广河县13470614972: JAVA中怎么用线程实现图片的切换? -
塔秋盖菲: 自己写的代码.能通过测试 题目中的要求用线程实现图片的切换 主要有两种方式可以实现.一种是Swing包下的Timer类.一种是Thread类 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MousDemo extends JFrame ...

广河县13470614972: 我在用java写贪吃蛇,怎么把蛇头替换成自己想要的图片啊 -
塔秋盖菲: 真是玩蛇,找到蛇头素材,把你的图片改为与蛇头图片同样的名字替换就行了

广河县13470614972: java拼图游戏,怎么要才能让它随机排列图片? -
塔秋盖菲: 弄一个点类.加上这个类的数组就可以了..假如,你的图片的大小是50X50.屏幕的大小为200X200.定义一个点类,这个点类是描述位置的.大概如下 :class Point { int x,y; Point(int x, int y) { this.x = x; this.y = y; } } 然后,你弄个点类的数组...

广河县13470614972: 用java做拼图游戏,怎么把图片切割成不规则形状 -
塔秋盖菲: 您好,这里是shixingyoumeng为您解答!如果您要要做不规则的形状,最佳的工具为钢笔工具 打开图片--复制一层--隐藏背景层--勾一个不规则的选区--将选区转换为路径--delete即可!钢笔工具可以精确的控制选区,可以随时更改,方便控制!如果想要更加精确,建议加 辅助线 ctrl+r 如果您还有其他疑问,请点击发起追问,我将为您继续解答!如果您满意我的回答,请点击我的回答下方的选为满意答案!

广河县13470614972: JAVA怎么实现窗口内图片替换? -
塔秋盖菲: 写一个定时方法,比如说1000(一秒)更换一次图片路径....

广河县13470614972: 我在做JAVA拼图游戏,但是不知道怎么把一张大图片分解成很多小张的!还有怎么做拼图成功的处理!! -
塔秋盖菲: 可以在内存中拆分图像,使用BufferedImage类的getSubimage()方法,如下:public ArrayList dividImage(BufferedImage image) { ArrayList subimage = new ArrayList( this.row * this.col); for (int i = 0; ifor (int j = 0; jsubimage.add((i * this.col + j), ...

广河县13470614972: 急求用JAVA编写的图形化界面拼图小游戏代码! -
塔秋盖菲: 个人见解,总体需要两个二维数组(一个存储正确图片排列 Array1 String[][],一个随机生成图片排列Array2 String[][]),一个一维数组来存储图片的名称Array3 String[],.(1)如何实现图片移动 使用带图片的按钮(button =new button(getImage(Array[2][...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网