G4CBASIC用 コード展示室

このコード展示室は、G4CBASIC用のプログラムを集めたページです。
G4CBASIC自体はこちら →
https://softyasu.net/g4cbasic.html
プログラム自体は、ブログでも紹介してますがこのページに集めてみました。

「ソフト屋 巣」作成
no. タイトル 日付 内容
1 宇宙人との交信 2009/08/01 未○との遭遇をイメージした例の5つの音符を奏でるプログラムです。
2 LEDイルミネーション 2009/08/01 LEDが右に左に美しく流れます。
3 ねぎ振り 2009/08/03 ニコニコ動画で"はちゅねミク"のねぎ振りネタ多かったので挑戦してみました。
4 かんいブロック崩し 2009/08/05
(改訂版)
玉を打ち返すだけのブロック崩しです。15回打ち返せれば全ブロックが崩れてクリアとなります。
玉を打ち返した瞬間にブロックが消えていたのでタイミングを修正しました。
5 フラッシュ16進暗算 2009/08/10 16進数で表示される数値を暗算して答えを入力するゲームです。
(言い訳)プログラム的にギリギリだったので最後の数値だけは入力時まで表示されっぱなしです。
6 ルーレット 2009/08/11 ルーレットの止まる位置を当てるゲームです。
乱数を使っていないので実は簡単かも。
7 ルナーランダー 2009/08/16 古典ゲームのルナーランダーGMC-4版です。かなり脳内変換をお願いします。
本家アタリ社のやつ→http://www.geocities.co.jp/Playtown-Bingo/7208/lunarlan.htm
ばらばらにダウンロードしても面倒なので、まとめました。
上記のソースコードをまとめてダウンロード

もしG4CBASICで何か作られた方がいらっしゃいましたら、ここで紹介させていただきますので連絡をいただければと思います。


 宇宙人との交信

未○との遭遇をイメージした例の5つの音符を奏でるプログラムです。

G4CBASIC ソースコード 「UFO.bas」

REM タイトル「宇宙人との交信」
REM 某有名なあのサウンドを繰り返します。
REM LEDも、それっぽく点滅。

REM サウンドデータ配列。
DIM  ARRAY[5]
DATA #B,#C,#A,#3,#7

DO
 REM あの5音を繰り返します。
 FOR O=0 TO 4
  REM LEDを流します。
  L1 = L1 + L1 REM 右に流す。
  L2 = (SFT L2) REM 左に流す。
  REM 乱数で点滅兼、ウェイト時間を生成します。
  RND(Time)
  IF Time <= 8 THEN
   L1 = L1 + 1 REM 右に追加
  ELSE
   L2 = L2 + 8 REM 左に追加
  ENDIF
  REM LEDを表示
  LED_DISP()
  REM 7セグ表示とサウンド
  $Ar = ARRAY[O]
  PRINT $Ar
  SOUND($Ar)
 NEXT
 REM ウェイト
 TIMER(Time)
UNTIL FALSE


ソースコードをまとめてダウンロード



 LEDイルミネーション

LEDが右に左に美しく流れます。


G4CBASIC ソースコード 「ledflash.bas」

REM タイトル「LEDイルミネーション」
REM LEDの左に光を溜め込み、一杯になると逆にLEDの右に光を溜め込みます。
REM これを繰り返すプログラムです。
REM プログラムサイズを減らすために強引なコードになってますので真似しない様に。

DATA MODE = 0 REM 右左を示すモードの初期値
DATA J = 0    REM 内側のループカウンタの初期値
DO
 REM 外側はダウンカウントします
 FOR I=7 TO 1
  L = 7 REM とりあえず番号外
  DO
   REM LEDを消す。
   LED_OFF(L)
   REM 点灯する番号を決める。MODEで右か左か決めます。
   L = J
   IF MODE = #F THEN
    L = 6 - J
   ENDIF
   REM LEDを点灯します。
   LED_ON(L)
   REM 内側のカウント
   J = J + 1
   TIMER(0)
  UNTIL I=J
  J = 0 REM ここでJを初期化するのはマシン語がコンパクトになるからです。
 NEXT
 REM モードを反転します。
 MODE=NEG(MODE)
UNTIL FALSE


ソースコードをまとめてダウンロード


 ねぎ振り

ニコニコ動画で"はちゅねミク"のねぎ振りネタ多かったので挑戦してみました。


G4CBASIC ソースコード 「negi.bas」

REM タイトル「ねぎ振り」
REM G4CBASIC Ver0.300

REM LEDの固定部分。
L2 = #b0000
DO
 REM ねぎ上げ
 L1 = #b111
 LED_DISP()
 PRINT_OFF
 TIMER(4)
 REM ねぎ下げ
 L1 = #b001
 LED_DISP()
 PRINT 1
 TIMER(4)
