したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

おちゃめくらぶ掲示板

1318御茶目菜子:2012/09/16(日) 21:04:17
PETIT RUN mkII完成
非公式のプチコンコンテストは昨日で作品の投稿を締め切られたにょ。
http://wiki.hosiken.jp/ptcmcon/?FrontPage
全部で集まった作品数は21だけど個人主催のコンテストだからこんなものだと思われるにょ。
私が昔開催したポケコンコンテストは第1回の時は作品数は9だったからね。
http://ww5.tiki.ne.jp/~ochame/E500/CONTEST.HTM
当時のポケコンの勢いと今のプチコンの勢いだとプチコンの方が上だろうからね。

さて、私はこのコンテスト用に新作を作ろうと思っていたけど良いアイデアが浮かばなかった
のですでに発表済みのプチコンプログラムの新バージョンを作ることにしたにょ。
ということで目を付けたのはPETIT RUNにょ。
このゲームはプレイ動画の再生数が私の自作プログラムの中でトップを誇りそれなりに人気が
高いものとなっているにょ。
このPETIT RUNは独自の3D表示アルゴリズムを搭載しているとはいえ、シンプルで分かりやすい
ためにプチコン講座の方でもこの仕組みについて書いているにょ。
http://ww5.tiki.ne.jp/~ochame/petitcom/p006.htm
しかし、当時は全力を尽くして作ったこのPETIT RUNも今見てみると気になる点がたくさん
見つかってしまったにょ。
それらを改善することでさらに完成度が高まるから適当なアイデアの新規作品を作るよりは
良いのではと考えたにょ。(ただ動くだけのプログラムなら作るならば簡単だけどバランス
調整やバグ取りをしたりといった完成度を高める作業を行うためには時間が全然足らないし)

というわけで出来たのがPETIT RUN mkIIにょ。
http://wiki.hosiken.jp/ptcmcon/?Toukou%2FPETIT%20RUN%20mkII
http://www.youtube.com/watch?v=L62Aj9qYIbQ
1画面プログラムコーナーにはPETIT RUN for mkIIというプログラムがあるけどこれは単に
mkIIの速度向上を実感してもらうためにメインルーチンのループ数を増やして高精細化した
だけのものなのでPETIT RUNの問題点に関しては全く手を付けてないので今回発表した
PETIT RUN mkIIとは別物にょ。

このPETIT RUN mkIIが前作PETIT RUNと異なっている点を挙げると下記のようになるにょ。

 (1)限界までのリスト短縮
 (2)リトライ機能
 (3)トップタイム表示
 (4)視点移動
 (5)表示変更
 (6)挙動変更

(1)PETIT RUNは初代プチコン用プログラムとしては末期に作ったものだけどそれでもそれ
以降に会得したリスト短縮テクニックがあるし、mkIIによって新規に搭載された命令などを
使えばさらにリスト短縮が可能になるからね。
1画面プログラムのように上限サイズが決まっている場合はリスト短縮テクニックが非常に
重要となっているのだけど実はプチコンの1画面プログラムの場合は「1行当たり29文字」と
いうさらにもう1つの制約があるのが厄介な部分であり面白い部分でもあるにょ。
つまり、「いかにリストを短縮するか」というのも重要だけど「いかに29文字×24行を有効に
使うか」というのも重要になってくるにょ。

PETIT RUNでは最大で696文字(29文字×24行)使える中で664文字使ったにょ。
これは使用率は95.4%で空き文字数は32文字となっているにょ。
95%を越えればリストを見ただけでもぎゅうぎゅう詰めというのが分かると思われるため
普通に考えればPETIT RUNは十分に限界まで使い尽くしているという感じにょ。
しかし、PETIT RUN mkIIでは690文字使っているにょ。
これは使用率は99.1%となっており、空き文字数はわずか6文字分にょ。
パズルを作るようにして処理を分解再構築を繰り返してようやくここまでのものが実現
できたにょ。
私が知る限りではプチコンの1画面プログラムでここまで限界まで詰め込んだものは過去に
存在しないのではないかと思われるにょ。
それによって(2)〜(6)の機能拡張も可能になったにょ。

(2)私はPSS(ポケコンソフト統一規格)でも記しているように1回のプレイ時間の短いものは
リトライ機能を付けることを推奨しているにょ。
これはリストの短い2LINEプログラムで本来はPSSの対象外になっているものでさえも搭載
しているにょ。
しかし、プチコン用1画面プログラムでは初期のものには搭載していたものの「ピョン子」
以降しばらく搭載しておらず、前作のPETIT RUNにも搭載していないにょ。
これはプチコンの1画面プログラムを作る場合はリトライ機能を搭載するのが大きな負担に
なっていたからにょ。

単にリトライで使うボタンをIF文等で判定してGOTOでリストの先頭にジャンプするだけとは
いえ、IF文の条件式やBUTTON()関数の文字数も1画面プログラムを作る場合には馬鹿には
ならないにょ。
そしてさらに問題なのはジャンプはラベルのみとなっているけどラベルのある行には他の
命令はかけないため実質29文字分の領域が失われてしまうにょ。
これは1画面プログラムにとっては致命的といってもいいレベルにょ。(これが致命的には
ならないと感じる人だったら他に短縮する余地がいくらでもあると思われる)

