13.javase_动漫美女拼图实战

资料地址:https://cowtransfer.com/s/4573fe572f9c4a

项目效果:
在这里插入图片描述
练习编程逻辑思维,提高和锻炼自己能力。

一. 绘制游戏界面
1.1窗体绘制
第一个方法:initFrame(),用于窗体的基本设置
public void initFrame() {
this.setSize(960,565); //设置窗体宽和高
this.setTitle(“动漫拼图”); //设置窗体标题
this.setLocationRelativeTo(null);//设置窗体居中
this.setDefaultCloseOperation(3);//设置窗体关闭时退出应用程序
this.setAlwaysOnTop(true); //设置窗体位于其他窗口之上
this.setLayout(null); //取消窗体默认布局
}
第二个方法:setVisible(true),用于设置窗体可见
this.setVisible(true);//设置窗体可见

1.2窗体上组件绘制
一部分:绘制图片标题
//标题图片
JLabel titleLabel = new JLabel(new ImageIcon(“itheima-picture-puzzle\images\title.png”));
titleLabel.setBounds(354,27,232,57);
this.add(titleLabel);
二部分:创建面板绘制拼图成功图片
//定义二维数组,存储图片编号
int[][] datas = {{1,2,3,4}, {5,6,7,8},{9,10,11,12},{13,14,15,16}};
//创建面板
JPanel imagePanel = new JPanel();
imagePanel.setBounds(150,114,360,360);
imagePanel.setLayout(null);
//面板上绘制拼图成功图片
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
JLabel imageLabel = new JLabel(new ImageIcon(“itheima-picture-puzzle\images\”+datas[i][j]+“.png”));
imageLabel.setBounds(j90,i90,90,90);
imagePanel.add(imageLabel);
}
}
this.add(imagePanel);
三部分:创建面板绘制拼图成功图片
//动漫参照图[JLabel]
canzhaotu.png -> 574,114,122,121
//上下左右,求助,重置按钮添加[JButton]
{“shang.png”,“zuo.png”,“xia.png”,“you.png”,“qiuzhu.png”,“chongzhi.png”}
{{732,265,57,57},{650,347,57,57},{732,347,57,57},{813,347,57,57},{626,444,108,45},{786,444,108,45}}
//背景图[JLabel]
background.png->0,0,960,530

二. 图片打乱并记录0号图片的位置
Random r = new Random();
int x0;
int y0;
for(int i=0; i<datas.length;i++){
for(int j=0;j<datas[i];j++){
int x = r.nextInt(datas.length);
int y = r.nextInt(datas[i].length);
int tmp = datas[i][j];
datas[i][j] = datas[x][y];
datas[x][y] = tmp;
if(tmp==0){
x0 = x;
y0 = y
}
}
}

三. 给按钮注册事件
JButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
四. 移动业务实现
重新绘制图形
public void rePaintView() {
//移除容器上的组件
imagePanel.removeAll();
imagePanel = new JPanel();
imagePanel.setBounds(150, 114, 360, 360);
imagePanel.setLayout(null);
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
JLabel imageLabel = new JLabel(new ImageIcon(“itheima-picture-puzzle\images\” + datas[i][j] + “.png”));
imageLabel.setBounds(j * 90, i * 90, 90, 90);
imagePanel.add(imageLabel);
}
}
this.add(imagePanel);
//重新绘制
imagePanel.repaint();
}

 上移动规则:空白图片,和下方元素,进行交换
    边界处理:当x0=3,不能进行上移
	空白图片坐标: datas[x0][y0]
	空白图片下方元素坐标:datas[x0+1][y0]
	移动的规则:
	datas[x0][y0] = datas[x0+1][y0];
	datas[x0+1][y0] = 0;
	x0 = x0 + 1;
	编写重绘方法:rePaintView()
	调用重绘方法
 左移动规则:
	边界:y0=3
	datas[x0][y0] = datas[x0][y0+1];
	datas[x0][y0+1] = 0;
	y0 = y0 + 1;
下移动规则:
	边界:x0=0
	datas[x0][y0] = datas[x0-1][y0];
	datas[x0-1][y0] = 0;
	x0 = x0-1;
右移动规则:
	边界:y0=0
	datas[x0][y0] = datas[x0][y0-1];
	datas[x0][y0-1] = 0;
	y0 = y0 - 1;
	
判断移动是否成功:
    //定义成功数组
   int[][] winDatas = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
        {13, 14, 15, 0}
  };
  //判断二维数组中的元素是否相同
  public boolean isSuccess() {
    for (int i = 0; i < datas.length; i++) {
        for (int j = 0; j < datas[i].length; j++) {
            if(datas[i][j] != winDatas[i][j]) {
                return false;
            }
        }
    }
    return true;
  }

五. 求助业务实现
datas = new int[][] { {1,2,3,4},{5,6,7,8},{9,10,11,12}, {13,14,15,16}};
shangButton.setEnabled(false);
zuoButton.setEnabled(false);
xiaButton.setEnabled(false);
youButton.setEnabled(false);
rePaintView();

六. 重置业务实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java之书

会持续更新实用好的文章谢谢关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值