ActionScript + Flexビルダー体験版でつくりました。Flash9が動く環境で動く。

FlexのMXMLとActionScriptでつくるのはHTML+JSを多少豪華にした感じなので、もっと慣れれば楽しそうだと思った。




操作

本体についてるボタンでも操作できますが、カーソルキーでも操作できます。

回転は「↑」か「スペース」。


段々落ちるのがはやくなったり得点をつけてくれたり、下からブロックがでてきたりはしません。次のブロックを表示させるのも忘れてた。

落ちてきたブロックを横一列にそろえて消すだけの簡単なお仕事です。




実物





ソースコード

http://www.at-akada.org/download/tetris.zip




↓仕様書っぽいもの。

全体の構造

Model

##データ構造の定義

  • Block

##落ちてくるテトリスブロック

    • 固定パラメーター
      • type - int[4] * int[4]
    • パラメーター
      • direction(方向) - int #ユーザーの操作によって変化
      • fallingSpeed(落下速度) - int #ユーザーの操作によって変化
      • position(位置) - int * int #ブロックの左上を基準点とする。positionはその点の座標を[x,y]の配列で表現する。

  • Field

##テトリスのゲームが展開されるフィールド

    • 固定パラメーター
      • SIZE int * int
      • DIR.LEFT
      • DIR.RIGHT
      • DIR.DOWN
      • DIR.TURN
    • パラメーター
      • 「Currentブロック」Block #現在落ちてくる途中のブロック
      • 「state」int[] * int[] #fieldの状態。0=>何もないスペース, 1=>落ちてくる途中のブロック, 2=>積ったブロック。
    • Method
      • pushToBlockSpace(n:int)
      • pushToAllSpace(n:int) #CurrentBlockの場所、またはすべての場所に0,1,2のいずれかをpushする
      • canMove(dir:uint) #Field.DIRのいずれかの項目をわたす。
      • eachLine(fn:Function)
      • updateState() #Blockの位置などをstateに反映


View

##見た目を表現する部分

基本的にはField#state を描画するだけ。


Controller

##ユーザーの操作やゲームの進行を処理する部分

  • TaskManager

##ユーザーの操作および背景操作をスタックに積み、一定時間ごとにFieldに反映する

  • push
  • execAll

#ユーザー操作

    • turn

Currentブロックを回転させる

    • speedUp

Currentブロックの落下速度を上昇させる

    • moveLeft
    • moveRight

Currentブロックを移動させる


#背景操作。ユーザーが直接呼びださない操作

  • nextBlock

次のブロックを出現させる操作

  • adjustLine

ブロックが一列揃った場合の操作

  • falling

ブロックを下げていく処理




処理の流れ

基本はメインループの繰り返し。


開始

メインループ

終了: 得点など?




メインループの内容

  • ユーザーの操作を受けつける
  • ブロックが落ちる処理など背景操作を実行
  • Fieldの状態を変化させる(Field#updateState)
  • ゲームオーバーの判定。Fieldの一番上の行に2(積ったブロック)があればゲーム終了
  • 変化した状態を描画に反映する
    • #すべての操作はTaskManagerに積まれる
    • #ループの最後にTaskManagerに積んである操作をまとめて実行する

コメント(7)

# グエン

テトリス、やってみたが途中でエラーが出た。

(2008/02/12 18:00)
# atakada

ちょっと直したのでもう大丈夫なのではないか。

(2008/02/12 18:15)
# グエン

出来るようになった。

ゲームオーバー後もブロックが生産され続ける
回転軸がブロックの端の方になっていて違和感がある

くらいかな気付いた点は。

(2008/02/12 18:35)
# atakada

あー、テトリスをながらくやってないので、その辺の細かな動作がよくわからない。とりあえず普通のテトリスをやって思いださねば。

(2008/02/12 18:42)
# shim

下を押すといきなり下まで落ちるのはやめてほしい。
と少しさがって、それから元の速度にもどるべき。

(2008/02/15 16:05)
# atakada

知らなかったんだけど、最近のテトリスはそうらしいっすね。
いずれにせよ、もう大体修正は終わっているのですぐまた改訂版をアップします。

(2008/02/15 21:53)
# giantmtb1

I’ve been browsing for a very long time, trying to find something very special in Internet. It’s hard to imagine, how much time I spent searching for sensations. I have tried to find something interesting and not very serious, just to enjoy reading it. I can’t believe that I’m finally here and that I found everything I was looking for. Interesting information, interesting people. That’s exactly what I needed.

(2008/04/ 7 0:59)

コメントする

トラックバック(0)

このブログ記事を参照しているブログ一覧: テトリスできたよー\(^o^)/

このブログ記事に対するトラックバックURL: http://www.at-akada.org/mt/mt-tb.cgi/881

著者について

赤田敦

nightly[at]at-akada.org

紹介: about

ホーム: at-akada.org

-> 携帯電話用

なかなか更新されないときは...

-> 赤田ブログ生成器

2009年1月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31