1D-Pong game based on a LED strip with 150 LPD6803-controlled pixels. Game keeps score for 'best-of-21' game. Written for KL25Z

Dependencies:   MODSERIAL mbed

Committer:
vsluiter
Date:
Sat Sep 07 10:59:26 2013 +0000
Revision:
26:448ee3b0b481
Parent:
21:a554229e884b
Adapted button with software debounce, made left button a bit easier (hitting sooner is OK)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 21:a554229e884b 1 #include "paddle.h"
vsluiter 21:a554229e884b 2
vsluiter 21:a554229e884b 3 Paddle::Paddle()
vsluiter 21:a554229e884b 4 {
vsluiter 21:a554229e884b 5 setColor(255,255,255);
vsluiter 21:a554229e884b 6 setSize(4);
vsluiter 21:a554229e884b 7 position = -getSize();
vsluiter 21:a554229e884b 8 direction = 1;
vsluiter 21:a554229e884b 9 setSpeed(50);
vsluiter 21:a554229e884b 10 }
vsluiter 21:a554229e884b 11
vsluiter 21:a554229e884b 12 void Paddle::setSpeed(float speed)
vsluiter 21:a554229e884b 13 {
vsluiter 21:a554229e884b 14 //truncate
vsluiter 21:a554229e884b 15 float time;
vsluiter 21:a554229e884b 16 if(speed > 100000)
vsluiter 21:a554229e884b 17 speed = 100000;
vsluiter 21:a554229e884b 18 if(speed <= 0)
vsluiter 21:a554229e884b 19 speed = 0.001;
vsluiter 21:a554229e884b 20 m_speed = speed;
vsluiter 21:a554229e884b 21 time = 1/m_speed;
vsluiter 21:a554229e884b 22 UpdatePosition.detach();
vsluiter 21:a554229e884b 23 UpdatePosition.attach(this,&Paddle::PositionUpdater, time);
vsluiter 21:a554229e884b 24 }
vsluiter 21:a554229e884b 25
vsluiter 21:a554229e884b 26 void Paddle::PositionUpdater(void)
vsluiter 21:a554229e884b 27 {
vsluiter 21:a554229e884b 28 if(direction == 1)
vsluiter 21:a554229e884b 29 position++;
vsluiter 21:a554229e884b 30 else
vsluiter 21:a554229e884b 31 position--;
vsluiter 21:a554229e884b 32 }
vsluiter 21:a554229e884b 33
vsluiter 21:a554229e884b 34 uint8_t Paddle::getColor(uint8_t pixel, uint8_t color)
vsluiter 21:a554229e884b 35 {
vsluiter 21:a554229e884b 36 if(pixel<MAX_PADDLE_SIZE && color < 3)
vsluiter 21:a554229e884b 37 return m_paddle[pixel][color];
vsluiter 21:a554229e884b 38 else
vsluiter 21:a554229e884b 39 return 0;
vsluiter 21:a554229e884b 40 }
vsluiter 21:a554229e884b 41
vsluiter 21:a554229e884b 42 uint8_t Paddle::getSize(void)
vsluiter 21:a554229e884b 43 {
vsluiter 21:a554229e884b 44 return m_size;
vsluiter 21:a554229e884b 45 }
vsluiter 21:a554229e884b 46
vsluiter 21:a554229e884b 47 void Paddle::setSize(uint8_t size)
vsluiter 21:a554229e884b 48 {
vsluiter 21:a554229e884b 49 if(size > MAX_PADDLE_SIZE)
vsluiter 21:a554229e884b 50 size = MAX_PADDLE_SIZE;
vsluiter 21:a554229e884b 51 m_size = size;
vsluiter 21:a554229e884b 52 setColor(m_red, m_green, m_blue);
vsluiter 21:a554229e884b 53 }
vsluiter 21:a554229e884b 54
vsluiter 21:a554229e884b 55 void Paddle::setColor(uint8_t red, uint8_t green, uint8_t blue)
vsluiter 21:a554229e884b 56 {
vsluiter 21:a554229e884b 57 uint8_t paddlepixel;
vsluiter 21:a554229e884b 58 m_red = red;
vsluiter 21:a554229e884b 59 m_green = green;
vsluiter 21:a554229e884b 60 m_blue = blue;
vsluiter 21:a554229e884b 61 for(paddlepixel = 0 ; paddlepixel < MAX_PADDLE_SIZE ; paddlepixel++)
vsluiter 21:a554229e884b 62 {
vsluiter 21:a554229e884b 63 float factor;
vsluiter 21:a554229e884b 64 factor = 1.0*paddlepixel/(m_size*1.0);
vsluiter 21:a554229e884b 65 if (factor > 1)
vsluiter 21:a554229e884b 66 factor = 1;
vsluiter 21:a554229e884b 67 factor = factor*factor*factor;// make the effect more dramatic
vsluiter 21:a554229e884b 68 m_paddle[paddlepixel][0] = (float)m_red * factor;
vsluiter 21:a554229e884b 69 m_paddle[paddlepixel][1] = (float)m_green * factor;
vsluiter 21:a554229e884b 70 m_paddle[paddlepixel][2] = (float)m_blue * factor;
vsluiter 21:a554229e884b 71 }
vsluiter 21:a554229e884b 72 }