プチコンにおいては[START]ボタンをRUN+[ENTER]として使用することができるために
リトライ機能は無くてもそれほど困ることは無かったもののmkIIではホームメニューが搭載
されるようになったためホームメニュー上で動作可能ということが求められるにょ。
リトライ機能を搭載せず、1回のゲームが終わるごとに終了するプログラムではホーム
メニューでプレイした際にはゲームオーバーになった瞬間にメニュー画面に戻るという
問題点があるためリトライ機能の搭載の重要性が高まったにょ。
しかし、ごく単純な方法でリトライ機能を搭載する方法が分かったのでプチコンオリンピック
シリーズではすべてリトライ機能を搭載できこのPETIT RUN mkIIにも搭載しているにょ。

(3)ハイスコアを争うゲームならばハイスコア表示、タイムを競うゲームならばトップタイム
表示は必要不可欠だと私は思っているにょ。
しかし、前作のPETIT RUNではそれは搭載ができなかったにょ。
変数Tに現在のプレイのタイム、変数Dにトップタイムが入っている場合にはD=D+(D>T)*(T-D)で
変数Dに新たなトップタイムが入る(これをIF文で記述すればIF D<T THEN D=Tとなり両者とも
15文字で変わらないけどIF文は行末を有効利用できないため配置位置が固定されるためリスト
短縮がしにくいし、論理式だとカッコの後はコロンが不要であるため実質1文字リスト短縮
できている)わけだけどそれ以外にもトップタイムの表示処理が厄介にょ。
というのもこのゲームの場合は有効数字を小数第2位までにしているため確実に小数点以下が
発生するこのゲームでは整数化が必要不可欠だからにょ。

トップタイムの整数化を不要にするには1秒を1.2秒として扱う(1/60秒を1/50秒として
扱う)「なんちゃって1秒」にするのが簡単にょ。
1/50秒単位にすれば整数でカウントして表示するときに50で割ればいいので整数化する
必要もなく表示は小数第2位までになるにょ。
単純だけど現実時間との誤差が大きいことやタイムの下一桁に偶数しかでないというのが
味気ないということでこのゲームでは1/60秒を1/65秒として扱っているにょ。(22秒
ジャストより21秒99というタイムが出た方が熱いしね)
こうすることで整数化は必要になるものの現実との誤差が少なくなおかつリスト短縮を
可能にしているにょ。(どうしても29文字に収まらない他の行を29文字に抑えるために
こうする必要があった)
とはいえ、必要不可欠でありながら前作では搭載してなかったトップタイムの搭載は
タイムアタック重視のこのゲームにおいては非常に大きなものだといえるにょ。

(4)PETIT RUNに搭載している3D表示アルゴリズムは視点変更を考慮したものになっている
けれど前作のPETIT RUNには視点変更は搭載していないにょ。
これは単純に当時のリスト短縮テクニックでは搭載が難しかったというだけのことであり
妥協した部分ともいえるにょ。
せっかく考えたのにもったいないということで視点変更を重視したPETIT RUN Dを作った
けれどこちらは後方視点とドライバー視点をリアルタイムで選択できるようにした
反面でリストが長くなってしまったため画面表示を簡略化せざるを得なくなったにょ。

しかし、PETIT RUN mkIIは視点変更を導入しつつ画面表示はPETIT RUN以上のものに
なっているにょ。
とはいえ、PETIT RUN mkIIではドライバー視点は導入していないにょ。
これは情報量の少なさからドライバー視点でのプレイが難しいことがPETIT RUN Dを作る
ことで分かったからにょ。
ということで導入されているのは左右の視点移動のみとなっているにょ。
左右視点のみとはいえ実際のプレイ時の操作感は大きく変わったにょ。
それが明確に分かるのは直線道路を走っているときにょ。
視点移動のない前作のPETIT RUNでは道路が単純に左右に動いているだけであり自キャラを
左右に動かしているという感覚が希薄だったけど視点移動があることで左右移動時に
ちゃんと左右に移動しているという感覚が味わえるようになったからね。
こういった操作感の向上はゲームにおいて非常に重要だと私は考えているにょ。

(5)PETIT RUN mkIIでは表示もわずかにパワーアップしているにょ。
1つはmkIIでは処理速度が向上しているためループ回数を増やしその分だけ高精細になって
いるにょ。
これはfor mkIIですでに実現していることだけどね。
もう1つが道路外の表示にょ。
道路の疑似3Dスクロールは白線の移動によって行われているけど道路外となる草地の部分は
同じように濃い緑と薄い緑を交互に表示することで実現しているにょ。
ただし、PETIT RUNでは濃い緑は白線と同じ狭い幅であり、少し違和感があったにょ。
リスト短縮によって余裕ができたため濃い緑と薄い緑を同じ幅にして草地部分がスムーズに
スクロールしているように見えるようになったにょ。

