5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

まるで詩のような日本語で書いたプログラム - 最新Mindで動きます

Last updated at Posted at 2025-01-18

はじめに

木村 明さん 1 の傑作かつ芸術的な日本語プログラムに「ポエム(Poem)」があり2 まして、2023年に日本語プログラミング言語Mind開発者の@killyさんによりQiitaに公開されて好評を博しています。

経緯

先日、日本語プログラミング言語Mindの開発元@killyさんの御厚意により日本語プログラミング言語Mindのバージョン9βをご提供いただいたので、そのグラフィックス機能のお試しを兼ねて上記の記事に公開されているソースをキャンバス機能で動くように調整してみました。

こちらはオリジナルのスマイルグラフィックスと異なりラインアート風の「愛ではなくお酒に酔う版」としてお酒に酔う言葉で9801Libというライブラリ部分を補完しておりました。するとこちらの記事へのコメントで@killyさんより2023年当時の9801Libのソースを現状有姿でご開示いただきましたので、さっそく言語仕様としては固まっているMind9β6に移行させてみました。

話が戻りますが、

もしかしたら非公開の9801libを介せばいけるのかもしれません。

の件、本コメント末尾にソースを入れましたので使ってみていただけますか。
当初はちゃんとした「9801向けMindのグラフィック互換ライブラリ」を作るつもりだったのですが、意外とボリュームが大きいこともあって、思い切って端折り、Poemが使う分だけ定義したものです。

前提条件

Windows11 Pro 22H2 22621.4169
mind version9-BETA-6 

9801lib.src

下記が最新Mind9(β6)に移行した9801lib.srcの全文です。2023年当時のMind9α版では、「ID」や「図形ID」が導入されていなかったことがわかり、たいへん勉強になりました。

9801lib.src
※タイトル 9801Lib 旧9801ライブラリ一部再現ライブラリ
※ Version1.0(2023-09-20)
※ 片桐 明(2023-09-20) Mind8 新版暫定 向けに作成
※ リンク filew - guiLib
※ 修正:mylifewithviolin(2025-01-18) Mind9(β6) 向けに修正
※ リンク file - guiLib

※※※※※※※※	色

※ 以下は 旧9801ライブラリ: mconsole.src で定義されていたもの ※
黒は          数値  00H。
青は          数値  01H。
赤は          数値  02H。
紫は          数値  03H。
緑は          数値  04H。
水は          数値  05H。
黄は          数値  06H。
白は          数値  07H。

※黒色とは        黒と     等価。	※これらは新guilibとかぶるので抑制
※青色とは        青と     等価。
※赤色とは        赤と     等価。
※紫色とは        紫と     等価。
※緑色とは        緑と     等価。
※水色とは        水と     等価。
※黄色とは        黄と     等価。
※白色とは        白と     等価。


※※※※※※※※	イベント

一つのイベントを処理フックとは 本定義
	一つのイベントを処理すること。


※※※※※※※※	角度などパラメータ

	グローバル。

キャンバス記憶は	ID。

開始角度は	変数。
終了角度は	変数。

角度設定とは (開始角、終了角  -->  ・)
	開始角度と 終了角度に 入れること。

描画色は	文字列実体 長さ 汎用ID色定数長さ。

	ローカル。

色番号を色シンボルに変換とは (番号 → 色シンボル)
	一つ加え
	選択すること
		黒色
		青色
		赤色
		「Violet」	※テスト2
※		赤紫色
		「Green」	※テスト2
※		緑色
		水色
		黄色
		白色
	選択終り
	。

	グローバル。

描画色設定とは (描画色(番号) → ・)
	色番号を色シンボルに変換し 描画色に 入れること。


※※※※※※※※	円

中心Y座標は	変数。
中心X座標は	変数。
円半径は	変数。

	ローカル。

_円IDは	図形ID。

	グローバル。

円とは     (中心Y、中心X、半径 --> ・)
    中心Y座標と 中心X座標と 円半径に 入れ
	キャンバス記憶と 中心X座標と 中心Y座標と 円半径で 円のIDを取得し _円IDに 入れ
	_円IDを 描画し
	。

円を塗るとは  (中心Y、中心X、半径 --> ・)
		デバックモードは 数値 0
  本体とは
    中心Y座標と 中心X座標と 円半径に 入れ
	デバックモード
		ならば 「円を塗る:」を 表示し 中心Y座標を 数値表示し 空白表示し
			中心X座標を 数値表示し 空白表示し 「円半径=」を 表示し
			円半径を 数値表示し 「 色=」を 表示し 描画色を 表示し 改行し
		つぎに
	キャンバス記憶と 中心X座標と 中心Y座標と 円半径で 円のIDを取得し _円IDに 入れ
	描画色を _円IDに 満たす色を設定し
	_円IDを 描画し
	。

