DISCO-F746NG test program "Baloon touch game"
Dependencies: BSP_DISCO_F746NG F746_GUI F746_GUI_Other F746_OL_GUI LCD_DISCO_F746NG MATH_LIB_1 TS_DISCO_F746NG mbed
main1.cpp@1:a7abb5c6f912, 2016-07-02 (annotated)
- Committer:
- InoueTakashi
- Date:
- Sat Jul 02 05:39:15 2016 +0000
- Revision:
- 1:a7abb5c6f912
- Parent:
- 0:f385e51b61dc
modify main1.cpp like C source.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
InoueTakashi | 0:f385e51b61dc | 1 | //-------------------------------------------------------------------------------- |
InoueTakashi | 0:f385e51b61dc | 2 | // バルーンタッチゲーム・プログラム |
InoueTakashi | 0:f385e51b61dc | 3 | // |
InoueTakashi | 0:f385e51b61dc | 4 | // |
InoueTakashi | 0:f385e51b61dc | 5 | // date: 2016/04/27 |
InoueTakashi | 0:f385e51b61dc | 6 | // rev 0.9 date: 2016/5/18 |
InoueTakashi | 0:f385e51b61dc | 7 | // rev 1.0 2016/6/8 |
InoueTakashi | 1:a7abb5c6f912 | 8 | // rev 1.1 2016/7/2 |
InoueTakashi | 0:f385e51b61dc | 9 | // author: Copyright (c) 2016 Takashi Inoue |
InoueTakashi | 0:f385e51b61dc | 10 | //-------------------------------------------------------------------------------- |
InoueTakashi | 1:a7abb5c6f912 | 11 | #include "main1.hpp" // |
InoueTakashi | 0:f385e51b61dc | 12 | |
InoueTakashi | 1:a7abb5c6f912 | 13 | extern GUIinit guiobj; |
InoueTakashi | 1:a7abb5c6f912 | 14 | extern Circle cirary[GUI_CIRCLE_MAX]; |
InoueTakashi | 1:a7abb5c6f912 | 15 | extern ButtonGroupOL btnary; |
InoueTakashi | 1:a7abb5c6f912 | 16 | extern NumericLabelOL<int> timeobj; |
InoueTakashi | 0:f385e51b61dc | 17 | |
InoueTakashi | 1:a7abb5c6f912 | 18 | extern int g_bln_num; //バルーン表示個数 |
InoueTakashi | 1:a7abb5c6f912 | 19 | extern int g_game_time; //ゲーム時間用変数 |
InoueTakashi | 1:a7abb5c6f912 | 20 | extern int g_game_prcs; //ゲーム中のプロセス変数、最初は待機プロセス |
InoueTakashi | 0:f385e51b61dc | 21 | |
InoueTakashi | 1:a7abb5c6f912 | 22 | extern void gui_init(void); |
InoueTakashi | 1:a7abb5c6f912 | 23 | //extern void dsp_main_title(string main_title); // メインタイトルの表示 |
InoueTakashi | 1:a7abb5c6f912 | 24 | extern void dsp_main_title(char main_title[]); // メインタイトルの表示 |
InoueTakashi | 1:a7abb5c6f912 | 25 | extern void dsp_baloon(void); //バルーン表示 |
InoueTakashi | 0:f385e51b61dc | 26 | |
InoueTakashi | 1:a7abb5c6f912 | 27 | extern void btn_init(void); //ボタン初期化 |
InoueTakashi | 1:a7abb5c6f912 | 28 | extern bool chk_btn_tch(int btn_num); //あるボタン番号のボタンタッチを調べる |
InoueTakashi | 1:a7abb5c6f912 | 29 | extern void set_btn_act_inact(bool act_ary[]); //ボタンの有効無効をセットする |
InoueTakashi | 0:f385e51b61dc | 30 | |
InoueTakashi | 1:a7abb5c6f912 | 31 | extern void set_new_rand(void); //新しい乱数値をセットする |
InoueTakashi | 1:a7abb5c6f912 | 32 | extern void chk_baloon_rand(int idx, int *score);//idx番目のバルーンが、2つの乱数と一致していれば加点、違っていれば減点する |
InoueTakashi | 1:a7abb5c6f912 | 33 | extern bool chk_baloon_tch(int idx); //idx番のバルーンに触ったかどうかチェックする |
InoueTakashi | 1:a7abb5c6f912 | 34 | extern void rvs_baloon_col(int idx); //idx番のバルーンの色を反転する |
InoueTakashi | 1:a7abb5c6f912 | 35 | extern void chg_baloon_pos(int idx); //idx番のバルーンの表示位置を動かす |
InoueTakashi | 1:a7abb5c6f912 | 36 | extern void ena_baloon_mov(int idx, bool mov_flg); //idx番のバルーンの表示位置を動かすことを許可する |
InoueTakashi | 1:a7abb5c6f912 | 37 | |
InoueTakashi | 1:a7abb5c6f912 | 38 | extern void init_game_time(void); //ゲーム時間表示の初期化 |
InoueTakashi | 1:a7abb5c6f912 | 39 | extern void dsp_game_time(void); //ゲーム中プロセスであれば、残り時間の表示 |
InoueTakashi | 1:a7abb5c6f912 | 40 | |
InoueTakashi | 1:a7abb5c6f912 | 41 | extern void init_game_score(void); //ゲーム得点の初期化 |
InoueTakashi | 1:a7abb5c6f912 | 42 | extern void dsp_game_score(int score); //ゲーム得点の表示 |
InoueTakashi | 1:a7abb5c6f912 | 43 | |
InoueTakashi | 1:a7abb5c6f912 | 44 | extern void TimerIsr(); //タイマ割り込みハンドラ |
InoueTakashi | 1:a7abb5c6f912 | 45 | //0.1秒毎のタイマ割り込みを有効にする |
InoueTakashi | 1:a7abb5c6f912 | 46 | extern void ena_tim_irt(double tim_intvl); |
InoueTakashi | 0:f385e51b61dc | 47 | |
InoueTakashi | 0:f385e51b61dc | 48 | //----- メイン関数 ----------------------------- |
InoueTakashi | 0:f385e51b61dc | 49 | int main() |
InoueTakashi | 0:f385e51b61dc | 50 | { |
InoueTakashi | 0:f385e51b61dc | 51 | int btn_num = 0; //今回押されたボタンの番号 |
InoueTakashi | 0:f385e51b61dc | 52 | int befo_btn_num = -1; //前回押されたボタンの番号 |
InoueTakashi | 1:a7abb5c6f912 | 53 | /*課題6 */ bool btn_act_ary[4] = {true, false, false, false}; //ボタンの有効フラグを入れる配列 |
InoueTakashi | 1:a7abb5c6f912 | 54 | int score = 0; //ゲーム点数 |
InoueTakashi | 0:f385e51b61dc | 55 | int idx; //各種配列操作用添え字 |
InoueTakashi | 0:f385e51b61dc | 56 | |
InoueTakashi | 1:a7abb5c6f912 | 57 | gui_init(); //グラフィック初期化 |
InoueTakashi | 1:a7abb5c6f912 | 58 | |
InoueTakashi | 1:a7abb5c6f912 | 59 | g_bln_num = 7; //バルーン表示個数設定 |
InoueTakashi | 1:a7abb5c6f912 | 60 | |
InoueTakashi | 1:a7abb5c6f912 | 61 | //ボタン初期化 |
InoueTakashi | 1:a7abb5c6f912 | 62 | set_btn_act_inact(btn_act_ary); //ボタンの有効無効をセットする |
InoueTakashi | 1:a7abb5c6f912 | 63 | |
InoueTakashi | 1:a7abb5c6f912 | 64 | /*課題5 */ // メインタイトルの表示 |
InoueTakashi | 1:a7abb5c6f912 | 65 | dsp_main_title("+++ Baloon Touch! GAME +++"); // メインタイトルの表示 |
InoueTakashi | 1:a7abb5c6f912 | 66 | |
InoueTakashi | 1:a7abb5c6f912 | 67 | /**/ //ゲーム時間の表示 |
InoueTakashi | 1:a7abb5c6f912 | 68 | init_game_time(); //ゲーム時間表示の初期化 |
InoueTakashi | 1:a7abb5c6f912 | 69 | |
InoueTakashi | 1:a7abb5c6f912 | 70 | //ゲーム得点の表示 |
InoueTakashi | 1:a7abb5c6f912 | 71 | init_game_score(); //ゲーム得点表示の初期化 |
InoueTakashi | 0:f385e51b61dc | 72 | |
InoueTakashi | 1:a7abb5c6f912 | 73 | /**/ |
InoueTakashi | 1:a7abb5c6f912 | 74 | dsp_baloon(); //バルーン表示 |
InoueTakashi | 1:a7abb5c6f912 | 75 | |
InoueTakashi | 1:a7abb5c6f912 | 76 | ena_tim_irt(0.1f); //0.1秒毎のタイマ割り込みを有効にする |
InoueTakashi | 1:a7abb5c6f912 | 77 | |
InoueTakashi | 1:a7abb5c6f912 | 78 | /*課題4*/ //無限ループ |
InoueTakashi | 0:f385e51b61dc | 79 | while(1) { |
InoueTakashi | 1:a7abb5c6f912 | 80 | //ボタン番号btn_numのボタンタッチを調べる |
InoueTakashi | 1:a7abb5c6f912 | 81 | if( chk_btn_tch(btn_num) == true ) { |
InoueTakashi | 0:f385e51b61dc | 82 | //ボタンが押され、1回目に押されたボタンと異なっていたら処理を行う |
InoueTakashi | 0:f385e51b61dc | 83 | if( befo_btn_num != btn_num ) { |
InoueTakashi | 1:a7abb5c6f912 | 84 | //今回押されたボタン番号を、1回前に押されたボタン番号として保存する |
InoueTakashi | 1:a7abb5c6f912 | 85 | befo_btn_num = btn_num; |
InoueTakashi | 1:a7abb5c6f912 | 86 | |
InoueTakashi | 1:a7abb5c6f912 | 87 | /*課題2*/ switch(btn_num) { //ボタン番号により処理を分ける |
InoueTakashi | 1:a7abb5c6f912 | 88 | case 0: //[start]ボタンが押された |
InoueTakashi | 1:a7abb5c6f912 | 89 | btn_act_ary[0] = false; //ボタン0(start)を無効にする |
InoueTakashi | 1:a7abb5c6f912 | 90 | btn_act_ary[1] = true; //ボタン1(end)を有効にする |
InoueTakashi | 1:a7abb5c6f912 | 91 | set_btn_act_inact(btn_act_ary); //ボタンの有効無効をセットする |
InoueTakashi | 0:f385e51b61dc | 92 | |
InoueTakashi | 1:a7abb5c6f912 | 93 | /*課題3*/ //すべての円の移動を開始する |
InoueTakashi | 1:a7abb5c6f912 | 94 | for( idx=0; idx < g_bln_num; idx++) { |
InoueTakashi | 1:a7abb5c6f912 | 95 | //idx番のバルーンの表示位置を動かすことを許可する |
InoueTakashi | 1:a7abb5c6f912 | 96 | ena_baloon_mov(idx, true); |
InoueTakashi | 1:a7abb5c6f912 | 97 | } |
InoueTakashi | 0:f385e51b61dc | 98 | score = 0; //得点を0クリア |
InoueTakashi | 1:a7abb5c6f912 | 99 | |
InoueTakashi | 1:a7abb5c6f912 | 100 | set_new_rand(); //新しい2つの乱数値をセットする |
InoueTakashi | 1:a7abb5c6f912 | 101 | |
InoueTakashi | 0:f385e51b61dc | 102 | g_game_time = 0; //ゲーム時間を0クリア |
InoueTakashi | 0:f385e51b61dc | 103 | g_game_prcs = 1; //ゲーム中プロセスにする |
InoueTakashi | 1:a7abb5c6f912 | 104 | |
InoueTakashi | 0:f385e51b61dc | 105 | break; |
InoueTakashi | 1:a7abb5c6f912 | 106 | case 1: //[end]ボタンが押された |
InoueTakashi | 0:f385e51b61dc | 107 | g_game_prcs = 2; //ゲーム終了プロセスにする |
InoueTakashi | 1:a7abb5c6f912 | 108 | |
InoueTakashi | 1:a7abb5c6f912 | 109 | btn_act_ary[1] = false; //ボタン1(end)を無効にする |
InoueTakashi | 1:a7abb5c6f912 | 110 | btn_act_ary[0] = true; //ボタン0(start)を有効にする |
InoueTakashi | 1:a7abb5c6f912 | 111 | set_btn_act_inact(btn_act_ary); //ボタンの有効無効をセットする |
InoueTakashi | 1:a7abb5c6f912 | 112 | |
InoueTakashi | 1:a7abb5c6f912 | 113 | befo_btn_num = -1; //1回前に押されたボタンは無しとする |
InoueTakashi | 0:f385e51b61dc | 114 | |
InoueTakashi | 1:a7abb5c6f912 | 115 | //すべてのバルーンの移動を停止する |
InoueTakashi | 1:a7abb5c6f912 | 116 | for( idx=0; idx < g_bln_num; idx++) { |
InoueTakashi | 1:a7abb5c6f912 | 117 | //idx番のバルーンの表示位置を動かすことを禁止する |
InoueTakashi | 1:a7abb5c6f912 | 118 | ena_baloon_mov(idx, false); |
InoueTakashi | 1:a7abb5c6f912 | 119 | } |
InoueTakashi | 0:f385e51b61dc | 120 | |
InoueTakashi | 0:f385e51b61dc | 121 | g_game_prcs = 0; //待機プロセスにする |
InoueTakashi | 0:f385e51b61dc | 122 | |
InoueTakashi | 0:f385e51b61dc | 123 | break; |
InoueTakashi | 0:f385e51b61dc | 124 | default: |
InoueTakashi | 0:f385e51b61dc | 125 | break; |
InoueTakashi | 0:f385e51b61dc | 126 | } |
InoueTakashi | 0:f385e51b61dc | 127 | } |
InoueTakashi | 0:f385e51b61dc | 128 | } |
InoueTakashi | 1:a7abb5c6f912 | 129 | /* 課題7*/ |
InoueTakashi | 0:f385e51b61dc | 130 | btn_num++; //ボタン番号を増加 |
InoueTakashi | 0:f385e51b61dc | 131 | if( btn_num >= GUI_NUMBER_BUTTONS ) btn_num=0; //ボタン番号範囲内に限定する |
InoueTakashi | 0:f385e51b61dc | 132 | |
InoueTakashi | 0:f385e51b61dc | 133 | if( g_game_prcs == 1 ) { //ゲーム中プロセスであれば以下の処理を行う |
InoueTakashi | 0:f385e51b61dc | 134 | |
InoueTakashi | 1:a7abb5c6f912 | 135 | for( idx=0; idx < g_bln_num; idx++) { |
InoueTakashi | 1:a7abb5c6f912 | 136 | //idx番のバルーンの表示位置を動かす |
InoueTakashi | 1:a7abb5c6f912 | 137 | chg_baloon_pos(idx); |
InoueTakashi | 1:a7abb5c6f912 | 138 | |
InoueTakashi | 1:a7abb5c6f912 | 139 | //idx番のバルーンに触ったかどうかチェックする |
InoueTakashi | 1:a7abb5c6f912 | 140 | if( chk_baloon_tch(idx) ) { |
InoueTakashi | 1:a7abb5c6f912 | 141 | |
InoueTakashi | 1:a7abb5c6f912 | 142 | rvs_baloon_col(idx); //idx番のバルーンの色を反転する |
InoueTakashi | 0:f385e51b61dc | 143 | |
InoueTakashi | 1:a7abb5c6f912 | 144 | chk_baloon_rand(idx, &score); //idx番目のバルーンが、2つの乱数と一致していれば加点、違っていれば減点する |
InoueTakashi | 1:a7abb5c6f912 | 145 | } |
InoueTakashi | 0:f385e51b61dc | 146 | } |
InoueTakashi | 1:a7abb5c6f912 | 147 | |
InoueTakashi | 1:a7abb5c6f912 | 148 | //ゲーム中プロセスであれば、残り時間の表示 |
InoueTakashi | 1:a7abb5c6f912 | 149 | dsp_game_time(); |
InoueTakashi | 1:a7abb5c6f912 | 150 | |
InoueTakashi | 1:a7abb5c6f912 | 151 | //ゲーム中プロセスであれば、得点の表示 |
InoueTakashi | 1:a7abb5c6f912 | 152 | dsp_game_score(score); |
InoueTakashi | 1:a7abb5c6f912 | 153 | |
InoueTakashi | 0:f385e51b61dc | 154 | } |
InoueTakashi | 0:f385e51b61dc | 155 | |
InoueTakashi | 0:f385e51b61dc | 156 | //以下は、タイマにより、ゲームが終了する場合の処理 |
InoueTakashi | 0:f385e51b61dc | 157 | if( g_game_prcs == 2 ) { |
InoueTakashi | 1:a7abb5c6f912 | 158 | btn_act_ary[1] = false; //ボタン1(end)を無効にする |
InoueTakashi | 1:a7abb5c6f912 | 159 | btn_act_ary[0] = true; //ボタン0(start)を有効にする |
InoueTakashi | 1:a7abb5c6f912 | 160 | set_btn_act_inact(btn_act_ary); //ボタンの有効無効をセットする |
InoueTakashi | 1:a7abb5c6f912 | 161 | |
InoueTakashi | 0:f385e51b61dc | 162 | befo_btn_num = -1; //1回前に押されたボタンは無しとする |
InoueTakashi | 0:f385e51b61dc | 163 | |
InoueTakashi | 0:f385e51b61dc | 164 | //すべての円の移動を停止する |
InoueTakashi | 1:a7abb5c6f912 | 165 | for( idx=0; idx < g_bln_num; idx++) { |
InoueTakashi | 1:a7abb5c6f912 | 166 | //idx番のバルーンの表示位置を動かすことを禁止する |
InoueTakashi | 1:a7abb5c6f912 | 167 | ena_baloon_mov(idx, false); |
InoueTakashi | 1:a7abb5c6f912 | 168 | } |
InoueTakashi | 0:f385e51b61dc | 169 | g_game_prcs = 0; //待機プロセスにする |
InoueTakashi | 0:f385e51b61dc | 170 | } |
InoueTakashi | 0:f385e51b61dc | 171 | |
InoueTakashi | 0:f385e51b61dc | 172 | wait(0.01f); //10ms待つ |
InoueTakashi | 0:f385e51b61dc | 173 | |
InoueTakashi | 0:f385e51b61dc | 174 | } |
InoueTakashi | 0:f385e51b61dc | 175 | } |
InoueTakashi | 0:f385e51b61dc | 176 | |
InoueTakashi | 0:f385e51b61dc | 177 | |
InoueTakashi | 0:f385e51b61dc | 178 | |
InoueTakashi | 0:f385e51b61dc | 179 | |
InoueTakashi | 0:f385e51b61dc | 180 | |
InoueTakashi | 0:f385e51b61dc | 181 | |
InoueTakashi | 0:f385e51b61dc | 182 | |
InoueTakashi | 0:f385e51b61dc | 183 | |
InoueTakashi | 0:f385e51b61dc | 184 |