プログラム実習(問21~問30) -後期課題-
■問21
仕様:
以下の仕様を満たしなさい
①.クラス定義
クラス名:
Gauge
メンバ変数:
float m_Min:
ゲージの最小値
float m_Max:
ゲージの最大値
float m_Now:
現状のゲージの値
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
float min:
m_Minの値
float max:
m_Maxの値
float now:
初期値(デフォルトはminの値)
内容:
引数の内容でメンバを初期化する
その②.
m_Minのゲッター
その③.
m_Maxのゲッター
その④.
m_Nowのゲッター
その⑤.
m_Nowのセッター
その⑥.
関数名:
GetPercentageOfGauge
戻り値:
float:
m_Nowのゲージ内での割合
引数:
なし
内容:
m_Now、m_Min、m_Maxの値を使用して
m_Nowのゲージ内の割合をパーセント単位で返す
例:
m_Min => 0
m_Max => 100
m_Now => 30
戻り値 => 30(%)
②.実装仕様:
main関数内で以下の仕様を実装しなさい
2-1.クラスのインスタンス化
①で作成したクラスを以下のデータでインスタンス化しなさい
変数①.
変数名:
gauge_01
m_Min:
0
m_Max:
100
m_Now:
0
変数②.
変数名:
gauge_02
m_Min:
50
m_Max:
100
m_Now:
50
2-2.m_Nowのセッターの呼び出し
変数①、②のm_Nowのセッターを以下の引数の値で呼び出しなさい
変数①:
60
変数②:
75
2-3.パーセント表示
変数①と変数②の現状のゲージの値をパーセント単位で出力しなさい
※結果は変数①は60%、変数②は50%と表示されます
■問22
仕様:
じゃんけんゲームを作成しなさい
①.じゃんけん用定数
じゃんけんの手
GU => 0
TYOKI => 1
PA => 2
勝敗
勝ち => 0
負け => 1
引き分け => 2
※定数化しなかったら減点
②.クラス定義
クラス名:
Judge
メンバ関数:
その①.
関数名:
Judgement
戻り値:
勝敗
引数:
第一引数:
ユーザーの手
第二引数:
相手の手
内容:
ユーザーの手と相手の手を比較して
ユーザ視点の勝敗を返す
その②.
関数名:
PrintJudgement
戻り値:
なし
引数:
第一引数:
勝敗
内容:
勝敗によって以下内容の出力を行う
勝ち:
ユーザーの勝ちです。
負け:
ユーザーの負けです。
引き分け:
引き分けです。
③.じゃんけん仕様
3-1.ユーザーの手の決定
ユーザーの手はユーザーが入力して決定する
グー、チョキ、パー以外の値を入力した場合は再入力させる
3-2.相手の手の決定
相手の手はランダムで決定する
3-3.勝敗判定と表示
Judgementクラスをインスタンス化し、
ユーザーと相手の手の勝敗判定を行い、結果を出力する
3-4.終了入力
再度ユーザーに入力を行ってもらい以下の入力情報の結果で
続行か、終了かを判断し、続行ならば3-1から繰り返す
入力値:
0 => 終了
非0 => 続行
■問23
仕様:
じゃんけんゲームを作成しなさい
①.じゃんけん用定数
じゃんけんの手
GU => 0
TYOKI => 1
PA => 2
勝敗
勝ち => 0
負け => 1
引き分け => 2
※定数化しなかったら減点
②.クラス定義
その①.
クラス名
Hand
メンバ関数:
その①.
関数名:
GetHandType
戻り値:
なし
引数:
なし
内容:
じゃんけんの手の定数を返す
※純粋仮想関数
その②.
関数名:
Judgement
戻り値:
勝敗
引数:
判定を行うじゃんけんの手
内容:
クラスの手の定数と引数の手を比較して
じゃんけんの結果を返す
※純粋仮想関数
その②.
クラス名:
Gu
基底クラス:
Hand
メンバ関数:
その①.
関数名:
GetHandType
戻り値:
なし
引数:
なし
内容:
グーの定数を返す
その②.
関数名:
Judgement
戻り値:
勝敗
引数:
判定を行うじゃんけんの手
内容:
グーと引数の手を比較して
じゃんけんの結果を返す
その③.
クラス名:
Tyoki
基底クラス:
Hand
メンバ関数:
その①.
関数名:
GetHandType
戻り値:
なし
引数:
なし
内容:
チョキの定数を返す
その②.
関数名:
Judgement
戻り値:
勝敗
引数:
判定を行うじゃんけんの手
内容:
チョキと引数の手を比較して
じゃんけんの結果を返す
その④.
クラス名:
Pa
基底クラス:
Hand
メンバ関数:
その①.
関数名:
GetHandType
戻り値:
なし
引数:
なし
内容:
パーの定数を返す
その②.
関数名:
Judgement
戻り値:
勝敗
引数:
判定を行うじゃんけんの手
内容:
パーと引数の手を比較して
じゃんけんの結果を返す
その⑤.
クラス名:
HandFactory
メンバ関数:
関数名:
CreateHand
戻り値:
Handのポインタ
引数:
じゃんけんの手の定数
内容:
じゃんけんの手の定数に応じたクラスを作成して返す
グー => Gu
チョキ => Tyoki
パー => Pa
その他 => NULL
③.じゃんけん仕様
3-1.ユーザーの手の決定
ユーザーの手はユーザーが入力して決定する
グー、チョキ、パー以外の値を入力した場合は再入力させる
3-2.相手の手の決定
相手の手はランダムで決定する
3-3.ユーザーと相手の手クラスのインスタンス化
HandFactoryクラスをインスタンス化し、
3-1と3-2で決定されたユーザーと相手の手をインスタンス化する
3-4.勝敗判定
ユーザーのJudgement関数を使用して勝敗を決める
Judgement関数の引数には相手の手を使用する
3-5.勝敗表示
3-4で確定した勝敗の表示を行う
出力内容は以下の通り
勝ち:
ユーザーの勝ちです。
負け:
ユーザーの負けです。
引き分け:
引き分けです。
3-6.インスタンス削除
3-3で作成したオブジェクトは動的なものなのできちんと解放する
3-7.終入力
再度ユーザーに入力を行ってもらい以下の入力情報の結果で
続行か、終了かを判断し、続行ならば3-1から繰り返す
入力値:
0 => 終了
非0 => 続行
■問24
仕様:
以下の仕様を満たしなさい
①.クラス定義
その①.
クラス名:
Character
メンバ関数:
その①.
関数名:
Control
戻り値:
なし
引数:
なし
内容:
純粋仮想関数
その②.
関数名:
Draw
戻り値:
なし
引数:
なし
内容:
純粋仮想関数
その②.
クラス名:
Player
継承元:
Character
メンバ関数:
その①.
関数名:
Control
戻り値:
なし
引数:
なし
内容:
「プレイヤーのゲーム処理」と出力
その②.
関数名:
Draw
戻り値:
なし
引数:
なし
内容:
「プレイヤーの描画」と出力
その③.
クラス名:
Enemy
継承元:
Character
メンバ関数:
その①.
関数名:
Control
戻り値:
なし
引数:
なし
内容:
「敵のゲーム処理」と出力
その②.
関数名:
Draw
戻り値:
なし
引数:
なし
内容:
「敵の描画」と出力
②.仕様
①.Characterのポインタ配列を用意
Characterのポインタ配列(サイズ:1000)を用意して
NULLクリアしておく
②.ループ処理を使用して以下の処理を1000回繰り返す。
2-1.Player作成
ループ回数(0からカウント)が5の倍数なら
Playerクラスを作成し、①で作成した配列に追加する
※空きになっている配列の管理は開発側で行う
2-2.Enemy作成
ループ回数(0からカウント)が10の倍数なら
Enemyクラスを作成し、①で作成した配列に追加する
※空きになっている配列の管理は開発側で行う
2-3.Control関数実行
2-1、2-2で作成したクラス分だけ①の配列をまわし、
Control関数を実行する
2-4.Draw関数実行
2-1、2-2で作成したクラス分だけ①の配列をまわし、
Draw関数を実行する
■問25
仕様:
以下の仕様を満たしなさい
①.定数
シーン
Title => 0:
タイトル
Game => 1:
ゲーム
Result => 2
結果
②.クラス定義
その①.
クラス名:
SceneBase
メンバ変数:
int m_Counter(protected):
カウンター
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
なし
内容:
m_Counterを0で初期化する
その②.
関数名:
GetSceneType
戻り値:
シーン用定数
引数:
なし
内容:
シーンクラスに応じたシーン用定数を返す
※純粋仮想関数
その③.
関数名:
Control
戻り値:
Sceneの種類
引数:
なし
内容:
ゲーム処理関数
※純粋仮想関数
その②.
クラス名:
TitleScene
継承元クラス:
SceneBase
メンバ関数:
その①.
関数名:
GetSceneType
戻り値:
Sceneの種類(Title)
引数:
なし
内容:
Titleの定数を返す
その②.
関数名:
Control
戻り値:
なし
引数:
なし
内容:
「Titleシーン実行中」と出力
m_Counterを1加算して
60になったらGameシーンの定数を返す
その③.
クラス名:
GameScene
継承元クラス:
SceneBase
メンバ関数:
その①.
関数名:
GetSceneType
戻り値:
Sceneの種類(Game)
引数:
なし
内容:
Gameの定数を返す
その②.
関数名:
Control
戻り値:
なし
引数:
なし
内容:
「Gameシーン実行中」と出力
m_Counterを1加算して
60になったらResultシーンの定数を返す
その④.
クラス名:
ResultScene
継承元クラス:
SceneBase
メンバ関数:
その①.
関数名:
GetSceneType
戻り値:
Sceneの種類(Result)
引数:
なし
内容:
Resultの定数を返す
その②.
関数名:
Control
戻り値:
なし
引数:
なし
内容:
「Resultシーン実行中」と出力
m_Counterを1加算して
60になったらTitleシーンの定数を返す
その⑤.
クラス名:
SceneManager
メンバ変数:
SceneBase *m_Scene:
現在動作しているシーンのポインタ
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
なし
内容:
Titleシーンを動的に作成する
その②.
関数名:
Control
戻り値:
bool
true:
終了
false:
続行
引数:
なし
内容:
m_SceneのControl関数を呼び出す。
m_SceneのControlの戻り値がそのシーンの定数と
値が異なったらシーン終了と判断してシーンを切り替える
シーンの切り替えの流れは以下の通り
Title => Game => Result
この関数の戻り値はResultシーンが終了したらtrueを返し、
それ以外はfalseを返す
※m_Sceneは動的に確保しているので解放を忘れないようにする
その③.仕様実装
main関数内で以下の処理を実装して下さい。
3-1.SceneManagerインスタンス化
SceneManagerの変数を宣言し、インスタンス化を行う
3-2.終了待ち
SceneManagerのControlの戻り値がtrueを返すまで
Controlを繰り返すようにする
■問26
仕様:
以下の仕様を満たしなさい
①.クラス定義
■問27
仕様:
以下の仕様を満たしなさい
①.クラス定義
■問28
仕様:
以下の仕様を満たしなさい
①.クラス定義
■問29
仕様:
以下の仕様を満たしなさい
①.クラス定義
■問30
仕様:
以下の仕様を満たしなさい
①.クラス定義