Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

posizioni pedine da catturare

L
Larenzz03 (5990 points)
3 14 65
in HW8 by (6.0k points)
closed by

Ho un dubbio, ho creato una funzione a parte per verificare se giocando una pedina in quella posizione il giocatore corrente può catturare alcune pedine dell'avversario. Se ci sono pedine catturabili viene creata una nuova scacchiera con le pedine catturate e viene aggiunta alla lista. Dunque, in quale modo sarebbe meglio procedere?

1. La mia funzione viene utilizzata per verificare quali pedine dell'avversario possono essere catturate dal giocatore corrente se gioca una pedina nella posizione (riga, colona). Se ci sono pedine catturabili, la funzione restituisce una lista di tuple che rappresentano le posizioni di queste pedine. Altrimenti, il ciclo viene interrotto. Ma ho pensato che comunque bisogna controllare: le caselle adiacenti nella stessa riga, le caselle adiacenti nella stessa colonna e diagonali...

2. Utilizza una lista di tuple per definire le direzioni in cui cercare le pedine catturabili invece di utilizzare cicli. 

direzioni_controllo = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)]

La lista di tuple direzioni_controllo rappresenta le direzioni in cui cercare le pedine catturabili intorno alla casella (riga, colonna).

Per ogni direzione, la funzione cicla finché non trova o una casella vuota o una pedina del giocatore corrente. Se trova una pedina del giocatore corrente, significa che le pedine dell'avversario in quella direzione possono essere catturate, quindi vengono aggiunte alla lista. Se invece trova una casella vuota o una pedina dell'avversario che non è adiacente a una pedina del giocatore corrente, significa che non ci sono pedine catturabili in quella direzione, quindi il ciclo viene interrotto.

Ora, quale metodo potrebbe essere migliore? non so se il secondo può essere utilizzato, sono bloccata su questi controlli, aspetto consigli :)

384 views
closed

1 Answer

Best answer
m
mecostagliola (2480 points)
2 4 18
by (2.5k points)
selected by
Allora quello che posso suggerirti è semplificare il controllo:

prendi in considerazione che se non  c'è uno spazio vuoto tu non puoi fare mosse quindi sposta il controllo direttamente su quello(quando ne trovi una, controlli il player opposto sull'intorno).

Facendo così eviti di controllare inutilmente dei player opposti che non hanno spazi vuoti intorno.