Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 21:a554229e884b, committed 2013-08-27
- 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
--- /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