
Game doesn't work properly, but it's a 'form' of Tetris.
Main.cpp@1:7da5b36d5f50, 2016-04-28 (annotated)
- Committer:
- el14kb
- Date:
- Thu Apr 28 14:33:28 2016 +0000
- Revision:
- 1:7da5b36d5f50
- Child:
- 2:dc75e15229ee
before inverse
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el14kb | 1:7da5b36d5f50 | 1 | #include "mbed.h" |
el14kb | 1:7da5b36d5f50 | 2 | #include "N5110.h" |
el14kb | 1:7da5b36d5f50 | 3 | |
el14kb | 1:7da5b36d5f50 | 4 | //Tetris by Kristian Bridges |
el14kb | 1:7da5b36d5f50 | 5 | |
el14kb | 1:7da5b36d5f50 | 6 | // VCC, SCE, RST, D/C, MOSI, SCLK, LED |
el14kb | 1:7da5b36d5f50 | 7 | N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); |
el14kb | 1:7da5b36d5f50 | 8 | |
el14kb | 1:7da5b36d5f50 | 9 | AnalogIn potX(PTB2); |
el14kb | 1:7da5b36d5f50 | 10 | AnalogIn potY(PTB3); |
el14kb | 1:7da5b36d5f50 | 11 | DigitalIn joyButton(PTB11); |
el14kb | 1:7da5b36d5f50 | 12 | |
el14kb | 1:7da5b36d5f50 | 13 | #define tolerance 0.05f |
el14kb | 1:7da5b36d5f50 | 14 | #define down_tolerance -0.05f |
el14kb | 1:7da5b36d5f50 | 15 | |
el14kb | 1:7da5b36d5f50 | 16 | Ticker checkJoy; |
el14kb | 1:7da5b36d5f50 | 17 | |
el14kb | 1:7da5b36d5f50 | 18 | enum direction_t { |
el14kb | 1:7da5b36d5f50 | 19 | UP, //0 |
el14kb | 1:7da5b36d5f50 | 20 | DOWN, //1 |
el14kb | 1:7da5b36d5f50 | 21 | LEFT, //2 |
el14kb | 1:7da5b36d5f50 | 22 | RIGHT, //3 |
el14kb | 1:7da5b36d5f50 | 23 | CENTRE, //4 |
el14kb | 1:7da5b36d5f50 | 24 | UNKNOWN //5 |
el14kb | 1:7da5b36d5f50 | 25 | }; |
el14kb | 1:7da5b36d5f50 | 26 | |
el14kb | 1:7da5b36d5f50 | 27 | typedef struct { |
el14kb | 1:7da5b36d5f50 | 28 | float initial_x,initial_y; |
el14kb | 1:7da5b36d5f50 | 29 | float current_x,current_y; |
el14kb | 1:7da5b36d5f50 | 30 | int button; |
el14kb | 1:7da5b36d5f50 | 31 | direction_t direction; |
el14kb | 1:7da5b36d5f50 | 32 | } joystick; |
el14kb | 1:7da5b36d5f50 | 33 | |
el14kb | 1:7da5b36d5f50 | 34 | joystick joy; |
el14kb | 1:7da5b36d5f50 | 35 | |
el14kb | 1:7da5b36d5f50 | 36 | volatile int g_bank_index = 0; |
el14kb | 1:7da5b36d5f50 | 37 | volatile int index1 = g_bank_index; |
el14kb | 1:7da5b36d5f50 | 38 | volatile int g_joyFlag = 0; |
el14kb | 1:7da5b36d5f50 | 39 | char buffer[14]; |
el14kb | 1:7da5b36d5f50 | 40 | char buffer2[14]; |
el14kb | 1:7da5b36d5f50 | 41 | int xlcd; |
el14kb | 1:7da5b36d5f50 | 42 | int ylcd; |
el14kb | 1:7da5b36d5f50 | 43 | |
el14kb | 1:7da5b36d5f50 | 44 | void menu(); |
el14kb | 1:7da5b36d5f50 | 45 | void joyCal(); |
el14kb | 1:7da5b36d5f50 | 46 | void joyUpdate(); |
el14kb | 1:7da5b36d5f50 | 47 | void selection(); |
el14kb | 1:7da5b36d5f50 | 48 | void game(); |
el14kb | 1:7da5b36d5f50 | 49 | void achievements(); |
el14kb | 1:7da5b36d5f50 | 50 | void options(); |
el14kb | 1:7da5b36d5f50 | 51 | |
el14kb | 1:7da5b36d5f50 | 52 | int main() |
el14kb | 1:7da5b36d5f50 | 53 | { |
el14kb | 1:7da5b36d5f50 | 54 | lcd.init(); |
el14kb | 1:7da5b36d5f50 | 55 | lcd.clear(); |
el14kb | 1:7da5b36d5f50 | 56 | lcd.printString("Tetris",24,1); |
el14kb | 1:7da5b36d5f50 | 57 | lcd.printString("by",36,2); |
el14kb | 1:7da5b36d5f50 | 58 | lcd.printString("K.Bridges",15,3); |
el14kb | 1:7da5b36d5f50 | 59 | lcd.printString("SID: 200859491",0,5); |
el14kb | 1:7da5b36d5f50 | 60 | wait(2); |
el14kb | 1:7da5b36d5f50 | 61 | lcd.clear(); |
el14kb | 1:7da5b36d5f50 | 62 | joyCal(); |
el14kb | 1:7da5b36d5f50 | 63 | checkJoy.attach(&joyUpdate,0.01); |
el14kb | 1:7da5b36d5f50 | 64 | menu(); |
el14kb | 1:7da5b36d5f50 | 65 | |
el14kb | 1:7da5b36d5f50 | 66 | } |
el14kb | 1:7da5b36d5f50 | 67 | |
el14kb | 1:7da5b36d5f50 | 68 | void menu() |
el14kb | 1:7da5b36d5f50 | 69 | { |
el14kb | 1:7da5b36d5f50 | 70 | |
el14kb | 1:7da5b36d5f50 | 71 | int x,y; |
el14kb | 1:7da5b36d5f50 | 72 | |
el14kb | 1:7da5b36d5f50 | 73 | lcd.printString("New Game",18,1); |
el14kb | 1:7da5b36d5f50 | 74 | lcd.printString("Achievements",6,2); |
el14kb | 1:7da5b36d5f50 | 75 | lcd.printString("Options",21,3); |
el14kb | 1:7da5b36d5f50 | 76 | |
el14kb | 1:7da5b36d5f50 | 77 | while(joy.button == 0) { |
el14kb | 1:7da5b36d5f50 | 78 | if(g_joyFlag) { |
el14kb | 1:7da5b36d5f50 | 79 | g_joyFlag = 0; |
el14kb | 1:7da5b36d5f50 | 80 | |
el14kb | 1:7da5b36d5f50 | 81 | switch(joy.direction) { |
el14kb | 1:7da5b36d5f50 | 82 | case UP: |
el14kb | 1:7da5b36d5f50 | 83 | if(g_bank_index == 0) { |
el14kb | 1:7da5b36d5f50 | 84 | g_bank_index = 2; |
el14kb | 1:7da5b36d5f50 | 85 | break; |
el14kb | 1:7da5b36d5f50 | 86 | } else |
el14kb | 1:7da5b36d5f50 | 87 | g_bank_index--; |
el14kb | 1:7da5b36d5f50 | 88 | break; |
el14kb | 1:7da5b36d5f50 | 89 | case DOWN: |
el14kb | 1:7da5b36d5f50 | 90 | if(g_bank_index == 2) { |
el14kb | 1:7da5b36d5f50 | 91 | g_bank_index = 0; |
el14kb | 1:7da5b36d5f50 | 92 | } else |
el14kb | 1:7da5b36d5f50 | 93 | g_bank_index++; |
el14kb | 1:7da5b36d5f50 | 94 | } |
el14kb | 1:7da5b36d5f50 | 95 | if(g_bank_index == 0) { |
el14kb | 1:7da5b36d5f50 | 96 | |
el14kb | 1:7da5b36d5f50 | 97 | lcd.clear(); |
el14kb | 1:7da5b36d5f50 | 98 | lcd.printString("New Game",18,1); |
el14kb | 1:7da5b36d5f50 | 99 | lcd.printString("Achievements",6,2); |
el14kb | 1:7da5b36d5f50 | 100 | lcd.printString("Options",21,3); |
el14kb | 1:7da5b36d5f50 | 101 | |
el14kb | 1:7da5b36d5f50 | 102 | for(x=0; x<WIDTH; x++) { |
el14kb | 1:7da5b36d5f50 | 103 | for(y=7; y<15; y++) { |
el14kb | 1:7da5b36d5f50 | 104 | if(lcd.getPixel(x,y)) { |
el14kb | 1:7da5b36d5f50 | 105 | lcd.clearPixel(x,y); |
el14kb | 1:7da5b36d5f50 | 106 | } else { |
el14kb | 1:7da5b36d5f50 | 107 | lcd.setPixel(x,y); |
el14kb | 1:7da5b36d5f50 | 108 | } |
el14kb | 1:7da5b36d5f50 | 109 | } |
el14kb | 1:7da5b36d5f50 | 110 | } |
el14kb | 1:7da5b36d5f50 | 111 | } |
el14kb | 1:7da5b36d5f50 | 112 | if(g_bank_index == 1) { |
el14kb | 1:7da5b36d5f50 | 113 | |
el14kb | 1:7da5b36d5f50 | 114 | lcd.clear(); |
el14kb | 1:7da5b36d5f50 | 115 | lcd.printString("New Game",18,1); |
el14kb | 1:7da5b36d5f50 | 116 | lcd.printString("Achievements",6,2); |
el14kb | 1:7da5b36d5f50 | 117 | lcd.printString("Options",21,3); |
el14kb | 1:7da5b36d5f50 | 118 | |
el14kb | 1:7da5b36d5f50 | 119 | for(x=0; x<WIDTH; x++) { |
el14kb | 1:7da5b36d5f50 | 120 | for(y=14; y<22; y++) { |
el14kb | 1:7da5b36d5f50 | 121 | if(lcd.getPixel(x,y)) { |
el14kb | 1:7da5b36d5f50 | 122 | lcd.clearPixel(x,y); |
el14kb | 1:7da5b36d5f50 | 123 | } else { |
el14kb | 1:7da5b36d5f50 | 124 | lcd.setPixel(x,y); |
el14kb | 1:7da5b36d5f50 | 125 | } |
el14kb | 1:7da5b36d5f50 | 126 | } |
el14kb | 1:7da5b36d5f50 | 127 | } |
el14kb | 1:7da5b36d5f50 | 128 | } |
el14kb | 1:7da5b36d5f50 | 129 | if(g_bank_index == 2) { |
el14kb | 1:7da5b36d5f50 | 130 | |
el14kb | 1:7da5b36d5f50 | 131 | lcd.clear(); |
el14kb | 1:7da5b36d5f50 | 132 | lcd.printString("New Game",18,1); |
el14kb | 1:7da5b36d5f50 | 133 | lcd.printString("Achievements",6,2); |
el14kb | 1:7da5b36d5f50 | 134 | lcd.printString("Options",21,3); |
el14kb | 1:7da5b36d5f50 | 135 | |
el14kb | 1:7da5b36d5f50 | 136 | for(x=0; x<WIDTH; x++) { |
el14kb | 1:7da5b36d5f50 | 137 | for(y=21; y<29; y++) { |
el14kb | 1:7da5b36d5f50 | 138 | if(lcd.getPixel(x,y)) { |
el14kb | 1:7da5b36d5f50 | 139 | lcd.clearPixel(x,y); |
el14kb | 1:7da5b36d5f50 | 140 | } else { |
el14kb | 1:7da5b36d5f50 | 141 | lcd.setPixel(x,y); |
el14kb | 1:7da5b36d5f50 | 142 | } |
el14kb | 1:7da5b36d5f50 | 143 | } |
el14kb | 1:7da5b36d5f50 | 144 | } |
el14kb | 1:7da5b36d5f50 | 145 | } |
el14kb | 1:7da5b36d5f50 | 146 | lcd.refresh(); |
el14kb | 1:7da5b36d5f50 | 147 | } |
el14kb | 1:7da5b36d5f50 | 148 | sleep(); |
el14kb | 1:7da5b36d5f50 | 149 | }//end of while loop |
el14kb | 1:7da5b36d5f50 | 150 | |
el14kb | 1:7da5b36d5f50 | 151 | }//end of function |
el14kb | 1:7da5b36d5f50 | 152 | |
el14kb | 1:7da5b36d5f50 | 153 | void joyCal() |
el14kb | 1:7da5b36d5f50 | 154 | { |
el14kb | 1:7da5b36d5f50 | 155 | joy.initial_x = potX; |
el14kb | 1:7da5b36d5f50 | 156 | joy.initial_y = potY; |
el14kb | 1:7da5b36d5f50 | 157 | joyButton.mode(PullDown); |
el14kb | 1:7da5b36d5f50 | 158 | } |
el14kb | 1:7da5b36d5f50 | 159 | |
el14kb | 1:7da5b36d5f50 | 160 | void joyUpdate() |
el14kb | 1:7da5b36d5f50 | 161 | { |
el14kb | 1:7da5b36d5f50 | 162 | joy.current_x = potX - joy.initial_x; //current x-position |
el14kb | 1:7da5b36d5f50 | 163 | joy.current_y = potY - joy.initial_y; //current y-position |
el14kb | 1:7da5b36d5f50 | 164 | joy.button = joyButton; //current button state |
el14kb | 1:7da5b36d5f50 | 165 | |
el14kb | 1:7da5b36d5f50 | 166 | if((joy.current_y) > tolerance && fabs(joy.current_x) < tolerance) { //fabs returns an absolute value |
el14kb | 1:7da5b36d5f50 | 167 | joy.direction = UP; |
el14kb | 1:7da5b36d5f50 | 168 | } else if((joy.current_y) < down_tolerance && fabs(joy.current_x) < tolerance) { |
el14kb | 1:7da5b36d5f50 | 169 | joy.direction = DOWN; |
el14kb | 1:7da5b36d5f50 | 170 | } else if((joy.current_x) > tolerance && fabs(joy.current_y) < tolerance) { |
el14kb | 1:7da5b36d5f50 | 171 | joy.direction = LEFT; |
el14kb | 1:7da5b36d5f50 | 172 | } else if((joy.current_x) < tolerance && fabs(joy.current_y) < tolerance) { |
el14kb | 1:7da5b36d5f50 | 173 | joy.direction = RIGHT; |
el14kb | 1:7da5b36d5f50 | 174 | } else if(fabs(joy.current_x) < tolerance && fabs(joy.current_y) < tolerance) { |
el14kb | 1:7da5b36d5f50 | 175 | joy.direction = CENTRE; |
el14kb | 1:7da5b36d5f50 | 176 | } else |
el14kb | 1:7da5b36d5f50 | 177 | joy.direction = UNKNOWN; |
el14kb | 1:7da5b36d5f50 | 178 | g_joyFlag = 1; |
el14kb | 1:7da5b36d5f50 | 179 | } |
el14kb | 1:7da5b36d5f50 | 180 | |
el14kb | 1:7da5b36d5f50 | 181 | void selection() |
el14kb | 1:7da5b36d5f50 | 182 | { |
el14kb | 1:7da5b36d5f50 | 183 | if(g_bank_index == 0) { |
el14kb | 1:7da5b36d5f50 | 184 | game(); |
el14kb | 1:7da5b36d5f50 | 185 | } else if(g_bank_index == 1) { |
el14kb | 1:7da5b36d5f50 | 186 | achievements(); |
el14kb | 1:7da5b36d5f50 | 187 | } else if(g_bank_index == 2) { |
el14kb | 1:7da5b36d5f50 | 188 | options(); |
el14kb | 1:7da5b36d5f50 | 189 | } |
el14kb | 1:7da5b36d5f50 | 190 | } |
el14kb | 1:7da5b36d5f50 | 191 | |
el14kb | 1:7da5b36d5f50 | 192 | void game() |
el14kb | 1:7da5b36d5f50 | 193 | { |
el14kb | 1:7da5b36d5f50 | 194 | } |
el14kb | 1:7da5b36d5f50 | 195 | |
el14kb | 1:7da5b36d5f50 | 196 | void achievements() |
el14kb | 1:7da5b36d5f50 | 197 | { |
el14kb | 1:7da5b36d5f50 | 198 | } |
el14kb | 1:7da5b36d5f50 | 199 | |
el14kb | 1:7da5b36d5f50 | 200 | void options() |
el14kb | 1:7da5b36d5f50 | 201 | { |
el14kb | 1:7da5b36d5f50 | 202 | } |