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

おちゃめくらぶ掲示板

1440御茶目菜子:2013/01/02(水) 21:18:10
巳年なのでヘビゲーム特集!?
今年は巳年ということで元旦早々スマイルブーム公式のプチコンtwitterアカウントで
プチコン用のヘビゲームが公開されたにょ。
https://twitter.com/PetitComputer/status/285767777262907392
ヘビゲームは昔からあるジャンルだけど私は最初に入手したポケコンが1行表示のポケコン
だったためヘビゲームには向いてないこともあり、ポケコンで初めてヘビゲームを作ったのは
4行表示に対応したPC-1350を入手してからにょ。(マイコン部の部室にあったPC-8001mkIIで
簡単なヘビゲームは作ったことがあるけど)
どっちかというと私は最初に作ったのが100m走系のゲームだったためそれが私の中では
基本となっているにょ(笑)

プチコンでもヘビゲームを作っている人は多いのではないかと思われるにょ。
ヘビゲーム特集と称して作ったヘビゲームをこれを機会にツイートする人も多いにょ。
https://twitter.com/fusuian/status/286129698231169024
https://twitter.com/fusuian/status/286127944483622913
https://twitter.com/fusuian/status/286126581682929664
https://twitter.com/pman4416/status/286125509346201600
私はまだプチコンではヘビゲームを作ってなかったにょ。
これを機会に何か作ってもいいけど簡単なものならすぐできるけどそれでは面白くない
からね。
1画面プログラムを作るという考えもあったけどすでに1画面で作っている人もいる以上は
少なくともそれに勝てるくらい面白い1画面プログラムを作る必要があるためアイデアを練る
時間やリスト短縮にかかる時間やバランス調整をする時間を考慮したらとても正月中には
完成しそうにないにょ。

そこで私はまだ誰も作ったことがない1行(改行コード抜きで最大99文字)のヘビゲームに
チャレンジしてみることにしたにょ。(数時間〜10数時間かかる1画面プログラムとは異なり
1行なら10分〜1、2時間程度で出来るため)
しかし、1画面(最大29文字x24行)ならば(リストの長さ的に)簡単にできるためゲーム性を
アップできる様々な要素を加えられるのだけど1行で作るとなるといかに最低限の要素に
絞るかが重要になってくるからね。(普通に作ったら1画面に収まりきらないような要素を
リスト短縮などによって1画面に収めるのも1画面プログラムの醍醐味だけど)
何せ普通にキャラを4方向に移動させるだけでも1行に収めることはできないからにょ。
「4方向に動かせないなら2方向にすればいいじゃない」ということで2方向に絞ることに
したにょ。

というわけで、最初に考えたのは[A]ボタンを押せば右に曲がり[B]ボタンをを押せば左に
曲がるというものにょ。
そもそも、(リストの長さの都合上)障害物やアイテムが出せないためこれだとゲームが
簡単すぎるにょ。(それにどうやっても1行にも収まらないし)
そこでさらなる別の移動方法として考えたのが[A]を押せば上移動、[B]を押せばで左移動、
何も押さないと右下に移動という方法にょ。
これならば、上記の2方向移動とは異なり回転をするための変数(Aの値を0、1、2、3として
それが順に上、右、下、左の進行方向を示していた)も不要になるためリスト短縮が可能に
なるからね。

[A]を押せば上移動、[B]を押せばで左移動、何も押さないと右下に移動というのは変数Bに
BUTTON関数の値が入っているときX方向の移動量をVX、Y方向の移動量をVYとすると次の
ようになるにょ。

 《 表1 》
 B= 0 のとき VX= 1、VY= 1
 B=16 のとき VX= 0、VY=-1
 B=32 のとき VX=-1、VY= 0

ここでVX=(B==0)-(B==32)、VY=(B==0)-(B==16)とすればいいというだけの話になるけれど
それでは1行には収まらないにょ。(パターン性のあるものは論理式を使うと大抵無駄が
出来てしまう)
見てのように移動量VX、VYは-1、0、1のいずれかとなるため3で割った時の剰余を計算
すれば良いことが分かるにょ。
そこで、B%3の値を見てみると次のようになるにょ。

 《 表2 》
 B= 0 のとき B%3=0
 B=16 のとき B%3=1
 B=32 のとき B%3=2

これを表1と比較するとVX=1-B%3になっていることに気が付くと思うにょ。
さて、問題はVYの方にょ。
VYの値が表1のものを満たすためにはB=0、B=16、B=32のときの3で割った時の剰余は組み
合わせは(0,1,2)もしくは(2,0,1)である必要性があるからね。(そうすれば「1-○%3」
もしくは「○%3-1」とすることができる)
そこでBに2を足すことにしたにょ。

 《 表3 》
 B= 0 のとき (B+2)%3=2
 B=16 のとき (B+2)%3=0
 B=32 のとき (B+2)%3=1

これで、必要条件を満たすことが可能になり、VY=(B+2)%3-1になったにょ。
このように剰余を使えば上記のように論理式を使うよりも14文字も短縮できたにょ。
論理式は万能的に使えるのだけどこのようにパターン化された操作の場合には剰余などの
他の方法を使った方がリスト短縮においては有利になることが多いにょ。
http://ww5.tiki.ne.jp/~ochame/petitcom/tips/list.htm#ronri

