Java实现简易拼图游戏的方法详解(java编写拼图游戏)

网友投稿 336 2022-07-30


目录效果展示游戏结构实现代码

效果展示

介绍:游戏共有五张图片可以选择,分成了4 X 4 十六个方格,点击开始就可以开始游戏。游戏运行的截图如下:

游戏结构

实现代码

代码如下:MedleyGame.java类tTablsZ

package game.medleyPicture;

import java.awt.BorderLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.border.TitledBorder;

public class MedleyGame extends JFrame {

private JLabel modelLabel;

private JPanel centerPanel;

private JButton emptyButton;

int num = 0;

public static void main(String[] args) {

try {

MedleyGame frame = new MedleyGame();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

//建立窗口构造方法

public MedleyGame() {

super();

setResizable(false);

setTitle("拼图游戏");

setBounds(100, 100, 370, 525);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//创建面板对象,并增加边框、布局

final JPanel topPanel = new JPanel();

topPanel.setBorder(new TitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION,

TitledBorder.DEFAULT_POSITION, null, null));

topPanel.setLayout(new BorderLayout());

getContentPane().add(topPanel, BorderLayout.NORTH);//放于上方

//创建标签放原图

modelLabel = new JLabel();

modelLabel.setIcon(new ImageIcon("image/"+ num+ "model.jpg"));

topPanel.add(modelLabel, BorderLayout.WEST);

//在右侧加个面板,添加两个按钮

JPanel eastPanel = new JPanel();

topPanel.add(eastPanel,BorderLayout.CENTER);

eastPanel.setLayout(new BorderLayout());

JButton nextButton = new JButton();

nextButton.setText("下一张");

nextButton.addActionListener(new NextButtonAction());

eastPanel.add(nextButton,BorderLayout.NORTH);

//创建按钮开局添加监听

final JButton startButton = new JButton();

startButton.setText("开局");

startButton.addActionListener(new StartButtonAction());

eastPanel.add(startButton, BorderLayout.CENTER);

//初始化中心面板,设置边框,添加按钮

centerPanel = new JPanel();

centerPanel.setBorder(new TitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION,

TitledBorder.DEFAULT_POSITION, null, null));

centerPanel.setLayout(new GridLayout(4, 0));

getContentPane().add(centerPanel, BorderLayout.CENTER);

//初始化图片

String[][] exactnessOrder = order();

//按排列添加按钮,设置图片

for (int row=0; row<4; row++) {

for (int col=0; col<4; col++) {

final JButton button = new JButtotTablsZn();

button.setName(row+""+col);

button.setIcon(new ImageIcon(exactnessOrder[row][col]));

if (exactnessOrder[row][col].equals("image/"+ num+"00.jpg"))

emptyButton = button;

button.addActionListener(new ImgButtonAction());

centerPanel.add(button);

}

}

}

//初始化图片

private String[][] order() {

String[][] exactnessOrder = new String[4][4];

for (int row=0; row<4; row++) {

for (int col=0; col<4; col++) {

exactnessOrder[row][col] = "image/"+ num+ row+ col+ ".jpg";

}

}

return exactnessOrder;

}

//随机排列图片

private String[][] reorder() {

String[][] exactnessOrder = new String[4][4];

for (int row=0; row<4; row++) {

for (int col=0; col<4; col++) {

exactnessOrder[row][col] = "image/"+ num+ row+ col+ ".jpg";

}

}

String[][] stochasticOrder = new String[4][4];

for (int row=0; row<4; row++) {

for (int col=0; col<4; col++) {

while (stochasticOrder[row][col]==null) {

int r = (int) (Math.random()*4);

int c = (int) (Math.random()*4);

if (exactnessOrder[r][c] != null) {

stochasticOrder[row][col] = exactnessOrder[r][c];

exactnessOrder[r][c] = null;

}

}

}

}

return stochasticOrder;

}

//游戏时排列图片

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("image/"+ num+ "00.jpg"));

emptyButton = clickButton;

}

}

}

//换下一张图片

class NextButtonAction implements ActionListener {

public void actionPerformed(ActionEvent e) {

if (num==5) {

num=0;

} else {

++num;

}

modelLabel.setIcon(new ImageIcon("image/"+num+"model.jpg"));

String[][] exactnessOrder = order();

int i= 0;

for (int row=0; row<4; row++) {

for (int col=0; col<4; col++) {

JButton button = (JButton) centerPanel.getComponent(i++);

button.setIcon(new ImageIcon(exactnessOrder[row][col]));

if(exactnessOrder[row][col].equals("image/"+ num+ "00.jpg"))

emptyButton=button;

}

}

}

}

//开局排列图片

class StartButtonAction implements ActionListener {

public void actionPerformed(ActionEvent e) {

String[][] stochasticOrder = reorder();

int i= 0;

for (int row=0; row<4; row++) {

for (int col=0; col<4; col++) {

JButton button = (JButton) centerPanel.getComponent(i++);

button.setIcon(new ImageIcon(stochasticOrder[row][col]));

if(stochasticOrder[row][col].equals("image/"+ num+ "00.jpg"))

emptyButton=button;

}

}

}

}

}

代码链接地址

以上就是Java实现简易拼图游戏的方法详解的详细内容,更多关于Java拼图游戏的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现统计文档中关键字出现的次数(统计字符串出现的次数 java)
下一篇:基于Java实现经典蜘蛛纸牌游戏(经典蜘蛛纸牌手机版单机游戏2013)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~