BASIC (ベーシック) であそぼう 1
〜 十進 BASIC で表示する迷路 〜
学習時間の目安: 約 90 分
2020-11-20 作成 福島
2021-03-20 更新 福島
2022-03-05 更新 福島
このページは Firefox と A4 用紙で印刷可能
TOP > asob > decbasic-mazeplay
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob ]

プログラミング言語 BASIC
BASIC と書いて「ベーシック」と読みます。
Beginner's  →  入門者用の
All-purpose  →  万能で
Symbolic  →  象徴的な
Instruction  →  指示する
Code  →  符号
の頭文字をつなげたもので、要するに「入門用の易しいプログラミング言語」と言う意味です。

BASIC 言語の歴史は古く 1964 年に初めてアメリカの数学者によって作られました。
その前には
という、コンピュータの入門者にとって難解なプログラミング言語しかありませんでした。

あなたが初心者なら、他のプログラミング言語を学ぶ前に、一度この BASIC を学ぶべきだと思います。
少し時間を取られるかもしれませんが、無駄にはなりません。
他のプログラミング言語が理解できるなら、BASIC はもっと簡単に理解できるからです。

誕生から 50 年以上経ちますが、これを超える初心者向けプログラミング言語が他に無いのが現状です。
その間に BASIC 言語も進化を続けていますが、その入門のし易さは今も変わりません。

ちなみに、マイクロソフトは創業時にマイコン用の BASIC を開発・販売して会社を大きくしたそうです。

注意事項
ここに記述してあるのは「読み物」ではありません
実習用の資料なので、読むだけで理解した気になるのではなく、必ず実際にプログラムを打ち込み、動作させてください。
(あまりお金のない人でも 10 年位前の中古 PC に Linux をインストールすれば、限りなく出費を抑えることができます)

0. 事前準備
0-1. この章では、十進 BASIC を使います。
十進 BASIC は「ジュッシンベーシック」と読みます。

インストールがまだなら、ここ (ラズパイ400)ここ (CentOS) の gtk2 版か、
ここ (Windows10) を参考にしてインストールしておいてください。
0-2. この章では、別のテキストエディタを使いません。
十進 BASIC には専用のエディタ画面があるので、これを使います。

1. とてもかんたんなプログラム
1-1. とてもかんたんなプログラムが、最初から用意されている。
十進 BASIC を起動すると、すでに命令「END」がエディタ画面に入っています。
これが、いちばんかんたんな 十進 BASIC のプログラムです。

「END」とは、プログラムの終わりを表す命令です。

<テキスト1> ファイル名「program.BAS」

END

1-2. とてもかんたんなプログラムを実行する。
画面の上のほうにあるが実行ボタンです。
これをクリックしてプログラムを実行してください。

……、プログラムを実行しても、何も起きません。

運が良ければ、<実行画面1>が一瞬だけ見えるかもしれません。
<実行画面1> (すぐ消える)


ほかに実行する命令が無いので、実行画面が開いてもすぐに閉じてしまいます。
ただそれだけですが、十進 BASIC はこれが基本です。

これを元にして、自分のプログラムを追加します。

2. 文字を表示するプログラム
2-1. 文字を表示するプログラムを作成する。
下の<テキスト2>をエディタ画面から打ち込んでください。
ファイル名は<テキスト1>と同じです。
<テキスト1>との違いを太字で示しています。

<テキスト2> ファイル名「program.BAS」
SET WINDOW 0,39,19,0

SET COLOR 1
PLOT TEXT ,AT 2,2:"A"

END
・間違えずに打ち込んでください。

・最初なので「コピー・アンド・ペースト」で作成すると間違いがありません。


2-2. 文字を表示するプログラムを実行する。
実行ボタン をクリックしてプログラムを実行してください。

<実行画面2>
実行画面の左上に文字「A」が表示されました。

2-3. 文字を表示するプログラムの説明。
<テキスト2> ファイル名「program.BAS」
SET WINDOW 0,39,19,0     ! 十進 BASIC 独特の命令です。文字を実行画面に描けるように準備しています。
                            ! ここだけは、ちょっと難しいです。今は、こう書くということだけを覚えてください。
SET COLOR 1               ! 実行画面に描く文字の色を決めています。1 は黒の番号です。
PLOT TEXT ,AT 2,2:"A"    ! 実行画面の左上に文字「A」を描いています。
                            ! 本当の左上は 1,1 ですが、ここではこの数字 (2,2) を使ってください。
