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
func_ol.cpp@1:a7abb5c6f912, 2016-07-02 (annotated)
- Committer:
- InoueTakashi
- Date:
- Sat Jul 02 05:39:15 2016 +0000
- Revision:
- 1:a7abb5c6f912
modify main1.cpp like C source.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
InoueTakashi | 1:a7abb5c6f912 | 1 | #include "mbed.h" |
InoueTakashi | 1:a7abb5c6f912 | 2 | |
InoueTakashi | 1:a7abb5c6f912 | 3 | #include "BlinkLabel.hpp" |
InoueTakashi | 1:a7abb5c6f912 | 4 | #include "ButtonGroup.hpp" |
InoueTakashi | 1:a7abb5c6f912 | 5 | #include "SeekbarGroup.hpp" |
InoueTakashi | 1:a7abb5c6f912 | 6 | #include "Label.hpp" |
InoueTakashi | 1:a7abb5c6f912 | 7 | |
InoueTakashi | 1:a7abb5c6f912 | 8 | #include "GUIconst.hpp" //GUI用定数 (TI) |
InoueTakashi | 1:a7abb5c6f912 | 9 | #include "GUIinit.hpp" //GUI初期化 (TI) |
InoueTakashi | 1:a7abb5c6f912 | 10 | #include "ButtonGroupOL.hpp" //ButtonGroupオーバーラップクラス (TI) |
InoueTakashi | 1:a7abb5c6f912 | 11 | #include "NumericLabelOL.hpp" //Numerical Labelオーバーラップクラス (TI) |
InoueTakashi | 1:a7abb5c6f912 | 12 | #include "Circle.hpp" //GUI 円クラス (TI) |
InoueTakashi | 1:a7abb5c6f912 | 13 | #include "Rand.hpp" //乱数発生クラス (TI) |
InoueTakashi | 1:a7abb5c6f912 | 14 | |
InoueTakashi | 1:a7abb5c6f912 | 15 | using namespace Mikami; //Mikami 名前空間を使用 |
InoueTakashi | 1:a7abb5c6f912 | 16 | using namespace TakaIno; //TakaIno 名前空間を使用 (TI) |
InoueTakashi | 1:a7abb5c6f912 | 17 | |
InoueTakashi | 1:a7abb5c6f912 | 18 | Ticker timer; //タイマ割り込み |
InoueTakashi | 1:a7abb5c6f912 | 19 | |
InoueTakashi | 1:a7abb5c6f912 | 20 | GUIinit guiobj; //GUIクラスオブジェクト生成 |
InoueTakashi | 1:a7abb5c6f912 | 21 | Circle cirary[ GUI_CIRCLE_MAX ]={DEF_CIR_INFO[0], DEF_CIR_INFO[1],DEF_CIR_INFO[2], DEF_CIR_INFO[3], |
InoueTakashi | 1:a7abb5c6f912 | 22 | DEF_CIR_INFO[4], DEF_CIR_INFO[5],DEF_CIR_INFO[6]}; |
InoueTakashi | 1:a7abb5c6f912 | 23 | ButtonGroupOL btnary; //ButtonGroupOLクラスオブジェクトの生成 |
InoueTakashi | 1:a7abb5c6f912 | 24 | Rand rndobj; //乱数発生クラスオブジェクト生成 |
InoueTakashi | 1:a7abb5c6f912 | 25 | //ゲーム時間表示 |
InoueTakashi | 1:a7abb5c6f912 | 26 | Label lb_time_obj(425,205, "Time", Label::LEFT, Font16, LCD_COLOR_YELLOW, LCD_COLOR_BLUE); // |
InoueTakashi | 1:a7abb5c6f912 | 27 | NumericLabelOL<int> timeobj(425, 220, "%03d", G_GAME_LIMIT_TIME, Label::LEFT, Font16, LCD_COLOR_WHITE, LCD_COLOR_DARKBLUE); |
InoueTakashi | 1:a7abb5c6f912 | 28 | //ゲーム得点表示 |
InoueTakashi | 1:a7abb5c6f912 | 29 | Label lb_score_obj(425,235, "Score", Label::LEFT, Font16, LCD_COLOR_CYAN, LCD_COLOR_BLUE); // |
InoueTakashi | 1:a7abb5c6f912 | 30 | NumericLabelOL<int> scoreobj(425, 250, "%04d", 0, Label::LEFT, Font16, LCD_COLOR_RED, LCD_COLOR_WHITE); |
InoueTakashi | 1:a7abb5c6f912 | 31 | |
InoueTakashi | 1:a7abb5c6f912 | 32 | uint16_t btn_width = GUI_BTN_WIDTH; //ボタン表示の幅 |
InoueTakashi | 1:a7abb5c6f912 | 33 | int g_btn_num = 4; ////ボタンの個数 |
InoueTakashi | 1:a7abb5c6f912 | 34 | int g_bln_num = GUI_CIRCLE_MAX; |
InoueTakashi | 1:a7abb5c6f912 | 35 | int rndary[2], befo_rndary[2] = {-1,-1}; //今回と前回の乱数値用配列 |
InoueTakashi | 1:a7abb5c6f912 | 36 | |
InoueTakashi | 1:a7abb5c6f912 | 37 | int g_game_time = 0; //ゲーム時間用変数 |
InoueTakashi | 1:a7abb5c6f912 | 38 | int g_game_prcs = 0; //ゲーム中のプロセス変数、最初は待機プロセス |
InoueTakashi | 1:a7abb5c6f912 | 39 | |
InoueTakashi | 1:a7abb5c6f912 | 40 | //タイマ割り込みハンドラ |
InoueTakashi | 1:a7abb5c6f912 | 41 | void TimerIsr() |
InoueTakashi | 1:a7abb5c6f912 | 42 | { |
InoueTakashi | 1:a7abb5c6f912 | 43 | if( g_game_prcs == 1 ) { //「ゲーム中プロセス」時に処理する |
InoueTakashi | 1:a7abb5c6f912 | 44 | g_game_time++; //ゲーム時間をカウントアップ |
InoueTakashi | 1:a7abb5c6f912 | 45 | if( g_game_time > G_GAME_LIMIT_TIME ) { |
InoueTakashi | 1:a7abb5c6f912 | 46 | //ゲーム終了時間になったら「ゲーム終了プロセス」にする |
InoueTakashi | 1:a7abb5c6f912 | 47 | g_game_time = G_GAME_LIMIT_TIME; |
InoueTakashi | 1:a7abb5c6f912 | 48 | g_game_prcs = 2; |
InoueTakashi | 1:a7abb5c6f912 | 49 | } |
InoueTakashi | 1:a7abb5c6f912 | 50 | } |
InoueTakashi | 1:a7abb5c6f912 | 51 | } |
InoueTakashi | 1:a7abb5c6f912 | 52 | //グラフィック初期化 |
InoueTakashi | 1:a7abb5c6f912 | 53 | void gui_init(void) |
InoueTakashi | 1:a7abb5c6f912 | 54 | { |
InoueTakashi | 1:a7abb5c6f912 | 55 | //GUIオブジェクトで、フォント16とボタン幅をセット |
InoueTakashi | 1:a7abb5c6f912 | 56 | guiobj.SetInit(Font16, btn_width); |
InoueTakashi | 1:a7abb5c6f912 | 57 | } |
InoueTakashi | 1:a7abb5c6f912 | 58 | |
InoueTakashi | 1:a7abb5c6f912 | 59 | // メインタイトルの表示 |
InoueTakashi | 1:a7abb5c6f912 | 60 | //void dsp_main_title(string main_title) |
InoueTakashi | 1:a7abb5c6f912 | 61 | void dsp_main_title(char main_title[]) |
InoueTakashi | 1:a7abb5c6f912 | 62 | { |
InoueTakashi | 1:a7abb5c6f912 | 63 | string str = main_title; |
InoueTakashi | 1:a7abb5c6f912 | 64 | // メインタイトルの表示、中央位置、フォント16 |
InoueTakashi | 1:a7abb5c6f912 | 65 | Label title_obj(0,0, main_title, Label::CENTER, Font16); // |
InoueTakashi | 1:a7abb5c6f912 | 66 | } |
InoueTakashi | 1:a7abb5c6f912 | 67 | |
InoueTakashi | 1:a7abb5c6f912 | 68 | //バルーン表示 |
InoueTakashi | 1:a7abb5c6f912 | 69 | void dsp_baloon(void) |
InoueTakashi | 1:a7abb5c6f912 | 70 | { |
InoueTakashi | 1:a7abb5c6f912 | 71 | //円オブジェクトにより、円を描画する |
InoueTakashi | 1:a7abb5c6f912 | 72 | for( int idx = 0; idx < g_bln_num; idx++ ) { |
InoueTakashi | 1:a7abb5c6f912 | 73 | cirary[idx].DrawCircle(true); |
InoueTakashi | 1:a7abb5c6f912 | 74 | } |
InoueTakashi | 1:a7abb5c6f912 | 75 | } |
InoueTakashi | 1:a7abb5c6f912 | 76 | |
InoueTakashi | 1:a7abb5c6f912 | 77 | //idx番のバルーンに触ったかどうかチェックする |
InoueTakashi | 1:a7abb5c6f912 | 78 | bool chk_baloon_tch(int idx) |
InoueTakashi | 1:a7abb5c6f912 | 79 | { |
InoueTakashi | 1:a7abb5c6f912 | 80 | return cirary[idx].CircleTouched(); |
InoueTakashi | 1:a7abb5c6f912 | 81 | } |
InoueTakashi | 1:a7abb5c6f912 | 82 | |
InoueTakashi | 1:a7abb5c6f912 | 83 | //idx番のバルーンの色を反転する |
InoueTakashi | 1:a7abb5c6f912 | 84 | void rvs_baloon_col(int idx) |
InoueTakashi | 1:a7abb5c6f912 | 85 | { |
InoueTakashi | 1:a7abb5c6f912 | 86 | //idx番目の円を触ったら、円の色を反転する |
InoueTakashi | 1:a7abb5c6f912 | 87 | cirary[idx].ReverseCircleColor(); |
InoueTakashi | 1:a7abb5c6f912 | 88 | } |
InoueTakashi | 1:a7abb5c6f912 | 89 | |
InoueTakashi | 1:a7abb5c6f912 | 90 | //idx番のバルーンの表示位置を動かす |
InoueTakashi | 1:a7abb5c6f912 | 91 | void chg_baloon_pos(int idx) |
InoueTakashi | 1:a7abb5c6f912 | 92 | { |
InoueTakashi | 1:a7abb5c6f912 | 93 | cirary[idx].ChangeCirclePos(); |
InoueTakashi | 1:a7abb5c6f912 | 94 | } |
InoueTakashi | 1:a7abb5c6f912 | 95 | |
InoueTakashi | 1:a7abb5c6f912 | 96 | //idx番のバルーンの表示位置を動かすことを許可する |
InoueTakashi | 1:a7abb5c6f912 | 97 | void ena_baloon_mov(int idx, bool mov_flg) |
InoueTakashi | 1:a7abb5c6f912 | 98 | { |
InoueTakashi | 1:a7abb5c6f912 | 99 | cirary[idx].MoveCircle(mov_flg); |
InoueTakashi | 1:a7abb5c6f912 | 100 | } |
InoueTakashi | 1:a7abb5c6f912 | 101 | |
InoueTakashi | 1:a7abb5c6f912 | 102 | |
InoueTakashi | 1:a7abb5c6f912 | 103 | //ボタン初期化 |
InoueTakashi | 1:a7abb5c6f912 | 104 | void btn_init() |
InoueTakashi | 1:a7abb5c6f912 | 105 | { |
InoueTakashi | 1:a7abb5c6f912 | 106 | //ボタン1(end),2,3を無効に ボタン0(start)を有効のままにする |
InoueTakashi | 1:a7abb5c6f912 | 107 | btnary.Inactivate(1); btnary.Inactivate(2); btnary.Inactivate(3); |
InoueTakashi | 1:a7abb5c6f912 | 108 | |
InoueTakashi | 1:a7abb5c6f912 | 109 | } |
InoueTakashi | 1:a7abb5c6f912 | 110 | |
InoueTakashi | 1:a7abb5c6f912 | 111 | //ボタンの有効無効をセットする |
InoueTakashi | 1:a7abb5c6f912 | 112 | void set_btn_act_inact(bool act_ary[]) |
InoueTakashi | 1:a7abb5c6f912 | 113 | { |
InoueTakashi | 1:a7abb5c6f912 | 114 | for( int i = 0; i < g_btn_num; i++) |
InoueTakashi | 1:a7abb5c6f912 | 115 | { |
InoueTakashi | 1:a7abb5c6f912 | 116 | if( act_ary[i] ) { |
InoueTakashi | 1:a7abb5c6f912 | 117 | btnary.Activate(i); |
InoueTakashi | 1:a7abb5c6f912 | 118 | } |
InoueTakashi | 1:a7abb5c6f912 | 119 | else { |
InoueTakashi | 1:a7abb5c6f912 | 120 | btnary.Inactivate(i); |
InoueTakashi | 1:a7abb5c6f912 | 121 | } |
InoueTakashi | 1:a7abb5c6f912 | 122 | } |
InoueTakashi | 1:a7abb5c6f912 | 123 | } |
InoueTakashi | 1:a7abb5c6f912 | 124 | |
InoueTakashi | 1:a7abb5c6f912 | 125 | //あるボタン番号のボタンタッチを調べる |
InoueTakashi | 1:a7abb5c6f912 | 126 | bool chk_btn_tch(int btn_num) |
InoueTakashi | 1:a7abb5c6f912 | 127 | { |
InoueTakashi | 1:a7abb5c6f912 | 128 | return btnary.Touched(btn_num); |
InoueTakashi | 1:a7abb5c6f912 | 129 | } |
InoueTakashi | 1:a7abb5c6f912 | 130 | |
InoueTakashi | 1:a7abb5c6f912 | 131 | //新しい乱数値をセットする |
InoueTakashi | 1:a7abb5c6f912 | 132 | void set_new_rand(void) |
InoueTakashi | 1:a7abb5c6f912 | 133 | { |
InoueTakashi | 1:a7abb5c6f912 | 134 | //乱数用配列に、1回前と異なった乱数値を入れる |
InoueTakashi | 1:a7abb5c6f912 | 135 | for( int idx=0; idx < 2; idx++) { |
InoueTakashi | 1:a7abb5c6f912 | 136 | do { |
InoueTakashi | 1:a7abb5c6f912 | 137 | rndary[idx] = (int)rndobj.GetRand(g_bln_num); |
InoueTakashi | 1:a7abb5c6f912 | 138 | } while( rndary[idx]==befo_rndary[idx]); |
InoueTakashi | 1:a7abb5c6f912 | 139 | befo_rndary[idx] = rndary[idx]; |
InoueTakashi | 1:a7abb5c6f912 | 140 | } |
InoueTakashi | 1:a7abb5c6f912 | 141 | } |
InoueTakashi | 1:a7abb5c6f912 | 142 | |
InoueTakashi | 1:a7abb5c6f912 | 143 | |
InoueTakashi | 1:a7abb5c6f912 | 144 | //idx番目のバルーンが、2つの乱数と一致していれば加点、違っていれば減点する |
InoueTakashi | 1:a7abb5c6f912 | 145 | void chk_baloon_rand(int idx, int *score) |
InoueTakashi | 1:a7abb5c6f912 | 146 | { |
InoueTakashi | 1:a7abb5c6f912 | 147 | if( idx == rndary[0] ) *score += GUI_ADD_POINT1;//乱数0と一致している円であれば、加点 |
InoueTakashi | 1:a7abb5c6f912 | 148 | else if (idx == rndary[1] ) *score += GUI_ADD_POINT2;//乱数1と一致している円であれば、加点 |
InoueTakashi | 1:a7abb5c6f912 | 149 | else *score += GUI_DEME_POINT; //それ以外の円であれば、減点 |
InoueTakashi | 1:a7abb5c6f912 | 150 | } |
InoueTakashi | 1:a7abb5c6f912 | 151 | |
InoueTakashi | 1:a7abb5c6f912 | 152 | //ゲーム時間表示の初期化 |
InoueTakashi | 1:a7abb5c6f912 | 153 | void init_game_time(void) |
InoueTakashi | 1:a7abb5c6f912 | 154 | { |
InoueTakashi | 1:a7abb5c6f912 | 155 | g_game_time = 0; |
InoueTakashi | 1:a7abb5c6f912 | 156 | } |
InoueTakashi | 1:a7abb5c6f912 | 157 | |
InoueTakashi | 1:a7abb5c6f912 | 158 | //ゲーム中プロセスであれば、残り時間の表示 |
InoueTakashi | 1:a7abb5c6f912 | 159 | void dsp_game_time(void) |
InoueTakashi | 1:a7abb5c6f912 | 160 | { |
InoueTakashi | 1:a7abb5c6f912 | 161 | timeobj.Draw("%03d", G_GAME_LIMIT_TIME - g_game_time,LCD_COLOR_WHITE, LCD_COLOR_DARKBLUE); |
InoueTakashi | 1:a7abb5c6f912 | 162 | } |
InoueTakashi | 1:a7abb5c6f912 | 163 | |
InoueTakashi | 1:a7abb5c6f912 | 164 | //ゲーム得点の初期化 |
InoueTakashi | 1:a7abb5c6f912 | 165 | void init_game_score(void) |
InoueTakashi | 1:a7abb5c6f912 | 166 | { |
InoueTakashi | 1:a7abb5c6f912 | 167 | ; |
InoueTakashi | 1:a7abb5c6f912 | 168 | } |
InoueTakashi | 1:a7abb5c6f912 | 169 | |
InoueTakashi | 1:a7abb5c6f912 | 170 | //ゲーム得点の表示 |
InoueTakashi | 1:a7abb5c6f912 | 171 | void dsp_game_score(int score) |
InoueTakashi | 1:a7abb5c6f912 | 172 | { |
InoueTakashi | 1:a7abb5c6f912 | 173 | if( score >= 0 ) { |
InoueTakashi | 1:a7abb5c6f912 | 174 | scoreobj.Draw("%04d", score, LCD_COLOR_BLACK, LCD_COLOR_GREEN); |
InoueTakashi | 1:a7abb5c6f912 | 175 | } else { |
InoueTakashi | 1:a7abb5c6f912 | 176 | scoreobj.Draw("%04d", score, LCD_COLOR_WHITE, LCD_COLOR_RED); |
InoueTakashi | 1:a7abb5c6f912 | 177 | } |
InoueTakashi | 1:a7abb5c6f912 | 178 | } |
InoueTakashi | 1:a7abb5c6f912 | 179 | |
InoueTakashi | 1:a7abb5c6f912 | 180 | //0.1秒毎のタイマ割り込みを有効にする |
InoueTakashi | 1:a7abb5c6f912 | 181 | void ena_tim_irt(double tim_intvl) |
InoueTakashi | 1:a7abb5c6f912 | 182 | { |
InoueTakashi | 1:a7abb5c6f912 | 183 | timer.attach(&TimerIsr, tim_intvl); //0.1秒ごとのタイマ割り込みを有効にする |
InoueTakashi | 1:a7abb5c6f912 | 184 | |
InoueTakashi | 1:a7abb5c6f912 | 185 | } |
InoueTakashi | 1:a7abb5c6f912 | 186 | |
InoueTakashi | 1:a7abb5c6f912 | 187 |