Simple Pong game on NokiaLCD with PS2

Dependencies:   mbed PS2 NokiaLCD

Committer:
wjohnsto
Date:
Sun Feb 27 23:35:17 2011 +0000
Revision:
0:93dce1e528b9
Child:
1:3cc8b1413557
Version 0.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wjohnsto 0:93dce1e528b9 1 #include "mbed.h"
wjohnsto 0:93dce1e528b9 2 #include "NokiaLCD.h"
wjohnsto 0:93dce1e528b9 3 #include "PS2Keyboard.h"
wjohnsto 0:93dce1e528b9 4 #include "ball.h"
wjohnsto 0:93dce1e528b9 5 #include "paddle.h"
wjohnsto 0:93dce1e528b9 6
wjohnsto 0:93dce1e528b9 7 typedef enum {
wjohnsto 0:93dce1e528b9 8 RESET, RUN, PAUSE
wjohnsto 0:93dce1e528b9 9 } STATES;
wjohnsto 0:93dce1e528b9 10
wjohnsto 0:93dce1e528b9 11 NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type
wjohnsto 0:93dce1e528b9 12
wjohnsto 0:93dce1e528b9 13 PS2Keyboard ps2kb(p12, p11); // CLK, DAT
wjohnsto 0:93dce1e528b9 14
wjohnsto 0:93dce1e528b9 15 DigitalIn sw2(p24);
wjohnsto 0:93dce1e528b9 16 DigitalIn sw1(p25);
wjohnsto 0:93dce1e528b9 17
wjohnsto 0:93dce1e528b9 18 PwmOut g(p21);
wjohnsto 0:93dce1e528b9 19 PwmOut b(p22);
wjohnsto 0:93dce1e528b9 20 PwmOut r(p23);
wjohnsto 0:93dce1e528b9 21
wjohnsto 0:93dce1e528b9 22 enum BUTTONS{
wjohnsto 0:93dce1e528b9 23 UP = 0xe75,
wjohnsto 0:93dce1e528b9 24 DOWN = 0xe72,
wjohnsto 0:93dce1e528b9 25 };
wjohnsto 0:93dce1e528b9 26
wjohnsto 0:93dce1e528b9 27 void drawScreen(Paddle paddle1, Paddle paddle2, Ball theBall, bool isBlack) {
wjohnsto 0:93dce1e528b9 28 paddle1.draw(lcd, isBlack);
wjohnsto 0:93dce1e528b9 29 paddle2.draw(lcd ,isBlack);
wjohnsto 0:93dce1e528b9 30 theBall.draw(lcd ,isBlack);
wjohnsto 0:93dce1e528b9 31 }
wjohnsto 0:93dce1e528b9 32
wjohnsto 0:93dce1e528b9 33 void drawScores(Paddle paddle1, Paddle paddle2) {
wjohnsto 0:93dce1e528b9 34 lcd.locate(7,0);
wjohnsto 0:93dce1e528b9 35 lcd.putc('0' + paddle1.getScore());
wjohnsto 0:93dce1e528b9 36 lcd.locate(9,0);
wjohnsto 0:93dce1e528b9 37 lcd.putc('0' + paddle2.getScore());
wjohnsto 0:93dce1e528b9 38 lcd.fill(66,0,2,130,0xFFFFFF);
wjohnsto 0:93dce1e528b9 39 lcd.locate(7,15);
wjohnsto 0:93dce1e528b9 40 lcd.putc('0' + paddle1.getLives());
wjohnsto 0:93dce1e528b9 41 lcd.locate(9,15);
wjohnsto 0:93dce1e528b9 42 lcd.putc('0' + paddle2.getLives());
wjohnsto 0:93dce1e528b9 43 }
wjohnsto 0:93dce1e528b9 44
wjohnsto 0:93dce1e528b9 45 int main() {
wjohnsto 0:93dce1e528b9 46 PS2Keyboard::keyboard_event_t evt_kb;
wjohnsto 0:93dce1e528b9 47 lcd.background(0x000000);
wjohnsto 0:93dce1e528b9 48 lcd.cls();
wjohnsto 0:93dce1e528b9 49 Paddle paddle1, paddle2;
wjohnsto 0:93dce1e528b9 50 Ball theBall;
wjohnsto 0:93dce1e528b9 51 int temp, count=0;
wjohnsto 0:93dce1e528b9 52 drawScreen(paddle1, paddle2, theBall, false);
wjohnsto 0:93dce1e528b9 53 drawScores(paddle1, paddle2);
wjohnsto 0:93dce1e528b9 54 STATES state = RESET;
wjohnsto 0:93dce1e528b9 55 while(1) {
wjohnsto 0:93dce1e528b9 56 switch(state) {
wjohnsto 0:93dce1e528b9 57 case RESET:
wjohnsto 0:93dce1e528b9 58 lcd.cls();
wjohnsto 0:93dce1e528b9 59 paddle1 = Paddle(1,10,5,25,0xFFFFFF,paddle1.getLives(),paddle1.getScore());
wjohnsto 0:93dce1e528b9 60 paddle2 = Paddle(125,3,5,25,0xFFFFFF,paddle2.getLives(),paddle2.getScore());
wjohnsto 0:93dce1e528b9 61 theBall = Ball(6,25,5,5,0xFFFF00,1,1);
wjohnsto 0:93dce1e528b9 62 drawScreen(paddle1, paddle2, theBall, false);
wjohnsto 0:93dce1e528b9 63 drawScores(paddle1, paddle2);
wjohnsto 0:93dce1e528b9 64 state = PAUSE;
wjohnsto 0:93dce1e528b9 65 break;
wjohnsto 0:93dce1e528b9 66 case PAUSE:
wjohnsto 0:93dce1e528b9 67 r = g = 0;
wjohnsto 0:93dce1e528b9 68 b = 1;
wjohnsto 0:93dce1e528b9 69 if(!sw2) {
wjohnsto 0:93dce1e528b9 70 while(!sw2);
wjohnsto 0:93dce1e528b9 71 state = RESET;
wjohnsto 0:93dce1e528b9 72 break;
wjohnsto 0:93dce1e528b9 73 }
wjohnsto 0:93dce1e528b9 74 if(!sw1) {
wjohnsto 0:93dce1e528b9 75 while(!sw1);
wjohnsto 0:93dce1e528b9 76 state = RUN;
wjohnsto 0:93dce1e528b9 77 }
wjohnsto 0:93dce1e528b9 78 break;
wjohnsto 0:93dce1e528b9 79 case RUN:
wjohnsto 0:93dce1e528b9 80 r = g = 1;
wjohnsto 0:93dce1e528b9 81 b = 0;
wjohnsto 0:93dce1e528b9 82 if(!sw2) {
wjohnsto 0:93dce1e528b9 83 while(!sw2);
wjohnsto 0:93dce1e528b9 84 state = RESET;
wjohnsto 0:93dce1e528b9 85 break;
wjohnsto 0:93dce1e528b9 86 }
wjohnsto 0:93dce1e528b9 87 if(!sw1) {
wjohnsto 0:93dce1e528b9 88 while(!sw1);
wjohnsto 0:93dce1e528b9 89 state = PAUSE;
wjohnsto 0:93dce1e528b9 90 break;
wjohnsto 0:93dce1e528b9 91 }
wjohnsto 0:93dce1e528b9 92 if (ps2kb.processing(&evt_kb)) {
wjohnsto 0:93dce1e528b9 93 temp = evt_kb.scancode[0];
wjohnsto 0:93dce1e528b9 94 for (int i = 1; i < evt_kb.length; i++) {
wjohnsto 0:93dce1e528b9 95 temp <<= 4;
wjohnsto 0:93dce1e528b9 96 temp |= evt_kb.scancode[i];
wjohnsto 0:93dce1e528b9 97 }
wjohnsto 0:93dce1e528b9 98 switch(temp) {
wjohnsto 0:93dce1e528b9 99 case UP:
wjohnsto 0:93dce1e528b9 100 if(paddle1.getY()>2)
wjohnsto 0:93dce1e528b9 101 paddle1.move(lcd, -2);
wjohnsto 0:93dce1e528b9 102 break;
wjohnsto 0:93dce1e528b9 103 case DOWN:
wjohnsto 0:93dce1e528b9 104 if(paddle1.getY()+paddle1.getHeight()<128)
wjohnsto 0:93dce1e528b9 105 paddle1.move(lcd, 2);
wjohnsto 0:93dce1e528b9 106 break;
wjohnsto 0:93dce1e528b9 107 }
wjohnsto 0:93dce1e528b9 108 }
wjohnsto 0:93dce1e528b9 109 if(count%3)
wjohnsto 0:93dce1e528b9 110 paddle2.moveCPU(lcd, theBall.getY());
wjohnsto 0:93dce1e528b9 111 if(++count==5) {
wjohnsto 0:93dce1e528b9 112 count = 0;
wjohnsto 0:93dce1e528b9 113 if(theBall.hitP1((paddle1.getX()+paddle1.getWidth()), paddle1.getY(), paddle1.getHeight()))
wjohnsto 0:93dce1e528b9 114 theBall.reverseX();
wjohnsto 0:93dce1e528b9 115 if(theBall.hitP2(paddle2.getX(), paddle2.getY(), paddle2.getHeight()))
wjohnsto 0:93dce1e528b9 116 theBall.reverseX();
wjohnsto 0:93dce1e528b9 117 if(theBall.hitX()) {
wjohnsto 0:93dce1e528b9 118 if(theBall.getX()<7) {
wjohnsto 0:93dce1e528b9 119 if(!paddle1.loseLife()) {
wjohnsto 0:93dce1e528b9 120 paddle1.setLives(3);
wjohnsto 0:93dce1e528b9 121 paddle2.setLives(3);
wjohnsto 0:93dce1e528b9 122 paddle2.addPoint();
wjohnsto 0:93dce1e528b9 123 }
wjohnsto 0:93dce1e528b9 124 }
wjohnsto 0:93dce1e528b9 125 else if(theBall.getX()>120) {
wjohnsto 0:93dce1e528b9 126 if(!paddle2.loseLife()) {
wjohnsto 0:93dce1e528b9 127 paddle2.setLives(3);
wjohnsto 0:93dce1e528b9 128 paddle1.setLives(3);
wjohnsto 0:93dce1e528b9 129 paddle1.addPoint();
wjohnsto 0:93dce1e528b9 130 }
wjohnsto 0:93dce1e528b9 131 }
wjohnsto 0:93dce1e528b9 132 theBall.reverseX();
wjohnsto 0:93dce1e528b9 133 state = RESET;
wjohnsto 0:93dce1e528b9 134 }
wjohnsto 0:93dce1e528b9 135 if(theBall.hitY())
wjohnsto 0:93dce1e528b9 136 theBall.reverseY();
wjohnsto 0:93dce1e528b9 137 theBall.move(lcd);
wjohnsto 0:93dce1e528b9 138 }
wjohnsto 0:93dce1e528b9 139 break;
wjohnsto 0:93dce1e528b9 140 }
wjohnsto 0:93dce1e528b9 141 drawScreen(paddle1, paddle2, theBall, false);
wjohnsto 0:93dce1e528b9 142 drawScores(paddle1, paddle2);
wjohnsto 0:93dce1e528b9 143 }
wjohnsto 0:93dce1e528b9 144 }