プログラム実習(問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
仕様: 以下の仕様を満たしなさい ①.クラス定義
