3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hello World あたたたた N88-BASIC編

この記事は Hello World あたたたた Advent Calendar 2025 の記事です。

今日はN88-BASICで Hello World あたたたた を実装して解説していきます。

そもそも「Hello World あたたたた」が何かは 1日目の記事 をご覧ください。

そもそもN88-BASICの概要と歴史

N88-BASICは、1980年代から1990年代にかけて日本のパソコンで広く使われたBASIC言語です。
NECのPC-8800シリーズで標準搭載されていたことから「N88-BASIC」と呼ばれ、多くの日本のプログラマーがこの言語でプログラミングを学びました。
私が中学生の時に、コンピュータ室にあったのはPC-9801VMで、ROM BASICが入っていて遊んでいたんじゃなかったかなあと思います。最初に触った言語です。

N88-BASICの特徴

  • 行番号が必須: 各行に10、20、30...のような行番号が必要
  • 1行完結のIF文: IF文は1行で完結する必要があり、複数行に分けられない
  • 文字列変数は $ サフィックス: 文字列変数は変数名の末尾に $ を付ける
  • GOTO文の多用: 構造化プログラミングの制約から、GOTO文を使った制御が一般的
  • 日本語文字列の扱い: 日本語(全角文字)を文字列として扱える
  • シンプルな構文: 初心者にも理解しやすいシンプルな構文

N88-BASICの歴史

  • 開発: NEC(日本電気)
  • 誕生: 1980年代前半(PC-8800シリーズとともに)
  • 影響: 日本のパソコン文化に大きな影響を与えた
  • 現在: Windows版の互換環境が存在し、レトロプログラミングとして楽しめる

実行環境

この記事では、N88互換BASIC for Windows95 を使用しました。

コーディング例

10 CLS
20 HAKO$ = ""
30 RUNNING = 1
40 WHILE RUNNING = 1
50     R = INT(RND(1) * 2)
60     IF R = 0 THEN CHAR$ = "あ" ELSE CHAR$ = "た"
70     PRINT CHAR$;
80     HAKO$ = HAKO$ + CHAR$
90     IF LEN(HAKO$) >= 5 AND RIGHT$(HAKO$, 5) = "あたたたた" THEN PRINT "" : PRINT "お前はもう死んでいる" : RUNNING = 0
100 WEND
110 END

コードと文法の解説

画面のクリア(CLS)

プログラム開始時に画面をクリアする。

10 CLS
  • CLS は画面をクリアするコマンド
  • 実行時に前回の出力が残らないようにする

変数の宣言・代入

N88-BASICでは変数名の末尾に $ を付けると文字列変数になる。

20 HAKO$ = ""
30 RUNNING = 1
  • = は代入(右の値を左の変数に入れる)
  • 文字列変数は $ で終わる(例:HAKO$CHAR$
  • 数値変数は $ なし(例:RUNNINGR
  • 空文字列は "" で表す
  • 1 は真(true)を表す(0 が偽)

繰り返し(WHILE-WEND)

条件が真(1)の間ずっと処理を続ける。

40 WHILE RUNNING = 1
    ' 繰り返したい処理
100 WEND
  • RUNNING = 1 の間、ループを続ける
  • RUNNING = 0 になるとループを抜ける
  • WEND でループの終わりを表す

乱数生成(RND)

N88-BASICでは RND 関数で乱数を生成する。

50 R = INT(RND(1) * 2)
  • RND(1) は 0以上1未満の乱数を返す
  • RND(1) * 2 で 0以上2未満の乱数
  • INT() で整数に変換して 0 または 1 を得る

条件判定(IF-THEN-ELSE)

N88-BASICのIF文は1行で完結する必要がある

60 IF R = 0 THEN CHAR$ = "あ" ELSE CHAR$ = "た"
  • == ではなく = で等しいかどうかを判定
  • THEN の後に真の場合の処理
  • ELSE の後に偽の場合の処理
  • 複数の処理を1行で書く場合はコロン(:)で区切る
  • N88-BASICでは複数行に分けたIF文は使えない

文字の出力(PRINT)

N88-BASICの PRINT はデフォルトで改行するが、セミコロン(;)を付けると改行しない。

70 PRINT CHAR$;
  • PRINT CHAR$; のセミコロンで改行を抑制。文字が横に並んで出力される

文字列の連結

N88-BASICの文字列は + でつなげられる。

80 HAKO$ = HAKO$ + CHAR$
  • 前の文字列に後ろの文字を追加する

文字列から最後の5文字を取り出す(RIGHT$)

N88-BASICでは RIGHT$ 関数で文字列の右側(末尾)を取り出せる。

90 IF LEN(HAKO$) >= 10 AND RIGHT$(HAKO$, 10) = "あたたたた" THEN PRINT "" : PRINT "お前はもう死んでいる" : RUNNING = 0
  • LEN(HAKO$) で文字列の長さを取得
    • 全角1文字が2バイトで扱われているので、全角5文字は10バイトになる
    • 文字列が5文字未満の場合はチェックをスキップ
  • RIGHT$(HAKO$, 10) で最後の5文字を取得
  • RIGHT$(文字列, 文字数) の形式
  • 複数の処理を1行で書く場合はコロン(:)で区切る
  • PRINT "" で改行を実行

プログラムの終了(END)

プログラムの終了を明示する。

110 END
  • END でプログラムを終了する

個人的なコメント

N88-BASICは、現代のプログラミング言語と比べると制約が多いですが、そのシンプルさが魅力です。
行番号による制御や1行完結のIF文は、現代のプログラマーには新鮮に感じられるかもしれません。

ぱっと思いついたから、AI書いてくれるかなあと思ったら書いてくれるし、エミュレータ環境はあるしで、うれしくなったから書きました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?