如何在GUI中实现游戏的逻辑

问题描述:

我正在尝试创建游戏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”。 –

定义构造函数接受的类 “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