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