Double Snake Game

Dependencies:   mbed SPI_TFT_ILI9341 Joystick font_big

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();