「円の面積」と同様のものを ChatGPT に X-BASIC で作ってもらいました。
X68000 の X-BASIC の機能について教えてください
と入力すると以下のような回答が返されました。
もちろんです!X68000 の X-BASIC は、シャープのX68000シリーズ(1987年発売の日本製パソコン)向けに用意されたBASIC言語の一種です。以下のような特徴や機能があります。
🔹 X-BASIC の概要
X-BASICは、X68000のグラフィカルな機能を活かすために設計されたインタプリタ型のBASIC言語で、GUIアプリやゲーム開発の入門にも適していました。MSX-BASICやPC-8801のN88-BASICとも似ていますが、X68000ならではの機能が充実していました。
🔸 主な機能
1️⃣ グラフィック機能
- 4096色(または65,536色)のグラフィックモードをBASICから直接制御できます。
- `LINE`, `CIRCLE`, `PAINT`, `PSET` などの描画命令が豊富。
- スプライトの扱いも可能(ただし、より本格的なスプライト処理はアセンブリで行うことが多かった)。
2️⃣ サウンド機能
4️⃣ ファイル入出力
5️⃣ 演算・制御構造
- FOR/NEXT, WHILE/WEND, IF/THEN/ELSE, SELECT CASE などの制御構造。
- 変数・配列、ユーザー定義関数(DEF FN)など、標準的なBASIC文法に準拠。
🔸 拡張性・実用面
グラフィックス機能とマウスの機能について教えてください
と入力すると以下のような回答が返されました。
いいですね!X68000 の X-BASIC の「グラフィックス機能」と「マウス機能」について詳しく説明しますね。
🎨 1️⃣ グラフィックス機能
X-BASIC では、X68000 の強力なグラフィック機能を簡単に使えるようになっています。主に以下のような機能が用意されています。
🔸 画面モード
X68000 では「グラフィックモード」を指定して画面解像度や色数を決めます(例:4096色、512x512など)。
`SCREEN n`: グラフィック画面を開く命令(例:`SCREEN 5`)。
🔸 描画命令
いくつか代表的な命令を紹介しますね。
命令 説明 `PSET` 点を描画する(例: `PSET (100,100),15`)。 `LINE` 線を描画(例: `LINE (50,50)-(150,150),3`)。 `CIRCLE` 円や弧を描く(例: `CIRCLE (200,200),50,5`)。 `PAINT` 塗りつぶし(例: `PAINT (100,100),2`)。 `COLOR` 描画色を設定(例: `COLOR 3`)。 `CLS` 画面消去(例: `CLS`)。 🔸 パレット
X68000 では4096色(RGB各4bit)や65536色(RGB各5bit)を扱えます。
- `PALETTE n,r,g,b`: パレット番号`n`に色を割り当てます。
例:
PALETTE 0,15,0,0 ' 赤 PALETTE 1,0,15,0 ' 緑 PALETTE 2,0,0,15 ' 青🖱️ 2️⃣ マウス機能
X-BASICではマウス操作も比較的簡単に使えます。
🔸 マウスの座標取得
- `MOUSE X,Y,B`
- `X`と`Y`: マウスカーソルの座標(画面上の位置)。
- `B`: ボタン状態(ビット列で表現)。
例:
DIM MX,MY,MB MOUSE MX,MY,MB PRINT "X=";MX," Y=";MY," Buttons=";MB🔸 ボタン判定
`MB`の値はビットで表され、例えば:
- 1ビット目(1): 左ボタン
- 2ビット目(2): 右ボタン
- 3ビット目(4): 中央ボタン(機種により対応しない場合あり)
例:
IF (MB AND 1) <> 0 THEN PRINT "Left button pressed!" IF (MB AND 2) <> 0 THEN PRINT "Right button pressed!"
以下のような X-BASIC のプログラムを作ってください:
円が表示されていて、その円の円周上の点をマウスでクリックすると、点の場所を示すために小さい円が表示されます。
マウスのクリックを繰り返して円周上の点を追加していきます。
円周上の点が追加されると、それらの点を頂点とする多角形が表示されて、その多角形の面積(円の半径を1とする)が表示されます。
と入力すると以下のような回答が返されました。
了解です!とても面白い課題ですね!
X68000 の X-BASIC で、以下の要件を満たすプログラムを作成します。✅ 円(半径R)を画面中央に表示
✅ マウスでクリックすると円周上の点を計算し、小さい円でその位置を表示
✅ クリックごとに点を追加し、それらの点を結んで多角形を描画
✅ 半径1の場合の正規化面積を計算して表示🖥️ ポイント
- 座標変換
画面座標(ピクセル) → 単位円(半径1) → 正規化面積
- 面積計算
多角形の面積は符号付き面積公式(Shoelace formula)で求めます。
- グラフィック描画
`LINE`, `CIRCLE`, `PSET` を使用。
📄 サンプルコード(X-BASIC)
' X-BASIC (X68000) SCREEN 5 ' 512x512ドット, 16色 CONST CX = 256 ' 画面中心X CONST CY = 256 ' 画面中心Y CONST RADIUS = 200 ' 表示する円の半径(ピクセル) CONST UNIT_RADIUS = 1.0 ' 単位円 DIM X(100), Y(100) DIM MX, MY, MB N = 0 CLS CIRCLE (CX, CY), RADIUS, 2 PRINT "クリックで点を追加。右クリックで終了" DO MOUSE MX, MY, MB IF (MB AND 1) <> 0 THEN ' マウスクリック DX = MX - CX DY = MY - CY DIST = SQR(DX*DX + DY*DY) IF DIST <> 0 THEN ' 円周上の座標に正規化 NX = CX + RADIUS * (DX / DIST) NY = CY + RADIUS * (DY / DIST) N = N + 1 X(N) = (DX / DIST) ' 単位円でのX座標 Y(N) = (DY / DIST) ' 単位円でのY座標 ' 描画 CIRCLE (NX, NY), 5, 3 ' 多角形描画 IF N > 1 THEN CLS CIRCLE (CX, CY), RADIUS, 2 FOR I = 1 TO N IX1 = CX + RADIUS * X(I) IY1 = CY + RADIUS * Y(I) IX2 = CX + RADIUS * X( (I MOD N)+1) IY2 = CY + RADIUS * Y( (I MOD N)+1) LINE (IX1, IY1)-(IX2, IY2), 4 CIRCLE (IX1, IY1), 5, 3 NEXT END IF ' 面積計算(Shoelace formula) AREA = 0 IF N >= 3 THEN FOR I = 1 TO N J = (I MOD N) + 1 AREA = AREA + (X(I)*Y(J) - X(J)*Y(I)) NEXT AREA = ABS(AREA) / 2 LOCATE 1, 25 PRINT "面積(単位円換算):"; AREA END IF ' デバウンス(クリック離すまで待機) DO MOUSE MX, MY, MB LOOP WHILE (MB AND 1) <> 0 END IF END IF LOOP WHILE (MB AND 2) = 0 ' 右クリックで終了




