投稿

ラベル(ActionScript)が付いた投稿を表示しています
2状態の2次元 セルオートマトン(Cellular Automaton) をActionScript 3.0 (AS3)で作ってみた。2次元セルオートマトンで最も有名なのは ライフゲーム(Conway's Game of Life) だろう。プログラムでは初期ルールをライフゲームとしている。初めにC++で書こうと思ったのだけど、Web上でグラフィカルに操作できないとつまらないと思い、AS3でFlashとして作成し wonderfl に登録することにした。ついでに時間的なエントロピー変化を視覚的に認識できたら面白そうだと思ったので、それについても実装した。 今回、セルオートマトンのコードを書こうと思ったのは TCO Marathon Round 2 の問題として出されたからだ。2次元セルオートマトンのサイズと初期配置、それにルールが与えられ、指定した世代で生存セルが最大になるように初期配置を変更しろという問題だ。そして、問題を解くために色々と調べているうちにセルオートマトンが面白く感じられたのでブログ記事にしてみた。とは言っても今回のコードはコンテストのような特別なチューンなどはしていない。ビット配列や剰余テーブルなどは使っているがどちらかというと読みやすさを優先させている。 作成したプログラムを以下に示す。 Cellular Automaton - wonderfl build flash online 1-9 : ルール設定 - セルの周りの生存セル数(0-8)に対応 : '.' 死亡, '&' 変化, '+' 誕生, '=' 維持 SPACE : 一時停止 ENTER : リセット V : メッセージ表示/非表示 Z : 初期生存セルの割合を減少 X : 初期生存セルの割合を増加 最初に実行されるルールはライフゲームだ。つまり、セルの回りに2つの生存セルがあった場合、そのセルは現状「維持」となり、3つの生存セルがあればそこに生存セルが「誕生」する。生存セルが1つ以下か4つ以上の場合は死亡セルとなる。また、上端と下端、右端と左端は繋がっていて周期境界条件となっている。現在のルール設定はFlash画面の左下に [..=+.....
1 件のコメント
前回 に引き続き、今回もCookie関連の記事だ。 ITmedia の ユーザーが制御できない「秘密cookie」、半数強のサイトが利用 という記事で、「ユーザーが削除したHTTP cookieを、Flash cookieを使って復活させているケース」があると書かれているが、技術的には簡単だ。 まず、HTMLのhead内にJavaScriptでdocument.cookieを設定・取得する関数を定義する。Flash (ActionScript 3.0)側では、flash.external.ExternalInterfaceを利用してHTTP Cookieを取得する。もし、取得できなければFlash Cookie (Local Shared Object, LSO)の取得を試みる。両方とも取得できない場合は、初めての利用と判断される。どちらか一方を取得できたのなら、もう一方に対して取得した値を渡す。これにより、どちらかが削除されたとしても再読み込みした際に、HTTP CookieとFlash Cookieとで同期され、削除されたデータは復元する。 異なるCookieの同期はデータの永続性を強固にする利点があるが、削除したつもりのデータが実は消えていないということも起こり得るわけで、セキュリティの面からするとあまり良くないかもしれない。これを防ぐためには、Cookieの制御に関する正しい知識を持つしかないだろう。 前回の記事 でも書いたが、Flash Cookieについては グローバルストレージ設定パネル の「今後表示しない」を選択することで禁止することができる。既に書き込まれているFlash Cookieは、 Webサイトの記憶領域設定パネル から、削除や禁止、ディスク容量の調整などが行える。また、HTTP Cookieについてはブラウザの設定で削除できる。 最後に、「 ActionScript 3.0でFlash Cookieを利用する 」で作成したプログラムを、HTTP CookieとFlash Cookieとで同期させるように変更してみたので、そのソースコードを以下に示しておく。赤字は前回からの修正箇所となる(クラス名などは除く)。使用する際は、HTMLのhead内に、 <script language="JavaScript...
コメントを投稿
ユーザーが制御できない「秘密cookie」、半数強のサイトが利用 という ITmedia の記事を読んで、実際どの程度のものかを理解するためにActionScript 3.0でFlash Cookieを利用してみた。因みに、ここで言う秘密CookieやFlash Cookieはローカル共有オブジェクト(Local Shared Object, LSO)と呼ばれるもので、Flash PlayerがユーザーのPCに保存するデータのことだ。 早速、ActionScript 3.0でLSOを利用したFlashコンテンツを作成してみた。作成するに当たって、 ActionScript 3.0コンポーネントリファレンスガイド の SharedObject を参考にした。 プログラムはコンテンツを読み込んだ回数をLSOに保存する。初めてコンテンツを読み込んだ場合は、「初めてお会いしますね」と表示され、2回目以降は「お会いするのは2回目ですね」のように表示される。また、LSOの保存領域が保存するデータよりも小さい場合は「ここは狭すぎます…」、保存が禁止されている場合は「私を拒絶するのですか?」と出力される。保存したデータを削除する場合は、エスケープキーを押すことで「さよなら…」と出て削除される。 LSOの制御方法だが、 グローバルストレージ設定パネル の「今後表示しない」を選択することでLSOを禁止することができる。また、ディスク容量を0KBにすると、禁止はされないが容量不足により書き込みができなくなる。既に書き込まれているLSOについては、 Webサイトの記憶領域設定パネル により、削除や禁止、ディスク容量の調整などが行える。 Flash Cookie、そこまで騒ぎ立てるほどのものではないと思うが、気になる人は設定で禁止なり削除なりすればよいと思う。コンテンツ制作者側からすれば便利なのは確か。 以下、ソースコード。 SharedObjectTest.as // SharedObjectTest by nox, 2009年8月14日 package { import flash.display.Sprite; import flash.text.* import flash.events.*; import f...
コメントを投稿
ウェブ上でActionScript 3.0のコードを書いてサーバ上でコンパイルでき、しかもそれをそのままFlashとして公開できてしまうというサイト、 wonderfl が面白い。早速、適当な短いコードをコンパイル・公開してみた。簡単だ。 鏡文字 MirrorImagedText - wonderfl build flash online 文字を打ち込むと鏡文字になるFlash。最初にクリックしないとアクティブにならないかも。 ところでGoogle Chromeだと正常にコンパイルができなかったな。仕方がないのでFirefoxを使った。うーむ。
コメントを投稿
お菓子をくれなきゃ、いたずらするぞ! Trick or Treat! ということで、ハロウィン。ActionScript 3.0を使って10分ほどで作成。カボチャをクリックすると色が変わる。 以下に、ソースコードを示す。 Halloween.as // Halloween.as // by nox, 2008年10月31日 package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.utils.Timer; public class Halloween extends Sprite { // dafont.com http://www.dafont.com/ [Embed(systemFont="Halloween Borders", fontName="HalloweenFont", mimeType="application/x-font" )] private static const HalloweenFont:Class; private var txtHalloween:TextField = new TextField(); private var HalloweenStageWidth:int, HalloweenStageHeight:int; private var timer:Timer; private function ClickHandler(event:Event):void { var format:TextFormat = txtHalloween.getTextFormat(); format.color = Math.random() * 0xFFFFFF; txtHalloween.setTextFormat(forma...
コメントを投稿
クリスマスあたりを目処に簡単なゲームをActionScript 3.0で作ろうかと思って、その雛型を作ってみた。雛型なんでホントに形だけだけど。それでも赤と緑の色合いとクリスマスソングで気分だけはクリスマスっぽくなるなぁ。それにしても未だにActionScript 3.0の使い方がこんなんで良いのか疑問に思う。なんだか無駄の多いコードのような気がする。 以下のFlashコンテンツをマウスクリックなどでアクティブにして適当なキーを押すと始まる。MP3だけで2.5MBあるので少し重いかも。尚、 音が鳴るので注意 すること。因みに飛んでいる天使をクリックすると…。 BGMに taitai studio の フリーMp3素材集 からHappy Christmas Partyを利用させてもらった。また、効果音は 効果音g から。フォントについては dafont.com からクリスマス関連のフォントを使用した。 以下、ソースコード。 ActionXmas.as // ActionXmas.as // by nox, 2008年10月29日 package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.utils.Timer; public class ActionXmas extends Sprite { // taitai studio http://www.taitaistudio.com/ // taitai studio フリーMp3素材集 http://www.taitaistudio.com/mp3/ [Embed(source="xmas.mp3")] private static const SoundXmas:Class; // 効果音g http://sfxg.bufsiz.jp/index.html [Embed(sou...
2 件のコメント
てっく煮ブログ の AS3で埋め込みフォントを使うテクニック で使う文字だけを埋め込む便利なスクリプトがPerlのワンライナーで書かれていたので、連続する文字に対応させてPythonで実装。 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys def main(args): # 引数がなければ標準入力、あればそのファイル名から読み込み. f = file(args[1]) if len(args) > 1 else sys.stdin # 文字を読み込み、重複しないようにソートして配列に格納. letters = sorted(set([ord(s) for l in f for s in unicode(l.rstrip("\n"))])) # 小さい順に標準出力に表示. 文字コードが連続している場合は - で繋げて出力. sys.stdout.write("U+%04X" % letters[0]) pre_s = letters[0] is_seq = False for s in letters[1:]: if s - pre_s == 1: is_seq = True elif is_seq: sys.stdout.write("-U+%04X,U+%04X" % (pre_s, s)) is_seq = False else: sys.stdout.write(",U+%04X" % s) pre_s = s if is_seq: sys.stdout.write("-U+%04X" % pre_s) if __name__ == "__main__": main(sys.argv) 例えば、以下の文字を使いたい場合、 ぁぃぅぇぉ あいうえお かきくけこ abcdefg xyz これを上記のス...
コメントを投稿
ここのところ、ゲームクリエイターの人材発掘に力を入れているようだ。SCEJからはクリエイター発掘支援プログラム「 PlayStation@C.A.M.P! 」、MSからはXNA Game Studioによる「 マイクロソフト XNA ゲーム クリエーター コンテスト 2008 」が開催される。 これらの内容をみるととても魅力的だ。自分が学生だったら迷わず参加していただろう。しかし、こうやって魅力的なコンテストなどを行っていかないと(もしくは行っても)なかなか良いクリエイターが見つからないのが今のゲーム業界なのかもしれない。 自分が一番最初にゲームのアイデアやシナリオを考えたのは小学生のころだった。そのころはインベーダーゲームが流行っており、それに対しとても惹きつけられたのを思い出す(もちろん ゲームセンターあらし はお気に入りだった)。もっとも、小学生で小遣いもあまりなかったので、実際にはアーケードゲームはほとんどプレイしなかったのだが。 その当時に作ったシューティングゲームのアイデアは以下の通り。まず、雑魚敵は多種多様に存在し、画面の半分以上を占めるような非常に大きなボス敵がいる。そのボス敵を倒すのは非常に困難で、短い間だけ開閉される出入り口にミサイルを何発も命中させなければならない。その間に弾幕攻撃と執拗な雑魚敵の襲来があるというものだった。もちろん、方眼紙を使って、それぞれの敵をデザインし、何枚も使ってどのように敵が動くのかも描いたものだ。今考えるととても幼稚に思えるが、後年、実際にそんなコンセプトを持つシューティングゲームがたくさん出てきた。 今では多種多様なゲームが作られており、自分が小学生の頃に思い描いたような理想のゲームを自分自身で考えるということはなくなってしまっているのかもしれない。ゲームを考えるのはプロであって、自分たちではないと思っているのだろう。確かに、ゲームはより複雑になり、たくさんの人たちの連携で作成されるようになった。一人が、シナリオを書いて、イラストを作り、音楽を考え、プログラムを組むという時代ではなくなったかもしれない。それでも、本当に面白いアイデアというのは個人の発想力がモノを言うと思う。 最後にプログラミングの観点から。個人的にはゲームを作るためのプログラム言語はActionScript 3.0が良いように思...
コメントを投稿
最近、ActionScript 3.0のコーディング規約を知った。 Flex SDK coding conventions and best practices ActionScript 3.0 コーディング規約の日本語訳 これが正しいとすると、自分の書いたコードは結構間違っていたりする。こういった規約が定まっているなら今度からはこれに従ったほうが良さそうだ。 基本としては、アンダースコア方式(単語と単語の間にアンダースコア_を挟む。例…underscore_style)は使わないで、クラス名にアッパーキャメルケース(UCC、単語の先頭を大文字にして連結させる。例…UpperCamelCase)、メソッド、変数、パッケージ名などにローワーキャメルケース(LCC、単語の先頭を大文字にして連結させるが最初の文字だけ小文字にする。例…lowerCamelCase)を用いるようだ。あとは、パッケージ名は名詞で、メソッドの先頭は動詞を使うとか。 個人的にはあまりLCCは好きじゃないんだけどな。でも、プログラム言語によってコーディングスタイルをかなり変えているにも関わらず、あまり混乱することはないなぁ。行末の「;」などは時々間違えることがあるけど。
コメントを投稿
ずいぶん前からActionScript 3.0(以下、AS3)を覚えようと思っているのだが、未だに手付かずの状態だ。それでも少しぐらいは触っておこうと思ったので、前回の ShootNumbers に引き続き、入力したテキストをそのまま鏡文字で出力するFlashアプリを作ってみた。こんなのは初歩の初歩だと思うが、AS3については素人であるので致し方ない。 ところで、Flashはこのブログの投稿記事に埋め込められないので、サイドバーの一番下に入れてみた。大したプログラムでもないのでそのうち外すかも。 で、問題の中身だが、AS3の流儀なんてほとんど知らないので、妙なコーディングしているかもしれない。その辺は勘弁して欲しい。キャレットの表示などを入れたりしたら思ったよりもコード量が増えてしまった。うーむ。肝心なのは、フォントをEmbedで埋め込む必要があることだろう。埋め込まないと文字の反転や回転ができない。 以下に示すソースコードを mxmlc MirrorImagedText.as として、コンパイルすればswfファイルを作成できる。使い方は普通にキーボードから文字を打ち込めばよい。バックスペース、改行が可能。マウス左クリックで全消去。 MirrorImagedChar.as // MirrorImagedChar class by nox package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.utils.Timer; import flash.events.TimerEvent; public class MirrorImagedChar extends Sprite { [Embed(systemFont='Courier New', fontName='myFont', mimeType='application/x-font...
コメントを投稿
ActionScript 3.0によるシンプルなFlashゲーム、 ShootNumbers を作ってみた。落ちてくる数字をすばやくマウスクリックで消していく。消した数字がそのまま得点になる。BGMが終了するまでにできるだけ多くの得点を挙げることが目的だ。因みにFlashを利用しているが制作するために必要なツールはすべて無料だ。 今年になって Adobe Flash CS3 Professional がリリースされ、搭載されているプログラミング言語ActionScriptがバージョン3.0になった(Flexでは昨年)。前々からFlashには興味はあったのだが、如何せん価格が高い。アドビストアでは、通常価格で88,000円、アカデミック価格で33,600円もする。1ヶ月だけ使えるお試し版もあるが、ある程度時間が取れるときでないとほとんど使わずじまいになる可能性が高い。そこで、 Flex 2 SDK を利用してみることにした。これはFlex Builder 2のコア部分のみを利用でき、オーサリングツールなどはついておらず、純粋にActionScript 3.0(およびMXML)のコンパイルのみが行える。それでもずっと無料で使えるのでActionScript 3.0を試しに使ってみるには最適だろう。 ActionScriptを使うのはほぼ初めてなので、まず、 Flashリソース や Flexドキュメンテーション などを読み漁ってみた。C++やJavaなどのオブジェクト指向プログラム言語をある程度理解していれば問題なさそうだ。実際、すぐにプログラムを書き始めても何とかなった。マニュアルを読みつつ作った ShootNumbers も一日もかからず仕上げられたし。因みに、PDFによるドキュメントではすべてを網羅したリファレンス的なマニュアルは用意されていないようだったので、ウェブによる ActionScript 3.0 コンポーネントリファレンスガイド も多用した。 ShootNumbers を作った際に感じたのは、マルチメディア系の素材の扱いが非常に楽ということだ。サウンド、画像、動画、等々。また、タイマーやキーボード・マウスなどの処理はすべてイベントドリブン方式だ。今回のプログラムでは、主にサウンドとタイマーについてActionScript 3.0の威力を実感...
コメントを投稿