Revision 0:b6c9c868d906, committed 2009-12-15
- Comitter:
- luwii
- Date:
- Tue Dec 15 18:43:27 2009 +0000
- Commit message:
Changed in this revision
diff -r 000000000000 -r b6c9c868d906 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Dec 15 18:43:27 2009 +0000
@@ -0,0 +1,320 @@
+#include "mbed.h"
+#include "MobileLCD.h"
+MobileLCD lcd(p5, p6, p7, p8, p9);
+Serial pc(USBTX, USBRX); // tx, rx
+
+// ********************************************************************************
+// * Startup variables
+// ********************************************************************************
+//Ball speed
+int speedh;
+int speedv;
+
+//Ball position
+int ballx = 5;
+int bally = 65;
+
+//Score
+int scorel;
+int scorer;
+
+//Paddle size
+const int paddle = 30;
+
+//Win level
+const int winner = 3;
+
+//Paddle position
+int lefty = 53;
+int righty = 50;
+
+//Joystick position & input variables
+AnalogIn inl(p20);
+AnalogIn inr(p19);
+float joystickl;
+float joystickr;
+
+// Number of players
+int players = 0;
+
+// Loop until winner declared
+int playing = 1;
+
+const int ballcolour = 0xFFFFFF;
+
+// ********************************************************************************
+
+// ********************************************************************************
+// * Display score, wait & wipe
+// ********************************************************************************
+void displayScore( int left, int right ) {
+ lcd.locate ( 3, 2 ) ;
+ lcd.printf( "%i %i ",left,right );
+ //Check if we have a winner
+ if ( left == winner) {
+ lcd.locate( 3,4 );
+ lcd.printf( "Left won!" );
+ playing = 0;
+ lcd.fill(0, 0, 5, 130, 0x0000FF); //left
+ lcd.fill(126, 0, 4, 130, 0x000FFF); //right
+ wait(2);
+ }
+ if ( right == winner) {
+ lcd.locate( 3,4 );
+ lcd.printf( "Right won!" );
+ playing = 0;
+ lcd.fill(0, 0, 5, 130, 0x0000FF); //left
+ lcd.fill(126, 0, 4, 130, 0x000FFF); //right
+ wait(2);
+ }
+ wait( 2 );
+ lcd.fill(13, 0, 110, 25, 0x0000FF);
+}
+// ********************************************************************************
+
+
+// ********************************************************************************
+// * Setup screen to start
+// ********************************************************************************
+void startup( void ) {
+ //speed
+ speedh = 1;
+ speedv = -1;
+
+ //Score
+ scorel = 0;
+ scorer = 0;
+
+ // *** Screen ***
+ lcd.background(0x0000FF);
+ lcd.cls();
+ lcd.fill(1, lefty, 4, paddle, 0x00FF00); //left
+ lcd.fill(126, righty, 4, paddle, 0x00FF00); //right
+ lcd.fill(ballx, bally, 4, 4, ballcolour); //ball
+ displayScore(scorel,scorer);
+
+
+ // *** Calibrate analog in ***
+ // * Start game at higheest voltage level for both inpout pins
+
+}
+// ********************************************************************************
+
+
+// ********************************************************************************
+// Move the Ball
+// ********************************************************************************
+void moveBall ( void ) {
+
+ int retVal =0;
+
+ //Remove ball from screen
+ lcd.fill( ballx,bally,4,4,0x0000FF );
+
+ // Normal x movement
+ if ( (ballx + speedh > 4) && (ballx + speedh < 122)) {
+ ballx = ballx + speedh;
+
+ } else {
+ //Bounce off right paddle
+ if (ballx+speedh >= 122) {
+ if ( (bally>righty)&&(bally<righty+paddle) ) {
+ ballx=122;
+ speedh=speedh*(-1);
+ ballx=ballx+speedh;
+ } else {
+ //Left scores
+ scorel = scorel + 1;
+ displayScore( scorel,scorer );
+ //Ball speed
+ speedh = -1;
+ speedv = +1;
+
+ //Ball position
+ ballx = 122;
+ bally = righty+(paddle/2);
+ }
+ }
+ //Bounce off left paddle
+ if (ballx+speedh <=4) {
+
+ if ( (bally>lefty)&&(bally<lefty+paddle) ) {
+ ballx=4;
+ speedh=speedh*(-1);
+ ballx=ballx+speedh;
+ } else { //Right scores
+ scorer = scorer + 1;
+ displayScore( scorel,scorer );
+ //Ball speed
+ speedh = 1;
+ speedv = -1;
+
+ //Ball position
+ ballx = 5;
+ bally = lefty+(paddle/2);
+ }
+ }
+ } //else
+
+
+ // Normal y movement
+ if ( (bally + speedv > 0) && (bally + speedv < 126)) {
+ bally = bally + speedv;
+
+ } else {
+ // Bounce bottom
+ if ( bally + speedv >= 126 ) {
+ bally = 125;
+ speedv = speedv*(-1);
+ bally = bally + speedv;
+ }
+ // Bounce top
+ if (bally + speedv <= 0 ) {
+ bally = 0;
+ speedv = speedv*(-1);
+ bally = bally + speedv;
+
+ }
+ } // else
+
+ // Draw ball if it is to be moved
+ if ( retVal == 0 ) {
+ lcd.fill(ballx, bally, 4, 4, ballcolour); //ball
+ }
+
+}
+
+// ********************************************************************************
+// Move the Paddles
+// ********************************************************************************
+
+void movePaddles( void ) {
+
+ //*** Left ***
+
+ lcd.fill(1, lefty, 4, paddle, 0x0000FF); //Clear paddle
+ //Read paddle if 2 player
+ if ( players == 2 ) {
+ joystickl = inl.read();
+ joystickl = joystickl * 100;
+ joystickl = 53 - joystickl;
+ lefty = joystickl*(130/47);
+ } else {
+ if ( lefty>bally ) {
+ lefty--;
+ }
+ if ( lefty<bally ) {
+ lefty++;
+ }
+ }
+ //Auto move paddle if 1 player
+
+
+ if ( lefty <0 ) {
+ lefty = 0;
+ }
+ if ( lefty > (130-paddle) ) {
+ lefty=130-paddle;
+ }
+
+ lcd.fill(1, lefty, 4, paddle, 0x00FF00); //Draw paddle
+
+ //*** Right ***
+ lcd.fill(126, righty, 4, paddle, 0x0000FF); //Clear paddle
+ joystickr = inr.read();
+ joystickr = joystickr * 100;
+ joystickr = 53 - joystickr;
+ righty = joystickr*(130/47);
+ if ( righty <0 ) {
+ righty = 0;
+ }
+ if ( righty > (130-paddle) ) {
+ righty=130-paddle;
+ }
+ lcd.fill(126, righty, 4, paddle, 0x00FF00); //Draw paddle
+}
+// ********************************************************************************
+
+// ********************************************************************************
+// Main menu
+// ********************************************************************************
+void menu( void ) {
+ //Read right joystick level, change will start game
+ joystickr = inr.read();
+ joystickr = joystickr * 100;
+ joystickr = 53 - joystickr;
+ float startr = joystickr*(130/47);
+
+ //Display menu options, control with left joystick
+ lcd.background(0x0000FF);
+ lcd.cls();
+ lcd.locate( 5,3 );
+ lcd.printf( "mPong" );
+ lcd.locate( 1,12 );
+ lcd.printf( "(left=choose;");
+ lcd.locate( 1,13 );
+ lcd.printf( " right=start)" );
+ int choose = 1;
+ while ( choose==1 ) {
+
+ //*** Left ***
+ joystickl = inl.read();
+ joystickl = joystickl * 100;
+ joystickl = 53 - joystickl;
+ lefty = joystickl*(130/47);
+
+ if ( lefty < 44 ) {
+ lcd.background( 0x550000 );
+ lcd.locate (1,6);
+ lcd.printf( "Single Player");
+ lcd.background( 0x0000FF );
+ lcd.locate (1,7);
+ lcd.printf( "Double Player");
+ players = 1;
+ } else {
+ lcd.background( 0x0000FF );
+ lcd.locate (1,6);
+ lcd.printf( "Single Player");
+ lcd.background( 0x550000 );
+ lcd.locate (1,7);
+ lcd.printf( "Double Player");
+ players = 2;
+ }
+ wait(0.1);
+
+ //Read right joystick level, change will start game
+ joystickr = inr.read();
+ joystickr = joystickr * 100;
+ joystickr = 53 - joystickr;
+ joystickr = joystickr*(130/47);
+
+ if ( (startr - joystickr) > 10 || (startr - joystickr ) < -10 ) {
+ // Start game
+ choose = 0;
+ //Nice screen clear
+ for ( choose=0; choose <65; choose++ ) {
+ lcd.fill(65-choose, 0, 1, 130, 0x0000FF);
+ lcd.fill(65+choose, 0, 1, 130, 0x0000FF);
+ wait(0.02);
+ playing=1;
+ }
+ }
+
+ }
+}
+// ********************************************************************************
+int main() {
+ while ( 1 ) {
+
+ menu();
+ startup();
+
+ // Main Loop
+ while (playing == 1) {
+ moveBall();
+ movePaddles();
+ wait(0.02);
+ } // while playing
+
+ } // while 1
+}
diff -r 000000000000 -r b6c9c868d906 mbed.bld
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld Tue Dec 15 18:43:27 2009 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/49a220cc26e0