END


3. 文字を移動するプログラム
3-1. 文字を移動するプログラムを作成する。
文字を移動させてみましょう。

コンピュータの画面で文字を移動させるには、
  1. 最初に居た場所をゆかの色で塗りつぶす。
  2. 新しい場所に文字を描く。
と言うことを繰り返すことにって、あたかも文字が移動しているように見せます。

下の<テキスト3>をエディタ画面から打ち込んで、保存してください。
ファイル名は<テキスト1>や<テキスト2>と同じです。
<テキスト2>との違いを太字で示しています。

<テキスト3> ファイル名「program.BAS」
SET WINDOW 0,39,19,0

SET COLOR 1
PLOT TEXT ,AT 2,2:"A"

LET yoko = 2
LET tate = 2

DO
   IF GetKeyState(27) < 0 THEN EXIT DO
 
   SET COLOR 0
   PLOT TEXT ,AT yoko,tate:"A"
   IF GetKeyState(39) < 0 THEN LET yoko = yoko + 1
   IF GetKeyState(37) < 0 THEN LET yoko = yoko - 1
   IF GetKeyState(40) < 0 THEN LET tate = tate + 1
   IF GetKeyState(38) < 0 THEN LET tate = tate - 1
   SET COLOR 1
   PLOT TEXT ,AT yoko,tate:"A"

   WAIT DELAY 0.2
LOOP

END

3-2. 文字を移動するプログラムを実行する。
実行ボタン をクリックしてプログラムを実行してください。

<実行画面3>
キーボードの キーを押すと終了します。

キーボードの矢印キー を押して、
文字を自由に動かしてみてください。

実行画面の外へ移動することもできます。
Linux (gtk2 版) では、移動のあとに残像ができます。(移動前の文字を完全に消せない)
これを改善するには別の技術が必要になるため、ここではそのままにしてください。
3-3. 文字を移動するプログラムの説明。
<テキスト3> ファイル名「program.BAS」
SET WINDOW 0,39,19,0

SET COLOR 1
PLOT TEXT ,AT 2,2:"A"

! 移動する場所を覚える変数を、横、縦、それぞれ用意する。
LET yoko = 2     ! 横の位置を覚える変数
LET tate = 2     ! 縦の位置を覚える変数

DO       ! この DO と、あとで書く LOOP の間にある行を、永久に繰り返します。(--- A --- から --- B --- までのすべての行)
   !--- A ---
   IF GetKeyState(27) < 0 THEN EXIT DO    ! だだし、キーボードの  キーが押されたら、永久に繰り返すのをやめます。
                                               ! GetKeyState(xx) は、キーが押されているかどうかを見る命令です。27 は  キーを表す番号です。

    ! 文字の移動に備えて、最初に居た場所をゆかの色で塗りつぶす。
   SET COLOR 0                     ! これから描く文字をゆかと同じ白 (番号 0) にする。
   PLOT TEXT ,AT yoko,tate:"A"   ! 最初に居た位置を塗りつぶす。

   IF GetKeyState(39) < 0 THEN LET yoko = yoko + 1    ! 押されたキーが (39) だったら横位置を 1 つ増やす。
   IF GetKeyState(37) < 0 THEN LET yoko = yoko - 1    ! 押されたキーが (37) だったら横位置を 1 つ減らす。
   IF GetKeyState(40) < 0 THEN LET tate = tate + 1    ! 押されたキーが (40) だったら縦位置を 1 つ増やす。
   IF GetKeyState(38) < 0 THEN LET tate = tate - 1    ! 押されたキーが (38) だったら縦位置を 1 つ減らす。

    ! 文字が移動したはずなので、その横、縦の情報を使って文字を描く。
   SET COLOR 1                     ! これから描く文字を黒 (番号 1) にする。
   PLOT TEXT ,AT yoko,tate:"A"   ! 文字を描く。

   WAIT DELAY 0.2        ! コンピュータの実行速度は速すぎるので、0.2 秒だけ速度を遅くさせる。
   !--- B ---
LOOP      ! この LOOP と、前に書いた DO の間にある行を、永久に繰り返します。

END


