Kahden pelaajan "Minibiljardi"
Dependencies: PokittoLib
Diff: main.cpp
- Revision:
- 0:89d0cb201659
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Oct 10 08:00:57 2018 +0000 @@ -0,0 +1,216 @@ +#include "Pokitto.h" // Lisää Pokitto-kirjasto +#include "GameObject.h" // Lisää GameObject -oliot + +Pokitto::Core mygame; // Luo Pokitto -peliolio (siis pelimoottori) + +#define MAX_PALLOT 7 // pallojen maksimimäärä + +GameObject pallot[MAX_PALLOT]; // Taulukko (array) palloja, eli monta palloa +GameObject pelaaja; // Pelaaja-objekti (tähtäystä varten) +GameObject laidat[4]; // Pöydän neljä laitaa +GameObject taskut[4]; // Pöydän kulmataskut + +enum PeliTilanne { Aloitus, Tahtays, Lyonti, Voitto }; // Pelin eri tilat + +/** Pelin käyttämät globaalit (eli joka paikasta käytettävät) muuttujat **/ +PeliTilanne pt = Aloitus; +int pallotmukana = 7; // montako palloa on alussa mukana pelissä, saa olla korkeintaan sama kuin MAX_PALLOT +int pelaaja1pisteet = 0; +int pelaaja2pisteet = 0; +int pelivuoro = 1; //kumman pelaajan vuoro + +// apufunktio, joka asettelee pelipallot alkupaikoilleen +void aloitusPallot(){ + pallot[0].x = -30; pallot[0].y = 0; pallot[0].active = true; pallot[0].visible = true; pallot[0].setColor(1); + pallot[1].x = 10; pallot[1].y = 0; pallot[1].active = true; pallot[1].visible = true; pallot[1].setColor(7); + pallot[2].x = 10; pallot[2].y = 10; pallot[2].active = true; pallot[2].visible = true; pallot[2].setColor(4); + pallot[3].x = 10; pallot[3].y = -10; pallot[3].active = true; pallot[3].visible = true; pallot[3].setColor(4); + pallot[4].x = 20; pallot[4].y = -10; pallot[4].active = true; pallot[4].visible = true; pallot[4].setColor(7); + pallot[5].x = 20; pallot[5].y = 0; pallot[5].active = true; pallot[5].visible = true; pallot[5].setColor(4); + pallot[6].x = 20; pallot[6].y = 10; pallot[6].active = true; pallot[6].visible = true; pallot[6].setColor(7); +} + +/** MAIN on kohta josta KAIKKI C++ ohjelmat alkavat suorittamaan koodia **/ + +int main () { + mygame.begin(); // Käynnistä Pokitton moottori (näyttö, näppäimet, jne) + mygame.display.setFont(fontTiny); // Pikkuruinen fontti käyttöön + mygame.display.bgcolor = 13; // Taustaväri tummanvihreäksi + mygame.display.invisiblecolor = 13; // Tekstin taustaväri pois (eli läpinäkyväksi) + + /** OHJELMALOOPPI ... pyörii koko ohjelman elämän ajan, + eli niin kauan, kun mygame.isRunning() antaa vastaukseksi tosi (true) **/ + + while (mygame.isRunning()) { + + // Piirrä pöydän reunat + for (int i=0; i<4; i++) laidat[i].draw(); + // Piirrä pöydän taskut + for (int i=0; i<4; i++) taskut[i].draw(); + // Laske pallojen törmäykset pöydän laitojen kanssa + for (int i=0; i<pallotmukana; i++) { + for (int j=0; j<4; j++) { + if (pallot[i].checkCollision(laidat[j]) && pt != Aloitus) { + pallot[i].doCollision(laidat[j]); + } + } + } + + // laske pallojen törmäykset toisten pallojen kanssa + for (int i=0; i<pallotmukana; i++) { + for (int j=0; j<pallotmukana; j++) { + if (i != j) { //älä katso pallon törmäystä itsensä kanssa !!! + if (pallot[i].checkCollision(pallot[j]) && pt != Aloitus) { + pallot[i].doCollision(pallot[j]); + } + } + } + } + + // laske pallojen törmäykset taskujen kanssa + for (int i=0; i<pallotmukana; i++) { + for (int j=0; j<4; j++) { + if (pallot[i].checkCollision(taskut[j]) && pt != Aloitus) { + // Pallo meni pussiin! + pallot[i].remove(); // poista pallo kentältä + if (pallot[i].color == 7) pelaaja1pisteet++; // punaisista palloista 1 piste pelaaja ykköselle + if (pallot[i].color == 4) pelaaja2pisteet++; // keltaisista palloista 1 piste pelaaja kakkoselle + if (pallot[i].color == 1) { + // valkoinen pallo meni taskuun, vuorossa oleva pelaaja hävisi + if (pelivuoro==1) { pelaaja1pisteet=0; pelaaja2pisteet = (pallotmukana-1)/2; } //pelaaja 2 voitti + else { pelaaja1pisteet = (pallotmukana-1)/2; pelaaja2pisteet = 0;} //pelaaja 1 voitti + } + if (pelaaja1pisteet == (pallotmukana-1)/2 || pelaaja2pisteet == (pallotmukana-1)/2) pt = Voitto; + } + } + } + + /** UPDATE looppi, jossa päivitetään näyttö pelitilanteen mukaan **/ + if (mygame.update()) { + int pallotseis = 0; // tämän avulla lasketaan moniko pallo on vielä liikkeessä + // Piirrä pallot + for (int i=0; i<pallotmukana; i++) pallot[i].draw(); + // Palautetaan tekstiä varten valkoinen väri + mygame.display.color = 1; + switch (pt) { + case Aloitus: + /** case Aloitus ... Tässä pelitilassa asetetaan alkuarvot pelille **/ + mygame.display.print(16,8,"Minibiljardi"); + mygame.display.print(16,16,"Paina A"); + + // Nollataan pelitilanne + pelaaja1pisteet = 0; + pelaaja2pisteet = 0; + pelivuoro = 1; + + // Laitetaan pelipallot aloituspaikoilleen + aloitusPallot(); + + /** Pöytä **/ + // Pöydän yläreuna paikalleen + laidat[0].x = 0; laidat[0].y = -49; laidat[0].width = 110; laidat[0].height=20; + laidat[0].setColor(5); + // Pöydän alareuna paikalleen + laidat[1].x = 0; laidat[1].y = 49; laidat[1].width = 110; laidat[1].height=20; + laidat[1].setColor(5); + // Pöydän vasen reuna paikalleen + laidat[2].x = -59; laidat[2].y = 0; laidat[2].width = 20; laidat[2].height=88; + laidat[2].setColor(5); + // Pöydän oikea reuna paikalleen + laidat[3].x = 59; laidat[3].y = 0; laidat[3].width = 20; laidat[3].height=88; + laidat[3].setColor(5); + // Kaikki pöydän reunat muutetaan kiinteiksi + laidat[0].movable = laidat[1].movable = laidat[2].movable = laidat[3].movable = false; + + /** Taskut **/ + // Vasen ylätasku paikalleen + taskut[0].x = -59; taskut[0].y = -49; taskut[0].width = 30; taskut[0].height=30; + taskut[0].setColor(0); + // Oikea ylätasku paikalleen + taskut[1].x = 59; taskut[1].y = -49; taskut[1].width = 30; taskut[1].height=30; + taskut[1].setColor(0); + // Oikea alatasku paikalleen + taskut[2].x = 59; taskut[2].y = 49; taskut[2].width = 30; taskut[2].height=30; + taskut[2].setColor(0); + // Vasen alatasku paikalleen + taskut[3].x = -59; taskut[3].y = 49; taskut[3].width = 30; taskut[3].height=30; + taskut[3].setColor(0); + // Kaikki taskut muutetaan kiinteiksi + laidat[0].movable = taskut[1].movable = taskut[2].movable = taskut[3].movable = false; + + // Jos on painettu A, siirrytään peliin! + if (mygame.buttons.released(BTN_A)) { + pelaaja.x = pallot[0].x; pelaaja.y = pallot[0].y; + pt = Tahtays; + } + break; + case Tahtays: + /** case Tähtäys ... Tässä pelitilassa asetetaan suunta ja voima valkoiselle pallolle **/ + if (pelivuoro == 1) { + mygame.display.color = 7; // punainen väri + mygame.display.print(16,8,"Pelaaja 1 vuoro"); + } else { + mygame.display.color = 4; // keltainen väri + mygame.display.print(16,8,"Pelaaja 2 vuoro"); + } + + // piirrä tähtäysviiva pelaajan ja pallon välille + mygame.display.setColor(1); // väri 1 = valkoinen + mygame.display.drawLine(pelaaja.centerX,pelaaja.centerY,pallot[0].centerX,pallot[0].centerY); + // tsekkaa näppäinpainallukset + if (mygame.buttons.rightBtn()) pelaaja.moveX(1); + if (mygame.buttons.leftBtn()) pelaaja.moveX(-1); + if (mygame.buttons.upBtn()) pelaaja.moveY(-1); + if (mygame.buttons.downBtn()) pelaaja.moveY(1); + // jos painetaan A, lyönti lähtee + if (mygame.buttons.released(BTN_A)) { + // kopautetaan vauhtia valkoiselle nollapallolle (pelaaja) + pallot[0].vx = (pelaaja.x - pallot[0].x) * pallot[0].acceleration; // lyönnin X voimakkuus + pallot[0].vy = (pelaaja.y - pallot[0].y) * pallot[0].acceleration; // lyönnin Y voimakkuus + pt = Lyonti; // siirry seuraavaan pelitilaan + } + break; + case Lyonti: + // jos kaikki pallot ovat pysähtynyt, siirry taas tähtäämään + for (int i=0; i < pallotmukana; i++) { + //jos pallo ei enää liiku tai on jo poistettu + if (pallot[i].isMoving() == false || pallot[i].active == false) { + pallotseis++; //lasketaan pysähtyneet yhteen + } + } + if (pallotseis == pallotmukana) { + // kaikki pallot ovat seis tai jo pussitettu, aloita taas tähtääminen + pelaaja.x = pallot[0].x; pelaaja.y = pallot[0].y; + if (pelivuoro == 1) pelivuoro = 2; + else pelivuoro = 1; // vaihdetaan pelivuoroa + pt = Tahtays; + } + break; + case Voitto: + /** case Voitto ... pelaaja 1 tai 2 voitti **/ + if (pelaaja1pisteet > pelaaja2pisteet) { + mygame.display.color = 7; // punainen väri + mygame.display.print(16,8,"Pelaaja 1 VOITTI!"); + } else { + mygame.display.color = 4; // keltainen väri + mygame.display.print(16,8,"Pelaaja 2 VOITTI!"); + } + mygame.display.color = 1; // valkoinen väri + mygame.display.print(16,16,"Paina A"); + // jos painetaan A, peli alkaa alusta + if (mygame.buttons.released(BTN_A)) { + pt = Aloitus; + } + break; + + } + } + // Kappaleiden liikkeet lasketaan koko ajan (tarkempi) + // siirrä palloa lasketun liikken mukaan + for (int i = 0; i< pallotmukana; i++) pallot[i].move(); + // päivitetään pelaajan paikka (tähtäysviivaa varten) + pelaaja.move(); + // piirretään valkoinen pallo aina (tulee "vauhtijuova") + pallot[0].draw(); + } +} \ No newline at end of file