円を消すとは  (中心Y座標、中心X座標、半径 --> ・)
    _円IDを 図形を削除する。


※※※※※※※※	円弧

	ローカル。

_円弧IDは	図形ID。

	グローバル。

円弧をかくとは (中心Y座標、中心X座標、半径 --> ・)
		デバックモードは 数値 0
		_描画角度は 変数
    中心Y座標と 中心X座標と 円半径に 入れる
	デバックモード
		ならば 「円弧をかく:」を 表示し 中心Y座標を 数値表示し 空白表示し
			中心X座標を 数値表示し 空白表示し 「円半径=」を 表示し
			円半径を 数値表示し 「 色=」を 表示し 描画色を 表示し
		つぎに
	キャンバス記憶と 中心X座標と 中心Y座標と 円半径で 円弧のIDを取得し _円弧IDに 入れ
	 終了角度から 開始角度を 引き _描画角度に 入れ
	デバックモード
		ならば 「 描画角度=」を 表示し _描画角度を 数値表示し 「 描画色=」を 表示し
			描画色を 表示し 改行し
		つぎに
	開始角度と _描画角度を	 _円弧IDに 開始・描画角度を設定し
	円弧単独で			 _円弧IDに 円弧の種類を設定
	描画色を 			 _円弧IDに 線の色を設定し
	2を				 _円弧IDに 線の太さを設定し
	_円弧IDを 描画し
	。

円弧を消すとは     (中心Y座標、中心X座標、半径 --> ・)
    _円弧IDを 図形を削除する。


※※※※※※※※	初期化

	グローバル。

キャンバスの右下座標は 640と 400。	※9801のディスプレイサイズ

	ローカル。

キャンバスを設置処理とは (・ → ・)
	※
  親ID・サイズ・背景色を積むとは (・ → Xサイズ、Yサイズ)
	メインウィンドウをつみ
	 キャンバスの右下座標をつみ
	  黒色をつむ
※	  白色をつむ
	※
  本体とは
	親ID・サイズ・背景色を積み キャンバスを立て キャンバス記憶に 入れ
	。

	グローバル。

グラフクリアとは (・ → ・)
	キャンバス記憶を キャンバスをクリアすること。

グラフ初期化とは (・ → ・)
	※ グラフィックを初期化する ※
	キャンバスを設置処理し
	グラフクリアし
	。

※ 終り ※

9801lib.srcをMind9β6でビルドしてみる

この移行版の9801lib.srcをMind9β6でビルドしてみます。

C:\developments\vscode\mind9>mind 9801lib guilib

日本語プログラミング言語 Mind Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了

ビルド成功です!:tada:

poem3.src

そして下記が最新Mind9(β6)に移行したpoem3.srcの全文です。ほぼオリジナルのままです。「戸惑う」は「500ミリ 遅延する。」になっています。他は「文字作画」が変数だったのが「図形ID」に変わった点、図形IDを「有効化」するが「描画」するに変わった点以外は@killyさんのVersion2.0(2023-09-20)とほぼほぼ変わりありません。

poem3.src
※タイトル 詩によるスマイルフェイス乱数表示プログラム
※ Version1.0(1986-03-07)
※ リンク ALL
※ 木村 明
※ 修正:片桐 明(2023-09-20) Mind8 新版暫定 向けに修正
※ Version2.0(2023-09-20)
※ リンク filew - guiLib - 9801Lib
※ 修正:mylifewithviolin(2025-01-18) Mind9(β6) 向けに修正
※ Version3.0(2025-01-18)
※ リンク file - guiLib - 9801Lib

夢は          変数と     等価。
着飾るは        描画色設定と  等価。
…は          つぎと     等価。
眠りとは        角度設定と   等価。
喜劇は         回数指定と   等価。
酔うは         入れると    等価。
タンゴを踊るは     円を塗ると   等価。
ワルツを踊るは     円弧をかくと  等価。
グッバイは       割ると     等価。
言うは         引くと     等価。
おまじないを言うは   無処理と    等価。
戸惑うとは       500ミリ 遅延する。

明日は 5日。
あさっては 10日。
昨日は 3日。
今日は 0日。

