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

概要

プロデルが、CLRらしいので、調べて見た。
練習問題やってみた。

練習問題

サンプルのシューティングゲームにエナミーの発射音が出るよう、改造せよ。

写真

image.png

サンプルコード

/* シューティングゲーム */

キャラクタとは
	+横出現位置
	+縦出現位置
	+横速度
	+縦速度
	+キャンバス
	【自分】を、移動する手順
		横出現位置は、横出現位置+横速度
		縦出現位置は、縦出現位置+縦速度
	終わり
終わり

プレイヤとは
	キャラクタを継承する
	【自分】を、描写する手順
		自分のキャンバスは、ゲームウィンドウのキャンバス1の末尾
		キャンバスへ四角形を描いて部品1とする
			その位置と大きさは{横出現位置,縦出現位置-10,10,30}
			その背景色は、灰
			その線色は、灰
		キャンバスへ四角形を描いて部品2とする
			その位置と大きさは{横出現位置+10,縦出現位置+10,10,10}
			その背景色は、青
			その線色は、青
		キャンバスへ四角形を描いて部品3とする
			その位置と大きさは{横出現位置-10,縦出現位置+10,10,10}
			その背景色は、青
			その線色は、青
	終わり
終わり

プレイヤ弾丸とは
	キャラクタを継承する
	はじめの手順
		ゲームウィンドウのプレイヤ弾配列に自分を加える
	終わり
	【自分】を、描写する手順
		自分のキャンバスは、ゲームウィンドウのキャンバス1の末尾
		キャンバスへ円を描く
		その位置と大きさは{横出現位置,縦出現位置,2,10}
			その背景色は、オレンジ
			その線色は、オレンジ
		キャンバスへ円を描く
			その位置と大きさは{横出現位置+7,縦出現位置,2,10}
			その背景色は、オレンジ
			その線色は、オレンジ
	終わり
終わり

エネミー弾丸とは
	キャラクタを継承する
	はじめの手順
		ゲームウィンドウのエネミー弾配列に自分を加える
	終わり
	【自分】を、描写する手順
		自分のキャンバスは、ゲームウィンドウのキャンバス1の末尾
		キャンバスへ円を描く
		その位置と大きさは{横出現位置+5,縦出現位置+5,10,10}
			その背景色は、赤
			その線色は、赤
		キャンバスへ円を描く
			その位置と大きさは{横出現位置+7,縦出現位置+7,6,6}
			その背景色は、白
			その線色は、白
	終わり
終わり

エネミーとは
	+キャンバス
	+横出現位置は150
	+縦出現位置は100
	+ゲーム進行間隔
	+移動時間は200.0
	+フレーム
	+移動時間カウントは0
	+発射間隔:浮動小数
	+発射カウントは0
	+弾速度は6
	+弾角度
	+弾幅は3
	+ライフは1
	+スコアは100
	+出現時間
	+進行方向は0
	+移動カウントは1
	初期化する手順
		ゲーム進行間隔は、ゲームウィンドウの進行間隔
		フレームは、1000÷ゲーム進行間隔
		出現時間は、10の乱数
		発射間隔は1.5
	終わり
	【自分】を、右へ、【X】度、回転させる手順
		移動カウントが1でないかつ移動カウントがフレーム×移動時間以下なら
			進行方向は、進行方向-X
			進行方向は、進行方向を360で割った余り
		そして
	終わり
	【自分】を、左へ、【X】度、回転させる手順
		移動カウントが1でないかつ移動カウントがフレーム×移動時間以下なら
			進行方向は、進行方向+X
			進行方向は、進行方向を360で割った余り
		そして
	終わり
	【T】秒毎に、【自分】を、右へ、【X】度、回転させる手順
		移動カウントが1でないかつ移動カウントがフレーム×移動時間以下なら
			移動カウントを(T×フレーム)で割った余りが0なら
				進行方向は、進行方向-X
				進行方向は、進行方向を360で割った余り
			そして
		そして
	終わり
	【T】秒毎に、【自分】を、左へ、【X】度、回転させる手順
		移動カウントが1でないかつ移動カウントがフレーム×移動時間以下なら
			移動カウントを(T×フレーム)で割った余りが0以下なら
				進行方向は、進行方向+X
				進行方向は、進行方向を360で割った余り
			そして
		そして
	終わり
	【自分】を、【V】だけ、進ませる手順
		移動カウントが1でないかつ移動カウントがフレーム×移動時間以下なら
			横出現位置は、横出現位置+(進行方向のコサイン)×V
			縦出現位置は、縦出現位置-(進行方向のサイン)×V
		そして
	終わり
	【T】秒毎に、【自分】を、【V】だけ、進ませる手順
		移動カウントが1でないかつ移動カウントがフレーム×移動時間以下なら
			移動カウントを(T×フレーム)で割った余りが0なら
				横出現位置は、横出現位置+(進行方向のコサイン)×V
				縦出現位置は、縦出現位置-(進行方向のサイン)×V
			そして
		そして
	終わり
	【自分】を、描写する手順
		自分のキャンバスは、ゲームウィンドウのキャンバス1の末尾
		キャンバスへ円を描く
			その位置と大きさは{横出現位置-5,縦出現位置+5,30,10}
			その背景色は、灰
			その線色は、灰
		キャンバスへ円を描く
			その位置と大きさは{横出現位置,縦出現位置,20,20}
			その背景色は、緑
			その線色は、緑
	終わり
	【自分】を、移動する手順
		移動カウントを増やす
	終わり
	【自分】が、発射準備する手順
		発射カウントを増やす
		発射カウントがフレーム×発射間隔以上なら
			発射する
			「test-short.wav」を再生する
			発射カウントは0
		そして
	終わり