4. 部屋を表示するプログラム
4-1. 部屋を表示するプログラムを作成する。
このままだと、文字はどこまでも移動できてしまい、実行画面の外へ出て行ってしまいます。
そうなると、文字がどこにあるか分からなくなるので、いくらキーを押しても画面の中に戻すのが難しくなってしまいます。

文字が実行画面の外へ出て行かないように、部屋を作って移動を制限します。

下の<テキスト4>をエディタ画面から打ち込んで、保存してください。
ファイル名は<テキスト3>と同じです。
<テキスト3>との違いを太字で示しています。
' ' は空白文字 (スペースキー) です。TAB 文字とは異なるので注意してください。
<テキスト4> ファイル名「program.BAS」
SET WINDOW 0,39,19,0

DIM heya$(7)
LET heya$(1) = "+---------------+"
LET heya$(2) = "|               |"
LET heya$(3) = "|               |"
LET heya$(4) = "|               |"
LET heya$(5) = "|               |"
LET heya$(6) = "|               |"
LET heya$(7) = "+---------------+"
SET COLOR 1
FOR tate = 1 TO 7
   LET gyou$ = heya$(tate)
   FOR yoko = 1 TO 17
      LET kabe$ = mid$(gyou$, yoko, 1)
      PLOT TEXT ,AT yoko,tate:kabe$
   NEXT yoko
NEXT tate

SET COLOR 1
PLOT TEXT ,AT 2,2:"A"

LET yoko = 2
LET tate = 2

DO
   IF GetKeyState(27) < 0 THEN EXIT DO
    
   SET COLOR 0
   PLOT TEXT ,AT yoko,tate:"A"
   IF GetKeyState(39) < 0 AND mid$(heya$(tate + 0), yoko + 1, 1) = " " THEN LET yoko = yoko + 1
   IF GetKeyState(37) < 0 AND mid$(heya$(tate + 0), yoko - 1, 1) = " " THEN LET yoko = yoko - 1
   IF GetKeyState(40) < 0 AND mid$(heya$(tate + 1), yoko + 0, 1) = " " THEN LET tate = tate + 1
   IF GetKeyState(38) < 0 AND mid$(heya$(tate - 1), yoko + 0, 1) = " " THEN LET tate = tate - 1
   SET COLOR 1
   PLOT TEXT ,AT yoko,tate:"A"
    
   WAIT DELAY 0.2
LOOP

END
4-2. 部屋を表示するプログラムを実行する。
実行ボタン をクリックしてプログラムを実行してください。

<実行画面4>
キーボードの キーを押すと終了します。

キーボードの矢印キー を押して、
文字を自由に動かしてみてください。

部屋の外へ出ることはできません。
4-3. 部屋を表示するプログラムの説明。
<テキスト4> ファイル名「program.BAS」
SET WINDOW 0,39,19,0

DIM heya$(7)     ! 部屋を、配列という形式の変数に格納します。部屋の横×縦を 17 文字× 7 行で表すことにします。
LET heya$(1) = "+---------------+"   ! ゆかを空白文字 (' ') にして、壁をそれ以外の文字にして部屋を形作ります。
LET heya$(2) = "|               |"
LET heya$(3) = "|               |"
LET heya$(4) = "|               |"
LET heya$(5) = "|               |"
LET heya$(6) = "|               |"
LET heya$(7) = "+---------------+"

! 部屋を 1 文字ずつ表示します。
SET COLOR 1  ! 壁の文字は黒 (番号 1) で描くことにします。
FOR tate = 1 TO 7    ! 部屋データのすべての行を取り出すため 1 ~ 7 の数字を使って、あとに書く NEXT tate との間の行を繰り返す。
   LET gyou$ = heya$(tate)   ! 部屋データから 1 行ずつデータを取り出す。
   FOR yoko = 1 TO 17    ! 取り出した 1 行から、すべての文字を取り出すため 1 ~ 17 の数字を使って、あとに書く NEXT yoko との間の行を繰り返す。
      LET kabe$ = mid$(gyou$, yoko, 1)   ! 部屋データを 1 文字取り出す。
      PLOT TEXT ,AT yoko,tate:kabe$      ! 用意した文字で画面を描く。
   NEXT yoko     ! この命令により、変数 yoko の中身が 1 増えて、前に書いた FOR yoko = … の行へ戻る。
NEXT tate        ! この命令により、変数 tate の中身が 1 増えて、前に書いた FOR tate = … の行へ戻る。