UNTIL FALSE


ソースコードをまとめてダウンロード


 かんいブロック崩し(改)

玉を打ち返すだけのブロック崩しです。15回打ち返せれば全ブロックが崩れてクリアとなります。

G4CBASIC ソースコード 「block.bas」

REM タイトル「ブロック崩し(改)」Ver.2
REM タイミングよく玉を打ち返せ!
REM ブロックを減らすタイミングをブロックに当たったときに修正。凡ミスです。

REM 15個のブロック
POINT = 15
DO
 REM ボールが向こうから来る
 FOR $Yr=0 TO 5
  LED_ON($Yr)
  TIMER(1)
  LED_OFF($Yr)
  REM 途中で押したらアウト!
  IFINPUT THEN
   SOUND(ERRS)
   END
  ENDIF
 NEXT
 
 REM 際のボールを表示
 $Yr = 6
 LED_ON($Yr)
 TIMER(1)
 LED_OFF($Yr)
 
 REM 打ち返し
 IFINPUT THEN
  REM 打ち返し音
  SOUND(#E)
  REM 打ち返し
  FOR $Yr=5 TO 0
   LED_ON($Yr)
   TIMER(1)
   LED_OFF($Yr)
  NEXT
  REM ブロックを崩す
  POINT = POINT - 1
  PRINT POINT
  IF POINT=0 THEN
   REM 全部崩れたのでクリア!
   SOUND(ENDS)
   END
  ENDIF
  REM ブロックで跳ね返る音
  SOUND(#C)
 ELSE
  REM ボールを見逃したらアウト!
  SOUND(ERRS)
  END
 ENDIF
UNTIL FALSE


ソースコードをまとめてダウンロード

[遊び方のルール]
プログラムを入力したら、RESET→1→RUNでスタートです。
 玉の位置:ブロック崩しの玉の位置はLEDに表示されます。0がブロック側で6が自分の玉の打ち返しポイントです。
 残りのブロック数:7セグLEDに16進で表示されます。最初は15個です。0になったらゲームクリアです。
スタートすると玉が飛んできますので、6のLEDが点いた瞬間を狙って数字キー(何でも良い)を少し長め(0.2秒程度)に押してください。
0.□□□□□□■
1.□□□□□■□
2.□□□□■□□
3.□□□■□□□
4.□□■□□□□
5.□■□□□□□
6.■□□□□□□← このタイミングで!
うまく打ち返せれば玉がブロックの方に飛んでいってブロックを崩します。これでブロックが1つ減ります。
タイミングが早すぎたり遅すぎるとゲームオーバーです。
15回集中して打ち返すには、相当な集中力が必要ですが、がんばってみて下さい!ちなみに私は10回目あたりが鬼門です。

更に速度を上げたい人は、全部のTIMER(1)をTIMER(0)に変えてみてください。

ソースコードをまとめてダウンロード


 フラッシュ16進暗算

16進数が3つ表示されますので、合計値をキー入力してください。

 

G4CBASIC ソースコード 「flash16.bas」

REM タイトル「フラッシュ16進暗算」
REM 16進数で表示される数値を暗算で加算せよ。
REM $Arやら$Yrやらプログラムのコンパクト化のために駆使しております。

REM ループで処理するためワザと合計を配列に入れてます。
DIM ARRAY[2]

REM 無限ループ
WHILE TRUE
 REM 初期化
 $Ar = 0
 ARRAY[0] = $Ar REM 上位の桁
 ARRAY[1] = $Ar REM 下位の桁
 PRINT $Ar

 REM 出題3つ。
 FORLOOP 3
  REM 乱数で数値を求めて出題する。
  RND(RANDOM)
  $Ar = RANDOM
  REM 表示
  PRINT $Ar
  REM 加算する
  ARRAY[1] = ADDO(ARRAY[1],$Ar,ARRAY[0])
  REM ここで表示時間を変更できます。
  TIMER( 9 )
 NEXT
 
 REM 回答入力。ADDR関数とMEM関数を使用。
 FOR $Yr = ADDR(ARRAY[0]) TO ADDR(ARRAY[1])
  REM 入力
  INPUT $Ar
  PRINT $Ar
  REM 合計と一致
  IF $Ar = MEM($Yr) THEN
   REM キーを離すのを待つ。
   WAIT_KEYOFF()
  ELSE
   REM エラーへ。
   GOTO ERROR:
  ENDIF
 NEXT
 REM 合格! サウンド
 SOUND(ENDS)
 CONTINUE REM ループの処理に戻る

ERROR:
 REM 失敗した。
 SOUND(ERRS)
WEND


ソースコードをまとめてダウンロード

[遊び方のルール]
プログラムを入力したら、RESET→1→RUNでスタートです。
次々と16進が表示されますので、合計を暗算してキー入力してください。
答えがもし一桁の場合は、最初は0を入力します。

※ プログラム改造のポイント
・"FORLOOP 3"で3つの16進数ですが、最大15まで増やすことが出来ます。
・"TIMER( 9 )"で表示時間を制御できますので小さくするとより難しくなります。

ソースコードをまとめてダウンロード


 ルーレット

ルーレットの止まる位置を当てるゲームです。



G4CBASIC ソースコード 「Roulette.bas」

REM タイトル「ルーレット」
REM ルーレットで止まる位置を当てよう!

WAIT = 0
DATA R = 0
DATA Stop = 0

REM ルーレットの回転
DO
 REM ルーレットの番号
 FOR R=0 TO 6
  REM ルーレットを表示
  LED_ON(R)
  TIMER(WAIT)
  REM 予想停止位置を入力。
  IFINPUT POINT THEN
   REM ルーレットを減速。
   WAIT = 2
  ENDIF
  REM 減速中?
  IF WAIT = 2 THEN
   REM 停止判定
   Stop = Stop - 1
   IF Stop=0 THEN
    REM 停止ポイントが正解?
    IF R=POINT THEN
     REM 正解
     SOUND(ENDS)
    ELSE
     REM エラー
     SOUND(ERRS)
    ENDIF
    END
   ENDIF
  ENDIF
  REM ルーレットを消す。
  LED_OFF(R)
 NEXT
UNTIL FALSE


ソースコードをまとめてダウンロード

[遊び方のルール]
プログラムを入力したら、RESET→1→RUNでスタートです。
ルーレットが2進LEDに表示されますので、止まる位置を0から6で予想してキーを入力してください。
キーを押してしばらくすると停止します。
正解なら正解音、はずれなら不正解音がなります。


 ルナーランダー

アタリ社の古典的名作ゲーム「ルナーランダー」を無理やりGMC-4に再現してみました。
LEDの光を着陸船に見立てて月面に無事着陸するゲームです。
私の発表したゲームの中で一番の難易度を誇ります。


G4CBASIC ソースコード 「lunarlander.bas」

REM タイトル「ルナーランダー」
REM 月着陸船をコントロールせよ!
REM たまにコントロール不能で宇宙船が暴走しますが、ご容赦ください。

High  = 11 REM 高さ
Speed = 1  REM 上昇&落下速度。
DO
 REM 落下速度
 Speed = Speed - 1
 REM 噴射
 IFINPUT THEN
  Speed = Speed + 2
 ENDIF
 REM 速度
 PRINT 0-Speed
 REM 高さを計算
 High = High + Speed
 REM 高さを表示
 $Yr = SFT (High+1)
 LED_ON($Yr)
 TIMER(2) REM ここの値を小さくすると難易度アップ
 LED_OFF($Yr)
 REM 着地判定
UNTIL 12 <= (Speed+High)
REM 接地
LED_ON(0)
REM 速度が制限内?
IF Speed>=-1 THEN REM -2以下にすると簡単になります。
 REM 着地成功
 SOUND(ENDS)
ELSE
 REM 着地失敗
 SOUND(ERRS)
ENDIF


ソースコードをまとめてダウンロード

[遊び方のルール]
プログラムを入力したら、GMC-4を縦にしてRESET→1→RUNでスタートです。
6.■□□□ ← LEDの6番が高さ12mの位置です。
5.□■□□
4.□□□□
3.□□■□ ← 徐々に加速しながら落下します
2.□□□□
1.□□□□
0.□□□■ ← LEDの0番が地面です。
宇宙船が重力加速度で加速しながら落下してきますので、地面に激突しないようにソフトランディングしましょう。
何かキーを押すとロケット噴射で落下速度を抑えることを出来ます。
高さは11mから始まり、重力加速度は1m/sec2で、噴射の加速度は-2m/sec2です。
噴射しすぎると空に上ってしまうのでそれもゲームオーバーとなります。
着地時の速度が2m/sec以上の場合は宇宙船が壊れてしまうので、それもゲームオーバーです。
着地時の速度が1m/secの時だけが着陸成功です。
こつは、速度を噴射で抑えながら着陸寸前に速度を一度0まで減らすことです。
7セグLEDに現在の速度が表示されますので参考にしてください。

※ プログラム改造のポイント
・"TIMER(2)"で速度を変えられるので難易度が変えられます。0にするとむちゃくちゃ難しいです。
・"IF Speed>=-1 THEN"で着地時の速度の許容値を変えれます。-2とかにすると簡単になりますよ。


リンク