Kahden pelaajan "Minibiljardi"
Dependencies: PokittoLib
main.cpp@0:89d0cb201659, 2018-10-10 (annotated)
- Committer:
- Pokitto
- Date:
- Wed Oct 10 08:00:57 2018 +0000
- Revision:
- 0:89d0cb201659
Alku
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Pokitto | 0:89d0cb201659 | 1 | #include "Pokitto.h" // Lisää Pokitto-kirjasto |
Pokitto | 0:89d0cb201659 | 2 | #include "GameObject.h" // Lisää GameObject -oliot |
Pokitto | 0:89d0cb201659 | 3 | |
Pokitto | 0:89d0cb201659 | 4 | Pokitto::Core mygame; // Luo Pokitto -peliolio (siis pelimoottori) |
Pokitto | 0:89d0cb201659 | 5 | |
Pokitto | 0:89d0cb201659 | 6 | #define MAX_PALLOT 7 // pallojen maksimimäärä |
Pokitto | 0:89d0cb201659 | 7 | |
Pokitto | 0:89d0cb201659 | 8 | GameObject pallot[MAX_PALLOT]; // Taulukko (array) palloja, eli monta palloa |
Pokitto | 0:89d0cb201659 | 9 | GameObject pelaaja; // Pelaaja-objekti (tähtäystä varten) |
Pokitto | 0:89d0cb201659 | 10 | GameObject laidat[4]; // Pöydän neljä laitaa |
Pokitto | 0:89d0cb201659 | 11 | GameObject taskut[4]; // Pöydän kulmataskut |
Pokitto | 0:89d0cb201659 | 12 | |
Pokitto | 0:89d0cb201659 | 13 | enum PeliTilanne { Aloitus, Tahtays, Lyonti, Voitto }; // Pelin eri tilat |
Pokitto | 0:89d0cb201659 | 14 | |
Pokitto | 0:89d0cb201659 | 15 | /** Pelin käyttämät globaalit (eli joka paikasta käytettävät) muuttujat **/ |
Pokitto | 0:89d0cb201659 | 16 | PeliTilanne pt = Aloitus; |
Pokitto | 0:89d0cb201659 | 17 | int pallotmukana = 7; // montako palloa on alussa mukana pelissä, saa olla korkeintaan sama kuin MAX_PALLOT |
Pokitto | 0:89d0cb201659 | 18 | int pelaaja1pisteet = 0; |
Pokitto | 0:89d0cb201659 | 19 | int pelaaja2pisteet = 0; |
Pokitto | 0:89d0cb201659 | 20 | int pelivuoro = 1; //kumman pelaajan vuoro |
Pokitto | 0:89d0cb201659 | 21 | |
Pokitto | 0:89d0cb201659 | 22 | // apufunktio, joka asettelee pelipallot alkupaikoilleen |
Pokitto | 0:89d0cb201659 | 23 | void aloitusPallot(){ |
Pokitto | 0:89d0cb201659 | 24 | pallot[0].x = -30; pallot[0].y = 0; pallot[0].active = true; pallot[0].visible = true; pallot[0].setColor(1); |
Pokitto | 0:89d0cb201659 | 25 | pallot[1].x = 10; pallot[1].y = 0; pallot[1].active = true; pallot[1].visible = true; pallot[1].setColor(7); |
Pokitto | 0:89d0cb201659 | 26 | pallot[2].x = 10; pallot[2].y = 10; pallot[2].active = true; pallot[2].visible = true; pallot[2].setColor(4); |
Pokitto | 0:89d0cb201659 | 27 | pallot[3].x = 10; pallot[3].y = -10; pallot[3].active = true; pallot[3].visible = true; pallot[3].setColor(4); |
Pokitto | 0:89d0cb201659 | 28 | pallot[4].x = 20; pallot[4].y = -10; pallot[4].active = true; pallot[4].visible = true; pallot[4].setColor(7); |
Pokitto | 0:89d0cb201659 | 29 | pallot[5].x = 20; pallot[5].y = 0; pallot[5].active = true; pallot[5].visible = true; pallot[5].setColor(4); |
Pokitto | 0:89d0cb201659 | 30 | pallot[6].x = 20; pallot[6].y = 10; pallot[6].active = true; pallot[6].visible = true; pallot[6].setColor(7); |
Pokitto | 0:89d0cb201659 | 31 | } |
Pokitto | 0:89d0cb201659 | 32 | |
Pokitto | 0:89d0cb201659 | 33 | /** MAIN on kohta josta KAIKKI C++ ohjelmat alkavat suorittamaan koodia **/ |
Pokitto | 0:89d0cb201659 | 34 | |
Pokitto | 0:89d0cb201659 | 35 | int main () { |
Pokitto | 0:89d0cb201659 | 36 | mygame.begin(); // Käynnistä Pokitton moottori (näyttö, näppäimet, jne) |
Pokitto | 0:89d0cb201659 | 37 | mygame.display.setFont(fontTiny); // Pikkuruinen fontti käyttöön |
Pokitto | 0:89d0cb201659 | 38 | mygame.display.bgcolor = 13; // Taustaväri tummanvihreäksi |
Pokitto | 0:89d0cb201659 | 39 | mygame.display.invisiblecolor = 13; // Tekstin taustaväri pois (eli läpinäkyväksi) |
Pokitto | 0:89d0cb201659 | 40 | |
Pokitto | 0:89d0cb201659 | 41 | /** OHJELMALOOPPI ... pyörii koko ohjelman elämän ajan, |
Pokitto | 0:89d0cb201659 | 42 | eli niin kauan, kun mygame.isRunning() antaa vastaukseksi tosi (true) **/ |
Pokitto | 0:89d0cb201659 | 43 | |
Pokitto | 0:89d0cb201659 | 44 | while (mygame.isRunning()) { |
Pokitto | 0:89d0cb201659 | 45 | |
Pokitto | 0:89d0cb201659 | 46 | // Piirrä pöydän reunat |
Pokitto | 0:89d0cb201659 | 47 | for (int i=0; i<4; i++) laidat[i].draw(); |
Pokitto | 0:89d0cb201659 | 48 | // Piirrä pöydän taskut |
Pokitto | 0:89d0cb201659 | 49 | for (int i=0; i<4; i++) taskut[i].draw(); |
Pokitto | 0:89d0cb201659 | 50 | // Laske pallojen törmäykset pöydän laitojen kanssa |
Pokitto | 0:89d0cb201659 | 51 | for (int i=0; i<pallotmukana; i++) { |
Pokitto | 0:89d0cb201659 | 52 | for (int j=0; j<4; j++) { |
Pokitto | 0:89d0cb201659 | 53 | if (pallot[i].checkCollision(laidat[j]) && pt != Aloitus) { |
Pokitto | 0:89d0cb201659 | 54 | pallot[i].doCollision(laidat[j]); |
Pokitto | 0:89d0cb201659 | 55 | } |
Pokitto | 0:89d0cb201659 | 56 | } |
Pokitto | 0:89d0cb201659 | 57 | } |
Pokitto | 0:89d0cb201659 | 58 | |
Pokitto | 0:89d0cb201659 | 59 | // laske pallojen törmäykset toisten pallojen kanssa |
Pokitto | 0:89d0cb201659 | 60 | for (int i=0; i<pallotmukana; i++) { |
Pokitto | 0:89d0cb201659 | 61 | for (int j=0; j<pallotmukana; j++) { |
Pokitto | 0:89d0cb201659 | 62 | if (i != j) { //älä katso pallon törmäystä itsensä kanssa !!! |
Pokitto | 0:89d0cb201659 | 63 | if (pallot[i].checkCollision(pallot[j]) && pt != Aloitus) { |
Pokitto | 0:89d0cb201659 | 64 | pallot[i].doCollision(pallot[j]); |
Pokitto | 0:89d0cb201659 | 65 | } |
Pokitto | 0:89d0cb201659 | 66 | } |
Pokitto | 0:89d0cb201659 | 67 | } |
Pokitto | 0:89d0cb201659 | 68 | } |
Pokitto | 0:89d0cb201659 | 69 | |
Pokitto | 0:89d0cb201659 | 70 | // laske pallojen törmäykset taskujen kanssa |
Pokitto | 0:89d0cb201659 | 71 | for (int i=0; i<pallotmukana; i++) { |
Pokitto | 0:89d0cb201659 | 72 | for (int j=0; j<4; j++) { |
Pokitto | 0:89d0cb201659 | 73 | if (pallot[i].checkCollision(taskut[j]) && pt != Aloitus) { |
Pokitto | 0:89d0cb201659 | 74 | // Pallo meni pussiin! |
Pokitto | 0:89d0cb201659 | 75 | pallot[i].remove(); // poista pallo kentältä |
Pokitto | 0:89d0cb201659 | 76 | if (pallot[i].color == 7) pelaaja1pisteet++; // punaisista palloista 1 piste pelaaja ykköselle |
Pokitto | 0:89d0cb201659 | 77 | if (pallot[i].color == 4) pelaaja2pisteet++; // keltaisista palloista 1 piste pelaaja kakkoselle |
Pokitto | 0:89d0cb201659 | 78 | if (pallot[i].color == 1) { |
Pokitto | 0:89d0cb201659 | 79 | // valkoinen pallo meni taskuun, vuorossa oleva pelaaja hävisi |
Pokitto | 0:89d0cb201659 | 80 | if (pelivuoro==1) { pelaaja1pisteet=0; pelaaja2pisteet = (pallotmukana-1)/2; } //pelaaja 2 voitti |
Pokitto | 0:89d0cb201659 | 81 | else { pelaaja1pisteet = (pallotmukana-1)/2; pelaaja2pisteet = 0;} //pelaaja 1 voitti |
Pokitto | 0:89d0cb201659 | 82 | } |
Pokitto | 0:89d0cb201659 | 83 | if (pelaaja1pisteet == (pallotmukana-1)/2 || pelaaja2pisteet == (pallotmukana-1)/2) pt = Voitto; |
Pokitto | 0:89d0cb201659 | 84 | } |
Pokitto | 0:89d0cb201659 | 85 | } |
Pokitto | 0:89d0cb201659 | 86 | } |
Pokitto | 0:89d0cb201659 | 87 | |
Pokitto | 0:89d0cb201659 | 88 | /** UPDATE looppi, jossa päivitetään näyttö pelitilanteen mukaan **/ |
Pokitto | 0:89d0cb201659 | 89 | if (mygame.update()) { |
Pokitto | 0:89d0cb201659 | 90 | int pallotseis = 0; // tämän avulla lasketaan moniko pallo on vielä liikkeessä |
Pokitto | 0:89d0cb201659 | 91 | // Piirrä pallot |
Pokitto | 0:89d0cb201659 | 92 | for (int i=0; i<pallotmukana; i++) pallot[i].draw(); |
Pokitto | 0:89d0cb201659 | 93 | // Palautetaan tekstiä varten valkoinen väri |
Pokitto | 0:89d0cb201659 | 94 | mygame.display.color = 1; |
Pokitto | 0:89d0cb201659 | 95 | switch (pt) { |
Pokitto | 0:89d0cb201659 | 96 | case Aloitus: |
Pokitto | 0:89d0cb201659 | 97 | /** case Aloitus ... Tässä pelitilassa asetetaan alkuarvot pelille **/ |
Pokitto | 0:89d0cb201659 | 98 | mygame.display.print(16,8,"Minibiljardi"); |
Pokitto | 0:89d0cb201659 | 99 | mygame.display.print(16,16,"Paina A"); |
Pokitto | 0:89d0cb201659 | 100 | |
Pokitto | 0:89d0cb201659 | 101 | // Nollataan pelitilanne |
Pokitto | 0:89d0cb201659 | 102 | pelaaja1pisteet = 0; |
Pokitto | 0:89d0cb201659 | 103 | pelaaja2pisteet = 0; |
Pokitto | 0:89d0cb201659 | 104 | pelivuoro = 1; |
Pokitto | 0:89d0cb201659 | 105 | |
Pokitto | 0:89d0cb201659 | 106 | // Laitetaan pelipallot aloituspaikoilleen |
Pokitto | 0:89d0cb201659 | 107 | aloitusPallot(); |
Pokitto | 0:89d0cb201659 | 108 | |
Pokitto | 0:89d0cb201659 | 109 | /** Pöytä **/ |
Pokitto | 0:89d0cb201659 | 110 | // Pöydän yläreuna paikalleen |
Pokitto | 0:89d0cb201659 | 111 | laidat[0].x = 0; laidat[0].y = -49; laidat[0].width = 110; laidat[0].height=20; |
Pokitto | 0:89d0cb201659 | 112 | laidat[0].setColor(5); |
Pokitto | 0:89d0cb201659 | 113 | // Pöydän alareuna paikalleen |
Pokitto | 0:89d0cb201659 | 114 | laidat[1].x = 0; laidat[1].y = 49; laidat[1].width = 110; laidat[1].height=20; |
Pokitto | 0:89d0cb201659 | 115 | laidat[1].setColor(5); |
Pokitto | 0:89d0cb201659 | 116 | // Pöydän vasen reuna paikalleen |
Pokitto | 0:89d0cb201659 | 117 | laidat[2].x = -59; laidat[2].y = 0; laidat[2].width = 20; laidat[2].height=88; |
Pokitto | 0:89d0cb201659 | 118 | laidat[2].setColor(5); |
Pokitto | 0:89d0cb201659 | 119 | // Pöydän oikea reuna paikalleen |
Pokitto | 0:89d0cb201659 | 120 | laidat[3].x = 59; laidat[3].y = 0; laidat[3].width = 20; laidat[3].height=88; |
Pokitto | 0:89d0cb201659 | 121 | laidat[3].setColor(5); |
Pokitto | 0:89d0cb201659 | 122 | // Kaikki pöydän reunat muutetaan kiinteiksi |
Pokitto | 0:89d0cb201659 | 123 | laidat[0].movable = laidat[1].movable = laidat[2].movable = laidat[3].movable = false; |
Pokitto | 0:89d0cb201659 | 124 | |
Pokitto | 0:89d0cb201659 | 125 | /** Taskut **/ |
Pokitto | 0:89d0cb201659 | 126 | // Vasen ylätasku paikalleen |
Pokitto | 0:89d0cb201659 | 127 | taskut[0].x = -59; taskut[0].y = -49; taskut[0].width = 30; taskut[0].height=30; |
Pokitto | 0:89d0cb201659 | 128 | taskut[0].setColor(0); |
Pokitto | 0:89d0cb201659 | 129 | // Oikea ylätasku paikalleen |
Pokitto | 0:89d0cb201659 | 130 | taskut[1].x = 59; taskut[1].y = -49; taskut[1].width = 30; taskut[1].height=30; |
Pokitto | 0:89d0cb201659 | 131 | taskut[1].setColor(0); |
Pokitto | 0:89d0cb201659 | 132 | // Oikea alatasku paikalleen |
Pokitto | 0:89d0cb201659 | 133 | taskut[2].x = 59; taskut[2].y = 49; taskut[2].width = 30; taskut[2].height=30; |
Pokitto | 0:89d0cb201659 | 134 | taskut[2].setColor(0); |
Pokitto | 0:89d0cb201659 | 135 | // Vasen alatasku paikalleen |
Pokitto | 0:89d0cb201659 | 136 | taskut[3].x = -59; taskut[3].y = 49; taskut[3].width = 30; taskut[3].height=30; |
Pokitto | 0:89d0cb201659 | 137 | taskut[3].setColor(0); |
Pokitto | 0:89d0cb201659 | 138 | // Kaikki taskut muutetaan kiinteiksi |
Pokitto | 0:89d0cb201659 | 139 | laidat[0].movable = taskut[1].movable = taskut[2].movable = taskut[3].movable = false; |
Pokitto | 0:89d0cb201659 | 140 | |
Pokitto | 0:89d0cb201659 | 141 | // Jos on painettu A, siirrytään peliin! |
Pokitto | 0:89d0cb201659 | 142 | if (mygame.buttons.released(BTN_A)) { |
Pokitto | 0:89d0cb201659 | 143 | pelaaja.x = pallot[0].x; pelaaja.y = pallot[0].y; |
Pokitto | 0:89d0cb201659 | 144 | pt = Tahtays; |
Pokitto | 0:89d0cb201659 | 145 | } |
Pokitto | 0:89d0cb201659 | 146 | break; |
Pokitto | 0:89d0cb201659 | 147 | case Tahtays: |
Pokitto | 0:89d0cb201659 | 148 | /** case Tähtäys ... Tässä pelitilassa asetetaan suunta ja voima valkoiselle pallolle **/ |
Pokitto | 0:89d0cb201659 | 149 | if (pelivuoro == 1) { |
Pokitto | 0:89d0cb201659 | 150 | mygame.display.color = 7; // punainen väri |
Pokitto | 0:89d0cb201659 | 151 | mygame.display.print(16,8,"Pelaaja 1 vuoro"); |
Pokitto | 0:89d0cb201659 | 152 | } else { |
Pokitto | 0:89d0cb201659 | 153 | mygame.display.color = 4; // keltainen väri |
Pokitto | 0:89d0cb201659 | 154 | mygame.display.print(16,8,"Pelaaja 2 vuoro"); |
Pokitto | 0:89d0cb201659 | 155 | } |
Pokitto | 0:89d0cb201659 | 156 | |
Pokitto | 0:89d0cb201659 | 157 | // piirrä tähtäysviiva pelaajan ja pallon välille |
Pokitto | 0:89d0cb201659 | 158 | mygame.display.setColor(1); // väri 1 = valkoinen |
Pokitto | 0:89d0cb201659 | 159 | mygame.display.drawLine(pelaaja.centerX,pelaaja.centerY,pallot[0].centerX,pallot[0].centerY); |
Pokitto | 0:89d0cb201659 | 160 | // tsekkaa näppäinpainallukset |
Pokitto | 0:89d0cb201659 | 161 | if (mygame.buttons.rightBtn()) pelaaja.moveX(1); |
Pokitto | 0:89d0cb201659 | 162 | if (mygame.buttons.leftBtn()) pelaaja.moveX(-1); |
Pokitto | 0:89d0cb201659 | 163 | if (mygame.buttons.upBtn()) pelaaja.moveY(-1); |
Pokitto | 0:89d0cb201659 | 164 | if (mygame.buttons.downBtn()) pelaaja.moveY(1); |
Pokitto | 0:89d0cb201659 | 165 | // jos painetaan A, lyönti lähtee |
Pokitto | 0:89d0cb201659 | 166 | if (mygame.buttons.released(BTN_A)) { |
Pokitto | 0:89d0cb201659 | 167 | // kopautetaan vauhtia valkoiselle nollapallolle (pelaaja) |
Pokitto | 0:89d0cb201659 | 168 | pallot[0].vx = (pelaaja.x - pallot[0].x) * pallot[0].acceleration; // lyönnin X voimakkuus |
Pokitto | 0:89d0cb201659 | 169 | pallot[0].vy = (pelaaja.y - pallot[0].y) * pallot[0].acceleration; // lyönnin Y voimakkuus |
Pokitto | 0:89d0cb201659 | 170 | pt = Lyonti; // siirry seuraavaan pelitilaan |
Pokitto | 0:89d0cb201659 | 171 | } |
Pokitto | 0:89d0cb201659 | 172 | break; |
Pokitto | 0:89d0cb201659 | 173 | case Lyonti: |
Pokitto | 0:89d0cb201659 | 174 | // jos kaikki pallot ovat pysähtynyt, siirry taas tähtäämään |
Pokitto | 0:89d0cb201659 | 175 | for (int i=0; i < pallotmukana; i++) { |
Pokitto | 0:89d0cb201659 | 176 | //jos pallo ei enää liiku tai on jo poistettu |
Pokitto | 0:89d0cb201659 | 177 | if (pallot[i].isMoving() == false || pallot[i].active == false) { |
Pokitto | 0:89d0cb201659 | 178 | pallotseis++; //lasketaan pysähtyneet yhteen |
Pokitto | 0:89d0cb201659 | 179 | } |
Pokitto | 0:89d0cb201659 | 180 | } |
Pokitto | 0:89d0cb201659 | 181 | if (pallotseis == pallotmukana) { |
Pokitto | 0:89d0cb201659 | 182 | // kaikki pallot ovat seis tai jo pussitettu, aloita taas tähtääminen |
Pokitto | 0:89d0cb201659 | 183 | pelaaja.x = pallot[0].x; pelaaja.y = pallot[0].y; |
Pokitto | 0:89d0cb201659 | 184 | if (pelivuoro == 1) pelivuoro = 2; |
Pokitto | 0:89d0cb201659 | 185 | else pelivuoro = 1; // vaihdetaan pelivuoroa |
Pokitto | 0:89d0cb201659 | 186 | pt = Tahtays; |
Pokitto | 0:89d0cb201659 | 187 | } |
Pokitto | 0:89d0cb201659 | 188 | break; |
Pokitto | 0:89d0cb201659 | 189 | case Voitto: |
Pokitto | 0:89d0cb201659 | 190 | /** case Voitto ... pelaaja 1 tai 2 voitti **/ |
Pokitto | 0:89d0cb201659 | 191 | if (pelaaja1pisteet > pelaaja2pisteet) { |
Pokitto | 0:89d0cb201659 | 192 | mygame.display.color = 7; // punainen väri |
Pokitto | 0:89d0cb201659 | 193 | mygame.display.print(16,8,"Pelaaja 1 VOITTI!"); |
Pokitto | 0:89d0cb201659 | 194 | } else { |
Pokitto | 0:89d0cb201659 | 195 | mygame.display.color = 4; // keltainen väri |
Pokitto | 0:89d0cb201659 | 196 | mygame.display.print(16,8,"Pelaaja 2 VOITTI!"); |
Pokitto | 0:89d0cb201659 | 197 | } |
Pokitto | 0:89d0cb201659 | 198 | mygame.display.color = 1; // valkoinen väri |
Pokitto | 0:89d0cb201659 | 199 | mygame.display.print(16,16,"Paina A"); |
Pokitto | 0:89d0cb201659 | 200 | // jos painetaan A, peli alkaa alusta |
Pokitto | 0:89d0cb201659 | 201 | if (mygame.buttons.released(BTN_A)) { |
Pokitto | 0:89d0cb201659 | 202 | pt = Aloitus; |
Pokitto | 0:89d0cb201659 | 203 | } |
Pokitto | 0:89d0cb201659 | 204 | break; |
Pokitto | 0:89d0cb201659 | 205 | |
Pokitto | 0:89d0cb201659 | 206 | } |
Pokitto | 0:89d0cb201659 | 207 | } |
Pokitto | 0:89d0cb201659 | 208 | // Kappaleiden liikkeet lasketaan koko ajan (tarkempi) |
Pokitto | 0:89d0cb201659 | 209 | // siirrä palloa lasketun liikken mukaan |
Pokitto | 0:89d0cb201659 | 210 | for (int i = 0; i< pallotmukana; i++) pallot[i].move(); |
Pokitto | 0:89d0cb201659 | 211 | // päivitetään pelaajan paikka (tähtäysviivaa varten) |
Pokitto | 0:89d0cb201659 | 212 | pelaaja.move(); |
Pokitto | 0:89d0cb201659 | 213 | // piirretään valkoinen pallo aina (tulee "vauhtijuova") |
Pokitto | 0:89d0cb201659 | 214 | pallot[0].draw(); |
Pokitto | 0:89d0cb201659 | 215 | } |
Pokitto | 0:89d0cb201659 | 216 | } |