當前位置:首頁 » 操作系統 » 拼圖java源碼

拼圖java源碼

發布時間: 2022-06-09 14:00:10

java拼圖游戲代碼,左右有圖片對比,左邊是打亂的圖,右邊是完成對比圖,分為4個難度2*3,3*3 ,4*4,5*5.

暈,這都不會?還要別人給?我學習時做的,刪掉了。沒法給你……

⑵ 如何用JAVA編寫一個圖片的拼圖游戲

說說思路:
1 本身他不是一個完整的圖片,應該被切分成數組,該數組為拼圖成功的標准
2 將該數組復制,然後打散元素的順序
3 初始化一個二維數組方格矩陣
4 允許用戶通過滑鼠事件將 備選圖案中的某個元素放置到二維數組方格矩陣中,並記載其順序
5 直到所有的方格被填滿,與答案數組的元素順序比較,給出結果
以上是實現拼圖的關鍵思路,其他情況還要考慮,如允許從方格中撤出圖像或者與其他圖像調整位置,僅代表個人不成熟的想法,希望對你能有所幫助,祝你好運!

⑶ 找高手幫我翻譯這個JAVA拼圖游戲代碼(希望能幫我解析每句中用到的JAVA技術)

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,自己改下吧

⑷ java!怎麼把三行三列的拼圖游戲改成四行四列!!跪求高手幫忙修改!!下面是源碼!!

你的程序問題很多啊 首先沒有main函數 根本運行不了 ,其次你沒有輸出,根本不可能打出表格的, 所有的3都改成4就是四行四列

⑸ java拼圖游戲源代碼 要完整的 包括圖片的位置 謝謝啦 急用

去我的網路空間自己看,裡面有代碼和注釋

⑹ 1200分跪求JAVA數字拼圖游戲源代碼!

1:
import java.io.IOException;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
// 華容道原理的拼圖游戲。 利用輕組建的套用。
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;

public class MyMainFrame extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
MyCanvas myCanvas;
JPanel panelNorth,panelPreview;
Button start,preview,set;
Container container;

public MyMainFrame() {//初使化
container=this.getContentPane();
start=new Button("開始");
start.addActionListener(this);

preview=new Button("預覽");
preview.addActionListener(this);
set = new Button("設置");
set.addActionListener(this);

panelPreview=new JPanel();
panelPreview.setLayout(null);
Icon icon=new ImageIcon ("images/pic_"+MyCanvas.pictureID+".jpg");
JLabel label=new JLabel(icon);
label.setBounds(0,0,400,400);
panelPreview.add(label);

panelNorth=new JPanel();
panelNorth.setBackground(Color.yellow);
panelNorth.add(start);
panelNorth.add(preview);
panelNorth.add(set);
myCanvas=new MyCanvas();
container.add(myCanvas,BorderLayout.CENTER);
container.add(panelNorth,BorderLayout.NORTH);
this.setTitle("成型拼圖小游戲-1212");
this.setLocation(300,200);
this.setSize(408,465);
this.setResizable(false);
this.setVisible(true);

this.setDefaultCloseOperation(3);
} //end of 初始化 構造函數

public void actionPerformed(ActionEvent e) {

Button button=(Button)e.getSource();
if(button==start){
myCanvas.Start();

}else if(button==preview){
if(button.getLabel()=="預覽"){
container.remove(myCanvas);
container.add(panelPreview);
panelPreview.updateUI();
container.repaint();
button.setLabel("返回");
}else{
container.remove(panelPreview);
container.add(myCanvas);
container.repaint();
button.setLabel("預覽");
}
}else if(button==set){
Choice pic = new Choice();
//pic.add("QQ");
pic.add("美女");
int i=JOptionPane.showConfirmDialog(this,pic,"選擇圖片", JOptionPane.OK_CANCEL_OPTION);
//使用選擇對話框來進行選擇圖片。
if(i==JOptionPane.YES_OPTION){
MyCanvas.pictureID=pic.getSelectedIndex()+5;
myCanvas.reLoadPictrue();
Icon icon=new ImageIcon("images/pic_"+MyCanvas.pictureID+".jpg");
JLabel label=new JLabel(icon);
label.setBounds(0,0,400,400);
panelPreview.removeAll();
panelPreview.add(label);
panelPreview.repaint();
}
}
}

