Giter Club home page Giter Club logo

tris's People

Contributors

ace-miky avatar gvnnz avatar

Stargazers

 avatar

Watchers

 avatar  avatar

tris's Issues

Nuova funzione `get_matrix_column`

@Ace-Miky scrivi una funzione get_matrix_column per ottenere la colonna di una matrice.

La funzione prende in input una matrice e un intero che indica la colonna che ti interessa. La funzione poi ritorna una lista con tutti i valori della colonna.

Nuova funzione `all_equal` per verificare che una lista abbia tutti valori uguali

@Ace-Miky crea una funzione all_equal che prende in input una lista numerica e un intero symbol_value (che può essere 1 o 2 e che corrisponde al valore del simbolo o o x). La funzione ritorna True se la lista contiene tutti valori uguali a symbol_value. Esempio:

list_one = [1,1,1,1,1]
list_two = [1,2,0,0,1]
all_equal(list_one, 1) # True
all_equal(list_one, 2) # False
all_equal(list_two, 1) # False
all_equal(list_two, 2) # False

La useremo per capire se c'è una vittoria con la issue #9.

Nuova funzione `parse_input`

@Ace-Miky scrivi una funzione che trasforma la stringa inserita dall'utente in qualcosa da passare alla funzione set_matrix_element che abbiamo già fatto.

Nel dettaglio, la funzione prende in input la stringa tipo XNM, la analizza e ritorna tre valori:

  • 1 o 2 (come interi) per il simbolo X (avevamo detto che 0 è per le celle vuote)
  • un intero che corrisponde alla riga N
  • un intero che corrisponde alla colonna M

Ad esempio per la stringa "x12" la funzione ritorna 1, 1 e 2. Per ritornare valori multipli da una funzione puoi usare una lista o una tupla. La tupla forse è meglio perché è immutabile (è più sensato).

Ovviamente diamo per scontato che la stringa in input sia già stata validata da is_valid_input che abbiamo fatto nella issue #1 . Anzi ci mettiamo anche un assert all'inizio di parse_input per essere sicuri al 100%.

Inserimento nome giocatori (nome vuoto del player2 accettato)

Occhio @gvnnz ,
che se il player1 inserisce il nome, poi il player2 inserisce lo stesso nome del player1 e poi lo inserisce ancora ma vuoto il programma continua accentando il nome vuoto invece di stampare il messaggio di errore per poi richiedere il nome, MANNAIVEN!!!

Quindi sintetizzando se il player2 dopo avere inserito lo stesso nome del player1 inserisce un nome vuoto, quel nome vuoto viene erroneamente accettato

Nuova funzione `is_valid_input`

@Ace-Miky prepara la funzione is_valid_input che prende in input la stringa inserita dall'utente (quella ottenuta da input(...)) e verifica se è valida, ritornando un valore booleano.

Abbiamo definito la stringa in input del tipo XNM dove:

  • I caratteri sono sempre e solo tre
  • X può essere solo x o o (vedi tu se deve essere per forza minuscolo)
  • N e M possono essere solo di tipo numerico intero
  • N deve essere inferiore al numero di righe della matrice
  • M deve essere inferiore al numero di colonne della matrice

Quindi ad esempio x11 è un input valido, o99 e rax non lo sono.

Refactoring: classe Player

Al momento abbiamo un po' di variabili relative al giocatore sparse in giro per il codice. @Ace-Miky introduciamo una nuova classe Player con due proprietà: il nome del giocatore il suo simbolo associato. In questo modo raggruppiamo le variabili relative al giocatore in una classe, così da rendere il tutto più chiaro/leggibile.

Cambio automatico del giocatore

Al momento sono i due giocatori che si alternano manualmente. Facciamo in modo che sia il programma ad alternare i turni. Questo semplifica l'input, perché non serve più inserire il simbolo x oppure o: bastano le coordinate.

Evitare di sovascrivere i simboli

Al momento è possibile sovrascriverli, tipo mettere una X dove già c'era una O. Anche sovrascrivere il proprio simbolo, perdendo così il turno. @Ace-Miky dovrebbe bastare un controllo: si possono inserire simboli solo nelle celle della matrice vuote.

Nuova funzione `is_winner`

@Ace-Miky Crea una nuova funzione is_winner che prende in input la solita matrice e un intero symbol_value (che può essere 1 o 2 e che corrisponde al valore del simbolo o o x). La funzione ritorna un booleano che dice se il player con un certo simbolo è vincitore o meno. Esempio:

matrix = [
    [0, 1, 2],
    [1, 1, 1],
    [2, 0, 2]
]

is_winner(matrix, 1) # True
is_winner(matrix, 2) # False

Questa funzione usa internamente all_equal che abbiamo discusso nella issue #7 e anche le varie funzioni per prendere le righe, le colonne e le diagonali della matrice.

Nuova funzione `get_matrix_row`

@Ace-Miky scrivi una funzione get_matrix_row per ottenere la riga di una matrice.

La funzione prende in input una matrice e un intero che indica la riga che ti interessa. La funzione poi ritorna una lista con tutti i valori della riga.

def is_valid_input

def is_valid_input(input_string):
if (
input_string[0] != "o"
and input_string[0] != "x"
or input_string[1] != "0"
and input_string[1] != "1"
and input_string[1] != "2"
or input_string[2] != "0"
and input_string[2] != "1"
and input_string[2] != "2"
):
print(False)
else:
print(True)

Nuova funzione `get_matrix_diagonal`

@Ace-Miky scrivi una funzione get_matrix_diagonal per ottenere la diagonale di una matrice.

La funzione prende in input una matrice e un valore booleano che indica la direzione della diagonale. Puoi fare che True ritorna quella in un verso, False quella in un altro (vedi tu come preferisci). La funzione poi ritorna una lista con tutti i valori della diagonale.

Edit: ho trovato i nomi ufficiali di queste diagonali: main diagonal e antidiagonal: https://en.wikipedia.org/wiki/Main_diagonal

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.