2013-04-14 2 views
0

C'est la première fois que je travaille avec une interface graphique. Je ne peux juste pas sembler envelopper ma tête autour de manipuler avec elle. J'ai l'impression que la réponse est simple (et j'en suis désolé), mais je ne peux tout simplement pas entrer dans ma tête. :/Connect Four; Confusion de tableau 2D

J'ai un tableau JLabel 2D chaque ensemble à une image par défaut ImageIcon. J'ai des boutons au-dessus de chaque colonne spécifiant le numéro de colonne. Dans la méthode actionPerformed, j'ai ce pour chaque bouton:

if(e.getSource()== (whatever column number button name)) 
{ 
} 

Je ne sais pas comment ajouter le jeton à la ligne la plus basse sur le jeton indiqué, je pense qu'après que je trouve la dernière ligne réglée sur ImageIcon p0 , Je vais devoir le régler sur pR ou pB en fonction de la couleur du lecteur. Mais je ne sais pas comment écrire une boucle qui trouvera la cellule la plus basse avec p0 stockée ou comment garder la trace de la couleur du joueur.

final ImageIcon p0 = new ImageIcon("Board.jpg");// default board box 
final ImageIcon pR = new ImageIcon("Red.jpg"); 
final ImageIcon pB = new ImageIcon("Black.jpg"); 

JLabel [][] connectFourBoardComp = new JLabel[6][7]; 
for(int row=0, count=6; row<1; row++) 
{ 
    for(int col=0; col<7; col++, count++) 
    { 
      connectFourBoardHumn[row][col].setIcon(p… 
      System.out.println(connectFourBoardHumn[… 
    } 
} 

Toute aide sera appréciée! Merci! :)

Répondre

0

Pour garder une trace de la couleur du joueur actuel, changer juste la couleur à chaque fois qu'un utilisateur joue:

if (nextColor == pR) { 
    nextColor = pB; 
} 
else { 
    nextColor = pR; 
} 

Pour trouver la première ligne avec l'icône de p0 (en supposant que la ligne la plus basse est à l'index 0), boucle juste sur les rangées jusqu'à trouver le:

int firstEmptyRow = connectFourBoardComp.size(); // default case: the the row is full of tokens 
for (int i = 0; i < connectFourBoardComp; i++) { 
    if (connectFourBoardComp[i][column] == p0) { 
     firstEmptyRow = i; 
     break; // break out of the loop 
    } 
} 
+0

** Merci beaucoup pour votre réponse! Est-ce ce que j'écrirais ?: 'if (e.getSource() == buttonCompCol0) { \t \t \t \t int firstEmptyRow = connectFourBoardComp.size(); // cas par défaut: la rangée est pleine de jetons \t \t \t for (int i = 0; i Elva02

+0

Non. Si vous l'avez fait, vous calculer la première ligne vide pour rien, puisque vous ne l'utilisez pas. La dernière instruction doit être: 'if (firstEmptyRow = connectFourBoardComp.size(). –

+0

Quel serait le problème avec la répétition du code pour chaque colonne? Si j'ai fait une méthode séparée, est-ce ce que je dois faire?: Dans la méthode 'actionPerformed', pour chaque bouton, je définirais' int column' sur le nombre correspondant et j'appellerais une méthode. Cette méthode vérifie et assigne 'firstEmptyRow' et place les jetons en fonction de la couleur. Suis-je en train de saisir cela correctement? Merci encore pour votre aide. – Elva02