public static void main(String[] args) throws UnsupportedAudioFileException, LineUnavailableException, IOException
{
new MyMainFrame();

} //end of main

}
2:
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MyCanvas extends JPanel implements MouseListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
boolean hasAddActionListener=false;//設置方格的動作監聽器的標志位,TRUE為已經添加上動作事件
Cell cell[];//定義方格
Rectangle cellNull;//定義空方格區域 是一個矩形類
public static int pictureID=4;// 當前選擇的圖片代號
public MyCanvas() {
this.setLayout(null);
this.setSize(400,400);
cellNull=new Rectangle(300,300,100,100);//空方格區域在第三行每三列
cell=new Cell[16];
Icon icon;
for (int i = 0; i < 4; i++) {
for(int j=0;j<4;j++){
icon=new ImageIcon("images/pic_"+pictureID+"_"+(i*4+j+1)+".jpg");
cell[i*4+j]=new Cell(icon);
cell[i*4+j].setLocation(j*100,i*100);
this.add(cell[i*4+j]);
}
}
this.remove(cell[15]);//移除最後一個多餘的方格
} //放置9張小圖片並且移調最後一張

public void reLoadPictrue(){//當選擇其它圖形進行拼圖時,需重新載入新圖片
Icon icon;
for (int i = 0; i < 4; i++) {
for(int j=0;j<4;j++){
icon=new ImageIcon("images/pic_"+pictureID+"_"+(i*4+j+1)+".jpg");
cell[i*4+j].setIcon(icon);
}
}
}
public boolean isFinish(){//判斷是否拼合成功
for(int i=0;i<15;i++)
{ int x=cell[i].getBounds().x;
int y=cell[i].getBounds().y;
if(y/100*4+x/100!=i)
return false;
} //end of for
return true;
}

public void Start(){//對方格進行重新排列,打亂順序

while(cell[0].getBounds().x<=100&&cell[0].getBounds().y<=100){//當第一個方格距左上角較近時
int x=cellNull.getBounds().x;
int y=cellNull.getBounds().y;
int direction=(int)(Math.random()*4);//產生0-4,對應空方格的上下左右移動
if(direction==0){//空方格左移動,與左側方格互換位置,左側方格右移動
x-=100;
if(test(x,y)){
for(int j=0;j<15;j++){
if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){//依次尋找左側的按鈕
cell[j].move("RIGHT",100);
cellNull.setLocation(x,y);
break;//找到後跳出for循環
}
}
}
}else if(direction==1){//RIGHT
x+=100;
if(test(x,y)){
for(int j=0;j<15;j++){
if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){
cell[j].move("LEFT",100);
cellNull.setLocation(x,y);
break;
}
}
}
}else if(direction==2){//UP
y-=100;
if(test(x,y)){
for(int j=0;j<15;j++){
if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){
cell[j].move("DOWN",100);
cellNull.setLocation(x,y);
break;
}
}
}
}else{//DOWN
y+=100;
if(test(x,y)){
for(int j=0;j<15;j++){
if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){
cell[j].move("UP",100);
cellNull.setLocation(x,y);
break;
}
}
}
}

}

if(!hasAddActionListener)//如果尚未添加動作事件,則添加
for(int i=0;i<15;i++)//為第個方格添加動作事件,這樣單擊按鈕就能移動了
cell[i].addMouseListener(this);
hasAddActionListener=true;
}
private boolean test(int x,int y){
if((x>=0&&x<=200)||(y>=0&&y<=200))
return true;
else
return false;
}

public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mousePressed(MouseEvent e) {
//方格的滑鼠事件,因為用到了MyCanvas中的一些方法,因此沒有在Cell類中處理滑鼠事件
Cell button=(Cell)e.getSource();
int x1=button.getBounds().x;//得到所單擊方格的坐標
int y1=button.getBounds().y;

int x2=cellNull.getBounds().x;//得到空方格的坐標
int y2=cellNull.getBounds().y;

if(x1==x2&&y1-y2==100)//進行比較,如果滿足條件則進行交換
button.move("UP",100);
else if(x1==x2&&y1-y2==-100)
button.move("DOWN",100);
else if(x1-x2==100&y1==y2)
button.move("LEFT",100);
else if(x1-x2==-100&&y1==y2)
button.move("RIGHT",100);
else
return;//不滿足就不進行任何處理

cellNull.setLocation(x1,y1);
this.repaint();
if(this.isFinish()){//進行是否完成的判斷
JOptionPane.showMessageDialog(this,"景鋒恭喜你完成拼圖,加油!想繼續下一關么?");
for(int i=0;i<15;i++)
cell[i].removeMouseListener(this);//如果已完成,撤消滑鼠事件,滑鼠單擊方格不在起作用
hasAddActionListener=false;
}
}

}
3:
import javax.swing.Icon;
import javax.swing.JButton;

public class Cell extends JButton {
/**
*
*/
private static final long serialVersionUID = 1L;

Cell(Icon icon){//實際為ICON
super(icon);
this.setSize(100,100);
}

public void move(String direction,int sleep){//方格的移動
if(direction=="UP"){
this.setLocation(this.getBounds().x,this.getBounds().y-100);
}else if(direction=="DOWN"){
this.setLocation(this.getBounds().x,this.getBounds().y+100);
}else if(direction=="LEFT"){
this.setLocation(this.getBounds().x-100,this.getBounds().y);
}else{
this.setLocation(this.getBounds().x+100,this.getBounds().y);
}
}

}

