Skip to content

jjinux/tetris-in-dart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 

Repository files navigation

tetris-in-dart
==============

This is Tetris written in Dart.

To play it, open src/index.html in a modern web browser.

There's also a JavaScript version in tetris-in-javascript.

Updating
--------

Make sure you get the latest, untested version of Dart Editor and use
Tools >> Generate JavaScript when committing a new version of
Game.dart.js.

Credits
-------

This code was inspired by Alexei Kourbatov (http://www.javascripter.net).

Lessons Learned
---------------

 * Don't try to play with DOM elements before the DOM is loaded.  The easiest
   way to achieve this is to import your Dart-compiled JavaScript at the bottom
   of the page.

 * Dart has generics.  This is a little unfamiliar for a scripting guy like me.

 * I had a hard time finding methods like JavaScript's Math.abs and Math.floor.
   They're now members of num.

 * This is how you add to the DOM:

     HTMLDocument doc = window.document;
     HTMLParagraphElement p = doc.createElement('p');
     p.textContent = message;
     doc.body.appendChild(p);

 * Using innerHTML works too, but I suspect it's frowned upon.

 * DOM manipulation isn't as easy as using innerHTML.  It's not quite as
   horrible as I feared, but it's still a pain in the butt.

 * Sometimes you need to use a temporary variable to help out the type system.
   If you write:

     doc.getElementById("s-" + i + "-" + j).src = 'images/s0.png';

   it'll say "'src' is not a member of Element."  However, you can easily fix
   this by writing:

     HTMLImageElement img = doc.getElementById("s-" + i + "-" + j);
     img.src = 'images/s0.png';

 * Translating from JavaScript to well-typed Dart is a linearly time-consuming,
   but relatively straightforward progress.

 * Intelligent code complete is really helpful when you don't know a language
   or its APIs.  I'm definitely slowed down by not being able to use an
   editor whose keybindings I know (like Vim, etc.), but it's still faster than
   looking up APIs by hand all the time.

 * Trying to figure out the proper way to handle keyboard events in Dart is
   hard because of the DOM.  I'm looking at
   (https://developer.mozilla.org/en/DOM/KeyboardEvent), and it looks like
   there are two ways to do things, the deprecated way, and the way that isn't
   implemented yet.

 * Command-g is the usual Apple key to find the next occurrence of something,
   but it doesn't work in Dart Editor.

 * They're working on a new DOM API
   (http://www.dartlang.org/articles/improving-the-dom/).  I've decided not to
   use it until they say it's stable.

 * The way main() works in the Sunflower Example doesn't match the way main()
   works in sample applications generated by Dart Editor.  I'm not sure why.

 * The latest, untested version of Dart Editor has a feature in the Tools menu
   called "Generate Optimized JavaScript".  This reduced the generated
   JavaScript file from 8.9mb to 186k!

About

This is Tetris written in Dart.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published