Tetris

Dependencies:   microbit

Committer:
bvnoake
Date:
Mon Feb 11 12:16:39 2019 +0000
Revision:
0:9188cbdecda0
Child:
1:e63441aa47d6
Tetris;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bvnoake 0:9188cbdecda0 1 //Including the microbit library
bvnoake 0:9188cbdecda0 2 #include "MicroBit.h"
bvnoake 0:9188cbdecda0 3
bvnoake 0:9188cbdecda0 4 //using vectors throughout code
bvnoake 0:9188cbdecda0 5 #include <vector>
bvnoake 0:9188cbdecda0 6
bvnoake 0:9188cbdecda0 7 //defining points system
bvnoake 0:9188cbdecda0 8 int points = 0;
bvnoake 0:9188cbdecda0 9 //defining co-ordinates used
bvnoake 0:9188cbdecda0 10 int obsx = 2;
bvnoake 0:9188cbdecda0 11 int obsx2;
bvnoake 0:9188cbdecda0 12 int obsy = 0;
bvnoake 0:9188cbdecda0 13 int obsy2;
bvnoake 0:9188cbdecda0 14
bvnoake 0:9188cbdecda0 15 //creates vectors for the x and y coordinates
bvnoake 0:9188cbdecda0 16 vector <int> x;
bvnoake 0:9188cbdecda0 17 vector <int> y;
bvnoake 0:9188cbdecda0 18
bvnoake 0:9188cbdecda0 19
bvnoake 0:9188cbdecda0 20 MicroBit uBit;
bvnoake 0:9188cbdecda0 21 //MicroBitImage game(5,5);
bvnoake 0:9188cbdecda0 22
bvnoake 0:9188cbdecda0 23
bvnoake 0:9188cbdecda0 24
bvnoake 0:9188cbdecda0 25 //function for when buttons pressed
bvnoake 0:9188cbdecda0 26 void onButton(MicroBitEvent e)
bvnoake 0:9188cbdecda0 27 { //if button a pressed
bvnoake 0:9188cbdecda0 28 if (e.source == MICROBIT_ID_BUTTON_A) {
bvnoake 0:9188cbdecda0 29 //game.shiftLeft(1);
bvnoake 0:9188cbdecda0 30
bvnoake 0:9188cbdecda0 31 //goes through vector depending on size of x vector looking at values and moving over one space left
bvnoake 0:9188cbdecda0 32 for (int i = 0; i < x.size(); i++)
bvnoake 0:9188cbdecda0 33 {
bvnoake 0:9188cbdecda0 34 uBit.display.image.setPixelValue(x[i]- 1,obsy, 211);
bvnoake 0:9188cbdecda0 35 uBit.display.image.setPixelValue(x[i],obsy, 0);
bvnoake 0:9188cbdecda0 36 }
bvnoake 0:9188cbdecda0 37 //goes through vector depending on size of y vector looking at values and moving over one space right
bvnoake 0:9188cbdecda0 38 for (int j = 0; j < y.size(); j++)
bvnoake 0:9188cbdecda0 39 {
bvnoake 0:9188cbdecda0 40 uBit.display.image.setPixelValue(obsx - 1,y[j], 255);
bvnoake 0:9188cbdecda0 41 uBit.display.image.setPixelValue(obsx,y[j], 0);
bvnoake 0:9188cbdecda0 42 }
bvnoake 0:9188cbdecda0 43
bvnoake 0:9188cbdecda0 44
bvnoake 0:9188cbdecda0 45
bvnoake 0:9188cbdecda0 46
bvnoake 0:9188cbdecda0 47 /*
bvnoake 0:9188cbdecda0 48 uBit.display.image.setPixelValue(obsx = obsx - 1,obsy, 211);
bvnoake 0:9188cbdecda0 49
bvnoake 0:9188cbdecda0 50
bvnoake 0:9188cbdecda0 51 if (obsy > 0)
bvnoake 0:9188cbdecda0 52 {
bvnoake 0:9188cbdecda0 53 for (int i = 0; i < x.size(); i++)
bvnoake 0:9188cbdecda0 54 {
bvnoake 0:9188cbdecda0 55 uBit.display.image.setPixelValue(x[i] = x[i] - 1,obsy, 211);
bvnoake 0:9188cbdecda0 56
bvnoake 0:9188cbdecda0 57
bvnoake 0:9188cbdecda0 58 }
bvnoake 0:9188cbdecda0 59 if (y.size() > 0)
bvnoake 0:9188cbdecda0 60 {
bvnoake 0:9188cbdecda0 61 uBit.display.image.setPixelValue(obsx = obsx - 1,obsy+ 1, 211);
bvnoake 0:9188cbdecda0 62 }
bvnoake 0:9188cbdecda0 63
bvnoake 0:9188cbdecda0 64 }
bvnoake 0:9188cbdecda0 65
bvnoake 0:9188cbdecda0 66
bvnoake 0:9188cbdecda0 67
bvnoake 0:9188cbdecda0 68 if (obsy > 0)
bvnoake 0:9188cbdecda0 69 {
bvnoake 0:9188cbdecda0 70 //uBit.display.image.setPixelValue(obsx, obsy - 1, 0);
bvnoake 0:9188cbdecda0 71
bvnoake 0:9188cbdecda0 72
bvnoake 0:9188cbdecda0 73
bvnoake 0:9188cbdecda0 74 uBit.display.image.setPixelValue(obsx + 1, obsy, 0);
bvnoake 0:9188cbdecda0 75 }
bvnoake 0:9188cbdecda0 76
bvnoake 0:9188cbdecda0 77
bvnoake 0:9188cbdecda0 78 if (obsx > 0 && obsy > 0)
bvnoake 0:9188cbdecda0 79 {
bvnoake 0:9188cbdecda0 80
bvnoake 0:9188cbdecda0 81
bvnoake 0:9188cbdecda0 82 uBit.display.image.setPixelValue(obsx = obsx - 1, obsy = obsy - 1, 0);
bvnoake 0:9188cbdecda0 83 uBit.display.image.setPixelValue(obsx = obsx - 1, obsy = obsy + 1, 0);
bvnoake 0:9188cbdecda0 84
bvnoake 0:9188cbdecda0 85
bvnoake 0:9188cbdecda0 86
bvnoake 0:9188cbdecda0 87 }
bvnoake 0:9188cbdecda0 88 */
bvnoake 0:9188cbdecda0 89
bvnoake 0:9188cbdecda0 90
bvnoake 0:9188cbdecda0 91
bvnoake 0:9188cbdecda0 92 }
bvnoake 0:9188cbdecda0 93 if (e.source == MICROBIT_ID_BUTTON_B) {
bvnoake 0:9188cbdecda0 94 uBit.display.scroll("right");
bvnoake 0:9188cbdecda0 95
bvnoake 0:9188cbdecda0 96 }
bvnoake 0:9188cbdecda0 97
bvnoake 0:9188cbdecda0 98 if (e.source == MICROBIT_ID_BUTTON_AB) {
bvnoake 0:9188cbdecda0 99 uBit.display.scroll("BOTH");
bvnoake 0:9188cbdecda0 100 //Rotation
bvnoake 0:9188cbdecda0 101 }
bvnoake 0:9188cbdecda0 102 }
bvnoake 0:9188cbdecda0 103
bvnoake 0:9188cbdecda0 104
bvnoake 0:9188cbdecda0 105
bvnoake 0:9188cbdecda0 106 //main game function
bvnoake 0:9188cbdecda0 107 void game_start()
bvnoake 0:9188cbdecda0 108 {
bvnoake 0:9188cbdecda0 109 //displays pixel in starting place
bvnoake 0:9188cbdecda0 110 uBit.display.image.setPixelValue(obsx,obsy, 211);
bvnoake 0:9188cbdecda0 111 //sets a number for how many pixels i want shape to have
bvnoake 0:9188cbdecda0 112 for (int num = 0; num < 2; num++)
bvnoake 0:9188cbdecda0 113 {
bvnoake 0:9188cbdecda0 114 //generates random number so i can have a random shape
bvnoake 0:9188cbdecda0 115 int option = uBit.random(3);
bvnoake 0:9188cbdecda0 116 //goes through options either placing x coordinate left right or placing pixel underneath
bvnoake 0:9188cbdecda0 117 if (option == 0)
bvnoake 0:9188cbdecda0 118 //uBit.display.image.setPixelValue(obsx + 1,obsy, 211);
bvnoake 0:9188cbdecda0 119 x.push_back(obsx + 1);
bvnoake 0:9188cbdecda0 120
bvnoake 0:9188cbdecda0 121 if (option == 1)
bvnoake 0:9188cbdecda0 122 //uBit.display.image.setPixelValue(obsx - 1,obsy, 211);
bvnoake 0:9188cbdecda0 123 x.push_back(obsx - 1);
bvnoake 0:9188cbdecda0 124
bvnoake 0:9188cbdecda0 125 if (option == 2)
bvnoake 0:9188cbdecda0 126 //uBit.display.image.setPixelValue(obsx,obsy + 1, 211);
bvnoake 0:9188cbdecda0 127 y.push_back(1);
bvnoake 0:9188cbdecda0 128 }
bvnoake 0:9188cbdecda0 129
bvnoake 0:9188cbdecda0 130
bvnoake 0:9188cbdecda0 131
bvnoake 0:9188cbdecda0 132
bvnoake 0:9188cbdecda0 133
bvnoake 0:9188cbdecda0 134 /* loop for the size of the y axis on led
bvnoake 0:9188cbdecda0 135 matrix adding one each time so that the pixel
bvnoake 0:9188cbdecda0 136 can move down the screen one line at a time */
bvnoake 0:9188cbdecda0 137 for (obsy = 0; obsy < 5; obsy++){
bvnoake 0:9188cbdecda0 138 //uBit.display.image.paste(game);
bvnoake 0:9188cbdecda0 139 uBit.display.image.setPixelValue(obsx,obsy, 211);
bvnoake 0:9188cbdecda0 140
bvnoake 0:9188cbdecda0 141 // using vector goes through to find x values in order to move them down one palce line by line
bvnoake 0:9188cbdecda0 142
bvnoake 0:9188cbdecda0 143 if (obsx > 0)
bvnoake 0:9188cbdecda0 144 {
bvnoake 0:9188cbdecda0 145 for (int i = 0; i < x.size(); i++)
bvnoake 0:9188cbdecda0 146 {
bvnoake 0:9188cbdecda0 147 uBit.display.image.setPixelValue(x[i],obsy, 211);
bvnoake 0:9188cbdecda0 148
bvnoake 0:9188cbdecda0 149
bvnoake 0:9188cbdecda0 150 }
bvnoake 0:9188cbdecda0 151 if (y.size() > 0)
bvnoake 0:9188cbdecda0 152 {
bvnoake 0:9188cbdecda0 153 uBit.display.image.setPixelValue(obsx,obsy - 1, 211);
bvnoake 0:9188cbdecda0 154 }
bvnoake 0:9188cbdecda0 155
bvnoake 0:9188cbdecda0 156 }
bvnoake 0:9188cbdecda0 157
bvnoake 0:9188cbdecda0 158
bvnoake 0:9188cbdecda0 159
bvnoake 0:9188cbdecda0 160
bvnoake 0:9188cbdecda0 161
bvnoake 0:9188cbdecda0 162
bvnoake 0:9188cbdecda0 163
bvnoake 0:9188cbdecda0 164
bvnoake 0:9188cbdecda0 165 if (obsy > 0)
bvnoake 0:9188cbdecda0 166 {
bvnoake 0:9188cbdecda0 167 //uBit.display.image.setPixelValue(obsx, obsy - 1, 0);
bvnoake 0:9188cbdecda0 168
bvnoake 0:9188cbdecda0 169
bvnoake 0:9188cbdecda0 170 if (y.size() > 0)
bvnoake 0:9188cbdecda0 171 {
bvnoake 0:9188cbdecda0 172 uBit.display.image.setPixelValue(obsx, obsy - 2, 0);
bvnoake 0:9188cbdecda0 173 }
bvnoake 0:9188cbdecda0 174 else
bvnoake 0:9188cbdecda0 175 {
bvnoake 0:9188cbdecda0 176 uBit.display.image.setPixelValue(obsx, obsy - 1, 0);
bvnoake 0:9188cbdecda0 177 }
bvnoake 0:9188cbdecda0 178
bvnoake 0:9188cbdecda0 179
bvnoake 0:9188cbdecda0 180
bvnoake 0:9188cbdecda0 181
bvnoake 0:9188cbdecda0 182
bvnoake 0:9188cbdecda0 183
bvnoake 0:9188cbdecda0 184 }
bvnoake 0:9188cbdecda0 185 if (obsx > 0 && obsy > 0)
bvnoake 0:9188cbdecda0 186 {
bvnoake 0:9188cbdecda0 187
bvnoake 0:9188cbdecda0 188 if (y.size() > 0)
bvnoake 0:9188cbdecda0 189 {
bvnoake 0:9188cbdecda0 190 uBit.display.image.setPixelValue(obsx - 1, obsy - 2, 0);
bvnoake 0:9188cbdecda0 191 uBit.display.image.setPixelValue(obsx + 1, obsy - 2, 0);
bvnoake 0:9188cbdecda0 192 }
bvnoake 0:9188cbdecda0 193 else
bvnoake 0:9188cbdecda0 194 {
bvnoake 0:9188cbdecda0 195 uBit.display.image.setPixelValue(obsx - 1, obsy - 1, 0);
bvnoake 0:9188cbdecda0 196 uBit.display.image.setPixelValue(obsx + 1, obsy - 1, 0);
bvnoake 0:9188cbdecda0 197 }
bvnoake 0:9188cbdecda0 198
bvnoake 0:9188cbdecda0 199
bvnoake 0:9188cbdecda0 200
bvnoake 0:9188cbdecda0 201
bvnoake 0:9188cbdecda0 202
bvnoake 0:9188cbdecda0 203
bvnoake 0:9188cbdecda0 204
bvnoake 0:9188cbdecda0 205
bvnoake 0:9188cbdecda0 206
bvnoake 0:9188cbdecda0 207 }
bvnoake 0:9188cbdecda0 208 //so that as the score gets higher the speed gets faster
bvnoake 0:9188cbdecda0 209 if (points > 300)
bvnoake 0:9188cbdecda0 210 {
bvnoake 0:9188cbdecda0 211 uBit.sleep(400);
bvnoake 0:9188cbdecda0 212 }else{
bvnoake 0:9188cbdecda0 213 uBit.sleep(800);
bvnoake 0:9188cbdecda0 214 }
bvnoake 0:9188cbdecda0 215
bvnoake 0:9188cbdecda0 216
bvnoake 0:9188cbdecda0 217 }
bvnoake 0:9188cbdecda0 218 //clearing vectors so it can be random
bvnoake 0:9188cbdecda0 219 x.clear();
bvnoake 0:9188cbdecda0 220 y.clear();
bvnoake 0:9188cbdecda0 221 //calls function again
bvnoake 0:9188cbdecda0 222 game_start();
bvnoake 0:9188cbdecda0 223
bvnoake 0:9188cbdecda0 224 }
bvnoake 0:9188cbdecda0 225
bvnoake 0:9188cbdecda0 226 int main()
bvnoake 0:9188cbdecda0 227 {
bvnoake 0:9188cbdecda0 228 // Initialise the micro:bit runtime.
bvnoake 0:9188cbdecda0 229 uBit.init();
bvnoake 0:9188cbdecda0 230 //To connect with the buttons so it's acknowledged when one is pressed
bvnoake 0:9188cbdecda0 231 uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButton);
bvnoake 0:9188cbdecda0 232 uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButton);
bvnoake 0:9188cbdecda0 233 uBit.messageBus.listen(MICROBIT_ID_BUTTON_AB, MICROBIT_BUTTON_EVT_CLICK, onButton);
bvnoake 0:9188cbdecda0 234
bvnoake 0:9188cbdecda0 235 //so game can start
bvnoake 0:9188cbdecda0 236 game_start();
bvnoake 0:9188cbdecda0 237
bvnoake 0:9188cbdecda0 238
bvnoake 0:9188cbdecda0 239
bvnoake 0:9188cbdecda0 240
bvnoake 0:9188cbdecda0 241
bvnoake 0:9188cbdecda0 242
bvnoake 0:9188cbdecda0 243
bvnoake 0:9188cbdecda0 244
bvnoake 0:9188cbdecda0 245
bvnoake 0:9188cbdecda0 246 // If main exits, there may still be other fibers running or
bvnoake 0:9188cbdecda0 247 // registered event handlers etc.
bvnoake 0:9188cbdecda0 248 // Simply release this fiber, which will mean we enter the
bvnoake 0:9188cbdecda0 249 // scheduler. Worse case, we then
bvnoake 0:9188cbdecda0 250 // sit in the idle task forever, in a power efficient sleep.
bvnoake 0:9188cbdecda0 251 release_fiber();
bvnoake 0:9188cbdecda0 252
bvnoake 0:9188cbdecda0 253 }