終わり

エネミーNとは
	エネミーを継承する
	はじめの手順
		ゲームウィンドウの待機エネミー配列に自分を加える
		初期化する
	終わり
	発射する手順
	終わり
終わり

エネミー1とは
	エネミーを継承する
	はじめの手順
		ゲームウィンドウの待機エネミー配列に自分を加える
		初期化する
	終わり
	発射する手順
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は0
			その縦速度は、弾速度
	終わり
終わり

エネミー2とは
	エネミーを継承する
	はじめの手順
		ゲームウィンドウの待機エネミー配列に自分を加える
		初期化する
	終わり
	発射する手順
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、弾幅
			その縦速度は、弾速度
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、-弾幅
			その縦速度は、弾速度
	終わり
終わり

エネミー3とは
	エネミーを継承する
	はじめの手順
		ゲームウィンドウの待機エネミー配列に自分を加える
		初期化する
	終わり
	発射する手順
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、弾幅
			その縦速度は、弾速度
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は0
			その縦速度は、弾速度
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、-弾幅
			その縦速度は、弾速度
	終わり
終わり

エネミー8とは
	エネミーを継承する
	はじめの手順
		ゲームウィンドウの待機エネミー配列に自分を加える
		初期化する
	終わり
	発射する手順
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は0
			その縦速度は、弾速度
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は0
			その縦速度は、-弾速度
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、弾速度
			その縦速度は0
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、-弾速度
			その縦速度は0
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、弾速度
			その縦速度は、弾速度
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、弾速度
			その縦速度は、-弾速度
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、-弾速度
			その縦速度は、弾速度
		エネミー弾丸を作る
			その横出現位置は、横出現位置
			その縦出現位置は、縦出現位置
			その横速度は、-弾速度
			その縦速度は、-弾速度
	終わり
終わり

エネミーPとは
	エネミーを継承する
	はじめの手順
		ゲームウィンドウの待機エネミー配列に自分を加える
		初期化する
	終わり
	発射する手順
		縦値は(ゲームウィンドウのプレイヤの縦出現位置-縦出現位置)の絶対値
		縦値が0でなければ
			弾角度は(ゲームウィンドウのプレイヤの横出現位置-横出現位置)÷縦値
			エネミー弾丸を作る
				その横出現位置は、横出現位置
				その縦出現位置は、縦出現位置
				その横速度は、弾角度×弾速度
				その縦速度は、弾速度
		そして
	終わり
終わり

エネミーP2とは
	エネミーを継承する
	はじめの手順
		ゲームウィンドウの待機エネミー配列に自分を加える
		初期化する
	終わり
	発射する手順
		縦値は(ゲームウィンドウのプレイヤの縦出現位置-縦出現位置)の絶対値
		縦値が0でなければ
			弾角度は(ゲームウィンドウのプレイヤの横出現位置-横出現位置)÷縦値
			エネミー弾丸を作る
				その横出現位置は、横出現位置
				その縦出現位置は、縦出現位置
				その横速度は、弾角度×弾速度+弾幅
				その縦速度は、弾速度
			エネミー弾丸を作る
				その横出現位置は、横出現位置
				その縦出現位置は、縦出現位置
				その横速度は、弾角度×弾速度-弾幅
				その縦速度は、弾速度
		そして
	終わり
