Fabio Donatantonio

Resta connesso

Software Developer / Adjunct Professor

Esercizio 30 – Semplice gioco del TRIS

Implementare una semplice versione del gioco del tris.
Realizzare quindi una matrice (3×3) come struttura dati di base e fornire i seguenti metodi:

  • set(riga, colonna, simbolo) [inserisce una giocata]
  • toString() [stampa lo stato della matrice]
  • getWinner() [stampa l’eventuale vincitore]

Lanciare un’eccezione di tipo IllegalArgument qualora la posizione scelta per l’inserimento di una giocata sia già occupata.
Realizzare una classe di test denominata Gioca.java.

[In un prossimo esercizio riprenderemo il Tris fornendo un’interfaccia grafica  e ulteriori metodi]

La classe Tris.java:

public class Tris
{

  // Metodo Costruttore
  // Creo una matrice 3*3 vuota
  public Tris()
  {
    board = new String[rows][columns];
    for(int i=0; i<rows; i++)
      for(int j =0; j<columns; j++)
      {
          board[i][j] = " ";
      }
  }

  // Metodo che restituisce lo stato della matrice
  public String tostring()
  {
    String r = "";
    for(int i=0; i<rows; i++)
    {
        r = r + "|";
        for (int j=0; j<columns ; j++)
          r=r + board[i][j];
        r = r + "|\n";
    }
    return r;
  }

  // Metodo che permette di inserire una giocata
  public void set(int i, int j, String player)
  {
      if(board[i][j] != " ")
      {
        throw new IllegalArgumentException("Posizione occupata");
      }
      board[i][j] = player;
  }

  // Metodo che restituisce il nome del giocatore vincitore
  public String getWinner()
  {
    int k = 0;
    int h = 0;
    // Verifico se il tris è presente in una riga
    for(int i=0; i<rows; i++)
    {
        for (int j=0; j<columns ; j++)
        {
          if(board[i][j]== "x")
          {
            k++;
            if(k==3){ return " VINCE IL GIOCATORE X "; }
          }
          else
          {
             if(board[i][j] == "o")
             {
                h++;
                if(h==3){ return " VINCE IL GIOCATORE O "; }
             }
          }
        }
        k=0;
        h=0;
    }
    // Verifico se il tris è presente in una colonna
    for(int i=0; i<columns; i++)
    {
        for (int j=0; j<rows ; j++)
        {
          if(board[j][i]== "x")
          {
            k++;
            if(k==3){ return " VINCE IL GIOCATORE X "; }
          }
          else
          {
             if(board[j][i] == "o")
             {
                h++;
                if(h==3){ return " VINCE IL GIOCATORE O "; }
             }
          }
        }
        k=0;
        h=0;
    }

    // Verifico se il tris è presente in una diagonale
    for(int i=0; i<rows; i++)
    {
        int j = i;
        if(board[i][j]== "x")
        {
            k++;
            if(k==3){ return " VINCE IL GIOCATORE X "; }
        }
        else
        {
           if(board[i][j] == "o")
           {
              h++;
              if(h==3){ return " VINCE IL GIOCATORE O "; }
           }
        }
    }
    k=0;
    h=0;
    int j = 2;
    for(int i=0; i<rows; i++)
    {
        if(board[i][j] == "x")
        {
            k++;
            if(k==3){ return " VINCE IL GIOCATORE X "; }
        }
        else
        {
           if(board[i][j] == "o")
           {
              h++;
              if(h==3){ return " VINCE IL GIOCATORE O "; }
           }
        }
        j--;
    }
    return "" ;
  }

  private String[][] board;
  private static final int rows = 3;
  private static final int columns = 3;
}

La classe di test, Gioca.java:

import java.util.Scanner;
public class Gioca
{

  public static void main(String[] args)
  {
      int numGiocate = 0;
      String player = "x";

      // Costruisco un nuovo oggetto Tris
      Tris game = new Tris();
      Scanner in = new Scanner(System.in);

      // Procedo con il gioco
      while(true)
      {
          // Giocata del giocatore
          System.out.println(game.toString());
          System.out.print("inserisci riga per " + player);
          System.out.println(" (-1 per uscire): ");

          int riga = in.nextInt();

          if (riga < 0) return;

          System.out.print("Inserisci colonna per " +player);
          System.out.println(" : ");

          int colonna = in.nextInt();

          // Inserimento giocata
          game.set(riga,colonna,player);

          // Visualizzo lo stato del tris
          System.out.println(game.tostring());

          // Verifico se è presente un vincitore
          String verifica = game.getWinner();
          if(verifica.equalsIgnoreCase(" VINCE IL GIOCATORE X ") || verifica.equalsIgnoreCase(" VINCE IL GIOCATORE O "))
          {
              // Il gioco termina se un giocatore vince la partita
              System.out.println(verifica);
              return;
          }

          numGiocate++;
          if(numGiocate==9)
          {
            // Se il tris è pieno e non c'è vincitore, la partita termina
            System.out.println("NESSUN VINCITORE");
            return;
          }

          // Se ha giocato X allora dopo gioca O, altrimenti viceversa
          if(player=="x") player = "o";
          else player = "x";
      }

  }
}

Cliccando qui è possibile scaricare il codice completo.

Fabio Donatantonio

Fabio Donatantonio. Analista e sviluppatore full-stack di applicazioni web in linguaggio PHP. Professore a Contratto per le cattedre di Fondamenti di Informatica e Archivistica Digitale presso Università degli Studi eCampus. Dal 2008 curatore del sito www.donatantonio.net, da sempre appassionato di programmazione, mare, sigari e... musica.

Leave a reply

Your email address will not be published. Required fields are marked *

 

Didattica

Università degli Studi eCampus
Data Evento
09/02/2021
14:30
Esame Archivistica Digitale e Informatica per le Scienze Umane - Cds Letteratura, Lingua e Cultura Italiana - Lettere
09/02/2021
14:30
Esame Introduzione all'Archivistica Digitale e all'Informatica per le Scienze Umane - Cds Letteratura, Arte, Musica e Spettacolo - Lettere
09/02/2021
17:30
Esame Abilità Informatiche e Telematiche - Cds Design e Discipline della Moda - Lettere
09/02/2021
17:30
Esame Abilità Informatiche e Telematiche - Cds Letteratura, Arte, Musica e Spettacolo - Lettere
Risorse
Guida HTML/CSS per principianti (link)
Introduzione agli ipertesti (link)
Esercizi guidati in Java (link)
Intelligenza artificiale (link)
Libri
Fondamenti di Informatica (2011) (link)
Informatica per le Scienze Umane (2011) (link)
Fondamenti di Informatica (2014) (link)
Pagina Docente
uniecampus.it - Scheda Docente (link)
Contatti
fabio.donatantonio[at]uniecampus.it

JWhisper, sviluppato presso il Dipartimento di Informatica Applicata dell'Università degli Studi di Salerno:

Stay Connected

Twitter

Le mie foto

Foto di Fabio Donatantonio
×