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

Revision:
1:a7abb5c6f912
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/func_ol.cpp	Sat Jul 02 05:39:15 2016 +0000
@@ -0,0 +1,187 @@
+#include "mbed.h"
+
+#include "BlinkLabel.hpp"
+#include "ButtonGroup.hpp"
+#include "SeekbarGroup.hpp"
+#include "Label.hpp"
+
+#include "GUIconst.hpp"     //GUI用定数  (TI)
+#include "GUIinit.hpp"     //GUI初期化 (TI)
+#include "ButtonGroupOL.hpp"     //ButtonGroupオーバーラップクラス (TI)
+#include "NumericLabelOL.hpp"   //Numerical Labelオーバーラップクラス (TI)
+#include "Circle.hpp"     //GUI 円クラス (TI)
+#include "Rand.hpp"   //乱数発生クラス (TI)
+
+using namespace Mikami;     //Mikami 名前空間を使用
+using namespace TakaIno;    //TakaIno 名前空間を使用 (TI)
+
+Ticker timer;                 //タイマ割り込み
+
+GUIinit     guiobj;      //GUIクラスオブジェクト生成
+Circle cirary[ GUI_CIRCLE_MAX ]={DEF_CIR_INFO[0], DEF_CIR_INFO[1],DEF_CIR_INFO[2], DEF_CIR_INFO[3],
+                        DEF_CIR_INFO[4], DEF_CIR_INFO[5],DEF_CIR_INFO[6]};
+ButtonGroupOL btnary;    //ButtonGroupOLクラスオブジェクトの生成     
+Rand    rndobj;         //乱数発生クラスオブジェクト生成
+//ゲーム時間表示
+Label lb_time_obj(425,205, "Time", Label::LEFT, Font16, LCD_COLOR_YELLOW, LCD_COLOR_BLUE);   //
+NumericLabelOL<int> timeobj(425, 220, "%03d", G_GAME_LIMIT_TIME, Label::LEFT, Font16, LCD_COLOR_WHITE, LCD_COLOR_DARKBLUE);
+//ゲーム得点表示
+Label lb_score_obj(425,235, "Score", Label::LEFT, Font16, LCD_COLOR_CYAN, LCD_COLOR_BLUE);   //
+NumericLabelOL<int> scoreobj(425, 250, "%04d", 0, Label::LEFT, Font16, LCD_COLOR_RED, LCD_COLOR_WHITE);
+              
+uint16_t btn_width = GUI_BTN_WIDTH;     //ボタン表示の幅
+int     g_btn_num = 4;      ////ボタンの個数
+int     g_bln_num = GUI_CIRCLE_MAX;
+int     rndary[2], befo_rndary[2] = {-1,-1};      //今回と前回の乱数値用配列
+
+int g_game_time = 0;        //ゲーム時間用変数
+int g_game_prcs = 0;        //ゲーム中のプロセス変数、最初は待機プロセス
+
+//タイマ割り込みハンドラ
+void TimerIsr()
+{
+    if( g_game_prcs == 1 )    {     //「ゲーム中プロセス」時に処理する
+        g_game_time++;      //ゲーム時間をカウントアップ
+        if( g_game_time > G_GAME_LIMIT_TIME ) {
+            //ゲーム終了時間になったら「ゲーム終了プロセス」にする
+            g_game_time = G_GAME_LIMIT_TIME;
+            g_game_prcs = 2;
+        }
+    }
+}   
+//グラフィック初期化   
+void gui_init(void)
+{
+  //GUIオブジェクトで、フォント16とボタン幅をセット
+    guiobj.SetInit(Font16, btn_width);
+}
+
+// メインタイトルの表示
+//void dsp_main_title(string main_title)
+void dsp_main_title(char main_title[])
+{
+    string str = main_title;
+    // メインタイトルの表示、中央位置、フォント16
+    Label title_obj(0,0, main_title, Label::CENTER, Font16);   //   
+}
+
+//バルーン表示
+void dsp_baloon(void)
+{
+ //円オブジェクトにより、円を描画する
+    for( int idx = 0; idx < g_bln_num; idx++ ) {
+        cirary[idx].DrawCircle(true);
+    }    
+}
+
+//idx番のバルーンに触ったかどうかチェックする
+bool chk_baloon_tch(int idx)
+{
+    return cirary[idx].CircleTouched();
+}
+
+//idx番のバルーンの色を反転する
+void rvs_baloon_col(int idx)
+{
+      //idx番目の円を触ったら、円の色を反転する
+      cirary[idx].ReverseCircleColor();
+}
+
+//idx番のバルーンの表示位置を動かす
+void chg_baloon_pos(int idx)
+{
+       cirary[idx].ChangeCirclePos();
+}
+
+//idx番のバルーンの表示位置を動かすことを許可する
+void ena_baloon_mov(int idx, bool mov_flg)
+{
+       cirary[idx].MoveCircle(mov_flg);
+ }
+
+
+//ボタン初期化
+void btn_init()
+{
+     //ボタン1(end),2,3を無効に  ボタン0(start)を有効のままにする
+    btnary.Inactivate(1);    btnary.Inactivate(2);    btnary.Inactivate(3);
+  
+ }
+ 
+ //ボタンの有効無効をセットする
+ void set_btn_act_inact(bool act_ary[])
+ {
+     for( int i = 0; i < g_btn_num; i++)
+     {
+        if( act_ary[i] )   {
+           btnary.Activate(i); 
+        }
+        else   {
+           btnary.Inactivate(i);
+        }   
+     } 
+ }
+ 
+//あるボタン番号のボタンタッチを調べる
+bool chk_btn_tch(int btn_num)
+{
+    return btnary.Touched(btn_num);     
+}
+
+//新しい乱数値をセットする
+void set_new_rand(void)
+{
+   //乱数用配列に、1回前と異なった乱数値を入れる
+    for( int idx=0; idx < 2; idx++) {
+        do {
+           rndary[idx] = (int)rndobj.GetRand(g_bln_num);
+        } while( rndary[idx]==befo_rndary[idx]);
+        befo_rndary[idx] = rndary[idx];
+    }    
+}
+
+
+//idx番目のバルーンが、2つの乱数と一致していれば加点、違っていれば減点する                 
+void chk_baloon_rand(int idx, int *score)
+{
+        if( idx == rndary[0] )  *score += GUI_ADD_POINT1;//乱数0と一致している円であれば、加点
+        else if (idx == rndary[1] ) *score += GUI_ADD_POINT2;//乱数1と一致している円であれば、加点
+        else    *score += GUI_DEME_POINT;    //それ以外の円であれば、減点    
+}
+
+//ゲーム時間表示の初期化
+void init_game_time(void)
+{
+    g_game_time = 0;
+}
+
+ //ゲーム中プロセスであれば、残り時間の表示
+void dsp_game_time(void)
+{
+    timeobj.Draw("%03d", G_GAME_LIMIT_TIME - g_game_time,LCD_COLOR_WHITE, LCD_COLOR_DARKBLUE);
+ }          
+
+//ゲーム得点の初期化
+void init_game_score(void)
+{
+    ;
+}
+
+ //ゲーム得点の表示
+void dsp_game_score(int score)
+{
+    if( score >= 0 )    {
+        scoreobj.Draw("%04d", score, LCD_COLOR_BLACK, LCD_COLOR_GREEN);
+    } else    {
+        scoreobj.Draw("%04d", score, LCD_COLOR_WHITE, LCD_COLOR_RED);
+    }   
+}
+
+//0.1秒毎のタイマ割り込みを有効にする
+void ena_tim_irt(double tim_intvl)
+{
+    timer.attach(&TimerIsr, tim_intvl);      //0.1秒ごとのタイマ割り込みを有効にする     
+    
+}         
+    
+    
\ No newline at end of file