終わり

ボスとは
	エネミーを継承する
	+発射間隔2
	+弾速度2
	+発射カウント2
	はじめの手順
		ゲームウィンドウの待機エネミー配列に自分を加える
		ライフは20
		スコアは1000
		発射間隔は1
		発射間隔2は2
		弾速度2は15
		発射カウント2は0
		初期化する
	終わり
	【自分】を、描写する手順
		自分のキャンバスは、ゲームウィンドウのキャンバス1の末尾
		キャンバスへ円を描く
			その位置と大きさは{横出現位置-5,縦出現位置+5,30,10}
			その背景色は、灰
			その線色は、灰
		キャンバスへ円を描く
			その位置と大きさは{横出現位置,縦出現位置,20,20}
			その背景色は、赤
			その線色は、赤
	終わり
	【自分】が、発射準備する手順
		発射カウントを増やす
		発射カウントが基準点×発射間隔以上なら
			発射する
			発射カウントは0
		そして
		発射カウント2を増やす
		発射カウント2が基準点×発射間隔2以上なら
			発射2する
			発射カウント2は0
		そして
	終わり
	発射する手順
		乱数3は、-5から5までの乱数
			エネミー弾丸を作る
				その横出現位置は、横出現位置
				その縦出現位置は、縦出現位置
				その横速度は、乱数3
				その縦速度は9
			エネミー弾丸を作る
				その横出現位置は、横出現位置
				その縦出現位置は、縦出現位置
				その横速度は、乱数3+3
				その縦速度は8
			エネミー弾丸を作る
				その横出現位置は、横出現位置
				その縦出現位置は、縦出現位置
				その横速度は、乱数3-3
				その縦速度は7
	終わり
	発射2する手順
		横出現位置と縦出現位置からプレイヤに3way発射する
		横出現位置-50と縦出現位置からプレイヤに3way発射する
		横出現位置+50と縦出現位置からプレイヤに3way発射する
	終わり
	【X】と【Y】から、プレイヤに発射する手順
		縦値は(ゲームウィンドウのプレイヤの縦出現位置-Y)の絶対値
		縦値が0でなければ
			弾角度は(ゲームウィンドウのプレイヤの横出現位置-X)÷縦値
			エネミー弾丸を作る
				その横出現位置は、X
				その縦出現位置は、Y
				その横速度は、弾角度×弾速度
				その縦速度は、弾速度
		そして
	終わり
	【X】と【Y】から、プレイヤに3way発射する手順
		縦値は(ゲームウィンドウのプレイヤの縦出現位置-Y)の絶対値
		縦値が0でなければ
			弾角度は(ゲームウィンドウのプレイヤの横出現位置-X)÷縦値
			エネミー弾丸を作る
				その横出現位置は、X
				その縦出現位置は、Y
				その横速度は、弾角度×弾速度
				その縦速度は、弾速度
			エネミー弾丸を作る
				その横出現位置は、X
				その縦出現位置は、Y
				その横速度は、弾角度×弾速度-3
				その縦速度は、弾速度
			エネミー弾丸を作る
				その横出現位置は、X
				その縦出現位置は、Y
				その横速度は、弾角度×弾速度+3
				その縦速度は、弾速度
		そして
	終わり
終わり

時間は0
横サイズは300
縦サイズは400
プレイヤ速度は8
自機当たり判定は10
敵当たり判定は15
基準点は0
ゲームウィンドウを表示する
待機する

敵を生成する手順
	敵Aというエネミー2を作る
	その出現時間は5
	敵Bというエネミー8を作る
	その出現時間は3
	その横出現位置は0
	その縦出現位置は50
	その進行方向は0
終わり

敵を移動する手順
	1.5秒毎に敵Aを90度、右へ回転させる
	敵Aを3だけ進ませる
	敵Bを5だけ進ませる
終わり

