Il modo migliore per progettare il gioco degli scacchi [chiuso]

0

Questa è una domanda teorica e scusami se non è chiaro, sono nuovo in questo campo.

Il fatto è che mi è stato chiesto di progettare un gioco di scacchi in un'intervista (java / android.) E il mio intuito era che P. Norvig è un designer molto buono e conosciuto, e che il gioco è molto simile agli scacchi. Così ho cercato di imitare il suo design del pocker. Per quanto mi è stato possibile ricordare e capire.

Tuttavia, l'intervistatore ha affermato che è la prima volta che vede un impianto di questo problema per enumerazione. E che una corretta implementazione dovrebbe avere classe per ogni pezzo (perché ?!). In realtà ho chiesto perché, e la risposta è stata che ogni pezzo ha regole molto complicate (ma per me queste regole sembrano essere semplici.)

È sbagliato progettare un gioco di scacchi come quello (con l'enumerazione)? Qual è l'approccio migliore per progettare un semplice programma di scacchi in Java? E perché?

Ringrazio molto coloro che possono far luce su questo argomento.

    
posta sivi 13.11.2015 - 11:39
fonte

1 risposta

7

Sono uno sviluppatore di motori di scacchi, quindi posso dirtelo - nessun approccio è accettabile. Un gioco di scacchi professionale lo fa quasi sempre in una specie di struttura dati speciale come una cassetta postale o bitboard. Perché? Per esempio, per scoprire le mosse per un alfiere, dovresti passare in rassegna i quadrati che il pezzo può muovere su una tavola vuota mentre controlli i pezzi nemici. Questa è un'operazione molto lenta e dovrai ripetere lo stesso loop per la torre. Cosa succede se vuoi generare tutti i quadrati che i tuoi pezzi possono attaccare ma i tuoi avversari non possono? Ciò comporterebbe un sacco di loop inutili. Bitboard ti consente di fare tutto ciò in O (1). Nel bitboard è possibile eseguire un'operazione AND su due schede rappresentate da due numeri interi a 64 bit.

Detto questo, è probabile che il tuo intervistatore si sia semplicemente aspettato una soluzione orientata agli oggetti. Non penso che sia una risposta giusta o sbagliata, ma vorrei andare per le lezioni. Consentire il design orientato agli oggetti renderebbe i futuri aggiornamenti più facili. È possibile modificare l'implementazione sottostante senza influire sul resto del programma. È anche possibile creare nomi di funzioni facili da leggere come p.move, mentre non è possibile con l'enumerazione. Inoltre dovresti probabilmente copiare e incollare un blocco switch ogni volta che devi fare qualcosa per il tuo pezzo. OO l'ho evitato con un'interfaccia astratta.

    
risposta data 13.11.2015 - 11:59
fonte

Leggi altre domande sui tag