Advertisement
yacked2

[JAVA] Snake

Apr 13th, 2014
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.71 KB | None | 0 0
  1. /*
  2.     Yacked2, 13.4.2014
  3. */
  4.  
  5. import java.util.Arrays;
  6. import java.util.Scanner;
  7.  
  8.  
  9. public class v2 {
  10.  
  11.     public static void main(String[] args) {
  12.         //Spremenljivke
  13.         String smer = "Sever"; //kam je obrnjena kaca
  14.        
  15.         //scanner
  16.         Scanner novo = new Scanner(System.in);
  17.         System.out.println("Sirina polja: ");
  18.         int b = novo.nextInt();
  19.         System.out.println("Visina polja: ");
  20.         int a = novo.nextInt();
  21.        
  22.         //int a = 10; //visina polja
  23.         //int b = 20; //sirina polja
  24.         boolean hrana = false; //ali je kje hrana
  25.         int[] cokolada = new int[2]; //kje je hrana
  26.        
  27.         int kacaX = b/2;
  28.         int kacaY = a/2;
  29.        
  30.         int[][] snake = {{kacaX,kacaY},{kacaX,kacaY-1}}; //zacetna kaca
  31.        
  32.         int[][] polja = new int[a][b];
  33.        
  34.         int n=1; //koliko premikov smo že naredili
  35.         int cleni= 2;
  36.         Izpis(snake,polja,hrana,cokolada);
  37.         while(true)
  38.         {
  39.             //ustvarjanje hrane
  40.             if(n % 5 ==0 && hrana == false)
  41.             {
  42.                 hrana = true;
  43.                 cokolada = UstvariHrano(cokolada,polja,snake);
  44.                 //System.out.println(cokolada[0] + " "+ cokolada[1]);
  45.             }
  46.            
  47.             //spremenimo smer
  48.             smer = NovaSmer(smer);
  49.            
  50.             int[][] OldSnake = snake.clone();// new int[snake.length][2];
  51.             //System.arraycopy( snake, 0, OldSnake, 0, snake.length );
  52.            
  53.             //se premaknemo za eno polje
  54.             snake = Premik(snake,smer);
  55.            
  56.             //ali se hranimo
  57.             if(hrana)
  58.             {
  59.                 boolean hranjenje = AliJem(cokolada,snake);
  60.                 if(hranjenje)
  61.                 {
  62.                     //hranimo se!
  63.                     hrana = false;
  64.                     snake = Pojej(OldSnake,cokolada);
  65.                     cleni++;
  66.                 }
  67.             }
  68.             boolean veljavnost = Preveri(snake,a,b);
  69.             if(veljavnost)
  70.             {
  71.                 //izpisemo
  72.                 Izpis(snake,polja,hrana,cokolada);
  73.             }
  74.             else
  75.             {
  76.                 System.out.println("Konec igre! Dolzina kace: " + cleni);
  77.                 System.exit(0);
  78.             }
  79.             n++;
  80.         }
  81.  
  82.     }
  83.    
  84.     private static void Izpis(int[][] snake, int[][] polja, boolean hrana, int[] cokolada)
  85.     {
  86.         for(int i=polja.length-1; i>=0;i--)
  87.         {
  88.             //for(int n=polja[i].length-1; n>=0;n--)
  89.             for(int n=0; n < polja[i].length;n++)
  90.             {
  91.                 int x = n;
  92.                 int y = i;
  93.                
  94.                 int[] kvadrat = {x,y};
  95.                
  96.                 if(hrana==true && Arrays.equals(kvadrat, cokolada))
  97.                 {
  98.                     System.out.print("H ");
  99.                 }
  100.                 else
  101.                 {
  102.                     boolean prazno = true;
  103.                     for(int[] telo : snake)
  104.                     {
  105.                         if(Arrays.equals(telo, kvadrat))
  106.                         {
  107.                             prazno = false;
  108.                             break;
  109.                         }
  110.                     }
  111.                
  112.                     if(prazno)
  113.                     {
  114.                         System.out.print("0 ");
  115.                     }
  116.                     else
  117.                     {
  118.                         if(Arrays.equals(kvadrat, snake[0])) //glava
  119.                         {
  120.                             System.out.print("2 ");
  121.                         }
  122.                         else
  123.                         {
  124.                             System.out.print("1 ");
  125.                         }
  126.                    
  127.                     }
  128.                 }
  129.                
  130.             }
  131.             System.out.println();
  132.         }
  133.        
  134.     }
  135.  
  136.     private static boolean Preveri(int[][] snake, int a, int b) {
  137.        
  138.         for(int i=0; i < snake.length;i++)
  139.         {
  140.             int[] primera = snake[i];
  141.            
  142.             for(int n=i+1; n < snake.length;n++)
  143.             {
  144.                 if(Arrays.equals(primera, snake[n]))
  145.                 {
  146.                     return false;
  147.                 }
  148.             }
  149.         }
  150.        
  151.         for(int i=0; i < snake.length;i++)
  152.         {
  153.             int x = snake[i][0];
  154.             int y = snake[i][1];
  155.            
  156.             if(x < 0 || y < 0 || x >= b || y >=a)
  157.             {
  158.                 return false;
  159.             }
  160.         }
  161.         return true;
  162.     }
  163.  
  164.     private static int[][] Pojej(int[][] snake, int[] cokolada)
  165.     {
  166.         int[][] NovoTelo = new int[snake.length+1][2];
  167.        
  168.         NovoTelo[0] = cokolada;
  169.        
  170.         for(int i=1;i<NovoTelo.length;i++)
  171.         {
  172.             NovoTelo[i] = snake[i-1];
  173.         }
  174.        
  175.         return NovoTelo;
  176.     }
  177.  
  178.     private static int[][] Premik(int[][] snake, String smer)
  179.     {
  180.         int staraGlavaX = snake[0][0];
  181.         int staraGlavaY = snake[0][1];
  182.         int novaX = snake[0][0];
  183.         int novaY = snake[0][1];
  184.        
  185.         if(smer.equals("Sever"))
  186.         {
  187.             novaY++;
  188.         }
  189.         else if(smer.equals("Vzhod"))
  190.         {
  191.             novaX--;
  192.         }
  193.         else if(smer.equals("Jug"))
  194.         {
  195.             novaY--;
  196.         }
  197.         else if(smer.equals("Zahod"))
  198.         {
  199.             novaX++;
  200.         }
  201.        
  202.         int[][] NovTrup = new int[snake.length][2];
  203.        
  204.         NovTrup[0][0] = novaX;
  205.         NovTrup[0][1] = novaY;
  206.         NovTrup[1][0] = staraGlavaX;
  207.         NovTrup[1][1] = staraGlavaY;
  208.        
  209.         for(int i=2;i < NovTrup.length;i++)
  210.         {
  211.             NovTrup[i][0] = snake[i-1][0];
  212.             NovTrup[i][1] = snake[i-1][1];
  213.         }
  214.        
  215.         return NovTrup;
  216.     }
  217.  
  218.     private static boolean AliJem(int[] cokolada, int[][] snake)
  219.     {
  220.         if( cokolada ==null ||cokolada.length==0)
  221.         {
  222.             return false;
  223.         }
  224.         else
  225.         {
  226.             for(int[] del : snake)
  227.             {
  228.                 if(Arrays.equals(del, cokolada))
  229.                 {
  230.                     return true;
  231.                 }
  232.             }
  233.             //hrana obstaja, ali se kakšen
  234.             return false;
  235.    
  236.         }
  237.     }
  238.     private static int[] UstvariHrano(int[] cokolada, int[][] polja, int[][] snake)
  239.     {
  240.         //ustvarimo hrano nekje v polju, ki je prazno
  241.                
  242.         while(true)
  243.         {
  244.             int Y = (int)(Math.random()*polja.length);
  245.             int X = (int)(Math.random()*polja[0].length);
  246.            
  247.             int[] tocka = {X,Y};
  248.            
  249.             for(int[] telo : snake)
  250.             {
  251.                 //če je na tem polju že kakšen del kače
  252.                 if(Arrays.equals(telo,tocka))
  253.                 {
  254.                     break;
  255.                 }
  256.                 else
  257.                 {
  258.                     return tocka;
  259.                 }
  260.             }
  261.         }
  262.     }
  263.  
  264.     private static String NovaSmer(String smer)
  265.     {
  266.         Scanner sc = new Scanner(System.in);
  267.         String premik = sc.nextLine();
  268.        
  269.         //nova smer
  270.         if(smer.equals("Sever") && premik.equals("l"))
  271.         {
  272.             smer="Vzhod";
  273.         }
  274.         else if(smer.equals("Sever") && premik.equals("d"))
  275.         {
  276.             smer="Zahod";
  277.         }
  278.         else if(smer.equals("Vzhod") && premik.equals("d"))
  279.         {
  280.             smer="Sever";
  281.         }
  282.         else if(smer.equals("Vzhod") && premik.equals("l"))
  283.         {
  284.             smer="Jug";
  285.         }
  286.         else if(smer.equals("Jug") && premik.equals("d"))
  287.         {
  288.             smer="Vzhod";
  289.         }
  290.         else if(smer.equals("Jug") && premik.equals("l"))
  291.         {
  292.             smer="Zahod";
  293.         }
  294.         else if(smer.equals("Zahod") && premik.equals("d"))
  295.         {
  296.             smer="Jug";
  297.         }
  298.         else if(smer.equals("Zahod") && premik.equals("l"))
  299.         {
  300.             smer="Sever";
  301.         }
  302.         return smer;
  303.     }
  304.  
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement