8
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?

簡易ヘリコプター操縦ゲームを日本語プログラミング言語Mind9で作りました。

8
Last updated at Posted at 2026-08-09

ヘリコプター操縦ゲームです。
日本語プログラミング言語 Mind9(Windowsのみ対応)で作りました。
使用方法は、ソースコード先頭に書いています。
コンパイル・実行にはMind9 基本セット(無料評価版)が必要です。詳しくはMind9のダウンロードサイトをご覧ください。

実行画面

hilicopter01.gif

ソースコード

helicopter01.src
※ カーソルキーでヘリコプターを移動 helicopter01 > guilib
※ 1 マス目をクリックして、[迷路作成]をクリック → 壁ができる
※ 2 カーソルキー(上下左右)を押す→ヘリコプターが移動
※ 3 壁にぶつかると 失敗(ヘリの絵が変化)
※ 4 失敗が失敗許容値(定数定義)を 超えると、ヘリ爆発。
※ ヘリコプターの画像は、フリーイラストなどから各自取得してください。

キャンバスは ID。
横間隔は  定数 100ピクセル。
縦間隔は  定数  80ピクセル。
横幅は 定数 10。
縦幅は 定数 7。
ヘリコプター種類は 定数 3。
失敗時の音源は   "explosion03.wav"。
イメージヘリコプター1の場所は    "image\helicopter1.png"。
イメージヘリコプター2の場所は    "image\helicopter2.png"。
イメージヘリコプター3の場所は    "image\helicopter3.png"。
イメージヘリコプターxの場所は    "image\helicopterx.png"。 ※壁にぶつかったときのヘリ
イメージヘリコプターyの場所は    "image\helicoptery.png"。 ※壁にぶつかったときのヘリ
イメージヘリコプターは ヘリコプター種類の ID。
イメージヘリコプターxは ID。
イメージヘリコプターyは ID。
ヘリコプターは 図形ID。

キャンバス横サイズは 定数 1200。
キャンバス縦サイズは 定数 700。
縦初期位置は 4。
横初期位置は 6。
縦位置は 変数。
横位置は 変数。

格子点の情報は 構造体
  格子点は 図形ID
  壁有は  バイト変数
  各点の情報は 格子点と 壁有
  各行の情報は 横幅の 各点の情報
  全体は 縦幅の 各行の情報。

枠内?とは (行、列 → 1/0)
    行は 変数
    列は 変数
  行と 列に 入れる
  行が 1と 縦幅の 範囲?
  かつ
  列が 1と 横幅の 範囲?。  

失敗回数は  変数。
失敗許容値は 定数 3。
ヘリコプター番号は 変数。

左クリック時の図形選択とは (イベント名、X座標、Y座標 3(param数) → ・)
    イベント名は 文字列
    X文字列は  文字列
		Y文字列は  文字列
    Xは     変数
    Yは     変数
    行は     変数
    列は     変数
  (パラメータ数を) 捨て
  イベント名と X文字列と Y文字列に  入れ
  X文字列を 数値変換し 捨て Xに 入れ
  Y文字列を 数値変換し 捨て Yに 入れ
  Xを 横間隔で 割り 列に 入れる
  Yを 縦間隔で 割り 行に 入れる
  行と、列が 枠内?
    ならば キャンバスの 格子点(行、列)を この図形の選択状態を反転し 捨て
    つぎに。

キャンバスに左クリックをバインド登録とは 
  左クリックに 左クリック時の図形選択の 実行情報で 
    空列で キャンバスに マウスイベントのバインドを登録する。

枠を描くとは
    x座標は 変数
    y座標は 変数
  縦幅 回数指定し
    横幅 回数指定し
      回数に 横間隔を 掛け x座標に 入れる
      外側回数に 縦間隔を 掛け y座標に 入れる
        キャンバスと x座標と y座標と [x座標 + 横間隔]と [y座標 + 縦間隔]で
              長方形のIDを取得し 格子点(外側回数、回数)に 入れる
        格子点(外側回数、回数)を 描画する
        格子点(外側回数、回数)を 検索対象の図形に登録する
    繰り返す
  繰り返す。
  
