Hangman game using qp a 16x2 LCD and joystick.

Dependencies:   TextLCD mbed qp

Committer:
tylerjw
Date:
Thu Feb 09 03:57:44 2012 +0000
Revision:
1:4efaebc256d3
Problems with qp library...
TODO: BSP for button and joystick then main.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tylerjw 1:4efaebc256d3 1 #include "qp_port.h"
tylerjw 1:4efaebc256d3 2 #include "dpp.h"
tylerjw 1:4efaebc256d3 3 #include "bsp.h"
tylerjw 1:4efaebc256d3 4
tylerjw 1:4efaebc256d3 5 Q_DEFINE_THIS_FILE
tylerjw 1:4efaebc256d3 6
tylerjw 1:4efaebc256d3 7 class Player : public QActive {
tylerjw 1:4efaebc256d3 8 private:
tylerjw 1:4efaebc256d3 9 QTimeEvt m_timeEvt; // to timeout update joystick pos
tylerjw 1:4efaebc256d3 10 uint8_t wins;
tylerjw 1:4efaebc256d3 11 uint8_t losses;
tylerjw 1:4efaebc256d3 12
tylerjw 1:4efaebc256d3 13 public:
tylerjw 1:4efaebc256d3 14 Player();
tylerjw 1:4efaebc256d3 15
tylerjw 1:4efaebc256d3 16 private:
tylerjw 1:4efaebc256d3 17 static QState initial (Player *me, QEvent const *e);
tylerjw 1:4efaebc256d3 18 static QState thinking(Player *me, QEvent const *e);
tylerjw 1:4efaebc256d3 19 static QState playing (Player *me, QEvent const *e);
tylerjw 1:4efaebc256d3 20 };
tylerjw 1:4efaebc256d3 21
tylerjw 1:4efaebc256d3 22 static Player l_player;
tylerjw 1:4efaebc256d3 23
tylerjw 1:4efaebc256d3 24 #define JOY_TIME (BSP_TICKS_PER_SEC/5) // update joystick position every 5 ticks
tylerjw 1:4efaebc256d3 25
tylerjw 1:4efaebc256d3 26 enum InternalSignals { // internal signals
tylerjw 1:4efaebc256d3 27 TIMEOUT_SIG = MAX_SIG
tylerjw 1:4efaebc256d3 28 };
tylerjw 1:4efaebc256d3 29
tylerjw 1:4efaebc256d3 30 QActive * const AO_Player = l_player;
tylerjw 1:4efaebc256d3 31
tylerjw 1:4efaebc256d3 32 //............................................................................
tylerjw 1:4efaebc256d3 33 Player::Player()
tylerjw 1:4efaebc256d3 34 : QActive((QStateHandler)&Player::initial),
tylerjw 1:4efaebc256d3 35 m_timeEvt(TIMEOUT_SIG)
tylerjw 1:4efaebc256d3 36 {}
tylerjw 1:4efaebc256d3 37 //............................................................................
tylerjw 1:4efaebc256d3 38 QState Player::initial(Player *me, QEvent const *) {
tylerjw 1:4efaebc256d3 39 static uint8_t registered; // starts off with 0, per C-standard
tylerjw 1:4efaebc256d3 40 if (!registered) {
tylerjw 1:4efaebc256d3 41 QS_OBJ_DICTIONARY(&l_player);
tylerjw 1:4efaebc256d3 42 QS_OBJ_DICTIONARY(&l_player.m_timeEvt);
tylerjw 1:4efaebc256d3 43
tylerjw 1:4efaebc256d3 44 QS_FUN_DICTIONARY(&Player::initial);
tylerjw 1:4efaebc256d3 45 QS_FUN_DICTIONARY(&Player::thinking);
tylerjw 1:4efaebc256d3 46 QS_FUN_DICTIONARY(&Player::playing);
tylerjw 1:4efaebc256d3 47
tylerjw 1:4efaebc256d3 48 registered = (uint8_t)1;
tylerjw 1:4efaebc256d3 49 }
tylerjw 1:4efaebc256d3 50
tylerjw 1:4efaebc256d3 51 QS_SIG_DICTIONARY(PLAY_SIG, me); // signal for each Players
tylerjw 1:4efaebc256d3 52 QS_SIG_DICTIONARY(FINISHED_SIG, me); // signal for each Players
tylerjw 1:4efaebc256d3 53
tylerjw 1:4efaebc256d3 54 // init wins and losses ctr
tylerjw 1:4efaebc256d3 55 wins = losses = 0;
tylerjw 1:4efaebc256d3 56
tylerjw 1:4efaebc256d3 57 return Q_TRAN(&Player::thinking); // go to thinking
tylerjw 1:4efaebc256d3 58 }
tylerjw 1:4efaebc256d3 59 //............................................................................
tylerjw 1:4efaebc256d3 60 QState Player::thinking(Player *me, QEvent const *) {
tylerjw 1:4efaebc256d3 61 switch (e->sig) {
tylerjw 1:4efaebc256d3 62 case Q_ENTRY_SIG: {
tylerjw 1:4efaebc256d3 63 // TODO : INITIALIZE BTN
tylerjw 1:4efaebc256d3 64 }
tylerjw 1:4efaebc256d3 65 case BUTTON_SIG: {
tylerjw 1:4efaebc256d3 66 return Q_TRAN(&Player::playing); // go to playing state
tylerjw 1:4efaebc256d3 67 }
tylerjw 1:4efaebc256d3 68 }
tylerjw 1:4efaebc256d3 69 return Q_SUPER(&QHsm::top);
tylerjw 1:4efaebc256d3 70 }
tylerjw 1:4efaebc256d3 71 //............................................................................
tylerjw 1:4efaebc256d3 72 QState Player::playing(Player *me, QEvent const *) {
tylerjw 1:4efaebc256d3 73 switch (e->sig) {
tylerjw 1:4efaebc256d3 74 case Q_ENTRY_SIG: {
tylerjw 1:4efaebc256d3 75 me->m_timeEvt.postIn(me, JOY_TIME); // init joystick update (TIMEOUT_SIG)
tylerjw 1:4efaebc256d3 76 // TODO : INITIALIZE BTN
tylerjw 1:4efaebc256d3 77 return Q_HANDLED();
tylerjw 1:4efaebc256d3 78 }
tylerjw 1:4efaebc256d3 79 case TIMEOUT_SIG: {
tylerjw 1:4efaebc256d3 80 int pos = BSP_joyUpdate();
tylerjw 1:4efaebc256d3 81 HostEvt *pe = Q_NEW(HostEvt, SCROLL_SIG);
tylerjw 1:4efaebc256d3 82 pe->scroll_pos = pos;
tylerjw 1:4efaebc256d3 83 QF::PUBLISH(pe, me);
tylerjw 1:4efaebc256d3 84 }
tylerjw 1:4efaebc256d3 85 case BUTTON_SIG: {
tylerjw 1:4efaebc256d3 86 HostEvt *pe = Q_NEW(HostEvt, SELECT_SIG);
tylerjw 1:4efaebc256d3 87 pe->scroll_pos = 0; // no change
tylerjw 1:4efaebc256d3 88 QF::PUBLISH(pe, me);
tylerjw 1:4efaebc256d3 89 }
tylerjw 1:4efaebc256d3 90 case FINISHED_SIG: {
tylerjw 1:4efaebc256d3 91 if(((HostEvt *)e)->scroll_pos == 1) // win
tylerjw 1:4efaebc256d3 92 wins++;
tylerjw 1:4efaebc256d3 93 else
tylerjw 1:4efaebc256d3 94 losses++;
tylerjw 1:4efaebc256d3 95
tylerjw 1:4efaebc256d3 96 return Q_TRAN(&Player::thinking); // go to thinking state
tylerjw 1:4efaebc256d3 97 }
tylerjw 1:4efaebc256d3 98 }
tylerjw 1:4efaebc256d3 99 return Q_SUPER(&QHsm::top);
tylerjw 1:4efaebc256d3 100 }