プチコンのプを日本語ベーシックで書き直してみた

プチコンのプ http://togetter.com/li/396111 を実在しない日本語ベーシックで書き直してみた。

ぴゅう太に毛が生えたレベル

ぴゅう太に毛が生えたらびゅゔ犬だな……。

ポリシーは

  • カタカナとひらがなが使える。英大文字小文字と同様、区別はしない
  • 変数名、ラベルにもかなが使える
  • 英字、記号についてはBASICと同じ。(全角文字を使っているのは入力の都合)
  • 命令は可能な限り大和言葉に直し、漢語は極力避ける。COLORは「いろづけ」BEEPは「ならす」などとし、「しきさい」「おんせい」などとはしない
  • IF文は「このとき [式] だったら [文] でなければ [文]」
  • FOR文は「くりかえし [変数]=[初期値] から [終了値]〜ここまで」
テキストをけす
てんすう=0

@メイン
くりかえし I=0 から 6
 V=てきとうなかず(29)+3:W=てきとうなかず(24)
 いろづけ 6:ゆびさす V、W:かく”品”
ここまで

Y=てきとうなかず(23)
V=てきとうなかず(29)+3
いろづけ 13:ゆびさす V、W:かく ”★”
いろづけ 2+てきとうなかず(13)
ならす 43:コマやすみ 60

くりかえし X=0 から 30
 ゆびさす X、Y:かく ”大”;
 ならす 9
 コマまち 6
 ゆびさす X、Y:かく ” ”;
 このとき ボタン()>0 だったら Y=Y−2 でなければ てんすう=てんすう+1
 Y=Y+1
 このとき Y<0 だったら ならす 11:おわり
 このとき Y>23 だったら ならす 6:おわり
 C$=もじ$(もじしらべ(X、Y))
 このとき C$==”品” だったら ならす 14:おわり
 このとき C$==”★” だったら ならす 7:てんすう=てんすう+50
 ゆびさす 0、23:かく てんすう
ここまで

ゆびさす 31、Y:かく ” ”;
てんすう=てんすう+20
ゆびさす 0、23:かく てんすう
すすむ @メイン

文法で日本語らしい語順を追求してみる

  • A=A+1 → A+1 を A にいれる
  • COLOR 7 → 7 でいろづけ
  • LOCATE X,Y → X, Y をゆびさす
  • ?"★"; → "★"; をかく
  • BEEP 7 → 7をならす
  • WAIT 60 → 60 コマやすみ
  • VSYNC 6 → 6 コマまち
  • FOR I=1 TO 30〜NEXT → I について 1 から 30 まで〜くりかえし
  • GOTO @ラベル → @ラベル にすすむ
  • GOSUB @ラベル → @ラベル をよびだす
  • RETURN → もどる

てにをははやはり融通を利かすべきか……。

初めてBASICにさわる人のためのヨッパライゲーム

