Warning: Undefined array key "tbm_guide_level" in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Undefined array key "tbm_guide_level" in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Undefined array key "tbm_guide_level" in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Undefined array key "tbm_guide_level" in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113
React: un Tic-Tac-Toe (Tris) interattivo in versione Web | HTML.it
Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

React: un Tic-Tac-Toe (Tris) interattivo in versione Web

Come realizzare un gioco del Tris (Tic-Tac-Toe) interattivo utilizzando per le nostre pagine Web con il framework React.
Come realizzare un gioco del Tris (Tic-Tac-Toe) interattivo utilizzando per le nostre pagine Web con il framework React.
Link copiato negli appunti

Il Tris, noto anche come Tic-Tac-Toe, è un gioco classico che ha intrattenuto diverse generazioni di persone, con l'avvento delle moderne tecnologie web e framework come React, sviluppare una versione digitale di questo gioco intramontabile è diventato più facile che mai. In questo articolo affronteremo i passaggi necessari per costruire un semplice gioco del Tris utilizzando React, fornendo il codice e lo stile necessari per dargli vita.

Prerequisiti: installazione di Node.js e NVM

Prima di iniziare, assicurati di avere installato Node.js sul tuo computer. Node.js è un ambiente che ti permette di eseguire codice JavaScript al di fuori di un browser. È utile anche per applicazioni React e per gestire le dipendenze del progetto.

Installazione di NVM

Dopo aver installato Node.js, ti consigliamo di installare NVM (Node Version Manager). Consente infatti di gestire facilmente diverse versioni di Node.js sul sistema e di passare da una versione all'altra senza problemi. Questo è particolarmente utile se stai lavorando su più progetti che richiedono più versioni di Node.js.

Installazione di NVM su Linux e macOS

Apri il Terminale ed esegui il comando seguente per scaricare e installare NVM:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

Oppure, se preferisci, puoi usare wget:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

Dopo aver installato NVM riavvia il Terminale o esegui il comando seguente per caricarlo:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

Verifica che NVM sia stato installato correttamente eseguendo:

nvm --version

Installazione di NVM su Windows

Su Windows puoi utilizzare un'app chiamata nvm-windows. Scarica l'installer poi estrailo dall'archivio zippato e avvialo. Segui le istruzioni per completare l'installazione e aqssicurati di aggiungere NVM al tuo PATH.

Dopo l'installazione, apri il terminale di Windows (cmd o PowerShell) e verifica che NVM sia installato correttamente:

nvm --version

Installazione di Node.js tramite NVM

Puoi scaricare Node.js dal sito ufficiale del progetto. Le versioni disponibili sono due: la LTS (Long Term Support) e la Current. Consigliamo di installare la versione LTS, più stabile e adatta per la maggior parte degli sviluppatori.

Una volta che NVM è installato puoi facilmente installare Node.js con:

nvm install --lts

Per una versione specifica di Node.js, ad esempio la 20.6.1, esegui:

nvm install 20.6.1

Per passare ad una versione installata di Node.js utilizza:

nvm use

Verifica poi la versione di Node.js attualmente in uso:

node -v

Impostazione iniziale del progetto

Dopo aver installato Node.js e NVM, è tempo di creare un nuovo progetto React. Utilizzeremo create-react-app per generare automaticamente la struttura del progetto e installare tutte le dipendenze necessarie. Esegui quindi il comando seguente nel terminale:

npx create-react-app tris

Dopo che il progetto è stato creato, naviga nella sua directory ìe avvia il server di sviluppo per vedere l'app in esecuzione:

cd tris
npm start

Ora, iniziamo a costruire il gioco!

Creazione del componente TicTacToe

Per prima cosa, devi creare un nuovo componente chiamato TicTacToe. All'interno di questo componente importerai React e userai useState per gestire lo stato del gioco. Ecco come fare:

import React, { useState } from "react";
import "./TicTacToe.css"; // Aggiungeremo stile in seguito

export default function TicTacToe() {
  // Qui aggiungeremo il codice del gioco
}

Hai creato il componente di base nonché importato React e useState CSS

Variabili di stato

Dentro il componente TicTacToe dobbiamo definire alcune variabili di stato. Esse permetteranno di tenere traccia di chi ha il turno, di come è organizzata la griglia e di determinare il vincitore. Ecco le variabili di stato da aggiungere:

const [turn, setTurn] = useState("X");  // Il gioco inizia con il turno di "X"
const [cells, setCells] = useState(Array(9).fill(""));  // Creiamo 9 celle vuote per la griglia
const [winner, setWinner] = useState(null);  // Nessun vincitore all'inizio

Cosa fanno queste variabili?

  • turn
  • cells
  • winner null

Definire le combinazioni vincenti

