急求用JAVA编写的图形化界面拼图小游戏代码!

急求用JAVA编写的图形化界面拼图小游戏代码!,第1张

个人见解,总体需要两个二维数组(一个存储正确图片排列 Array1 String[][],一个随机生成图片排列Array2 String[][]),一个一维数组来存储图片的名称Array3 String[],。

(1)如何实现图片移动

使用带图片的按钮(button =new button(getImage(Array[2][4]))),然后通过单击事件来更改按钮的图片来源。 把被点击的按钮的图片路径更新到空白按钮,并且把被点击的按钮图片更新的成空白。其实就是变换两个的二维数组成员的值。更新Array2中的值,然后重绘按钮

如 Array[2][3]=“3.image”

Array[2][4]=“”

图片3.image右移

Array[2][3]=“”

Array[2][4]=“3.image”

(2)如何判断被单击的网格与空白的网格是否相邻

后台使用一个二维数组Array2来做映射。通过二维数组的下标来判断,如Array[2][3]可以知道Array[2][4]是它右边的那个。

(3)如何实现图片的随机摆放

比如有9个图片,你可以命名1-9,然后初始化一个长度为9的一维String 数组Array3来存储图片的名称,

使用随机函数给二维数组Array2赋值,如Array2[2][3]=Array3[random()],这里要判断这个图片是否已被使用过,可以通过遍历Array2来确定当前Array3这个值是否已经在Array2中了

最后通过Array1 和Array2来比较,用户的拼图是否正确。

语言组织能力有限。讲不太清楚。

import java.awt.BorderLayout

import java.awt.Button

import java.awt.Choice

import java.awt.Color

import java.awt.Container

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import javax.swing.Icon

import javax.swing.ImageIcon

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JOptionPane

import javax.swing.JPanel

//以上均引用不同的package内的类

public class MyMainFrame extends JFrame implements ActionListener {//MyMainFrame类extends “JFrame”类实现 ActionListener的方法

MyCanvas myCanvas//初始化对象MyCanvas类

JPanel panelNorth,panelPreview//定义上方的面板,及预览所需的面板

Button start,preview,set//定义开始,预览,设定按钮

Container container//容器,得到内容面板

public MyMainFrame() {//初使化

container=this.getContentPane()//得到当前对象的ContentPane,并且把它赋给container

start=new Button("开始")//创建并初始新的Button(按钮)对象,赋给start

start.addActionListener(this)//在这个按钮对象中添加监听器,范围是当前对象

preview=new Button("预览")//同上,创建新的Button对象。。。。。

preview.addActionListener(this)//同上。。。。。

set = new Button("设置")//同上。。。。。(感觉代码都差不多吧?呵呵)

set.addActionListener(this)//同上

panelPreview=new JPanel()创建新的JPanel(面板)对象

panelPreview.setLayout(null)//设置面板对象的布局为空

Icon icon=new ImageIcon("pic/pic_"+MyCanvas.pictureID+".jpg")//创建并初始新的图标对象。图标的图片路径是pic目录下的pic与通过MyCanvas.pictureId取得字符串再与.jpg合并后的名称。例如(pic/pic_1234.jsp)

JLabel label=new JLabel(icon)//定义新的JLable(java标签),并初始

label.setBounds(0,0,300,300)//设置标签的范围(长x轴,宽y轴,长多,宽多少)

panelPreview.add(label)//面板对象中添加label这个对象

panelNorth=new JPanel()//定义新的JPanel

panelNorth.setBackground(Color.red)//设置JPanel的背景色

panelNorth.add(start)//Jpanel加入按钮

panelNorth.add(preview)//同上

panelNorth.add(set)//同上

myCanvas=new MyCanvas()//实例化MyCanvas

container.add(myCanvas,BorderLayout.CENTER)//在容器(前边定义好了这个对象)中添加myCanvas,设置它的布局为居中

container.add(panelNorth,BorderLayout.NORTH)//添加Jpanel,布局为北(也就是上)

this.setTitle("拼图小游戏-")//设置这个对象的题目叫。。。。。

this.setLocation(300,200)//设置它的初始位置

this.setSize(308,365)//设置大小

this.setResizable(false)//设置是否可以改变窗口的大小(否)

this.setVisible(true)//是否可以显示(是)

this.setDefaultCloseOperation(3)//(swt和swing本人用的少)这个好像是按钮的初始样式是哪种吧。自己改下

}

public static void main(String[] args) {//类进口,也就是主程序的进口

// TODO 自动生成方法存根

new MyMainFrame()//实例化主框架

}

public void actionPerformed(ActionEvent arg0) {//对三个按钮事件的处理

// TODO 自动生成方法存根

Button button=(Button)arg0.getSource()//取得通过监听得到的动作时间对象的源(getSource具体得到的是啥,我也不太清楚)

if(button==start){ //判断。如果监听到的是按start按钮

myCanvas.Start()//启动myCanvas

}else if(button==preview){ //如果是preview按钮

if(button.getLabel()=="预览"){ //如果按钮的标签是"预览"

container.remove(myCanvas)//容器销毁myCanvas

container.add(panelPreview)//然后容器添加panelPreview对象

panelPreview.updateUI()//panelPreview对象的upDateUI方法

container.repaint()//调用容器重新画图的命令

button.setLabel("返回")//标签设置成"返回"

}else{ //如果以上两个if都不是,执行下边的语句

container.remove(panelPreview)//cantainer销毁p....这个对象

container.add(myCanvas)//添加m...这个对象

container.repaint()//容器重新画图

button.setLabel("预览")//设置标签名称为"预览"

}

}else if(button==set){//修改所选图片 //如果间听到的是按set这个键的时候

Choice pic = new Choice()//Choice实例化对象(这个是啥类,我也不知道,名字上看是选择?)

pic.add("小猫")//添加小猫

pic.add("小猪")//添加小猪

pic.add("云")//添加云

pic.add("QQ")//添加qq

pic.add("卡通")//添加卡通

pic.add("花")//花

int i=JOptionPane.showConfirmDialog(this, pic, "选择图片", JOptionPane.OK_CANCEL_OPTION)//定义一个int类型的对象i,赋值成后边的那些

if(i==JOptionPane.YES_OPTION){ //如果对象i与JOptionPane对象的YES...相等,则执行下列代码

MyCanvas.pictureID=pic.getSelectedIndex()+1//MyC....这个类的pic...这个属性等于pic.get......这个方法的结果+1

myCanvas.reLoadPictrue()//myCanvas对象重新读取图片

Icon icon=new ImageIcon("pic/pic_"+MyCanvas.pictureID+".jpg")//定义新的图标对象

JLabel label=new JLabel(icon)//初始新的标签(标签中加入图标)

label.setBounds(0,0,300,300)//标签设置范围

panelPreview.removeAll()//调用pane....对象的remo...方法

panelPreview.add(label)//对象pan...调用add方法

panelPreview.repaint()//调用。。。。对象重新画的方法

}

}

}

}