迷路作成とは
    イベント引数を捨てる
  縦幅 回数指定し
    横幅 回数指定し
      格子点(外側回数、回数)が この図形は選択中?
        ならば   
          壁有(外側回数、回数)を セットし
          "burlywood"で 格子点(外側回数、回数)に 満たす色を設定し
        さもなければ
          壁有(外側回数、回数)を クリアし  
          白色で 格子点(外側回数、回数)に 満たす色を設定し
        つぎに
          
        格子点(外側回数、回数)に 変更反映する
    繰り返す
  繰り返す。

迷路クリア処理とは
  失敗回数を  クリアする
  失敗時の音源を 0で 音を再生する
  ヘリコプター番号が 0と 異なる
     ならば ヘリコプターを 図形を削除する
         ヘリコプター番号を クリアする
     つぎに
  縦幅 回数指定し
    横幅 回数指定し
        壁有(外側回数、回数)を クリアし  
        白色で 格子点(外側回数、回数)に 満たす色を設定し
        格子点(外側回数、回数)に 変更反映する
    繰り返す
  繰り返す。
迷路クリアとは
    イベント引数を捨てる
  迷路クリア処理する
。
ヘリコプターイメージを取得するとは
  イメージヘリコプター1の場所を イメージをロードし イメージヘリコプター(1)に 入れ
  イメージヘリコプター2の場所を イメージをロードし イメージヘリコプター(2)に 入れ
  イメージヘリコプター3の場所を イメージをロードし イメージヘリコプター(3)に 入れ
  イメージヘリコプターxの場所を イメージをロードし イメージヘリコプターxに 入れる
  イメージヘリコプターyの場所を イメージをロードし イメージヘリコプターyに 入れる
  。
ヘリコプターを描くとは (イメージヘリコプターID → ・)
    _イメージヘリコプターは ID
    x座標は 変数
    y座標は 変数
  _イメージヘリコプターに 入れる
  縦位置に 縦間隔を 掛け 10を 加え y座標に 入れる
  横位置に 横間隔を 掛け  5を 加え x座標に 入れる
  キャンバスに _イメージヘリコプターを 
    x座標と y座標と 左上隅で 図形としてイメージを描き ヘリコプターに 入れる
。
正常ヘリコプターを描くとは
  ヘリコプター番号が 0と 等しい 
    ならば
      ヘリコプター番号に 1を 入れる
      縦初期位置を 縦位置に 入れる
      横初期位置を 横位置に 入れる
    さもなければ
      ヘリコプターを 図形を削除する
      ヘリコプター番号を 一つ増加し
      ヘリコプター番号が ヘリコプター種類より 大きい
        ならば 1を ヘリコプター番号に 入れる
        つぎに  
    つぎに
    
  イメージヘリコプター(ヘリコプター番号)を ヘリコプターを描く
。
失敗ヘリコプターを描くとは
  失敗回数を 一つ増加する
  ヘリコプターを 図形を削除する
  失敗回数が 失敗許容値より 大きい
    ならば
      イメージヘリコプターYを ヘリコプターを描く
      1000ミリ秒だけ 遅延する
      迷路クリア処理する
    さもなければ
      イメージヘリコプターXを ヘリコプターを描く
      500ミリ秒だけ 遅延する
    つぎに
  。
ヘリコプター移動とは
    縦の移動量は 変数
    横の移動量は 変数
    W縦位置は 変数
    W横位置は 変数
  (引数個数を) 捨て
  数値変換し 捨て 横の移動量に 入れる
  数値変換し 捨て 縦の移動量に 入れる
  (イベント名を) 捨てる
  [W縦位置 := 縦位置 + 縦の移動量]
  [W横位置 := 横位置 + 横の移動量]
  W縦位置、W横位置が 枠内?  ※ショートサーキットではないので注意
    でなければ 失敗ヘリコプターを描く
          終わり
    つぎに   
  壁有(W縦位置、W横位置)が 1と 等しい
    ならば
      失敗ヘリコプターを描く
    さもなければ
      W縦位置を 縦位置に 入れる
      W横位置を 横位置に 入れる
      ヘリコプターを [横間隔 × 横の移動量]、[縦間隔 × 縦の移動量]だけ 図形移動する
    つぎに
  。
カーソル移動キーイベントを登録とは
  「Left」を ヘリコプターを移動の 実行情報と 「0  -1」と メインウィンドウで キーイベントのバインドを登録する
  「Right」を ヘリコプターを移動の 実行情報と 「0  1」と メインウィンドウで キーイベントのバインドを登録する
  「Up」を  ヘリコプターを移動の 実行情報と 「-1 0」と メインウィンドウで キーイベントのバインドを登録する
  「Down」を ヘリコプターを移動の 実行情報と 「1 0」と メインウィンドウで キーイベントのバインドを登録する	
	。