ゲームウィンドウとは
	ウィンドウを継承する
	+時間は0
	+プレイヤ
	+エネミー配列は{}
	+待機エネミー配列は{}
	+プレイヤ弾配列は{}
	+エネミー弾配列は{}
	+ゲーム中
	+ゲームオーバーは×
	+キャンバス1は{}
	+スコアは0
	+カウンタは0
	+進行間隔は50
	+フレーム
	+現在時間は0
	はじめの手順
		初期化する
		ゲーム進行というタイマーを作る
		ゲーム進行の時間になった時の手順は、ゲームを進行する
		ゲーム進行の間隔は、進行間隔
		キャラ生成というタイマーを作る
		キャラ生成の時間になった時の手順は、キャラを生成する
		キャラ生成の間隔は100
		この内部領域大きさは{横サイズ、縦サイズ}
		ゲームを開始する
	終わり
	初期化する手順
		この背景色は「灰」
		この種類は「固定」
		この初期位置は「中央」
		この内容は「シューティングゲーム」
		このドラッグドロップは○
		キャンバスというキャンバスを作る
			その位置と大きさは{0、0、284、361}
			その内部大きさは{0、0}
			その余白は{0、0}
			その移動順は1
			その倍率は1
			そのドッキング方向は「全体」
			その自動更新は×
		この設計スケール比率は{96,96}
	終わり
	ゲームを開始する手順
		フレームは、1000÷進行間隔
		キャラ生成を開始
	終わり
	ゲームを進行する手順
		ゲーム中なら
			現在時間を増やす
			キャンバスに子キャンバスを作ってキャンとする
			その位置と大きさは{0,0,横サイズ,縦サイズ}
			その背景色は、白
			キャンを隠す
			キャンバス1にキャンを加える
			プレイヤ移動
			プレイヤを描写する
			プレイヤ弾を移動する
			エネミーを出現させる
			敵を移動する
			エネミーを移動する
			エネミー配列のすべてのエネミーについてそれぞれ繰り返す
				エネミーが発射準備する
			そして
			エネミー弾を移動する
			エネミーを判定する
			プレイヤを判定する
			スコアを表示する
			ゲームオーバーが○なら
				キャンバス1(2)に「ゲームオーバー」という文字を書く
				その位置は{80,190}
				その文字サイズは20
				キャンバス1(2)に「Rでリトライ」という文字を書く
				その位置は{80,240}
				その文字サイズは12
				キャンバス1(2)に「Eで終了」という文字を書く
				その位置は{80,260}
				その文字サイズは12
			そして
			キャンバスを更新する
			キャンバス1(2)を表示する
			キャンバスからキャンバス1(1)を消す
			キャンバス1は、キャンバス1から1を消したもの
		そして
	終わり
	キャラを生成する手順
		キャンバスに子キャンバスを作ってキャンとする
			その位置と大きさは{0,0,横サイズ,縦サイズ}
			その背景色は、白
		キャンバス1にキャンを加える
		プレイヤは、プレイヤを作ったもの
			その横出現位置は150
			その縦出現位置は300
			その横速度は0
			その縦速度は0
		プレイヤを描写する
		敵を生成する
		キャンバスを更新する
		ゲーム進行を開始する
		ゲーム中は○
		キャラ生成を停止する
	終わり
	プレイヤ移動手順
		Xは1
		プレイヤを移動する
		プレイヤの縦出現位置が15以下なら
			プレイヤの縦出現位置は15
		他でプレイヤの縦出現位置が縦サイズ-25以上かつプレイヤの縦出現位置が1000以下なら
			プレイヤの縦出現位置は、縦サイズ-25
		他でプレイヤの横出現位置が15以下なら
			プレイヤの横出現位置は15
		他でプレイヤの横出現位置が横サイズ-25以上なら
			プレイヤの横出現位置は、横サイズ-25
		そして
		プレイヤを描写する
	終わり
	エネミーを出現させる手順
		Xは1
		Xが待機エネミー配列の個数以下の間繰り返す
			現在時間が(待機エネミー配列(X)の出現時間×フレーム)以上なら
				エネミー配列に、待機エネミー配列(X)を加える
				待機エネミー配列は、待機エネミー配列からXを消したもの
			そうでなければ
				Xは、X+1
			そして
		そして
	終わり
	エネミーを移動する手順
		Xは1
		Xがエネミー配列の個数以下の間繰り返す
			エネミは、エネミー配列(X)
			エネミを移動する
			エネミを描写する
			エネミの縦出現位置が0未満またはエネミの縦出現位置が縦サイズより大きいまたは
			エネミの横出現位置が0未満またはエネミの横出現位置が横サイズより大きいなら
				エネミー配列は、エネミー配列からXを消したもの
			そうでなければ
				Xは、X+1
			そして
		そして
	終わり
	プレイヤを判定する手順
		Xは1
		(Xがエネミー弾配列の個数以下)の間繰り返す
			弾は、エネミー弾配列(X)
			プレイヤと弾が自機当たり判定で衝突したなら
				プレイヤの縦出現位置は2000
				プレイヤを描写する
				エネミー弾配列は、エネミー弾配列からXを消したもの
				ゲームオーバーは○
			そうでなければ
				Xは、X+1
			そして
		そして
		Xは1
		Xがエネミー配列の個数以下の間繰り返す
			敵は、エネミー配列(X)
			プレイヤと敵が自機当たり判定で衝突したなら
				プレイヤの縦出現位置は2000
				ゲームオーバーは○
			そうでなければ
				Xは、X+1
			そして
		そして
	終わり
	エネミーを判定する手順
		Xは1
		Xがプレイヤ弾配列の個数以下の間繰り返す
			弾は、プレイヤ弾配列(X)
			Yは1
			ヒットは0
			Yがエネミー配列の個数以下の間繰り返す
				敵は、エネミー配列(Y)
				敵と弾が敵当たり判定で衝突したなら
					敵のライフを減らす
					ヒットを増やす
				そして
				敵のライフが0以下なら
					エネミー配列は、エネミー配列からYを消したもの
					スコアは、スコア+敵のスコア
				そうでなければ
					Yは、Y+1
				そして
			そして
			ヒットが1以上なら
				プレイヤ弾配列は、プレイヤ弾配列からXを消したもの
			そうでなければ
				Xは、X+1
			そして
		そして
	終わり
	【キャラ】と【弾】が【当たり判定】で、衝突する手順
		(キャラの横出現位置-弾の横出現位置)の絶対値が当たり判定以下かつ
		(キャラの縦出現位置-弾の縦出現位置)の絶対値が当たり判定以下なら
			真を返す
		そうでなければ
			偽を返す
		そして
	終わり
	エネミー弾を移動する手順
		Xは1
		Xがエネミー弾配列の個数以下の間繰り返す
			弾は、エネミー弾配列(X)
			弾を移動する
			弾を描写する
			弾の縦出現位置が縦サイズ以上または弾の縦出現位置が0以下または
			弾の横出現位置が0以下または弾の横出現位置が横サイズ以上なら
				エネミー弾配列は、エネミー弾配列からXを消したもの
			そうでなければ
				Xは、X+1
			そして
		そして
	終わり
	プレイヤ弾を移動する手順
		Xは1
		Xがプレイヤ弾配列の個数以下の間繰り返す
			弾は、プレイヤ弾配列(X)
			弾を移動する
			弾を描写する
			弾の縦出現位置が縦サイズ以上または弾の縦出現位置が0以下または
			弾の横出現位置が0以下または弾の横出現位置が横サイズ以上なら
				プレイヤ弾配列は、プレイヤ弾配列からXを消したもの
			そうでなければ
				Xは、X+1
			そして
		そして
	終わり
	スコアを表示する手順
		キャンバス1(2)に「スコア: [スコア]」という文字を書く
			その位置は{180,10}
			その文字サイズは13
	終わり
	キャンバスのキーが押された時の手順
		ゲーム中でなければ抜け出す
		イベントのキー名について分岐
		「←」の場合
			プレイヤの横速度は、-プレイヤ速度
		「↑」の場合
			プレイヤの縦速度は、-プレイヤ速度
		「→」の場合
			プレイヤの横速度は、プレイヤ速度
		「↓」の場合
			プレイヤの縦速度は、プレイヤ速度
		「スペース」の場合
			プレイヤ弾丸を作る
				その横出現位置は、プレイヤの横出現位置
				その縦出現位置は、プレイヤの縦出現位置
				その横速度は0
				その縦速度は-10
		「R」の場合
			ゲームオーバーなら
				プレイヤの横出現位置は150
				プレイヤの縦出現位置は300
				エネミー配列は{}
				エネミー弾配列は{}
				プレイヤ弾配列は{}
				ゲームオーバーは×
				現在時間は0
				敵を生成する
			そして
		「E」の場合
			ゲームオーバーなら
				ゲーム中は×
				終了する
			そして
		そして
	終わり
	キャンバスのキーが離された時の手順
		ゲーム中でなければ抜け出す
		イベントのキー名について分岐
		「←」の場合
			プレイヤの横速度は0
		「↑」の場合
			プレイヤの縦速度は0
		「→」の場合
			プレイヤの横速度は0
		「↓」の場合
			プレイヤの縦速度は0
		そして
	終わり
終わり




以上。

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