First Last / Mbed 2 deprecated 1D-Pong

Dependencies:   MODSERIAL mbed

Files at this revision

API Documentation at this revision

Comitter:
vsluiter
Date:
Tue Aug 27 18:54:15 2013 +0000
Parent:
20:a63273c11af0
Child:
22:a7619f315c0e
Commit message:
separated game code from more general paddle and button classes

Changed in this revision

GameButton.cpp Show annotated file Show diff for this revision Revisions of this file
GameButton.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
paddle.cpp Show annotated file Show diff for this revision Revisions of this file
paddle.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GameButton.cpp	Tue Aug 27 18:54:15 2013 +0000
@@ -0,0 +1,30 @@
+#include "GameButton.h"
+
+GameButton::GameButton(PinName pin, float time=0.5)
+{
+    pushflag = false;
+    intpin = new InterruptIn(pin);
+    (*intpin).mode(PullUp);
+    (*intpin).fall(this, &GameButton::PushHandler);
+    m_time = time;
+    m_timeoutactive = false;
+    //timeout = new Timeout(m_time);
+}
+
+void GameButton::PushHandler(void)
+{
+    pushflag = true;
+    m_timeoutactive = true;
+    timeout.attach(this, &GameButton::TimeOutHandler, m_time);
+    pushhandlercallback();
+}
+
+void GameButton::TimeOutHandler(void)
+{
+    m_timeoutactive = false;
+}
+
+bool GameButton::getTimeoutActive(void)
+{
+    return m_timeoutactive;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GameButton.h	Tue Aug 27 18:54:15 2013 +0000
@@ -0,0 +1,24 @@
+#ifndef _GAMEBUTTON_H_
+#define _GAMEBUTTON_H_
+
+#include "mbed.h"
+class GameButton
+{
+    public:
+    GameButton(){};
+    GameButton(PinName pin, float time);
+    bool pushflag;
+    bool getTimeoutActive(void);
+    protected:
+    virtual void pushhandlercallback(void){};
+    private:
+    InterruptIn *intpin;
+    Timeout     timeout;
+    float m_time;
+    bool    m_timeoutactive;
+    void TimeOutHandler(void);
+    virtual void PushHandler(void);
+};
+
+
+#endif
\ No newline at end of file
--- a/main.cpp	Mon Aug 26 14:20:32 2013 +0000
+++ b/main.cpp	Tue Aug 27 18:54:15 2013 +0000
@@ -1,12 +1,13 @@
 #include "mbed.h"
 #include "MODSERIAL.h"
+#include "paddle.h"
+#include "GameButton.h"
 #define NUMBER_OF_PIXELS 50
 #define PADDLE_LENGTH    5
 #define STARTING_SPEED   20
 #define LEFT false
 #define RIGHT true
 
-#define MAX_PADDLE_SIZE 10
 void Randomblinks(float seconds, bool colored = false);
 void PaddleDemo(float seconds, uint8_t red, uint8_t green, uint8_t blue);
 void WinLoose(float seconds, bool side);
@@ -21,146 +22,6 @@
 SPI ledstrip(PTD2,NC,PTD1);
 MODSERIAL pc(USBTX,USBRX);
 
-class Paddle
-{
-    public:
-    Paddle();//constructor
-//    ~Paddle();//deconstructor
-    int16_t position;
-    uint8_t direction;
-    void setSpeed(float speed); //pixels per second
-    void setColor(uint8_t red, uint8_t green, uint8_t blue);
-    uint8_t getSize(void);
-    uint8_t getSpeed(void){return m_speed;};
-    void setSize(uint8_t size);
-    uint8_t getColor(uint8_t pixel, uint8_t color);
-    private:
-    uint8_t m_red ,m_green ,m_blue;
-    uint8_t m_size;
-    uint8_t m_paddle[MAX_PADDLE_SIZE][3];
-    float   m_speed;
-    Ticker UpdatePosition;
-    void PositionUpdater(void);
-};
-
-Paddle::Paddle()
-{
-    setColor(255,255,255);
-    setSize(4);
-    position = -getSize();
-    direction = 1;
-    setSpeed(50);
-}
-
-void Paddle::setSpeed(float speed)
-{
-//truncate
-    float time;
-    if(speed > 100000)
-        speed = 100000;
-    if(speed <= 0)
-        speed = 0.001;
-    m_speed = speed;
-    time = 1/m_speed;
-    UpdatePosition.detach();
-    UpdatePosition.attach(this,&Paddle::PositionUpdater, time);
-}
-
-void Paddle::PositionUpdater(void)
-{
-    if(direction == 1)
-        position++;
-    else
-        position--;
-}
-
-uint8_t Paddle::getColor(uint8_t pixel, uint8_t color)
-{
-    if(pixel<MAX_PADDLE_SIZE && color < 3)
-        return m_paddle[pixel][color];
-    else
-        return 0;
-}
-
-uint8_t Paddle::getSize(void)
-{
-    return m_size;
-}
-
-void Paddle::setSize(uint8_t size)
-{
-    if(size > MAX_PADDLE_SIZE)
-        size = MAX_PADDLE_SIZE;
-    m_size = size;
-    setColor(m_red, m_green, m_blue);
-}
-
-void Paddle::setColor(uint8_t red, uint8_t green, uint8_t blue)
-{
-    uint8_t paddlepixel;
-    m_red = red;
-    m_green = green;
-    m_blue = blue;
-    for(paddlepixel = 0 ; paddlepixel < MAX_PADDLE_SIZE ; paddlepixel++)
-    {
-        float factor;
-        factor = 1.0*paddlepixel/(m_size*1.0);
-        if (factor > 1)
-            factor = 1;
-        factor = factor*factor*factor;// make the effect more dramatic
-        m_paddle[paddlepixel][0] = (float)m_red * factor; 
-        m_paddle[paddlepixel][1] = (float)m_green * factor;
-        m_paddle[paddlepixel][2] = (float)m_blue * factor;
-    }
-}
-
-class GameButton
-{
-    public:
-    GameButton(){};
-    GameButton(PinName pin, float time);
-    bool pushflag;
-    bool getTimeoutActive(void);
-    protected:
-    virtual void pushhandlercallback(void){};
-    private:
-    InterruptIn *intpin;
-    Timeout     timeout;
-    float m_time;
-    bool    m_timeoutactive;
-    void TimeOutHandler(void);
-    virtual void PushHandler(void);
-};
-
-GameButton::GameButton(PinName pin, float time=0.5)
-{
-    pushflag = false;
-    intpin = new InterruptIn(pin);
-    (*intpin).mode(PullUp);
-    (*intpin).fall(this, &GameButton::PushHandler);
-    m_time = time;
-    m_timeoutactive = false;
-    //timeout = new Timeout(m_time);
-}
-
-void GameButton::PushHandler(void)
-{
-    pushflag = true;
-    m_timeoutactive = true;
-    timeout.attach(this, &GameButton::TimeOutHandler, m_time);
-    pushhandlercallback();
-}
-
-void GameButton::TimeOutHandler(void)
-{
-    m_timeoutactive = false;
-}
-
-bool GameButton::getTimeoutActive(void)
-{
-    return m_timeoutactive;
-}
-
 Paddle paddle;
 
 class PongGameButton : public GameButton
@@ -171,7 +32,7 @@
     int16_t paddlepos;
 };
 