初めてBASICにさわる人のためのトコトコプログラム id:ma-asa:20120407:1333807535 の続きです。
うっかり2ヶ月近く放置してしまいましたが気にせずにいきましょう(^^;

さて、ヨッパライゲームというのは、1ボタンゲームのテンプレで、勝手な方向に進むキャラクターが障害物にぶつからないように操作するゲームです。

つまり、前回のデモに「操作」と「衝突」そして「終了判定」が加わるわけです。

というわけで、新しいリストです。

行数が増えてますし、前回とちょっと違う行もあります。

代入

地味に変わってるのが人型をPRINTするところですね。今までは空白+人型で一行でしたが今度は人型と空白を別々にPRINTしてます。
なぜかというと、12行めの Y=Y+1 で、ほっておくと人型はどんどん画面下に下がっていくからです。

初めてプログラミング言語に触れる人は、このY=Y+1でとまどうそうです。一般的な数学ではありえない式だからです。

本当の昔のBASICでは省略できるLET命令が存在しました。
LET Y=Y+1
つまり、これは数学の式ではなくて「Yの値を、Yの現在の値に1を加えた答えに変更せよ」という命令です。
(このY=Y+1を飲み込めない人は、プログラミング自体伸びないという説さえあるけど、ホントかな? プログラミングは上から下へ、左から右へ流れる原則になってるのに、代入文だけ=の右の処理を先にする、文法の設計がまずいせいじゃないの?)

キー入力を判定する

ヨッパライゲームでは、何もしないと人型は勝手に下に降りていきます。
では、「ボタンを押したら上に昇る」ようにするにはどうしましょうか?
それが11行の
IF BUTTON()>0 THEN Y=Y-2
です。
この一文でぐっとプログラムらしく、ゲームらしくなります。IF〜THEN文です。
BUTTON()は、十字キーやボタンが押されたら、押されたボタンに応じた数値を返します。
何も押されてなければ0なので、この一文こそまさに「ボタンを押したら上に昇る」ということです。
12行で必ずYに1を足すので、あらかじめ2を引いています。このへんがテクニック。

終了判定

13,14行めのIF分が終了判定です。Yがマイナスの値か、24以上の値になるとPRINTできる範囲を超えてしまうので、ミスとして、効果音を鳴らして即終了します。
ざっくりしてますが、「画面内の何かを操作できるが、ミスしたらペナルティがある」ということで、最小限のゲームを実装できました。

でもあんまり面白くないですね。障害物が入ってないし。
それは次回のお楽しみ。

LUNAR CITY SOS !!

I/O 81年4月号掲載の芸夢狂人さん作・LUNAR CITY SOS !!(PC-8001+PCG) をプチコンに移植しました。
左右移動するビーム砲で弾を撃ち(A/Bボタン)、トプシダーを倒して月面都市を防衛します。ビーム砲が全滅するか、都市が全滅するとゲームオーバーです。

トプシダーは最初母艦で出現します。この母艦に数発打ち込むと2機のUFOが出現します。UFOにさらに打ち込むと2体のトプシダーになります。トプシダーを撃つと今度は2体のトプシンになり、画面中をジグザグに移動。トプシンを撃つとトポンになって落下します。

ビーム砲の上には、月面都市を守るバリアが張られています。敵の攻撃でどんどん穴が開きますが、1ステージあたり何度か張り替える(X/Rボタン)ことが可能です。

スペースインベーダー世代のシューティングですが、81年の作品だけあって数種の敵キャラが入り乱れ、都市防衛の要素もあり、当時としては盛りだくさんな作品でした。
なんといっても地球からの援軍がヤマトとガンダム(第13独立部隊)というのが時代ですな!

オリジナルの雑誌記事は実家なので、ネットの資料や動画をみながらそれらしく作りました。
もともと8001の80文字モードのゲームなのでピクセル数半分です。シティの数もオリジナルは8つあったのが6つに減っていて、全滅エンドになりやすい。
だから時には身を捨てて都市を守らなくちゃいけない。バリアはがんがん使いましょう。ビーム砲の交代とともに新しいバリアが張られ、補充もあるのでバリア残して死ぬのは恥です。
全14面ですが僕はクリアできません(;_;)


初代プチコンで作り始めたバージョンは、当たり判定がめちゃめちゃになって長らく放置。(その間に作り出したエイリアンフォールの方が先にできた……って、エイリアンフォールのQRも上げてないですな!)
mkIIのSPHITを使って作り直しましたが、NHK-FMの特撮三昧を聞きながらということは半年くらいほったらかしたかもw


コニミルさんのルナシティ2012と比べて、演出に時代を感じるのも一興(^^;
なにしろオリジナルの作中年代が2001年です。
30年前はマシン語で作らなきゃいけなかったシューティングゲームがBASICで作れることに、ますます時代を感じますなあ。

宇宙のごみ屋さん

iPhoneアプリで『復刻!はるみのゲームライブラリー』が発売されました。
往年のマイコン少年をアツくした名著です。僕自身は当時これをちゃんと読んでなかったんですが、お値段も250円とお安いので買ってみました。

懐かしくも気恥ずかしい独特の文体の記事と、これまた懐かしいPC-6001のシンプルなゲーム画面……ひとつ惜しいのが、BASICのソースリストが入っていない。
これはバージョンアップ時に、ぜひとも収録して欲しいところです。

遊んでみてあらためて思うのが、元々のはるみのゲームライブラリーが、いい入門書だったのだな、ということ。
入力したくなるし、改造したくなる。なるほど、人気があったわけだ。

……ってんで、ひとつ遊んで気に入った『宇宙のごみ屋さん』をプチコンで作ってしまいました(^^;
オリジナルの再現というよりは、プチコンの機能を使ってさらっと仕上げてみたというところでしょうか。

宇宙船「<」を十字キーで操作して、宇宙のゴミ「□」を画面外に押し出します。宇宙船や、押しているゴミが機雷「*」に当たると爆発してゲームオーバー。持ち時間300(約90秒)の間にせっせとスコア(□ひとつにつき10点)を稼ぎましょう。

iPhoneアプリ版にはソースコードは載ってないので、デブリを押す処理なんかは風呂場で思案しました。完成まで3〜4時間?

BEAN BALL


また古いI/Oから移植しました。マイコンゲームの本1に掲載されていた、本城範長氏作・BEAN BALL (MZ-80用)です。

ブロックくずしのアレンジということですが、ヘビゲームの要素もありますね。人間を動かしたあとにできるブロックにボールが当たると得点になりますが、ボールが人間に当たるとタイムが100も減ってしまうペナルティがあります。
スコアが増えるとタイムボーナスがありますが、ボールが増えたりゲームスピードが速くなったりします。
反射神経と先読みで10000点を目指せ!

……実は原作を遊んだことがなくて、記事をもとに想像とソースコード読みで実装したので、原作とはだいぶフィーリングが違うんじゃないかと思います。
意識して外したルールは、低い確率でボールが勝手にワープしたり方向転換したりするのと、タイム150〜140で金縛りになるところですね。
ボールが増えるのが思ったより早くて4000点前に頭打ちになるのと、タイムがゲーム進行に案外影響しないので、そのへんワープをスコアでなくタイムで増やすとか、調整のしようがありそうです。

TFC をバージョンアップしました

http://d.hatena.ne.jp/ma-asa/20120331#1333204753
小さんのご指摘で、作者情報をセーブするとエラーが出る不具合、作者リストを表示するとエラーが出る不具合を修正しました。ありがとうございました。
また、24行のSMODEの値を変更して、TFC起動時のファイル並びを変更することができます。

SMODE=0
ジャンル別
SMODE=1
ファイル名順(ABC〜アイウエオ順)
SMODE=2
タイトル順(ABC〜アイウエオ順)
SMODE=3
スターの多い順

TFSCAN をバージョンアップしました

id:ma-asa:20120331#1333204753
子さん、ならびに Mickey G. Albert さんのご指摘で、プログラム実行時にシンタックスエラーが出るのを修正しました。

すでにQR取り込みをしている方は、48行めの

IF NF==NF$(N)  ...(略)

このNF$(N)を、NF(N) に修正してください。

IF NF==NF(N) 

IF文の変数の型が間違っていたという……orz