------------------------

不太熟悉java的swt和swing,自己改下吧

package love

import java.awt.*

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.util.Random

import javax.swing.*

public class Games extends JFrame implements ActionListener {

private JButton buttons[][]// 存储按键的数组

private Container container// 一个容器

private GridLayout layout// 布局方式为GridLayout

private int count = 0, is[] = new int[8]// count的作用是计算按键移动的次数,is[]储存一个随机产生的1到8数字数组

public Games() {

super("拼图游戏")// 设置标题

layout = new GridLayout(3, 3)// 3行3列

container = getContentPane()// 该容器的布局方式,及其重要,否则产生空引用异常

container.setLayout(layout)// 将该布局方式作用于容器

buttons = new JButton[3][3]// 给按键数组分配储存空间

int locate1, locate2// locate1用来指示当前产生的元素 locate2用来指示locate1之前的元素

for (locate1 = 0locate1 <8locate1++) {// 该方法作用是产生1到8这8个数,随机分配给数组,即无序排列

int g = new Random().nextInt(8) + 1// 随机产生一个空白按键,即不显示的那个

is[locate1] = g

for (locate2 = locate1 - 10 <= locate2locate2--) {

if (is[locate1] == is[locate2])

break

}

if (locate2 != -1)

locate1--

}

int temp = 0

int r = new Random().nextInt(3)// 随机产生一个0到3的数,代表空白按键的行

int l = new Random().nextInt(3)// 随机产生一个0到3的数,代表空白按键的列

for (int i = 0i <3i++) {

for (int j = 0j <3j++) {

if (r == i &&l == j) {// 空白按键设置为9,不显示

buttons[i][j] = new JButton("9")

container.add(buttons[i][j])

buttons[i][j].setVisible(false)

} else {

buttons[i][j] = new JButton("" + is[temp++])// 将数组数组的值作为显示的8个按键的名字

container.add(buttons[i][j])

}

buttons[i][j].addActionListener(this)// 注册监听事件

}

}

setSize(300, 300)// 设置显示容器区域大小

setVisible(true)

}

public void actionPerformed(ActionEvent event) {// 事件处理,由于计算量小该处将所有按键单独分析

JButton b = (JButton) event.getSource()

if (b == buttons[0][0]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[0][0].getText())

buttons[0][1].setVisible(true)

buttons[0][0].setText("9")

buttons[0][0].setVisible(false)

count++

} else if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[0][0].getText())

buttons[1][0].setVisible(true)

buttons[0][0].setText("9")

buttons[0][0].setVisible(false)

count++

}

}