-PongGameButton::PongGameButton(PinName name, float time) : GameButton(name)
+PongGameButton::PongGameButton(PinName name, float time) : GameButton(name, time)
 {
     paddlepos = 0;
 }
@@ -224,10 +85,6 @@
     uint8_t ledcounter;
     uint8_t left_score = 0, right_score = 0;
     pc.baud(115200);
- //   buttonleft.mode(PullUp);
- //   buttonright.mode(PullUp);
- //   buttonright.fall(right_pushed);
- //   buttonleft.fall(left_pushed);
     updater.attach(UpdateLEDstrip, .03);
     //demopaddlepos.attach(UpdateDemoPaddle, .03);
     ledstrip.format(8,0);        //15 bits, mode '0'
@@ -261,7 +118,7 @@
                     if(buttonright.paddlepos >= NUMBER_OF_PIXELS-1  ) //also count when hit at last pixel = NUMBER_OF_PIXELS-1
                     {
                         paddle.direction = 0;
-                        paddle.setSpeed(20+(buttonright.paddlepos-(NUMBER_OF_PIXELS-1))*2);
+                        paddle.setSpeed(25+(buttonright.paddlepos-(NUMBER_OF_PIXELS-1))*8);
                         paddle.position = NUMBER_OF_PIXELS-2;
                     }
                     pc.printf("\n\rright pushed. Paddle position: %d, registered: %d, speed: %", paddle.position, buttonright.paddlepos,paddle.getSpeed());
