ソフトウェア設計及び演習用の班Wiki

gr07::バトルモジュール(1人用)

バトルモジュール役割説明

  • カード選択モジュールが保持しているplayerとcpuが使用するカード番号を読み込む
  • バトル画像の初期化表示
    • 背景画像の表示
    • HPゲージの表示(ゲージは満タン)
    • バトル開始ボタンの表示
    • カード番号に応じたキャラクターの画像を表示
    • じゃんけんの手を選択するじゃんけんボタンを表示(グー、チョキ、パーの3種類)
      • グー = 0、パー = 1、チョキ = 2 として扱う
  • バトル開始ボタンをクリックするとバトル開始
    • バトル開始を示すバトルスタートフラグを1(バトル開始状態)にする
    • 5秒のカウント開始…(1)
  • 5秒の間で任意のじゃんけんボタンをクリック可能
    • じゃんけんボタンをクリックした場合にはハンドセレクトフラグを1(選択状態)にするクリックしたボタンは色が(赤に)変わる
    • 一度選択した手は変更する事が出来ない
  • 5秒カウントの終了
    • この時点でハンドセレクトフラグが0(未選択状態)であればランダムにプレイヤーの手を選択する
  • じゃんけんの開始
    • CPUの手をランダムに選択
    • プレイヤーが選択した手が必殺技の手の場合はsp1_flagに1(プレイヤーの必殺技選択状態)を格納
    • CPUが選択した手が必殺技の手の場合はsp2_flagに1(CPUの必殺技選択状態)を格納
  • じゃんけんの勝敗の判定を行う
    • 勝敗がついたとき…負けたカードのHPから勝ったカードの手に対応した攻撃力を引く
      • sp1(or 2)_flagが1の時に勝った場合は必殺技画面を表示する
    • 引き分け時…両方のカードのHPを1減らす
  • バトルの終了判定を行う
    • 双方のカードのHPから終了判定を行う
バトル継続の場合
  • じゃんけんフラグを1(じゃんけん終了状態)にして5秒カウントをリセットさせる
  • じゃんけんボタンの色を初期化(黒色に)する
  • 3秒後に再びじゃんけんフラグを0(じゃんけん開始状態)にしてバトル再開
  • (1)に戻る
バトル終了の場合
  • バトルの結果に応じたバトル結果ウィンドウを表示する
    • プレイヤーがバトルに勝った場合はファイトマネーを入手
      • 続けてバトルを行うかタイトルに戻るかを選択
        • 続けてバトルを行う場合にはbt_flagに1を格納
        • タイトルに戻る場合にはbt_flagに0を格納
    • 引き分け、敗北時にはタイトル画面へ戻る

バトルウィンドウにおけるマクロ

#define MAX_WIDGET 9

  • 並べるウィジェットの総数

#define MAX_HBOX 3

  • 横方向に並べるウィジェットの総数

#define MAX_IMAGE 6

  • ドローイングエリアとして扱うウィジェットの総数

#define gage_width_size 340

#define gage_height_size 60

  • ゲージのイメージ画像のサイズ

バトルウィンドウにおける変数

gint battle_flag;

  • バトルのフラグ(0:バトル終了 1:バトル開始)

gint bt_flag;

  • gameモジュール内で扱うバトルのフラグ(0:全てのバトルの終了 1:バトルの継続)

gint card1_no, card2_no;

  • 各プレイヤーのカードの番号

GtkWidget *battle_window;

  • バトル画面ウィジェット

GtkWidget *image_canvas[MAX_WIDGET];

  • バトルウィンドウに表示するウィジェット

バトルウィンドウ関数

GtkWidget *battle_window_new(void);

  • バトル画面を作成する関数

引き数 なし

返り値 *window(バトル画面ウィジェット)

void set_background(GtkWidget *);

  • バトル画面に背景画像をセットする関数

引き数 *window(バトル画面ウィジェット)

返り値 なし

void battle_start(void);

  • バトル画面を呼び出す関数
  • バトル画面の初期化表示を行う

引き数 なし

返り値 なし

void gage_paint(gint , gint);

  • 体力ゲージを更新する関数
  • プレイヤーのHPとプレイヤー番号によって表示を行う 引き数 p_hp, p_no

返り値 なし

void paint_image(GtkWidget *, GdkEventExpose *, gpointer);

  • ドローイングエリアに画像を描画する関数
  • user_dataには画像へのリンク文字列が格納されている

引き数 *widget, *event, user_data

返り値 なし

GtkWidget *sub_window_new(void);

  • サブウィンドウ作成関数
  • 必殺技画面とバトル結果画面に用いる

引き数 なし

返り値 *sub_window

void sp_window(gint);

  • 必殺技画面表示関数
  • カード番号に応じた必殺技画面を表示

引き数 card_no

返り値 なし

gboolean sp_window_close(gpointer);

  • 必殺技画面消去関数
  • 必殺技画面表示した3秒後に呼び出される

引き数 sp_window

返り値 FALSE(ループの防止)

gboolean result_window(gpointer);

  • バトル結果画面表示関数
  • 引き数に応じて表示を変える

引き数 result_pointer

返り値 FALSE(ループの防止)

void next_battle_click(GtkWidget *, gpointer);

  • ネクストバトルボタンをクリックした時の関数
  • バトル画面とバトル結果画面を消去する
  • バトルの継続を示す

引き数 button, result_window

返り値 なし

gchar *image_link(gint);

  • カードの画像へのリンク文字列を返す関数
  • カード番号を受け取ってそのキャラクターの画像へのリンクを返す

