3-D snake game for the mbed application board.
Dependencies: C12832 MMA7660 mbed
main.cpp@0:8b08136c5edd, 2014-03-24 (annotated)
- Committer:
- pbhatnagar3
- Date:
- Mon Mar 24 17:48:19 2014 +0000
- Revision:
- 0:8b08136c5edd
3-D snake game for the mbed application board.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pbhatnagar3 | 0:8b08136c5edd | 1 | //HEADER FILES |
pbhatnagar3 | 0:8b08136c5edd | 2 | #include "mbed.h" |
pbhatnagar3 | 0:8b08136c5edd | 3 | #include "C12832.h" |
pbhatnagar3 | 0:8b08136c5edd | 4 | #include "MMA7660.h" |
pbhatnagar3 | 0:8b08136c5edd | 5 | #include <time.h> |
pbhatnagar3 | 0:8b08136c5edd | 6 | #include <stdlib.h> |
pbhatnagar3 | 0:8b08136c5edd | 7 | |
pbhatnagar3 | 0:8b08136c5edd | 8 | //IMPORTANT INITIALIZATIONS |
pbhatnagar3 | 0:8b08136c5edd | 9 | Serial pc(USBTX, USBRX); |
pbhatnagar3 | 0:8b08136c5edd | 10 | C12832 lcd(p5, p7, p6, p8, p11); |
pbhatnagar3 | 0:8b08136c5edd | 11 | BusIn joy(p15,p12,p13,p16); |
pbhatnagar3 | 0:8b08136c5edd | 12 | DigitalIn fire(p14); |
pbhatnagar3 | 0:8b08136c5edd | 13 | BusOut leds(LED1,LED2,LED3,LED4); |
pbhatnagar3 | 0:8b08136c5edd | 14 | MMA7660 MMA(p28, p27); //I2C Accelerometer |
pbhatnagar3 | 0:8b08136c5edd | 15 | DigitalOut connectionLed(LED1);//Accel OK LED |
pbhatnagar3 | 0:8b08136c5edd | 16 | |
pbhatnagar3 | 0:8b08136c5edd | 17 | |
pbhatnagar3 | 0:8b08136c5edd | 18 | int main() |
pbhatnagar3 | 0:8b08136c5edd | 19 | { |
pbhatnagar3 | 0:8b08136c5edd | 20 | //IMPORTANT VARIABLE DECLARATIONS |
pbhatnagar3 | 0:8b08136c5edd | 21 | srand(time(NULL)); |
pbhatnagar3 | 0:8b08136c5edd | 22 | int r = rand(); |
pbhatnagar3 | 0:8b08136c5edd | 23 | int i=0; |
pbhatnagar3 | 0:8b08136c5edd | 24 | int dimX = 120; |
pbhatnagar3 | 0:8b08136c5edd | 25 | int dimY = 28; |
pbhatnagar3 | 0:8b08136c5edd | 26 | int x=0,y=0; |
pbhatnagar3 | 0:8b08136c5edd | 27 | lcd.cls(); |
pbhatnagar3 | 0:8b08136c5edd | 28 | lcd.locate(0,3); |
pbhatnagar3 | 0:8b08136c5edd | 29 | lcd.printf("welcome to 3D snake game"); |
pbhatnagar3 | 0:8b08136c5edd | 30 | wait(2); |
pbhatnagar3 | 0:8b08136c5edd | 31 | lcd.cls(); |
pbhatnagar3 | 0:8b08136c5edd | 32 | lcd.locate(0, 3); |
pbhatnagar3 | 0:8b08136c5edd | 33 | lcd.printf("hit joystick 4 fireball"); |
pbhatnagar3 | 0:8b08136c5edd | 34 | wait(1.5); |
pbhatnagar3 | 0:8b08136c5edd | 35 | int j = 0; |
pbhatnagar3 | 0:8b08136c5edd | 36 | int cst = 4; |
pbhatnagar3 | 0:8b08136c5edd | 37 | int fDimX = dimX - cst; |
pbhatnagar3 | 0:8b08136c5edd | 38 | int fDimY = dimY - cst; |
pbhatnagar3 | 0:8b08136c5edd | 39 | int flag = 0; |
pbhatnagar3 | 0:8b08136c5edd | 40 | int p1 = r % fDimX; |
pbhatnagar3 | 0:8b08136c5edd | 41 | int p2 = r % fDimY; |
pbhatnagar3 | 0:8b08136c5edd | 42 | int score = 0; |
pbhatnagar3 | 0:8b08136c5edd | 43 | int bonus = 0; |
pbhatnagar3 | 0:8b08136c5edd | 44 | if (p1 < 10) |
pbhatnagar3 | 0:8b08136c5edd | 45 | p1 = 10; |
pbhatnagar3 | 0:8b08136c5edd | 46 | if (p2 < 10) |
pbhatnagar3 | 0:8b08136c5edd | 47 | p2 = 10; |
pbhatnagar3 | 0:8b08136c5edd | 48 | while(1) { |
pbhatnagar3 | 0:8b08136c5edd | 49 | //CONDITION FOR CHECKING FOR THE FIREBALL |
pbhatnagar3 | 0:8b08136c5edd | 50 | if (fire && score>5) { |
pbhatnagar3 | 0:8b08136c5edd | 51 | leds=0xf; |
pbhatnagar3 | 0:8b08136c5edd | 52 | flag = 100; |
pbhatnagar3 | 0:8b08136c5edd | 53 | if(bonus == 0){ |
pbhatnagar3 | 0:8b08136c5edd | 54 | score -= 2; |
pbhatnagar3 | 0:8b08136c5edd | 55 | bonus = 1; |
pbhatnagar3 | 0:8b08136c5edd | 56 | } |
pbhatnagar3 | 0:8b08136c5edd | 57 | } |
pbhatnagar3 | 0:8b08136c5edd | 58 | // CONDITIONS TO CHECK FOR JOYSTICK INPUT |
pbhatnagar3 | 0:8b08136c5edd | 59 | else { |
pbhatnagar3 | 0:8b08136c5edd | 60 | if (flag == 0){ |
pbhatnagar3 | 0:8b08136c5edd | 61 | leds=joy; |
pbhatnagar3 | 0:8b08136c5edd | 62 | // moving the snake backwards |
pbhatnagar3 | 0:8b08136c5edd | 63 | if (joy == 0x4 ){ |
pbhatnagar3 | 0:8b08136c5edd | 64 | i= i - cst; |
pbhatnagar3 | 0:8b08136c5edd | 65 | if (i < 0) |
pbhatnagar3 | 0:8b08136c5edd | 66 | i = dimX; |
pbhatnagar3 | 0:8b08136c5edd | 67 | } |
pbhatnagar3 | 0:8b08136c5edd | 68 | // moving the snake forward |
pbhatnagar3 | 0:8b08136c5edd | 69 | else if (joy == 0x8){ |
pbhatnagar3 | 0:8b08136c5edd | 70 | i = (i + cst)%dimX; |
pbhatnagar3 | 0:8b08136c5edd | 71 | } |
pbhatnagar3 | 0:8b08136c5edd | 72 | // moving the snake up |
pbhatnagar3 | 0:8b08136c5edd | 73 | else if (joy == 0x1){ |
pbhatnagar3 | 0:8b08136c5edd | 74 | j = j - cst; |
pbhatnagar3 | 0:8b08136c5edd | 75 | if (j < 0) |
pbhatnagar3 | 0:8b08136c5edd | 76 | j = dimY; |
pbhatnagar3 | 0:8b08136c5edd | 77 | } |
pbhatnagar3 | 0:8b08136c5edd | 78 | // moving the snake down |
pbhatnagar3 | 0:8b08136c5edd | 79 | else if (joy == 0x2){ |
pbhatnagar3 | 0:8b08136c5edd | 80 | j = (j + cst)%dimY; |
pbhatnagar3 | 0:8b08136c5edd | 81 | } |
pbhatnagar3 | 0:8b08136c5edd | 82 | } |
pbhatnagar3 | 0:8b08136c5edd | 83 | // LOGIC FOR THE FIREBALL |
pbhatnagar3 | 0:8b08136c5edd | 84 | if (flag >= 1){ |
pbhatnagar3 | 0:8b08136c5edd | 85 | x = (x + MMA.x() * 32.0)/1.5; |
pbhatnagar3 | 0:8b08136c5edd | 86 | y = (y -(MMA.y() * 16.0))/1.5; |
pbhatnagar3 | 0:8b08136c5edd | 87 | lcd.fillcircle(x+63, y+15, 3, 1); //draw bubble |
pbhatnagar3 | 0:8b08136c5edd | 88 | //lcd.circle(63, 15, 8, 1); |
pbhatnagar3 | 0:8b08136c5edd | 89 | wait(.1); //time delay |
pbhatnagar3 | 0:8b08136c5edd | 90 | pc.printf(" score %d", score); |
pbhatnagar3 | 0:8b08136c5edd | 91 | flag -=1; |
pbhatnagar3 | 0:8b08136c5edd | 92 | if (abs(x + 63 - p1) <=cst && abs(y + 15 - p2) <=cst+1){ |
pbhatnagar3 | 0:8b08136c5edd | 93 | score +=15; |
pbhatnagar3 | 0:8b08136c5edd | 94 | flag = -1; |
pbhatnagar3 | 0:8b08136c5edd | 95 | } |
pbhatnagar3 | 0:8b08136c5edd | 96 | if (flag < 0) |
pbhatnagar3 | 0:8b08136c5edd | 97 | flag = 0; |
pbhatnagar3 | 0:8b08136c5edd | 98 | bonus = 0; |
pbhatnagar3 | 0:8b08136c5edd | 99 | lcd.fillcircle(x+63, y+15, 3, 0); //erase bubble |
pbhatnagar3 | 0:8b08136c5edd | 100 | } |
pbhatnagar3 | 0:8b08136c5edd | 101 | } |
pbhatnagar3 | 0:8b08136c5edd | 102 | if (flag == 0){ |
pbhatnagar3 | 0:8b08136c5edd | 103 | //printing the snake, food and score on the LCD |
pbhatnagar3 | 0:8b08136c5edd | 104 | lcd.cls(); |
pbhatnagar3 | 0:8b08136c5edd | 105 | lcd.locate(i,j); |
pbhatnagar3 | 0:8b08136c5edd | 106 | lcd.printf("~+"); |
pbhatnagar3 | 0:8b08136c5edd | 107 | lcd.locate(0, 22); |
pbhatnagar3 | 0:8b08136c5edd | 108 | lcd.printf("%d", score); |
pbhatnagar3 | 0:8b08136c5edd | 109 | //pc.printf("the dot is at %d %d\n \r", p1, p2); |
pbhatnagar3 | 0:8b08136c5edd | 110 | pc.printf("snake location %d %d\n \r", i, j); |
pbhatnagar3 | 0:8b08136c5edd | 111 | lcd.locate(p1, p2); |
pbhatnagar3 | 0:8b08136c5edd | 112 | lcd.printf("."); |
pbhatnagar3 | 0:8b08136c5edd | 113 | // CONDITION FOR CHECKING THE SNAKE FOOD COLLISION |
pbhatnagar3 | 0:8b08136c5edd | 114 | if (abs(i + 8 - p1) <=cst && abs(j - p2) <=cst+1){ |
pbhatnagar3 | 0:8b08136c5edd | 115 | //pc.printf("the snake is at %d %d\n \r", i, j); |
pbhatnagar3 | 0:8b08136c5edd | 116 | //pc.printf("the dot is at %d %d\n \r", p1, p2); |
pbhatnagar3 | 0:8b08136c5edd | 117 | score = score + 1; |
pbhatnagar3 | 0:8b08136c5edd | 118 | //finding a new random location for food |
pbhatnagar3 | 0:8b08136c5edd | 119 | r = rand(); |
pbhatnagar3 | 0:8b08136c5edd | 120 | p1 = r%fDimX; |
pbhatnagar3 | 0:8b08136c5edd | 121 | p2 = r%fDimY; |
pbhatnagar3 | 0:8b08136c5edd | 122 | //boundary checking |
pbhatnagar3 | 0:8b08136c5edd | 123 | if (p1 < 10) |
pbhatnagar3 | 0:8b08136c5edd | 124 | p1 = 10; |
pbhatnagar3 | 0:8b08136c5edd | 125 | if (p2 < 10) |
pbhatnagar3 | 0:8b08136c5edd | 126 | p2 = 10; |
pbhatnagar3 | 0:8b08136c5edd | 127 | lcd.printf("."); |
pbhatnagar3 | 0:8b08136c5edd | 128 | } |
pbhatnagar3 | 0:8b08136c5edd | 129 | wait(0.3); |
pbhatnagar3 | 0:8b08136c5edd | 130 | } |
pbhatnagar3 | 0:8b08136c5edd | 131 | } |
pbhatnagar3 | 0:8b08136c5edd | 132 | } |