⑺ 怎麼用Java實現拼圖游戲,求思維和代碼

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Image;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import javax.swing.GroupLayout.Alignment;

import javax.swing.Icon;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JCheckBoxMenuItem;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class Jigsaw implements ActionListener {

private JFrame frame;

private JPanel panel;

private JButtonx[] button;

private JPanel panel_right;

private int level = 4;

private JMenuBar menubar;

private ImageIcon imageicon;

private Image image;

private BufferedImage bufferedimage;

private BufferedImage[] image_button;

private JLabel label;

private JPanel panel_left;

private ImageIcon[] icon_button;

private JMenu menu1;

private JMenuItem menuitem1_1;

private JMenu menu2;

private JCheckBoxMenuItem menuitem2_1;

private JCheckBoxMenuItem menuitem2_2;

private JCheckBoxMenuItem menuitem2_3;

private int x=400;

private int y=400;

private JMenuItem menuitem1_2;

private JFileChooser jfc;

private String name="src/pic/1.jpg"; //起始圖片位置,請自行設置

private JPanel panel_menu;

private JLabel label1_1;

private JLabel label1_2;

private JLabel label1_3;

private JLabel label2_1;

private JLabel label2_2;

private JLabel label2_3;

public void reset() {

frame = new JFrame("拼圖");

panel = new JPanel();

panel_left = new JPanel();

panel_right = new JPanel();

panel.setLayout(new GridLayout(0, 2));

menubar = new JMenuBar();

menubar.setLayout(new BorderLayout());

panel_menu=new JPanel();

panel_menu.setLayout(null);

menu1 = new JMenu("開始游戲");

menuitem1_1=new JMenuItem("重新開始");

menuitem1_2=new JMenuItem("選擇圖片");

menu2=new JMenu("等級選擇");

menuitem2_1=new JCheckBoxMenuItem("低級(3)");

menuitem2_2=new JCheckBoxMenuItem("高級(4)");

menuitem2_3=new JCheckBoxMenuItem("自定義");

imageicon = new ImageIcon(name);

image = imageicon.getImage();

bufferedimage=new BufferedImage(252, 405, BufferedImage.TYPE_INT_RGB);

bufferedimage.getGraphics().drawImage(image,0,0,252,405,null);

imageicon.setImage(bufferedimage);

label=new JLabel(imageicon);

panel_left.setLayout(new FlowLayout(FlowLayout.CENTER,0,0));

panel_left.add(label);

panel.add(panel_left);

jfc=new JFileChooser();

label1_1=new JLabel("您已經走了");

label1_1.setBounds(30, 0, 80, 25);

label1_2=new JLabel("0");

label1_2.setForeground(Color.RED);

label1_2.setBounds(120, 0, 40, 25);

label1_2.setFont(new Font("黑體",Font.BOLD,20));

label1_3=new JLabel("步");

label1_3.setBounds(160, 0, 30, 25);

label2_1=new JLabel("時間");

label2_1.setBounds(220, 0, 50, 25);

label2_2=new JLabel("0");

label2_2.setForeground(Color.RED);

label2_2.setBounds(280, 0, 40, 25);

label2_2.setFont(new Font("黑體",Font.BOLD,20));

label2_3=new JLabel("秒");

label2_3.setBounds(330, 0, 30, 25);

panel_right.setLayout(new GridLayout(level, level));

button = new JButtonx[level * level];

image_button=new BufferedImage[level*level];

for (int i = 0; i < level*level/*-1*/; i++) {

image_button[i]=new BufferedImage(252/level, 405/level, BufferedImage.TYPE_INT_RGB);

image_button[i].getGraphics().drawImage(bufferedimage, 0,0,252/level,405/level,(i%level)*(252/level), (i/level)*(405/level), (i%level+1)*(252/level), (i/level+1)*(405/level),null);

}

icon_button=new ImageIcon[level * level];

for (int i = 0; i < level * level; i++) {

button[i] = new JButtonx();

icon_button[i]=new ImageIcon(image_button[i],i+"");

button[i].setIcon(icon_button[i]);

button[i].num=i;

button[i].addActionListener(this);

panel_right.add(button[i]);

}

button[level*level-1].setVisible(false);

panel.add(panel_right);

menuitem1_1.addActionListener(this);

menuitem1_2.addActionListener(this);

menuitem2_1.addActionListener(this);

menuitem2_2.addActionListener(this);

menuitem2_3.addActionListener(this);

menu1.add(menuitem1_1);

menu1.add(menuitem1_2);

menu2.add(menuitem2_1);

menu2.add(menuitem2_2);

menu2.add(menuitem2_3);

menubar.add(menu1,BorderLayout.WEST);

menubar.add(menu2,BorderLayout.EAST);

menubar.add(panel_menu);

panel_menu.add(label1_1);

panel_menu.add(label1_2);

panel_menu.add(label1_3);

panel_menu.add(label2_1);

panel_menu.add(label2_2);

panel_menu.add(label2_3);

frame.setJMenuBar(menubar);

frame.add(panel);

frame.setBounds(x, y, 508+4, 459+5);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setResizable(false);

frame.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==menuitem1_1)

{

for (int i = 0; i < level*level; i++)

button[i].setVisible(true);

int a[]=new int [level*level];

int index=level*level;

for (int i = 0; i < level*level; i++) {

a[i]=i;

}

for (int i = 0; i < level*level; i++) {

int x=(int)(Math.random()*index);

int temp=a[x];

a[x]=a[index-1];

a[index-1]=temp;

button[i].setIcon(icon_button[a[index-1]]);

if(a[index-1]==level*level-1)button[i].setVisible(false);

index--;

}

win();

}

else if(e.getSource()==menuitem1_2){if(jfc.showOpenDialog(panel)==0)name=jfc.getSelectedFile().getAbsolutePath();frame.setVisible(false);x=frame.getX();y=frame.getY();reset();}

else if(e.getSource()==menuitem2_1){level=4;frame.setVisible(false);x=frame.getX();y=frame.getY();reset();}

else if(e.getSource()==menuitem2_2){level=5;frame.setVisible(false);x=frame.getX();y=frame.getY();reset();}

else if(e.getSource()==menuitem2_3)try {level=Integer.parseInt(JOptionPane.showInputDialog(frame,"請輸入行數:"));frame.setVisible(false);x=frame.getX();y=frame.getY();reset();} catch (Exception e2) {}

else

{

JButtonx but=(JButtonx)e.getSource();

if(but.isVisible())

{

if(but.num-level>=0)judgemengt(but.num,but.num-level);

if(but.num+level<=level*level-1)judgemengt(but.num,but.num+level);

if(but.num%level-1>=0)judgemengt(but.num,but.num-1);

if(but.num%level+1<=level-1)judgemengt(but.num,but.num+1);

}

win();

}

}

