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:

001public class Tris
002{
003 
004  // Metodo Costruttore
005  // Creo una matrice 3*3 vuota
006  public Tris()
007  {
008    board = new String[rows][columns];
009    for(int i=0; i<rows; i++)
010      for(int j =0; j<columns; j++)
011      {
012          board[i][j] = " ";
013      }
014  }
015 
016  // Metodo che restituisce lo stato della matrice
017  public String tostring()
018  {
019    String r = "";
020    for(int i=0; i<rows; i++)
021    {
022        r = r + "|";
023        for (int j=0; j<columns ; j++)
024          r=r + board[i][j];
025        r = r + "|\n";
026    }
027    return r;
028  }
029 
030  // Metodo che permette di inserire una giocata
031  public void set(int i, int j, String player)
032  {
033      if(board[i][j] != " ")
034      {
035        throw new IllegalArgumentException("Posizione occupata");
036      }
037      board[i][j] = player;
038  }
039 
040  // Metodo che restituisce il nome del giocatore vincitore
041  public String getWinner()
042  {
043    int k = 0;
044    int h = 0;
045    // Verifico se il tris è presente in una riga
046    for(int i=0; i<rows; i++)
047    {
048        for (int j=0; j<columns ; j++)
049        {
050          if(board[i][j]== "x")
051          {
052            k++;
053            if(k==3){ return " VINCE IL GIOCATORE X "; }
054          }
055          else
056          {
057             if(board[i][j] == "o")
058             {
059                h++;
060                if(h==3){ return " VINCE IL GIOCATORE O "; }
061             }
062          }
063        }
064        k=0;
065        h=0;
066    }
067    // Verifico se il tris è presente in una colonna
068    for(int i=0; i<columns; i++)
069    {
070        for (int j=0; j<rows ; j++)
071        {
072          if(board[j][i]== "x")
073          {
074            k++;
075            if(k==3){ return " VINCE IL GIOCATORE X "; }
076          }
077          else
078          {
079             if(board[j][i] == "o")
080             {
081                h++;
082                if(h==3){ return " VINCE IL GIOCATORE O "; }
083             }
084          }
085        }
086        k=0;
087        h=0;
088    }
089 
090    // Verifico se il tris è presente in una diagonale
091    for(int i=0; i<rows; i++)
092    {
093        int j = i;
094        if(board[i][j]== "x")
095        {
096            k++;
097            if(k==3){ return " VINCE IL GIOCATORE X "; }
098        }
099        else
100        {
101           if(board[i][j] == "o")
102           {
103              h++;
104              if(h==3){ return " VINCE IL GIOCATORE O "; }
105           }
106        }
107    }
108    k=0;
109    h=0;
110    int j = 2;
111    for(int i=0; i<rows; i++)
112    {
113        if(board[i][j] == "x")
114        {
115            k++;
116            if(k==3){ return " VINCE IL GIOCATORE X "; }
117        }
118        else
119        {
120           if(board[i][j] == "o")
121           {
122              h++;
123              if(h==3){ return " VINCE IL GIOCATORE O "; }
124           }
125        }
126        j--;
127    }
128    return "" ;
129  }
130 
131  private String[][] board;
132  private static final int rows = 3;
133  private static final int columns = 3;
134}

La classe di test, Gioca.java:

01import java.util.Scanner;
02public class Gioca
03{
04 
05  public static void main(String[] args)
06  {
07      int numGiocate = 0;
08      String player = "x";
09 
10      // Costruisco un nuovo oggetto Tris
11      Tris game = new Tris();
12      Scanner in = new Scanner(System.in);
13 
14      // Procedo con il gioco
15      while(true)
16      {
17          // Giocata del giocatore
18          System.out.println(game.toString());
19          System.out.print("inserisci riga per " + player);
20          System.out.println(" (-1 per uscire): ");
21 
22          int riga = in.nextInt();
23 
24          if (riga < 0) return;
25 
26          System.out.print("Inserisci colonna per " +player);
27          System.out.println(" : ");
28 
29          int colonna = in.nextInt();
30 
31          // Inserimento giocata
32          game.set(riga,colonna,player);
33 
34          // Visualizzo lo stato del tris
35          System.out.println(game.tostring());
36 
37          // Verifico se è presente un vincitore
38          String verifica = game.getWinner();
39          if(verifica.equalsIgnoreCase(" VINCE IL GIOCATORE X ") || verifica.equalsIgnoreCase(" VINCE IL GIOCATORE O "))
40          {
41              // Il gioco termina se un giocatore vince la partita
42              System.out.println(verifica);
43              return;
44          }
45 
46          numGiocate++;
47          if(numGiocate==9)
48          {
49            // Se il tris è pieno e non c'è vincitore, la partita termina
50            System.out.println("NESSUN VINCITORE");
51            return;
52          }
53 
54          // Se ha giocato X allora dopo gioca O, altrimenti viceversa
55          if(player=="x") player = "o";
56          else player = "x";
57      }
58 
59  }
60}

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
×