Double Snake Game
Dependencies: mbed SPI_TFT_ILI9341 Joystick font_big
Diff: main.cpp
- Revision:
- 1:891702b74827
- Parent:
- 0:fada2b2ed18f
--- a/main.cpp Sun Jun 16 20:26:36 2019 +0000 +++ b/main.cpp Sun Jun 16 20:32:14 2019 +0000 @@ -4,10 +4,6 @@ # include "SPI_TFT_ILI9341.h" # include "string" # include "Arial12x12.h" -//# include <Joystick.h> -//# include "Arial24x23.h" -//# include "Arial28x28.h" -//# include "font_big.h" #include "stdlib.h" #include "time.h" @@ -20,28 +16,29 @@ AnalogIn VRx2(dp4); AnalogIn VRy2(dp13); -InterruptIn SW2(dp17); +InterruptIn SW2(dp15); enum Pozicija{Centar, Desno, Lijevo, Gore, Dolje}; Pozicija pozicija1 = Centar, pozicija2 = Centar, pozicija = Centar; Pozicija redSnakePos(Desno), yellowSnakePos(Lijevo); //dimenzije prostora za igru; int najmanja_x=0, najmanja_y=0, najveca_x=320, najveca_y=240; -int diff(1); -int multiply[3] = {10, 20, 50}; -int delay[3] = {500,300,150}; +int diff(0); +int multiply[2] = {10, 50}; +int delay[2] = {300,100}; +bool gubitnik(2); void ReadDifficulty(){ Pozicija izbor; if(VRx1 < 1.0 / 3.0) izbor=Lijevo; else if(VRx1 > 2.0 / 3.0) izbor=Desno; - + else if(VRx1>1.0/3.0 && VRx1<2.0/3.0 && VRy1>1.0/3.0 && VRy1<2.0/3.0) izbor = Centar; if(izbor != pozicija) pozicija = izbor; } void LarinIzbor(){ ReadDifficulty(); - if(pozicija == Desno && diff < 2) diff++; + if(pozicija == Desno && diff < 1) diff++; else if(pozicija == Lijevo && diff > 0) diff--; } @@ -94,7 +91,7 @@ enum GameState{Welcome, Begin, Proces, MainScreen, GameOver}; GameState stanje=Welcome; -//funkcija za ispis WelcomeScreena +//funkcije za ispis WelcomeScreena void statScreen(){ LarinIzbor(); TFT.fillrect(10,20,310,220,Yellow); @@ -109,13 +106,11 @@ TFT.printf(" to start."); } void WelcomeScreen(){ - // statScreen(); TFT.set_font (( unsigned char *) Arial12x12); TFT.fillrect(70,110,320,122,Yellow); TFT.locate(70,110); - if(diff == 1) TFT.printf("Medium"); - else if(diff == 0) TFT.printf("Low"); - else if(diff == 2) TFT.printf("High"); + if(diff == 0) TFT.printf("Low"); + else if(diff == 1) TFT.printf("High"); } //Funkcije za crtanje void crtajCrvenuZmiju(){ @@ -138,55 +133,52 @@ void crtajHranu(){ TFT.fillrect(njamnjam.X, njamnjam.Y, njamnjam.X + dimenzija, njamnjam.Y + dimenzija, Blue); } - - - //funkcija za slucajeve koji dovode do GameOver stanja void Sudari(){ //sudar zmije same sa sobom for(int i=1; i<red_snake_velicina; i++){ if(red_snake[0].X == red_snake[i].X && red_snake[0].Y == red_snake[i].Y){ stanje=GameOver; - + gubitnik = 0; } } for(int i=1; i<yellow_snake_velicina; i++){ if(yellow_snake[0].X == yellow_snake[i].X && yellow_snake[0].Y == yellow_snake[i].Y){ stanje=GameOver; - + gubitnik = 1; } } //sudar zmije sa zidom if((red_snake[0].X < najmanja_x || red_snake[0].X > najveca_x || red_snake[0].Y < najmanja_y || red_snake[0].Y > najveca_y )) { - // prodavnicaGame(); stanje=GameOver; + gubitnik = 0; } if((yellow_snake[0].X<najmanja_x || yellow_snake[0].X>najveca_x || yellow_snake[0].Y<najmanja_y || yellow_snake[0].Y>najveca_y )) { - // prodavnicaGame(); stanje=GameOver; + gubitnik = 1; } // sudar dvije zmije for(int i=0; i<yellow_snake_velicina; i++){ - if(red_snake[0].X == yellow_snake[i].X && red_snake[0].Y == yellow_snake[i].Y) + if(red_snake[0].X == yellow_snake[i].X && red_snake[0].Y == yellow_snake[i].Y){ stanje=GameOver; + + } } for(int i=0; i<red_snake_velicina; i++){ - if(yellow_snake[0].X == red_snake[i].X && yellow_snake[0].Y == red_snake[i].Y) + if(yellow_snake[0].X == red_snake[i].X && yellow_snake[0].Y == red_snake[i].Y){ stanje=GameOver; + } } } - - +//funkcije za postavljanje hrane i zmija void spawnFood(){ njamnjam.X += 50; njamnjam.Y += 50; if(njamnjam.X > najveca_x) njamnjam.X = 10; if(njamnjam.Y > najveca_y) njamnjam.Y = 10; } - - void spawnSnake(){ red_snake[0].X = najmanja_x + 4*dimenzija; red_snake[0].Y = najmanja_y; @@ -213,19 +205,24 @@ spawnFood(); stanje=Proces; } +//funkcija za ispis GameOver ekrana void prodavnicaGame(){ TFT.cls(); TFT.locate(100,100); TFT.set_font (( unsigned char *) Arial12x12); TFT.printf("GAME OVER!"); TFT.locate(100,150); - TFT.printf("Score player 1: %d", (red_snake_velicina-5)*10); + TFT.printf("Score player 1: %d", (red_snake_velicina-5)*multiply[diff]); TFT.locate(100,170); - TFT.printf("Score player 2: %d", (yellow_snake_velicina-5)*10); + TFT.printf("Score player 2: %d", (yellow_snake_velicina-5)*multiply[diff]); TFT.locate(120,190); - if(red_snake_velicina>yellow_snake_velicina) TFT.printf("Pobjednik je crveni igrac"); - else if(red_snake_velicina<yellow_snake_velicina) TFT.printf("Pobjednik je zuti igrac"); - else TFT.printf("Nerijeseno"); + if(gubitnik == 0) TFT.printf("Winner is: Yellow Player"); + else if(gubitnik == 1) TFT.printf("Winner is: Red Player"); + else{ + if(red_snake_velicina>yellow_snake_velicina) TFT.printf("Winner is: Red Player"); + else if(red_snake_velicina<yellow_snake_velicina) TFT.printf("Winner is: Yellow Player"); + else TFT.printf("Draw"); + } } //trenutak kad zmija pojede hranu void JediBraco(){ @@ -246,6 +243,7 @@ crtajHranu(); Sudari(); } +//Funckije za upravljanje smjerom zmija void redSnakeMovement(){ ReadPosition1(); if(pozicija1 == Desno && redSnakePos != Lijevo) { @@ -321,7 +319,10 @@ void Igraj(){ stanje=Begin; } - +void Resetuj(){ + TFT.cls(); + stanje=Welcome; +} int main() { SW1.mode(PullUp); SW2.mode(PullUp); @@ -330,6 +331,7 @@ TFT.foreground(Blue ); TFT.cls(); SW1.fall(&Igraj); + SW2.fall(&Resetuj); stanje=Welcome; sw1=true; t.start();