引き数 card_no

返り値 *link

gchar *hand_link(gint, gint);

  • じゃんけんアイコンへのリンク文字列を返す関数
  • カード番号とじゃんけんの手を受け取ってそれに対応したじゃんけんアイコン画像へのリンクを返す

引き数 card_no, hand_sw

返り値 *link

void title_click (GtkWidget *, gpointer);

  • タイトルボタン(バトル終了を示す)をクリックした時の関数
  • バトル結果画面とバトル画面を消去する

引き数 title_button, result_window

返り値 なし

ボタンアイコンにおける変数

gint hand_select_flag;

  • プレイヤーが手を選択したかのフラグ

gint player_hand;

  • プレイヤーが選択したじゃんけんの手

int co_id;

  • タイムアウト解除用のID

static gulong id[3];

  • コールバック関数解除用のID

static int ic_paint_flag;

  • じゃんけんアイコンの初期化フラグ(0:初期化不必要 1:初期化必要)

ボタンアイコン関数

GtkWidget *fight_button_new(gchar *);

  • ファイトボタンにイメージ画像をパックする関数
  • 引き数に応じたイメージをパックする

引き数 *filename

返り値 new_button

GtkWidget *janken_button_new(GtkWidget *, gchar *);

  • じゃんけんボタンにイメージ画像をパックする関数
  • 引き数に応じたイメージをパックする

引き数 icon_image, filename

返り値 new_button

void fight_click(GtkWidget *, gpointer);

  • バトル開始ボタン押された時の関数
  • これをクリックすることでバトルが開始する
  • user_dataにはカウント画面ウィジェットが入っている

引き数 fight_button_new, user_data

返り値 なし

void gu_click (GtkWidget *, gpointer);

  • グーが押された時の関数
  • アイコン画像に色を付ける
  • ここで3秒後アイコンの色を元に戻す関数を呼び出す

引き数 gu_button, gu_image_pt

返り値 なし

void choki_click (GtkWidget *, gpointer);

  • チョキが押された時の関数
  • アイコン画像に色を付ける
  • ここで3秒後アイコンの色を元に戻す関数を呼び出す

引き数 choki_button, choki_image_pt

返り値 なし

void paa_click (GtkWidget *, gpointer);

  • パーが押された時の関数
  • アイコン画像に色を付ける
  • ここで3秒後アイコンの色を元に戻す関数を呼び出す

引き数 paa_button, pa_image_pt

返り値 なし

void icon_paint(GtkWidget *, int);

  • じゃんけんボタンが選択された時のイメージを表示する関数(赤色にする)
  • 引き数によって色を付けるアイコンを判別する

引き数 icon_image, hand

返り値 なし

gboolean gu_init(gpointer);

  • グーが押された時のアイコン画像リセット関数(黒色に戻す)
  • アイコン画像に色がついた3秒後に呼び出される

引き数 gu_image_pt

返り値 FALSE(ループ防止)

void choki_init(gpointer);

  • チョキが押された時のアイコン画像リセット関数(黒色に戻す)
  • アイコン画像に色がついた3秒後に呼び出される

引き数 choki_image_pt

返り値 FALSE(ループ防止)

void pa_init(gpointer);

  • パーが押された時のアイコン画像リセット関数(黒色に戻す)
  • アイコン画像に色がついた3秒後に呼び出される

引き数 pa_image_pt

返り値 FALSE(ループ防止)

カウントダウンにおけるマクロ

#define count_image_size 225

  • カウント画像のサイズ

カウントダウンにおける変数

static int count = 5

  • 5秒カウントのための数値

カウントダウン関数

gboolean count_down (gpointer);

  • カウントダウンのイメージを表示する関数
  • user_dataにはカウントウィジェットが入っている

引き数 user_data

返り値 なし

じゃんけんにおけるマクロ

#define WIN 1

#define DRAW 0

#define LOSE -1

  • 勝ち負けマクロ

#define GU 0

#define PA 1

#define CHOKI 2

  • じゃんけんの手マクロ

じゃんけんにおける変数

typedef struct

{ int gu,choki,pa; int sp_hand; int hp; }card_data;

  • カードのデータ型を作成
  • これによって各カードの能力値を定義する

じゃんけん関数

gint per_ten(gint, gint);

  • 十分率の整数としてHPの値を変換する関数
  • 最大HPと現在のHPで体力比を計算してそれに応じた定数を返す

引き数 max_card_hp, now_card_hp

返り値 定数

void janken(gint);

  • じゃんけんを行う関数
  • 引き数とこの関数内でランダムに生成する手とでじゃんけんをして結果に応じて処理をした後にゲージを更新する

引き数 p1_hand

返り値 なし

void hp_init(gint, gint);

  • 体力を初期化する関数
  • 引き数を用いて次のバトルのためのHPの初期化を行う

引き数 p1_card_no, p2_card_no

返り値 なし

フラグ操作における変数

gint janken_flag;

  • じゃんけんの開始と終了フラグ(0:じゃんけん未実施, 1:じゃんけん実施)

gint hand_select_flag;

  • じゃんけんの手の選択フラグ(0:じゃんけん未実施, 1:じゃんけん実施)

フラグ操作関数

gboolean battle_restart(void);

  • バトル再開時のフラフ処理を行う関数

引き数 なし

返り値 FALSE(ループの解除のため)

バトル再開時のフラグ処理を行う関数

void janken_end(void);

  • じゃんけん終了時のフラグ処理を行う関数

引き数 なし

返り値 なし


最終更新日:2014/02/12 11:27:28