More Related Content
What's hot (20)
PDF
Symfony2 How to create your Bundlechobi e
KEY
Mojoliciousをウェブ制作現場で使ってみてるjamadam
PDF
Inside Movable Type純生 野田
PDF
MT meets PHP - PHP conference Kansai 2013純生 野田
PDF
やはりお前らのMTMLは間違っている!純生 野田
PDF
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)Rui Hirokawa
PDF
Zend Frameworkで始める携帯サイト清水樹
PDF
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
Viewers also liked (8)
PDF
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドkeroyonn
Similar to Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう (20)
PDF
Facebook, LinkedIN & Beyond - or how the new media changed how sales people d...AdNerds
ODP
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜勝成 鈴江
PPT
C++0x in programming competitionyak1ex
Recently uploaded (8)
PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdfChikakoInami1
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログkataware
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
- 1. Perl Hobby Programming - Games::BeLike::EightBITターミナルで8ビット風ゲームを作ろうゲーム製作協力(画像提供): nekokak氏谷内 元 twitter@keroyonn_ / Hokkaido.pmYAPC::Asia 2011
- 2. 自己紹介WEB系プログラマ in Hokkaido.pm仕事のメイン:Java/Flex/ExtJS-> 最近Perl趣味のメイン:C# + WPF+ Perlちょっとずつ違う素敵なID達cpan : keroyonhttp://search.cpan.org/~keroyon/github : keroyonnhttp://github.com/keroyonntwitter : keroyonn_http://twitter.com/keroyonn_hatena :keroyon0630http://d.hatena.ne.jp/keroyon0630YAPC::Asia 2011
- 27. 簡単なゲームを作ってみるその2 プレイヤーの移動#!/usr/bin/envperluse Games::BeLike::EightBIT;my $stage = create_stage('stage1');my $plane = create_plane('stage1:main');my $player_bitmap = create_bitmap()->load_text("111\n222\n333");my $player = create_sprite({bitmaps => $player_bitmap, x=> 20, y=>10});$plane->add($player);$stage->keymap( { h => sub { $player->{x} -= 2 }, l => sub { $player->{x} += 2 }, j => sub { $player->{y} += 2 }, k => sub { $player->{y} -= 2 }, q => sub { $stage->exit; }, });$stage->run;YAPC::Asia 2011適当なステージ名ステージ名:プレーン名
- 28. 簡単なゲームを作ってみるその3 敵キャラと当り判定#!/usr/bin/envperluse Games::BeLike::EightBIT;my $stage = create_stage( 'stage1', { debug => 1 } );my $plane = create_plane('stage1:main');my $player_bitmap = create_bitmap( undef, [ { x => 0, y => 0, w => 6, h => 3 } ] ) ->load_text("111\n222\n333");my $player = create_sprite({ bitmaps => $player_bitmap, x => 20, y => 10, is_hit => 1 } );$player->on_hit( sub { $stage->exit; } );$plane->add($player);my $oni_bitmap = create_bitmap( undef, [ { x => 0, y => 0, w => 6, h => 3 } ] ) ->load_text("444\n555\n666");my $oni = create_sprite( { bitmaps => $oni_bitmap, x => 40, y => 10, is_hit => 1 } );$plane->add($oni);キーマップは省略$stage->run;YAPC::Asia 2011当り判定領域当り判定ON
- 29. 簡単なゲームを作ってみるその4 敵キャラの移動$oni->animation( 'moving', { type => 'custom',on_frame => sub { my ($sprite) = @_; my $dx = $player->{x} - $sprite->{x}; my $dy = $player->{y} - $sprite->{y}; my $d = sqrt $dx*$dx + $dy*$dy; my $vx = $dx/$d; my $vy = $dy/$d; $sprite->{x} += $vx; $sprite->{y} += $vy; }, })->play;YAPC::Asia 2011スプライトproperty, keyframe, customかもしれないフレームごとのハンドラプレイヤーを追いかける
- 31. 簡単なゲームを作ってみるその5 タイトルの追加2sub create_title { # ステージとプレーンmy $stage = create_stage( 'title', { debug => 1 } ); my $plane = create_plane('title:main'); # タイトルmy $message = create_message({ message => 'The Onigokko', y => 15 } ); $plane->add($message); $stage->keymap( { 'any' => sub { $stage->exit; }, } ); return $stage;}YAPC::Asia 2011文字を描画したビットマップをセットしたスプライトを返す
- 32. 簡単なゲームを作ってみるその5 タイトルの追加3sub create_gameover { # ステージとプレーンmy $stage = create_stage( 'title', { debug => 1 } ); my $plane = create_plane('title:main'); # タイトルmy $message = create_message({ message => 'GAME OVER', y => 15 } ); $plane->add($message); $stage->keymap( { 'any' => sub { $stage->exit; }, } );return $stage;}YAPC::Asia 2011
- 33. 簡単なゲームを作ってみるその5 タイトルの追加4sub create_stage1 { # ステージとプレーンmy $stage = create_stage( 'stage1', { debug => 1 } ); my $plane = create_plane('stage1:main');省略 ー さっきのメインプログラムがここに全部入る return $stage;}YAPC::Asia 2011
- 34. 簡単なゲームを作ってみるその6 画像を利用する1YAPC::Asia 2011画像はPNGで書き出したものを独自形式(gb8形式)に変換します。実績があるのは Fireworks ですが、通常のパターンエディタでも(PNG書き出しができれば)いけます。ゲームの実行ファイルのある場所に、images/ と patterns/ というフォルダを作成し、images に pngファイルを入れ、patterns に gb8 を書き出すのが推奨です。
- 35. 簡単なゲームを作ってみるその6 画像を利用する2sub create_title { # ステージとプレーンmy $stage = create_stage( 'title', { debug => 1 } ); my $plane = create_plane('title:main'); # タイトルmy $title = create_sprite({bitmaps => create_bitmap('oni_title.gb8')}); $plane->add($title); $stage->keymap( { 'any' => sub { $stage->exit; }, } ); return $stage;}YAPC::Asia 2011独自フォーマット
- 54. png2gb8 –output pattern/ images/簡単なゲームを作ってみるその7 もっと複雑なゲームを作るには1YAPC::Asia 2011sub create_stage1 {my $stage = create_stage( 'stage1', { debug => 1 } ); my $plane = create_plane('stage1:main'); # プレイヤーmy $player = Player->new; $plane->add($player); # 鬼my $oni = Oni->new; $plane->add($oni); # キーマップ$stage->keymap( { 'h' => sub { $player->left; }, 'l' => sub { $player->right; }, 'j' => sub { $player->down; }, 'k' => sub { $player->up; }, 'q' => sub { $stage->exit; }, } ); return $stage;}継承クラスを作成して利用継承クラスを作成して利用
- 55. 簡単なゲームを作ってみるその7 もっと複雑なゲームを作るには2YAPC::Asia 2011package Oni;use base 'Games::BeLike::EightBIT::Sprite';use Games::BeLike::EightBIT;sub new { my ( $pkg, $args ) = @_; my $self = { name => 'oni', x => 450, y => 190,on_hit => \&_on_hit,is_hit => 1, }; $self = $pkg->SUPER::new($self); return $self;}
- 56. 簡単なゲームを作ってみるその7 もっと複雑なゲームを作るには3YAPC::Asia 2011sub _init_bitmap { my $hitareas = [ { x => 0, y => 0, w => 32, h => 16 } ]; my @bitmaps = (); for my $index (1..3) { push @bitmaps, create_bitmap( "oni${index}.gb8", $hitareas); } return { default => [$bitmaps[0]],walking => [$bitmaps[2], @bitmaps], };}ハッシュを返す
- 57. 簡単なゲームを作ってみるその7 もっと複雑なゲームを作るには4YAPC::Asia 2011sub _init_animation { my ($self) = @_; $self->animation( 'walking‘, { duration => 0.5, repeat => 1 })->play; $self->animation( 'moving', { type => 'custom',on_frame => sub { my ($sprite) = @_; my $player = get_sprite('stage1:main:player'); 省略$sprite->{x} += $vx; $sprite->{y} += $vy; }, } )->play;}1;walkingビットマップを勝手にアニメーションしてくれる
- 58. 今後の展望YAPC::Asia 2011テスト、ドキュメント、例外処理 -> cpanうpゲーム開始時のシステムチェック(画面解像度、256色)line と paint を実装して、古くさい懐しいグラフィックを実現全方向のスクロール(実は今横スクロールしか作ってない)雛形作成用スクリプトの作成配布用スプリプトの作成(パッケージングしてくれるやつ)ひらがなとカタカナ、記号の表示(美咲フォントを組込予定)レベル(マップ)エディタへの対応RPGなどのゲームを作る際の便利な Util(吹き出しとか)公式サイトの開設(ゲーム紹介のポータルサイト)ネットワークとか?アニメーションのバリエーションを拡充(easein/outとか)年末の Advent Calendar あたりまでに何とかしたい