else if (b == buttons[0][1]) {

if (buttons[0][0].getText().equals("9")) {

buttons[0][0].setText("" + buttons[0][1].getText())

buttons[0][0].setVisible(true)

buttons[0][1].setText("9")

buttons[0][1].setVisible(false)

count++

} else if (buttons[0][2].getText().equals("9")) {

buttons[0][2].setText("" + buttons[0][1].getText())

buttons[0][2].setVisible(true)

buttons[0][1].setText("9")

buttons[0][1].setVisible(false)

count++

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[0][1].getText())

buttons[1][1].setVisible(true)

buttons[0][1].setText("9")

buttons[0][1].setVisible(false)

count++

}

} else if (b == buttons[0][2]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[0][2].getText())

buttons[0][1].setVisible(true)

buttons[0][2].setText("9")

buttons[0][2].setVisible(false)

count++

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[0][2].getText())

buttons[1][2].setVisible(true)

buttons[0][2].setText("9")

buttons[0][2].setVisible(false)

count++

}

} else if (b == buttons[1][0]) {

if (buttons[0][0].getText().equals("9")) {

buttons[0][0].setText("" + buttons[1][0].getText())

buttons[0][0].setVisible(true)

buttons[1][0].setText("9")

buttons[1][0].setVisible(false)

count++

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[1][0].getText())

buttons[1][1].setVisible(true)

buttons[1][0].setText("9")

buttons[1][0].setVisible(false)

count++

} else if (buttons[2][0].getText().equals("9")) {

buttons[2][0].setText("" + buttons[1][0].getText())

buttons[2][0].setVisible(true)

buttons[1][0].setText("9")

buttons[1][0].setVisible(false)

count++

}

} else if (b == buttons[1][1]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[1][1].getText())

buttons[0][1].setVisible(true)

buttons[1][1].setText("9")

buttons[1][1].setVisible(false)

count++

} else if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[1][1].getText())

buttons[1][0].setVisible(true)

buttons[1][1].setText("9")

buttons[1][1].setVisible(false)

count++

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[1][1].getText())

buttons[1][2].setVisible(true)

buttons[1][1].setText("9")

buttons[1][1].setVisible(false)

count++

} else if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[1][1].getText())

buttons[2][1].setVisible(true)

buttons[1][1].setText("9")

buttons[1][1].setVisible(false)

count++

}

} else if (b == buttons[1][2]) {

if (buttons[0][2].getText().equals("9")) {

buttons[0][2].setText("" + buttons[1][2].getText())

buttons[0][2].setVisible(true)

buttons[1][2].setText("9")

buttons[1][2].setVisible(false)

count++

} else if (buttons[2][2].getText().equals("9")) {

buttons[2][2].setText("" + buttons[1][2].getText())

buttons[2][2].setVisible(true)

buttons[1][2].setText("9")

buttons[1][2].setVisible(false)

count++

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[1][2].getText())

buttons[1][1].setVisible(true)

buttons[1][2].setText("9")

buttons[1][2].setVisible(false)

count++

}

} else if (b == buttons[2][0]) {

if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[2][0].getText())

buttons[1][0].setVisible(true)

buttons[2][0].setText("9")

buttons[2][0].setVisible(false)

count++

} else if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[2][0].getText())

buttons[2][1].setVisible(true)

buttons[2][0].setText("9")

buttons[2][0].setVisible(false)

count++

}

}

else if (b == buttons[2][1]) {

if (buttons[2][0].getText().equals("9")) {

buttons[2][0].setText("" + buttons[2][1].getText())

buttons[2][0].setVisible(true)

buttons[2][1].setText("9")

buttons[2][1].setVisible(false)

count++

} else if (buttons[2][2].getText().equals("9")) {

buttons[2][2].setText("" + buttons[2][1].getText())

buttons[2][2].setVisible(true)

buttons[2][1].setText("9")

buttons[2][1].setVisible(false)

count++

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[2][1].getText())

buttons[1][1].setVisible(true)

buttons[2][1].setText("9")

buttons[2][1].setVisible(false)

count++

}

} else if (b == buttons[2][2]) {

if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[2][2].getText())

buttons[2][1].setVisible(true)

buttons[2][2].setText("9")

buttons[2][2].setVisible(false)

count++

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[2][2].getText())

buttons[1][2].setVisible(true)

buttons[2][2].setText("9")

buttons[2][2].setVisible(false)

count++

}

}

if (buttons[0][0].getText().equals("1")// 假如1到8已经排列完成,则执行该语句

&&buttons[0][1].getText().equals("2")

&&buttons[0][2].getText().equals("3")

&&buttons[1][0].getText().equals("4")

&&buttons[1][1].getText().equals("5")

&&buttons[1][2].getText().equals("6")

&&buttons[2][0].getText().equals("7")

&&buttons[2][1].getText().equals("8")) {

JOptionPane.showMessageDialog(null, "您一共花费了" + count + "步完成了游戏!")// d出对话框,显示共移动步数

System.exit(0)// 退出程序

}

}

public static void main(String[] args) {

Games game = new Games()

game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11244040.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存