2009-06-06 10 views
11

Oggi è il 25esimo compleanno di Tetris. Credo che scrivere cloni di Tetris sia uno dei modi migliori per familiarizzare con una nuova lingua o piattaforma. Non è completamente banale e si presta bene all'apprendimento di costrutti specifici del linguaggio come iteratori e chiusure.Come scrivere Tetris in Scala? (revisione del codice)

Ho sentito parlare di Scala e alla fine ho deciso di leggere alcuni documenti e scrivere un clone di Tetris. Quindi, questo è il mio primo codice Scala. Ho provato a usare costrutti funzionali, ma sono sicuro che ci sono molte cose che posso migliorare per farlo in modo più scalato. Per favore dammi suggerimenti usando il commento. Anche altre presentazioni del clone di Tetris in Scala sono benvenute.

Sono consapevole che la domanda vera e propria è in qualche modo soggettiva, ma penso che questo abbia un certo valore poiché altri possono usare questo come codice di esempio (o anti-esempio).

Modifica: fammi riformulare la domanda. Cosa posso fare per rendere il codice più Scala-ish?

+1

Qual è la tua domanda? SO non è un sito di revisione del codice. –

+4

Penso che questo appartiene a refactormycode.com – finnw

+0

Scrivere un buon clone di Tetris, aderire agli standard di tetris non è molto facile. Ad esempio, nello schema standard, alcuni blocchi ruotano attorno alle intersezioni della griglia e alcuni ruotano attorno ai centri delle celle - solo per nominare una cosa. – ziggystar

risposta

19

Edit4:

spostato il (2009) codice originale che ho avuto qui a un gist.

Recentemente (agosto 2012) ho scritto una serie di post di blog sulla scrittura di tetrix in Scala. Spero che risponda ad alcune delle domande che ho fatto tre anni fa.

Edit: Aggiornato il codice per utilizzare di Swing API come suggerito da @thatismatt Scala. Inoltre, ho scoperto che il modo per imparare la codifica in stile Scala è leggere il libro di Martin Odersky chiamato Programming in Scala. In sostanza, il modo in cui Scala sta gradualmente passare da stile imperativo di stile funzionale, utilizzando la struttura immutabile di dati, funzioni senza effetti collaterali, pattern matching, tratti, ecc

Edit2: Aggiornato il codice per utilizzare la struttura di dati immutabili ecc. Ad esempio, Block#rotate restituisce ora un nuovo oggetto Block anziché modificarsi.

Edit3: aggiornato il codice per lavorare su Scala 2.8 RC3.

+1

+1 questo risponde a quasi tutte le mie domande su scala, grazie – stacker

+0

Non si compila in Scala 2.8 RC2. Peccato, sarebbe un bell'esempio. –

+1

@ Łukasz Lew, prova ora. Dovrebbe funzionare con RC3. –

3

Un piccolo commento che farei è che si sta utilizzando java.swing anziché scala.swing. Spostarsi potrebbe aiutarti a ottenere un'esperienza più funzionale, tuttavia non è perfetto, poiché è solo un involucro attorno alle librerie java. E la curva di apprendimento sarebbe ovviamente più ripida se venissi da uno sfondo Java ... anche se forse è quello che stai cercando!

+0

L'uso di javax.swing potrebbe aiutarlo a compilare meglio. – AlBlue