悪夢とは 範囲?と 等価。

きちがい星は 夢。

らんちき騒ぎとは (・ → ・)
        ※----------※
        ※ 乱数の種を初期化 ※
        ※----------※
        日時を得て
    日を 分けて 和む
    きちがい星のうたに 酔う。

☆とは
    生は 夢  死は 夢  生と 死に 酔う
    死に 1日を 加え 生を 引き 死に 入れ
    101日を きちがい星に 掛け
    10001日間 余を きちがい星に 酔う
    きちがい星と 死の 余を 生に 加え。

文字作画1は    図形ID。
文字作画2は    図形ID。

テキスト描画とは
                オフセットは  数値 5
                フォントは   文字列定数 「{MSP 明朝} 12」
                文言1は    文字列定数 「作: 木村 明 (1986)」
                文言2は    文字列定数 「Mind9β + guiLib + 9801Lib」
                テキスト幅1は 数値 240
                テキスト幅2は 数値 240

  左上座標は
        オフセットと オフセット

  右下座標は
        キャンバスの右下座標を 交換し オフセットを 引き
         交換し オフセットを 引き

  本体とは
        キャンバス記憶と 文言1を
          左上座標で 図形としてテキストのIDを取得し 文字作画1に 入れ
        白色を          文字作画1に 文字色を設定し
        フォントを      文字作画1に フォントを設定し
        テキスト幅1を  文字作画1に テキストの幅を設定し
        左上隅を        文字作画1に 基準点を設定し
        文字作画1を 描画

        キャンバス記憶と 文言2を
          右下座標で 図形としてテキストのIDを取得し 文字作画2に 入れ
        白色を          文字作画2に 文字色を設定し
        フォントを      文字作画2に フォントを設定し
        テキスト幅2を  文字作画2に テキストの幅を設定し
        右下隅を       文字作画2に 基準点を設定し
        文字作画2を 描画すること。

扉を開けるとは
        グラフ初期化し
        テキスト描画する。

扉を閉めるとは
        文字作画1を 図形の重なりを最上位へ
        文字作画2を 図形の重なりを最上位へ。

メインは
  愛は 夢  恋は 夢  幸福は 夢  不幸は 夢
    らんちき騒ぎのあとに
      扉を開け
       28日の 喜劇
        明日から 395日 ☆ 愛に 酔う
         明日から 635日 ☆ 恋に 酔う
          あさってから 77日 ☆ 幸福に 酔う
           1日目から  7日目まで ☆  着飾って
            愛と 恋と  幸福の  タンゴを踊る
          幸福を 2つに 割って 不幸に 入れ
         210日目から 330日目まで 眠る
        黒を 着飾って
       愛と 恋と 不幸の ワルツを踊る
      愛と 幸福と 昨日に グッバイと 言って
     愛に 酔う
    恋が 不幸を 引きよせる
   恋に 酔う
  不幸と 明日に グッバイして
  不幸に 酔う
  愛が  今日から 399日間の  悪夢 でなければ もう一度 …
  恋が  今日から 639日間の  悪夢 ならば
  愛と 恋と 不幸の タンゴを踊る …
   恋に 幸福を 加えれば 恋に 酔う
    恋が 今日から 639日間の 悪夢 でなければ もう一度 …
     愛と 恋と 不幸の タンゴを踊りつつ 戸惑う
      繰り返しくりかえしくりかえし
       扉を閉める。

poem3.srcをMind9β6でビルドしてみる

移行版のpoem3.srcをMind9β6でビルドしてみます。

C:\developments\vscode\mind9>mind poem3 9801lib

日本語プログラミング言語 Mind Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\mind9-beta\mind9-beta\bin\mindexw.exe --> poem3.exe

ビルド成功です!:tada:

poem3.exeを実行

ついにオリジナルのpoemがWindows11上のMind9で復元しました!:tada::tada:

mind9betapoem3.png

GIFアニメなので15秒に収めるためディレイ秒数はオリジナルより若干少な目にしています。

mind9poem3.gif

1回の実行結果をGIFアニメがループして再生していますので、同じパターンが繰り返されていますが、実際は毎回実行するたびに異なるパターンで展開します。

  1. 本詩公開当時、MSA(マイクロソフトウェア・アソシエイツ)で日本語プログラミング言語 Mind のプロモーションをしていた方。劇団 SO2 を主宰。

  2. Mind活用入門 - Let's日本語プログラミング、相原 寛、学研、1993

5
3
3

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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?