public void judgemengt(int i,int j)

{

if(button[j].isVisible()==false)

{

Icon icontemp_button=button[j].getIcon();

button[j].setIcon(button[i].getIcon());

button[i].setIcon(icontemp_button);

button[j].setVisible(true);

button[i].setVisible(false);

}

}

public void win()

{

int i;

for (i = 0; i < level*level-1; i++) {

if(button[i].num!=Integer.parseInt(button[i].getIcon().toString()))break;

}

if(i==level*level-1)

{

JOptionPane.showMessageDialog(frame,"YOU WIN");

}

}

public static void main(String[] args) {

Jigsaw a=new Jigsaw();

a.reset();

}

}

class JButtonx extends JButton

{

int num;

}


⑻ java 實現拼圖游戲電腦隨機打亂電腦自動拼圖的代碼

說說我的想法吧 把一個random隨機數(0~n 和你的圖片數像同)放在一個for循環中 並用if控制產生的隨機數不重復

⑼ 急求用JAVA編寫的圖形化界面拼圖小游戲代碼!

個人見解,總體需要兩個二維數組(一個存儲正確圖片排列 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來比較,用戶的拼圖是否正確。

語言組織能力有限。講不太清楚。

⑽ 這是java拼圖游戲代碼中的一部分,誰能幫我解讀一下啊 我根本看不明白啊

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,自己改下吧
另外,虛機團上產品團購,超級便宜

熱點內容
華為ftp在哪 發布:2024-11-01 22:36:33 瀏覽:288
java數組包含字元串 發布:2024-11-01 22:31:15 瀏覽:791
伺服器和家用電腦質量 發布:2024-11-01 22:28:29 瀏覽:488
sqlserver默認實例 發布:2024-11-01 22:23:42 瀏覽:959
sort排序java 發布:2024-11-01 22:23:26 瀏覽:47
解壓後的apk無法安裝 發布:2024-11-01 22:22:10 瀏覽:666
公司的pop伺服器地址 發布:2024-11-01 22:22:07 瀏覽:119
朵唯m30手機配置是真的嗎如何 發布:2024-11-01 22:16:56 瀏覽:681
夢幻西遊怎麼清理緩存 發布:2024-11-01 22:15:52 瀏覽:345
如何配置fcm 發布:2024-11-01 22:08:15 瀏覽:854