ボタン文字群は 文字列定数配列 「迷路作成」、「迷路クリア」。
ボタン数は 定数 ボタン文字群の 要素数。	
迷路作成の実行情報は 迷路作成の 実行情報。
迷路クリアの実行情報は 迷路クリアの 実行情報。
ボタン群は ボタン数の ID。
	
メインとは
    ボタン配置は ID
    キャンバス配置は ID
  メインウィンドゥで ボタン数で ボタンのIDを複数取得し ボタン群に 複数のIDを配列に格納
  ボタン数 回数指定し
    回数で 選択する
      迷路作成の実行情報、迷路クリアの実行情報
    選択終わり
    ボタン群(回数)に イベント処理登録し
    ボタン文字群(回数)を ボタン群(回数)に テキスト設定する
    ボタン群(回数)を 有効化する  
  繰り返す
  
  ボタン群から 配列から複数のIDを取り出し ボタン数で
  これらの並べ配置のIDを取得し ボタン配置に 入れる  
    
  メインウィンドウと キャンバス横サイズと キャンバス縦サイズと 白色で キャンバスを立て キャンバスに 入れ 
  キャンバスの 並べ配置のIDを取得し キャンバス配置に 入れる 
  左から右を ボタン配置に 並べ方向を設定し
  10ピクセルを ボタン配置に パディングの幅を設定
  下から上を キャンバス配置に 並べ方向を設定し
  キャンバス配置を 有効化し   
  ボタン配置を 有効化する
  枠を描く
  カーソル移動キーイベントを登録
  キャンバスに左クリックをバインド登録する
  ヘリコプターイメージを取得する
  ヘリコプター番号を クリアする 
  ここから
    正常ヘリコプターを描く
    100ミリ秒だけ 遅延し
  繰り返す
  。

途中の画面(静止画)をファイル出力する機能を追加

GIFアニメ作成のため、途中の画面(静止画)をファイル出力する機能を追加しました。

追加ソース

画面出力回数は 変数。
画面イメージをファイル出力とは (ファイル名 → ・)
    画面イメージは ID
    出力イメージファイル名は 文字列実体
    出力イメージファイル名に 入れる
    画面出力回数を 一つ増加し
    画面出力回数を 文字列変換し 出力イメージファイル名に 追加し
    ".png"を 出力イメージファイル名に 追加し
    メインウィンドウの ウィジェットのイメージを取得し 画面イメージに 入れ
    画面イメージを "png"と 出力イメージファイル名で イメージをファイルに出力。

ヘリコプター移動を少し変更します

ヘリコプター移動とは
    縦の移動量は 変数
    横の移動量は 変数
    W縦位置は 変数
    W横位置は 変数
  (引数個数を) 捨て
  数値変換し 捨て 横の移動量に 入れる
  数値変換し 捨て 縦の移動量に 入れる
  (イベント名を) 捨てる
  [W縦位置 := 縦位置 + 縦の移動量]
  [W横位置 := 横位置 + 横の移動量]
  W縦位置、W横位置が 枠内?  ※ショートサーキットではないので注意
    ならば
      壁有(W縦位置、W横位置)が 1と 等しい
        ならば
          失敗ヘリコプターを描く
        さもなければ
          W縦位置を 縦位置に 入れる
          W横位置を 横位置に 入れる
          ヘリコプターを [横間隔 × 横の移動量]、[縦間隔 × 縦の移動量]だけ 図形移動する
            つぎに
     さもなければ 失敗ヘリコプターを描く    
   つぎに
  "c:\temp\heli_image"に  画面イメージをファイル出力する
  。

移動後に画面イメージファイル出力しています。

画面出力回数は、メインのどこかクリアしておきます。
出力先のファイル名は、プログラムの先頭で定数定義しておくと良いです。
また、出力するかしないかのフラグを作っておくと良いと思います。

メインとは
  ・・・
  ・・・
   ヘリコプター番号を クリアする
   画面出力回数を クリアする 
   ここから
     正常ヘリコプターを描く
     100ミリ秒だけ 遅延し
   繰り返す。
8
3
2

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
8
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?