@@ -277,7 +134,7 @@
                     if(buttonleft.paddlepos <= 0  )
                     {
                         paddle.direction = 1;
-                        paddle.setSpeed(20+(-buttonleft.paddlepos)*2);
+                        paddle.setSpeed(25+(-buttonleft.paddlepos)*8);
                         paddle.position  = 0;
                     }
                     pc.printf("\n\rleft pushed. Paddle position: %d, registered: %d, speed %d", paddle.position, buttonleft.paddlepos, paddle.getSpeed());
@@ -321,7 +178,7 @@
         if(gametimer.read()>15 && !naglevel2)
         {
             naglevel2 = 1;
-            paddle.setSize(2);
+            paddle.setSize(10);
             //paddle.setSpeed(70);
         }   
         wait(0.05);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paddle.cpp	Tue Aug 27 18:54:15 2013 +0000
@@ -0,0 +1,72 @@
+#include "paddle.h"
+
+Paddle::Paddle()
+{
+    setColor(255,255,255);
+    setSize(4);
+    position = -getSize();
+    direction = 1;
+    setSpeed(50);
+}
+
+void Paddle::setSpeed(float speed)
+{
+//truncate
+    float time;
+    if(speed > 100000)
+        speed = 100000;
+    if(speed <= 0)
+        speed = 0.001;
+    m_speed = speed;
+    time = 1/m_speed;
+    UpdatePosition.detach();
+    UpdatePosition.attach(this,&Paddle::PositionUpdater, time);
+}
+
+void Paddle::PositionUpdater(void)
+{
+    if(direction == 1)
+        position++;
+    else
+        position--;
+}
+
+uint8_t Paddle::getColor(uint8_t pixel, uint8_t color)
+{
+    if(pixel<MAX_PADDLE_SIZE && color < 3)
+        return m_paddle[pixel][color];
+    else
+        return 0;
+}
+
+uint8_t Paddle::getSize(void)
+{
+    return m_size;
+}
+
+void Paddle::setSize(uint8_t size)
+{
+    if(size > MAX_PADDLE_SIZE)
+        size = MAX_PADDLE_SIZE;
+    m_size = size;
+    setColor(m_red, m_green, m_blue);
+}
+
+void Paddle::setColor(uint8_t red, uint8_t green, uint8_t blue)
+{
+    uint8_t paddlepixel;
+    m_red = red;
+    m_green = green;
+    m_blue = blue;
+    for(paddlepixel = 0 ; paddlepixel < MAX_PADDLE_SIZE ; paddlepixel++)
+    {
+        float factor;
+        factor = 1.0*paddlepixel/(m_size*1.0);
+        if (factor > 1)
+            factor = 1;
+        factor = factor*factor*factor;// make the effect more dramatic
+        m_paddle[paddlepixel][0] = (float)m_red * factor; 
+        m_paddle[paddlepixel][1] = (float)m_green * factor;
+        m_paddle[paddlepixel][2] = (float)m_blue * factor;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paddle.h	Tue Aug 27 18:54:15 2013 +0000
@@ -0,0 +1,29 @@
+#ifndef _PADDLE_H_
+#define _PADDLE_H_
+
+#include "mbed.h"
+#define MAX_PADDLE_SIZE 15
+class Paddle
+{
+    public:
+    Paddle();//constructor
+//    ~Paddle();//deconstructor
+    int16_t position;
+    uint8_t direction;
+    void setSpeed(float speed); //pixels per second
+    void setColor(uint8_t red, uint8_t green, uint8_t blue);
+    uint8_t getSize(void);
+    uint8_t getSpeed(void){return m_speed;};
+    void setSize(uint8_t size);
+    uint8_t getColor(uint8_t pixel, uint8_t color);
+    private:
+    uint8_t m_red ,m_green ,m_blue;
+    uint8_t m_size;
+    uint8_t m_paddle[MAX_PADDLE_SIZE][3];
+    float   m_speed;
+    Ticker UpdatePosition;
+    void PositionUpdater(void);
+};
+
+
+#endif
\ No newline at end of file