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

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?

UserRevisionLine numberNew 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