Nel Tris si vince quando un giocatore riesce a piazzare tre dei suoi simboli (X o O) consecutivi su una riga, colonna o diagonale. Per fare ciò dobbiamo definire queste combinazioni vincenti all'interno di una costante chiamata combos:

const combos = {
  across: [[0, 1, 2], [3, 4, 5], [6, 7, 8]],  // Tutte le righe orizzontali
  down: [[0, 3, 6], [1, 4, 7], [2, 5, 8]],   // Tutte le colonne verticali
  diagonal: [[0, 4, 8], [2, 4, 6]]           // Le due diagonali
};

Le combinazioni rappresentano i gruppi di celle che formano una riga, una colonna o una diagonale. Questi verranno usati per controllare se uno dei giocatori ha vinto.

Gestione dei click sulle celle

Ora dobbiamo creare una funzione che gestisce i click su ciascuna cella. Quando un giocatore clicca su una cella vuota dovremo aggiornare quella cella con il simbolo del giocatore attuale (X o O), cambiare il turno e controllare se qualcuno ha vinto:

const handleClick = (num) => {
    if (cells[num] !== "" || winner) return;  // Se la cella non è vuota o c'è già un vincitore, ignoriamo il click

    let squares = [...cells];  // Creiamo una copia dell'array delle celle
    squares[num] = turn;  // Aggiorniamo la cella cliccata con il simbolo del giocatore attuale
    setCells(squares);  // Aggiorniamo lo stato delle celle
    checkWinner(squares);  // Controlliamo se qualcuno ha vinto
    setTurn(turn === "X" ? "O" : "X");  // Cambiamo il turno: se era X, diventa O, altrimenti viceversa
  };

Questa funzione:

  • verifica se la cella è già occupata o se c'è già un vincitore, in quel caso non fa nulla.
  • Crea una copia dell'array cells turn
  • Dopo aver aggiornato la cella chiama la funzione checkWinner
  • Infine, cambia il turno: se era il turno di "X" diventa "O" e viceversa.
  • Controllare se c'è un vincitore

    Ora, dobbiamo creare una funzione che controlli se uno dei giocatori ha vinto. Useremo le combinazioni vincenti che abbiamo definito prima e confronteremo lo stato attuale delle celle. Ecco il codice per la funzione checkWinner:

    const checkWinner = (squares) => {
        for (let combo in combos) {
          combos[combo].forEach((pattern) => {
            if (
              squares[pattern[0]] !== "" &&
              squares[pattern[0]] === squares[pattern[1]] &&
              squares[pattern[1]] === squares[pattern[2]]
            ) {
              setWinner(squares[pattern[0]]);  // Se c'è una combinazione vincente, aggiorniamo il vincitore
            }
          });
        }
      };

    Nel dettaglio:

    • la funzione scorre attraverso tutte le combinazioni vincenti (righe, colonne, diagonali).
    • Per ogni combinazione, verifica se le tre celle coinvolte sono uguali e non sono vuote.
    • Se c'è una corrispondenza, aggiorna lo stato winner

    Mostrare il risultato

    Infine, dobbiamo visualizzare il vincitore (se c'è). All'interno del componente TicTacToe possiamo aggiungere un messaggio che mostra chi ha vinto.

    return (
      <div className="game">
        <h1>Tic Tac Toe</h1>
        <div className="board">
          {cells.map((cell, index) => (
            <div key={index} className="cell" onClick={() => handleClick(index)}>
              {cell}
            </div>
          ))}
        </div>
        {winner && <p>Vincitore: {winner}!</p>}  // Mostriamo il vincitore se esiste
      </div>
    );

    In questo modo, stiamo creando una griglia 3x3 con le celle. Ogni cella può essere cliccata per fare una mossa e se c'è un vincitore lo mostriamo sotto la griglia.

    Conclusione

    Congratulazioni! Hai appena completato lo sviluppo di un gioco del Tris utilizzando React. Attraverso questo progetto hai imparato a costruire un'applicazione interattiva, gestendo lo stato e implementando la logica necessaria per rendere il gioco dinamico e coinvolgente.

    Non solo hai visto come importare e utilizzare i componenti, hai anche acquisito competenze fondamentali nella gestione delle interazioni utente e nel controllo delle condizioni di vittoria.

    Questo gioco non è solo un ottimo esercizio per migliorare le tue abilità con React, è anche essere un punto di partenza per progetti futuri più complessi. Puoi arricchirlo con nuove funzionalità come un sistema di punteggio, la possibilità di ripartire o l'aggiunta di un'intelligenza artificiale per sfidare i tuoi amici.

    Sperimenta, divertiti e continua a esplorare il mondo dello sviluppo web. Ogni progetto che realizzi è un passo avanti verso la tua crescita come sviluppatore!

Ti consigliamo anche