これでボタン操作に関しては問題はないのだけどこの式ではB=0、B=16、B=32以外の場合を
考慮しておらず、[A]、[B]ボタン以外を押した場合にも反応してしまうため注意が必要と
なるにょ。
Tipsの「制限付きの左右移動」で書いているようにB%3の値が1と2のボタンであればすべて
同じように認識されてしまうからね。(これは必ずしもデメリットというわけではなく
プチコンスキーのように十字ボタンでの移動とLRボタンでの移動が1つの式で済むという
メリットもある)
http://ww5.tiki.ne.jp/~ochame/petitcom/tips/mod.htm#LR_move

リスト短縮のためにはB%3の値が異なるボタン2つ(B%3=1のボタンとB%3=2のボタン)を
操作用に選択するのがセオリーだけどここであえてB%3の値が同じになるボタンについても
書いておくにょ。
例えばB%3=1になっている[A](B=16)と[X](B=64)で操作する場合にはあらかじめB%7と
しておけば[A]は16%7で2になり、[X]は64%7で1になり異なる値を示すためそのボタンを
押した時の判定が可能になるにょ。(VYの方は2を足す必要があるため(B+2)%7%3となる)

あとはゲームオーバーの判定だけどこれは自分の軌跡に当たったら1になり、画面外に
出たら-1になるため0以外の状態になれば終了となるにょ。
これはFOR〜NEXTのループ終了値を論理式「CHKCHR(X,Y)==0」にすればいいのだけど
論理否定で置き換え可能なので!CHKCHR(X,Y)でOKにょ。
これで、何とかギリギリ1行に収めることができたにょ。(実際は画面表示と終了判定は先に
出来ていたので1行に収めることの移動方法を考える方が後になった)
実際にはこれはヘビゲームというよりただの歩け歩けゲームなので広義に言えばヘビゲームと
言えなくはないけど一般的なヘビゲームとは異なるためこれで「1行でヘビゲームができる」
と言って良いのかは微妙だけど1行でも何とかなるというのいうのが分かるのではないかと
思われるにょ。

ということで、これが完成したヘビゲームにょ。

1行プログラム「ヘビゲーム」
CLS:CLEAR:FOR I=0TO!CHKCHR(X,Y)LOCATE X,Y?"蛇":B=BUTTON()X=X-B%3+1Y=Y+(B+2)%3-1S=S+1WAIT 4I=0NEXT:?S
※「蛇」はキャラコード27のヘビキャラを示す

あと「5秒止め」と「シュウォッチ」もついでに作ったにょ。

1行プログラム「5秒止め」
FOR T=0TO 1LINPUT A$FOR B=0TO 32B=BTRIG()T=T+1WAIT 1NEXT:B=T==300BEEP,,-B?T/60,"フ"*!B"セイコウ":T=0NEXT

これはバイカウントメルビルさんの「1行5秒止め」のアイデアを元にリトライ機能や
効果音を追加したものにょ。(1行プログラムでリトライ機能を搭載しているものは
プチコン史上初かも)

1行プログラム「シュウォッチ」
CLS:WAIT 60P=0BEEP 3FOR T=1TO 600Z=BTRIG()==16P=P+Z:BEEP,,-Z:CLS?"GO",P:WAIT 1NEXT:BEEP 7?P/10"レンシャ

これはえいださんの「140シュウォッチ」のアイデアを元に効果音を追加したものにょ。
これら2作品はいずれも元のプログラムのアイデアを参考にしただけでプログラムそのものは
一から作り直しているにょ。
でないと、1行には収まらないしね。

これで、今年作った1行プログラムは2日で6作品となったにょ。
大晦日から数えたら3日で8作品にょ。

 ◎新年カウントダウン 2012/12/31
 http://ww5.tiki.ne.jp/~ochame/petitcom/1line.htm#10
 ◎カウンター 2012/12/31
 http://ww5.tiki.ne.jp/~ochame/petitcom/1line.htm#11
 ◎おみくじ 2013/01/01
 http://ww5.tiki.ne.jp/~ochame/petitcom/1line.htm#12
 ◎サイコロ 2013/01/01
 http://ww5.tiki.ne.jp/~ochame/petitcom/1line.htm#13
 ◎ビンゴマシーン 2013/01/01
 http://ww5.tiki.ne.jp/~ochame/petitcom/1line.htm#14
 ◎ヘビゲーム 2013/01/02
 http://ww5.tiki.ne.jp/~ochame/petitcom/1line.htm#15
 ◎5秒止め 2013/01/02
 http://ww5.tiki.ne.jp/~ochame/petitcom/1line.htm#16
 ◎シュウォッチ 2013/01/02
 http://ww5.tiki.ne.jp/~ochame/petitcom/1line.htm#17

このペースならば年間1000作品も可能だけどさすがにそれは無理にょ(笑)
1画面プログラムよりは1作品にかかる時間は短くて済むけど1行に収まるネタには限界が
あるからね。
それに1画面プログラムではある程度余裕があるため操作性やゲーム性を重視して作ることが
可能だけど1行プログラムは1行に収めることにすべてを費やす必要があるため面白いゲームを
作るのは非常に困難にょ。(ラベルスタートのような単機能ツールは1行プログラムのメリット
ともいえるけど)




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