Windows 上で動作確認をするため ChatGPT で QB64 に書き換えてもらいましたが、これは思ったように動きませんでした。他の方法も考えていきたいと思います。
Windows 上で動作するイベントドリブンではない BASIC 系のプログラミング言語はありますか
と入力すると以下のような回答が返されました。
とても良い質問ですね!
「Windows上で動作するイベントドリブンではないBASIC系のプログラミング言語」ですが、確かにいくつかあります。以下に代表的なものと特徴をまとめました。✅ 主な選択肢
① QB64
🔹 概要
(ただし後述のSCREEN 12やSCREEN 13でグラフィックスも可能)
🔹 特徴
- イベントドリブンではなく、手続き型でループ主体。
- `INPUT`, `PRINT`, `PSET`, `LINE`, `CIRCLE` などで描画可能。
- マウスやキーボードもポーリング方式で扱える(例:`_MOUSEBUTTON`, `_MOUSEX`)。
- 実行ファイル(.exe)にビルド可能。
🔹 リンク
👉 https://www.qb64.dev/
② FreeBASIC
🔹 概要
🔹 特徴
- イベントドリブンではなく、手続き型でループ主体。
- `PSET`, `LINE`, `CIRCLE`などグラフィック機能も強力。
- マウスやキーボードは`GETMOUSE`, `INKEY$`でポーリング方式。
🔹 リンク
👉 https://www.freebasic.net/
🔎 イベントドリブンでない(手続き型)とは?
✅ 例:
DO ' 描画や処理 ' キーやマウスの状態を読み取る(ポーリング) LOOP UNTIL 終了条件❌ イベントドリブン(WindowsアプリのForm1\_Clickなど)とは異なり、すべて自分でループを書いて制御します。
📝 結論
以下の選択肢がオススメです:
言語名 イベントドリブン? グラフィック 備考 QB64 ❌(手続き型) あり Win対応、BASIC的 FreeBASIC ❌(手続き型) あり Win/Linux対応、BASIC/Cミックス SmileBASIC △(一部イベント) あり 主にSwitch向けだけどPC版あり 特にQB64は純粋にBASICスタイルで手続き型、X-BASICに近い感覚で扱えますよ!
もし興味があれば、サンプルコードや具体的な導入方法もお手伝いできますので、ぜひ教えてくださいね。 🚀
QB64 と FreeBASIC の違いを教えてください
と入力すると以下のような回答が返されました。
いい質問ですね!
QB64とFreeBASICはどちらもWindows上で動く「BASIC系言語」ですが、それぞれ特徴や狙いが違います。以下に、比較表と特徴解説をまとめました!🗂️ QB64 と FreeBASIC の比較表
特徴 QB64 FreeBASIC 目指す互換性 QuickBASIC 4.5完全互換 QuickBASIC風(部分互換)+C言語的 言語仕様 ほぼQB4.5そのまま(レトロBASIC) QB風に加えて拡張(構造体・ポインタなど) 画面出力 コンソール中心(ただしグラフィックモードあり) 同じくコンソール中心(SDLでGUIも可能) グラフィック SCREEN 12, 13相当(2D中心) 同等機能+SDL(OpenGL)もサポート GUIサポート なし(自作ライブラリ必要) なし(SDLやGTK+を自分で呼ぶ形) コンパイル 32/64bitネイティブ実行可能 32/64bitネイティブ実行可能 コードの自由度 ほぼQB4.5の構文通り QB構文+C的な新機能(ポインタ、型、など) C言語ライク ほぼなし あり(型、外部ライブラリ呼び出し、構造体) サードパーティ製 ほぼQB64のみ SDLやOpenGLが直接利用可能 📝 それぞれの特徴とメリット
🌟 QB64
✅ QuickBASIC 4.5互換が最優先!
- QB4.5で作ったプログラムがほぼそのまま動く。
- 古いBASICプログラムを再利用したい人に最適。
- グラフィック(SCREEN 12/13モードなど)も簡単。
- `_MOUSEBUTTON`, `_MOUSEX`, `_MOUSEY`など、現代的なポーリング式マウス対応あり。
❌ 逆に言うと「QBの枠」をあまり超えないので、ポインタや構造体といったC言語的な高度なデータ構造は扱いにくいです。
🔑 どっちを選ぶ?
✅ 昔のBASIC資産を再利用したい・BASIC文法だけで完結したいなら:
👉 QB64✅ BASICっぽい文法でありながら、構造体やポインタも使いたい・C言語的にステップアップしたいなら:
👉 FreeBASIC
🚀 まとめ
オススメ用途 言語 レトロBASICを再現 QB64 モダンBASIC+C風 FreeBASIC どちらも無料でWindowsにインストールできるので、ぜひ試してみてください!
もし導入手順やサンプルコードが必要でしたら、お手伝いしますね。📘✨
先ほどと同様の以下のようなプログラムを QB64 で作ってください:
円が表示されていて、その円の円周上の点をマウスでクリックすると、点の場所を示すために小さい円が表示されます。
マウスのクリックを繰り返して円周上の点を追加していきます。
円周上の点が追加されると、それらの点を頂点とする多角形が表示されて、その多角形の面積(円の半径を1とする)が表示されます。
と入力すると以下のような回答が返されました。
もちろんです!
以下に、QB64用のプログラムとして「円の円周上の点をマウスクリックで追加 → 小さな円表示 → 多角形を描画 → 面積を表示」するコード例を示します。
(半径=1の円として計算し、表示上は画面サイズに合わせています)🖥️ QB64コード例
SCREEN 12 CONST CX = 320 ' 円の中心 X CONST CY = 240 ' 円の中心 Y CONST RADIUS = 200 ' 画面上の円の半径(描画用) CONST RADIUS_NORM = 1 ' 計算上の半径(単位円) DIM pointX(100) AS SINGLE DIM pointY(100) AS SINGLE DIM pointCount AS INTEGER DO CLS ' 円の描画 CIRCLE (CX, CY), RADIUS, 15 ' マウス入力 mx = _MOUSEX my = _MOUSEY ' クリック検出 IF _MOUSEBUTTON(1) THEN ' 中心からの距離 dx = mx - CX dy = my - CY dist = SQR(dx * dx + dy * dy) IF dist <> 0 THEN ' 単位円上の座標(正規化) nx = dx / dist ny = dy / dist pointCount = pointCount + 1 pointX(pointCount) = nx pointY(pointCount) = ny _DELAY 200 ' チャタリング防止 END IF END IF ' 円周上の点(小さい円)を描画 FOR i = 1 TO pointCount ' 描画位置を計算 px = CX + pointX(i) * RADIUS py = CY + pointY(i) * RADIUS CIRCLE (px, py), 5, 12 NEXT ' 多角形を描画 IF pointCount >= 2 THEN FOR i = 1 TO pointCount j = i MOD pointCount + 1 x1 = CX + pointX(i) * RADIUS y1 = CY + pointY(i) * RADIUS x2 = CX + pointX(j) * RADIUS y2 = CY + pointY(j) * RADIUS LINE (x1, y1)-(x2, y2), 14 NEXT END IF ' 面積計算(単位円) area = 0 IF pointCount >= 3 THEN FOR i = 1 TO pointCount j = i MOD pointCount + 1 area = area + (pointX(i) * pointY(j) - pointX(j) * pointY(i)) NEXT area = ABS(area) / 2 END IF ' 面積表示 LOCATE 2, 2 PRINT "面積 (半径=1) = "; area _LIMIT 60 LOOP UNTIL _KEYDOWN(27) ' ESCキーで終了`CIRCLE (CX, CY), RADIUS, 15`
→ 画面中央に大きな円を描画。
✅ マウスクリック
- `_MOUSEBUTTON(1)` で左クリック検出。
- 中心からの相対座標を求め、単位円に正規化。
✅ 単位円と描画
- `pointX`, `pointY`は単位円上の座標(半径=1)。
- 描画時に`RADIUS`を掛けて画面に表示。
✅ 多角形と面積
- 3点以上なら多角形を形成し、Shoelaceの公式で面積を計算。
- 半径=1なので、面積もそのまま「単位円の面積比」で計算。
✅ ESCキーで終了
- `_KEYDOWN(27)`が押されたらループを抜ける。
もし分からないところや改良したい部分があれば、ぜひ教えてくださいね!
必要に応じてコメントも追加したり、GUI化(外部DLLなど)についてもご案内します。🚀




