2009-06-06 10 views
11

Hoy es el 25to cumpleaños de Tetris. Creo que escribir Tetris clone es una de las mejores formas de familiarizarse con un nuevo idioma o una plataforma. No es completamente trivial y se presta bien para aprender construcciones específicas del lenguaje como iteradores y cierres.¿Cómo escribir Tetris en Scala? (revisión de código)

He estado escuchando sobre Scala, y finalmente decidí leer algunos documentos y escribir un clon de Tetris. Entonces, este es mi primer código Scala. Intenté utilizar constructos funcionales, pero estoy seguro de que hay muchas cosas que puedo mejorar para hacerlo de forma más Scala. Por favor dame sugerencias usando comentarios. También se aceptan otras presentaciones de clones de Tetris en Scala.

Soy consciente de que la pregunta en sí misma es algo subjetiva, pero creo que tiene algún valor, ya que otros pueden usar esto como código de ejemplo (o anti-ejemplo).

Editar: Déjame reformular la pregunta. ¿Qué puedo hacer para que el código sea más Scala-ish?

+1

¿Cuál es tu pregunta? SO no es un sitio de revisión de código. –

+4

Creo que esto pertenece a refactormycode.com – finnw

+0

Escribir un buen clon de Tetris, adherirse a los estándares de tetris no es muy fácil. Por ejemplo, en el esquema estándar, algunos bloques giran alrededor de las intersecciones de la cuadrícula y algunos giran alrededor de los centros de las celdas, solo para nombrar una cosa. – ziggystar

Respuesta

19

Edit4:

movido el (2009) código original que tuve aquí a un gist.

Recientemente (agosto de 2012) escribí una serie de publicaciones de blog sobre cómo escribir tetrix en Scala. Espero que responda algunas de las preguntas que hice hace tres años.

Editar: Actualizado el código para utilizar de Swing API como sugiere @thatismatt Scala. Además, descubrí que la forma de aprender la codificación del estilo de Scala es leer el libro de Martin Odersky llamado Programming in Scala. En esencia, la forma Scala se desplace gradualmente de estilo imperativo estilo funcional mediante el uso de la estructura inmutable de datos, funciona sin efectos secundarios, la coincidencia de patrones, características, etc.

Edit2: Se ha actualizado el código para utilizar estructuras de datos inmutables etc. Por ejemplo, Block#rotate ahora devuelve un nuevo objeto Block en lugar de modificarse.

Edit3: Actualicé el código para trabajar en Scala 2.8 RC3.

+1

+1 esto responde a casi todas mis preguntas sobre scala, gracias – stacker

+0

No se compila en Scala 2.8 RC2. Lástima, sería un buen ejemplo. –

+1

@ asukasz Lew, inténtelo ahora. Debería funcionar con RC3. –

3

Un pequeño comentario que haría es que está utilizando java.swing en lugar de scala.swing. Mudándose puede ayudarlo a obtener una experiencia más funcional, aunque no es perfecto, ya que es solo una envoltura alrededor de las librerías java. Y la curva de aprendizaje obviamente sería más pronunciada si vienes de un fondo Java ... ¡aunque quizás eso es lo que buscas!

+0

Usar javax.swing podría ayudarlo a compilar mejor. – AlBlue

Cuestiones relacionadas