SET COLOR 1
PLOT TEXT ,AT 2,2:"A"

LET yoko = 2
LET tate = 2

DO
   IF GetKeyState(27) < 0 THEN EXIT DO
    
   SET COLOR 0
   PLOT TEXT ,AT yoko,tate:"A"
   IF GetKeyState(39) < 0 AND mid$(heya$(tate + 0), yoko + 1, 1) = " " THEN LET yoko = yoko + 1   ! 押されたキーが  で、右側が ' '(ゆか) なら、右に 1 つ移動する。
   IF GetKeyState(37) < 0 AND mid$(heya$(tate + 0), yoko - 1, 1) = " " THEN LET yoko = yoko - 1   ! 押されたキーが  で、左側が ' '(ゆか) なら、左に 1 つ移動する。
   IF GetKeyState(40) < 0 AND mid$(heya$(tate + 1), yoko + 0, 1) = " " THEN LET tate = tate + 1   ! 押されたキーが  で、下側が ' '(ゆか) なら、下に 1 つ移動する。
   IF GetKeyState(38) < 0 AND mid$(heya$(tate - 1), yoko + 0, 1) = " " THEN LET tate = tate - 1   ! 押されたキーが  で、上側が ' '(ゆか) なら、上に 1 つ移動する。
   SET COLOR 1
   PLOT TEXT ,AT yoko,tate:"A"
    
   WAIT DELAY 0.2
LOOP

END

5. 部屋が迷路のプログラム
5-1. 部屋が迷路のプログラムを作成する。
この部屋は、自由に編集できます。
部屋データを編集して、迷路にしてください。使う文字はアルファベットや記号なら何でも構いません。
漢字は画面表示が崩れることがあるので、使わないほうが良いでしょう。

下の<テキスト5>をエディタ画面から打ち込んで、保存してください。
ファイル名は<テキスト4>と同じです。
<テキスト4>との違いを太字で示しています。

<テキスト5> ファイル名「program.BAS」
SET WINDOW 0,39,19,0

DIM heya$(7)
LET heya$(1) = "+---------------+"
LET heya$(2) = "|     #       # |"
LET heya$(3) = "| ### # # ### # |"
LET heya$(4) = "| # #   #   # # |"
LET heya$(5) = "| # ####### # # |"
LET heya$(6) = "|     #     #   |"
LET heya$(7) = "+---------------+"
SET COLOR 1
FOR tate = 1 TO 7
   LET gyou$ = heya$(tate)
   FOR yoko = 1 TO 17
      LET kabe$ = mid$(gyou$, yoko, 1)
      PLOT TEXT ,AT yoko,tate:kabe$
   NEXT yoko
NEXT tate

SET COLOR 1
PLOT TEXT ,AT 2,2:"A"

LET yoko = 2
LET tate = 2

DO
   IF GetKeyState(27) < 0 THEN EXIT DO
    
   SET COLOR 0
   PLOT TEXT ,AT yoko,tate:"A"
   IF GetKeyState(39) < 0 AND mid$(heya$(tate + 0), yoko + 1, 1) = " " THEN LET yoko = yoko + 1
   IF GetKeyState(37) < 0 AND mid$(heya$(tate + 0), yoko - 1, 1) = " " THEN LET yoko = yoko - 1
   IF GetKeyState(40) < 0 AND mid$(heya$(tate + 1), yoko + 0, 1) = " " THEN LET tate = tate + 1
   IF GetKeyState(38) < 0 AND mid$(heya$(tate - 1), yoko + 0, 1) = " " THEN LET tate = tate - 1
   SET COLOR 1
   PLOT TEXT ,AT yoko,tate:"A"
    
   WAIT DELAY 0.2
LOOP

END
5-2. 部屋が迷路のプログラムを実行する。
実行ボタン をクリックしてプログラムを実行してください。

<実行画面5>
キーボードの キーを押すと終了します。

キーボードの矢印キー を押して、
文字を自由に動かしてみてください。

ゆかの上しか移動できないので、壁を抜けることはできません。
5-3. 部屋が迷路のプログラムの説明。
部屋データを変更しただけなので、特に説明は要らないと思います。

各自、部屋データを変えてみたり、プログラムを自由に変えて実行して、
何が変わるかを確かめてください。
この章は、ここで終了です。

*本稿は初心者から超上級者まで対応しています。