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
modify main1.cpp like C source.

Who changed what in which revision?

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