2017-06-29 68 views
0

我正在嘗試創建遊戲Connect Four,並且我使用swing創建了GUI,其中每個「框」都是一個帶有表示玩家顏色的圖像的按鈕。我寫了遊戲的邏輯在其他類,但現在如果我寫這篇文章主要它甚至不會告訴我的按鈕,而如果我只創建一個新的GUI它如何在GUI中實現遊戲的邏輯

public static void main(String[] args) 
{ 
    Connect4 grid = new Connect4(); 
    grid.inizializeGrid(7,6); 
    Connect4GUI GUI= new Connect4GUI(); 
} 

編輯:這些都是2個CLASSE,他們在意大利對不起Forza4 = Connect4

package Forza4; 

import java.util.Random; 

public class Forza4 { 

public boolean aggiungiPedina(int[][]g,int col,int p){ 
    boolean spazio = false; 
    int indiceRiga = -1; 
    for(int i=0;i<g.length;i++){ 
     if(g[i][col]==0){ 
      spazio = true; 
      indiceRiga=i; 
     } 
    } 
    if(!spazio){ 
     return false; 
    } 
    g[indiceRiga][col]=p; 
    return true; 
} 

public int[][] inizializzaGriglia(int n,int m,int t){ 
    int[][] griglia = new int[n][m]; 
    Random r = new Random(); 
    int primoGiocatore = r.nextInt(2)+1; 
    int secondoGiocatore = primoGiocatore==1 ? 2: 1; 
    while(t>0){ 
     int col = r.nextInt(m); 
     boolean aggiunta = aggiungiPedina(griglia, col, primoGiocatore); 
     while(!aggiunta){ 
      col = r.nextInt(m); 
      aggiunta = aggiungiPedina(griglia, col, primoGiocatore); 
     } 
     col = r.nextInt(m); 
     aggiunta = aggiungiPedina(griglia, col, secondoGiocatore); 
     while(!aggiunta){ 
      col = r.nextInt(m); 
      aggiunta = aggiungiPedina(griglia, col, secondoGiocatore); 
     } 
    } 
    return griglia; 
} 

public boolean verificaVittoria(int[][] g, int p){ 
    for(int i=0;i<g.length;i++){ 
     for(int j=0;j<g[0].length;j++){ 
      if(g[i][j]==p){ 
       boolean orizz = verificaOrizzontale(g,i,j,p); 
       boolean vert = verificaVerticale(g,i,j,p); 
       boolean obliquo = verificaObliquo(g,i,j,p); 
       if(orizz||vert||obliquo){ 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 

public boolean verificaOrizzontale(int[][]g,int row,int col,int p){ 
    int cont = 0; 
    for(int j=col;j<g[0].length;j++){ 
     if(g[row][j]==p){ 
      cont++; 

     }else{ 
      break; 
     } 
    } 
    if(cont==4) 
     return true; 
    cont=0; 
    for(int j=col;j>=0;j--){ 
     if(g[row][j]==p){ 
      cont++; 
     }else{ 
      break; 
     } 
    } 
    if(cont==4) 
     return true; 
    return false; 
} 

public boolean verificaVerticale(int[][]g,int row,int col,int p){ 
    int cont = 0; 
    for(int i=row;i<g.length;i++){ 
     if(g[i][col]==p){ 
      cont++; 

     }else{ 
      break; 
     } 
    } 
    if(cont==4) 
     return true; 
    cont=0; 
    for(int i=row;i>=0;i--){ 
     if(g[i][col]==p){ 
      cont++; 
     }else{ 
      break; 
     } 
    } 
    if(cont==4) 
     return true; 
    return false; 
} 

public boolean verificaObliquo(int[][]g,int row,int col,int p){ 
    int cont = 0; 
    for(int i=row, j=col;i<g.length && j<g[0].length;i++, j++){ 
     if(g[i][j]==p){ 
      cont++; 
     }else{ 
      break; 
     } 
    } 
    if(cont==4) 
     return true; 

    cont=0; 
    for(int i=row, j=col;i>=0 && j<g[0].length;i--, j++){ 
     if(g[i][j]==p){ 
      cont++; 
     }else{ 
      break; 
     } 
    } 
    if(cont==4) 
     return true; 

    for(int i=row, j=col;i>=0 && j>=0;i--, j--){ 
     if(g[i][j]==p){ 
      cont++; 
     }else{ 
      break; 
     } 
    } 
    if(cont==4) 
     return true; 

    for(int i=row, j=col;i<g.length && j>=0;i++, j--){ 
     if(g[i][j]==p){ 
      cont++; 
     }else{ 
      break; 
     } 
    } 
    if(cont==4) 
     return true; 
    return false; 
} 
} 


package grafica; 

import javax.swing.*; 
import Forza4.*; 

import java.awt.event.*; 
import java.util.*; 

public class Forza4GUI 
{ private JFrame frame; 

/* INIZIO PARTE DA PERSONALIZZARE */ 

private JButton bottoneN; 
private JLabel etichetta1; 

private ArrayList<JButton> bottoniGriglia; 
/* FINE PARTE DA PERSONALIZZARE */ 

public Forza4GUI() 
{ frame = new JFrame(); 
    frame.getContentPane().setLayout(null); 
    frame.setResizable(false); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    impostaLF(); 
    frame.setVisible(true); 
    inizializzaContenuto(); 
    /* INIZIO PARTE DA PERSONALIZZARE */ 
    frame.setBounds(30, 30, 630,650); 
    frame.setTitle("Forza 4"); 
    /* FINE PARTE DA PERSONALIZZARE */ 
} 

private ImageIcon caricaIcona(String nomeFile) 
{ return new ImageIcon(getClass().getResource(nomeFile)); 
} 

private void impostaLF() 
{ try 
    { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
    } 
    catch(Exception e) 
    { System.out.println(e); 
     System.exit(0); 
    } 
} 

private void inizializzaContenuto() 
{ /* INIZIO PARTE DA PERSONALIZZARE */ 
    bottoneN = new JButton("Nuova Partita");       
    frame.getContentPane().add(bottoneN);     
    bottoneN.setBounds(150, 30, 120, 30);      
    bottoneN.addActionListener(new PressioneBottoneN()); 

    etichetta1 = new JLabel("jj"); 
    frame.getContentPane().add(etichetta1); 
    etichetta1.setBounds(350,30 , 100, 30); 

    bottoniGriglia=new ArrayList<JButton>(); 
    ActionListener listener = new PressioneBottoni(); 
    int x=-90; 
    int k=0; 
    for(int i=1;i<=7;i++) 
    { 
     int y=-10; 
     x+=90; 
     for (int j=1;j<=6;j++) 
     { 
     k++; 
     JButton bottone=new JButton(); 
     frame.getContentPane().add(bottone); 
     bottone.addActionListener(listener); 
     bottone.setActionCommand("" + k); 
     y+=91; 
     bottone.setBounds(x,y,90,91); 
     bottoniGriglia.add(bottone); 
     bottone.setIcon(caricaIcona("PallinoBiancoBordo.png")); 
     } 
    } 

    /* FINE PARTE DA PERSONALIZZARE */ 
} 

/* INIZIO PARTE DA PERSONALIZZARE */ 

private class PressioneBottoni implements ActionListener 
{ public void actionPerformed(ActionEvent e) 
    { 
     System.out.println(e.getActionCommand()); 
    } 
} 

private class PressioneBottoneN implements ActionListener 
{ public void actionPerformed(ActionEvent e) 
    { 
     etichetta1.setText("Ricomincia!"); 
    } 
} 
/* FINE PARTE DA PERSONALIZZARE */ 

public static void main(String[] args) 
{ 
    Forza4 griglia = new Forza4(); 
    griglia.inizializzaGriglia(7,6,1); 
    Forza4GUI GUI= new Forza4GUI(); //DA PERSONALIZZARE CON IL NOME DELLA CLASSE CREATA 
} 
} 
+1

我們需要Connect4'的'代碼和'Connect4GUI'幫助 –

+0

我已經做了,我希望這是可以理解的 – Andreascopp

+0

首先將所有組件添加到頂層容器,然後將其可見屬性設置爲「true」。 –

回答

0

定義構造函數接受的類 「Connect4」 的參數 「Connect4GUI」:

public class Connect4GUI { 
    private Connect4 myConnect4; 

    public Connect4GUI (Connect4 c){ 
      myConnect4 = c; 
    } 

    //.............. 
} 

然後你的主變:

public static void main(String[] args) 
{ 
    Connect4 grid = new Connect4(); 
    grid.inizializeGrid(7,6); 
    Connect4GUI GUI= new Connect4GUI(grid); 
} 

然後,您可以在「Connect4GUI」的方法中訪問「myConnect4」。

編輯:

,你必須從這個新的構造函數中調用默認的構造函數:

public class Connect4GUI { 
    private Connect4 myConnect4; 

    public Connect4GUI (Connect4 c){ 
      this(); 
      myConnect4 = c; 
    } 

    //.............. 
} 
+0

我以這種方式嘗試過,但它啓動的過程中沒有創建與GUI的窗口 – Andreascopp

+0

對不起,但我沒有得到它應該如何工作......我只有一個構造函數需要一個Connect4實例,實際上它給了我一個錯誤 – Andreascopp

+0

代碼(對應於Connect4GUI)中的類「Forza4GUI」具有默認構造函數(不帶參數的構造函數)。現在,它必須有兩個構造函數(默認+新建) – AhmadWabbi