(5)大幅なリスト短縮をした関係上、設定上の最高速度はPETIT RUN mkIIはPETIT RUNと
変えざるを得なくなったにょ。
このゲームは上記の講座にあるように速度とカーブの曲率はベストな状態になるように
バランス調整しているためバランスの再調整を行っているにょ。
それとPETIT RUNでやや問題だったのは急カーブに速度を落とさずに進入してぶつかりつつ
曲がった方がぶつからずに曲がるより速いタイムが出る場合があるということにょ。
なぜそのような事態になってしまうかというとこのゲームではぶつかった(道路の範囲外に
出た)場合には1フレームごとに大きく減速してしまうのだけど前作のPETIT RUNでは
速度に比例した速度分が減速となったため一定以上の速度まで落ちるとぶつかっても
あまり減速しないためにょ。
つまり、急カーブに進入するまでのタイムが稼げるため速度を落とさずにぶつかりながら
曲がった方がタイムが速くなる場合があるということにょ。

ぶつかりながら曲がるというのも1つのテクニックではあるけどこのゲームではアクセル
ワークを重視していてカーブによってアクセルとブレーキの使い分けで好タイムが出る
ようにしたいのならば必ずしも良い仕様とはいえないにょ。
そこで考えたのは(誰でも考えつく方法だけど)ぶつかった際に速度に比例する量だけ
減速するのではなく速度に関係なくほぼ一定量の減速を行うということにょ。
こうすることにより高速で急カーブに進入してもろにぶつかった場合には一気にほぼゼロ
まで速度が落ちることになるにょ。
逆にすでに減速状態であり1フレーム分しかぶつからなかった場合には減速量が少ない
ためぶつかりながら曲がった方が速いタイムが出るということは無くなりアクセルワークの
重要性が高まるにょ。(ぶつかった時点で速度をゼロにするという方法もあるけどわずかに
かすった場合ともろに直撃した場合とでペナルティが同じというのは個人的には許せない
ためにかすっただけでは少し遅くなる程度にしている)

このぶつかった時の減速処理はS=S-M*3のようにすれば1フレームごとに3ずつ減速ができる
ようになるにょ。(変数Mはぶつかったかどうかのフラグに使用している)
しかし、これではぶつかり続けたら速度がマイナスになってしまうにょ。
S=S-M*3*(S>3)とすればマイナスにはならないけど速度が3以下ならば減速も行えないにょ。
というわけで別途IF S<0THEN S=0などのような判定を加えるざるを得ないけれどそれでは
1画面には収まらないにょ。
これはS=S-S*M*3/(S+4)とすることで解決したにょ。
この方法だと速度が20の時は1フレームあたり2.5の減速となり、速度が2の時は1の減速と
なるにょ。
速度に比例した減速量となるS=S-S*M/8のような式だと速度20の時は1フレームあたり
2.5の減速だけど速度2の時は0.25の減速となるため極端に減速量が小さくなることが
分かるにょ。
気にしない人にとっては些細な点だろうけどこの式によって私自身がようやく納得できる
挙動になり、なおかつ1画面に収めることができたにょ。


以上がPETIT RUN mkIIにおけるPETIT RUNとの違いにょ。
5月27日に書いた「プチコン100m走mkII」は今回と同じように「プチコン100m走」が大幅に
リスト短縮可能だったことから大幅な改良を施しているのだけど100m走は初期の頃に作った
ということで無駄も多く非常に大きなリスト短縮が可能だったのに対してPETIT RUNはそこ
まで大きな短縮はできなかったにょ。
それと100m走はリスト短縮したものをほとんどすべて見た目の改善に費やしたために見た目で
別物になったもののゲーム内容はほぼ同一といっていいものだったにょ。(プチコン100m走は
トップタイム表示機能やリトライ機能が最初から搭載されていたのでmkIIは新規搭載する
必要はなかった)
それに引き替えPETIT RUNは見た目の改善よりもゲーム内容や機能の改善に重点を置いている
ために見た目ではあまり変わってないように見えるにょ。
しかし、実際にプレイしてみればそのプレイ感は大きくことなるものになっていることが
分かると思うにょ。
これでようやくPETIT RUNが完成形になった感じにょ。


非公式プチコンコンテストは作品の投稿受付が終了して現在はどの作品が優秀かの投票が
開始されているにょ。(10/16まで)
http://enq-maker.com/9R0a8f3
1画面プログラムでは最優秀賞を取るのはまず無理(リスト短縮テクニックやバランス調整
だけではさすがに厳しい)だけど1画面プログラム7作品の中ではトップになれたらいいかな
と思ってるにょ。(順位が出るのかは分からないけど)

今月末に投稿締め切りが控えているプチコン大喜利もそろそろ何とかしないといけない
けれど新規作品を作っても時間が足らないし、アイデア面でもすでに投稿表明をした他者の
作品よりもすぐれているものを出すのは極めて困難であるため既存プログラムのバージョン
アップに止まりそうな感じにょ。
というか、最近はようやくお絵かきの方がスランプから脱出できた感じなので今月に入って
からはプチコンは今回のPETIT RUN mkIIしか作ってない状態だからね。




掲示板管理者へ連絡 無料レンタル掲示板