Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.10 KB | None | 0 0
  1. import java.io.*;
  2. import java.nio.file.*;
  3. import java.util.Scanner;
  4. /**
  5. *
  6. *
  7. * Das aktuelle Programm Sokoban ist eine Erweiterung der letzten Hausaufgabe. Es wurde um die Funktion des Einlesens einer externen Datei,
  8. * sowie Kollisionserkennung erweitert.
  9. * Durch verschiedene Bedingungen wurde die Kollisionserkennung eingefügt, und man kann es sogar spielen und gewinnen.
  10. * Bewegt man alle Kisten auf ein Zielfeld, hat man das Spiel gewonnen.
  11. *
  12. * @author Benedict Laumer 4772903 Gruppe 4a
  13. * @author Marc Emden 4772109 Gruppe 4a
  14. */
  15. public class Sokoban {
  16.     public static void main(String[]args) throws IOException {
  17.         BufferedReader br = Files.newBufferedReader(Paths.get("sokoban.txt"));
  18.         String line = null;
  19.         int spielfeldbreite = 0;
  20.         int spielfeldhoehe = 0;
  21.         while ((line = br.readLine()) != null) {                                    //Misst das Spielfeld aus
  22.             spielfeldbreite = line.length();
  23.             spielfeldhoehe++;                                                      
  24.         }
  25.         br.close();
  26.         Scanner scan = new Scanner(System.in);
  27.         String eingabe;
  28.         int playerX = 0;
  29.         int playerY = 0;
  30.         boolean exit = false;
  31.         char[][] room = new char[spielfeldbreite][spielfeldhoehe];                  //Spielfeld mit den
  32.         br = Files.newBufferedReader(Paths.get("sokoban.txt"));
  33.         line = null;
  34.         int zeile = 0;
  35.         int zielfeld = 0;
  36.         int kiste = 0;
  37.         int kisteaufziel = 0;
  38.        
  39.         while ((line = br.readLine()) != null) {
  40.             for (int spalte = 0; spalte < spielfeldbreite; spalte++) {
  41.                 room[spalte][zeile] = line.charAt(spalte);                          //guckt, welches zeichen in line an punkt spalte ist
  42.                 switch (room[spalte][zeile]) {
  43.                     case '@':
  44.                         playerX = spalte;                                           //setzt die X Koordinate des Spielers
  45.                         playerY = zeile;                                            //setzt die Y Koordinate des Spielers
  46.                         break;
  47.                
  48.                     case '.':
  49.                         zielfeld++;                                                 //setzt die Startbedingung hoch
  50.                         break;
  51.                
  52.                     case '+':
  53.                         playerX = spalte;                                           //setzt die X Koordinete des Spielers
  54.                         playerY = zeile;                                            //setzt die Y Koordinate des spielers
  55.                         zielfeld++;                                                 //setzt die Startbedingung "Zielfeld" hoch
  56.                         break;
  57.                
  58.                     case '*':
  59.                         zielfeld++;                                                 //setzt die Startbedingung "Zielfeld" hoch
  60.                         kiste++;                                                    //setzt die Startbedingung "Kiste" hoch
  61.                         kisteaufziel++;                                             //setzt die Siegbedingung hoch
  62.                    
  63.                         break;
  64.                  
  65.                     case '$':
  66.                         kiste++;                                                    //Setzt die Startbedingung "Kiste" hoch
  67.                         break;
  68.                 }
  69.             }
  70.             zeile++;                                                                //zeile wird hochgesetzt; while Schleife faengt von vorne an
  71.         }
  72.         br.close();
  73.         if  (kiste != zielfeld) {                                                   //Startbedingung
  74.             System.out.println("Nicht gleich viele Kisten und Zielfelder!");
  75.         } else {
  76.             System.out.println("You can move with up (u), down (d), left (l) or right (r)! End it with exit (e) and use help (h) for instructions!");
  77.             System.out.print("\n");
  78.             while (exit == false) {                 //Solange exit = false ist, wird das das Spiel ausgefuehrt             
  79.                 for (int i = 0; i < spielfeldhoehe; i++) {
  80.                     for (int j = 0; j < spielfeldbreite; j++) {
  81.                         System.out.print(room[j][i]);       //Spielfeld wird dargestellt
  82.                     }
  83.                     System.out.print("\n");            
  84.                 }
  85.                 System.out.println("\nWhat do you want to do now?:");
  86.                 eingabe = scan.next()
  87.                 switch (eingabe) {
  88.                     case "u":
  89.                     case "up":
  90.                         if  (room[playerX][playerY - 1] == '#') {                                                              
  91.                                                                     //schaut nach, ob über dem Spieler eine Wand ist
  92.                             System.out.println("There is something, you can not move!");
  93.                         } else if  ((room[playerX][playerY - 1] == '$' && room[playerX][playerY - 2] == '#')                   
  94.                                                                     //Schaut nach, ob eine Wand hinter der Kiste ist
  95.                             || (room[playerX][playerY - 1] == '*' && room[playerX][playerY - 2] == '#')) {
  96.                             System.out.println("There is something, you can not move!");
  97.                         } else if  ((room[playerX][playerY - 1] == '$' && room[playerX][playerY - 2] == '$')
  98.                             || (room[playerX][playerY - 1] == '$' && room[playerX][playerY - 2] == '*')
  99.                             || (room[playerX][playerY - 1] == '*' && room[playerX][playerY - 2] == '*')                        
  100.                                                                     //Schaut nach, ob hinter einer Kiste eine Kiste ist
  101.                             || (room[playerX][playerY - 1] == '*' && room[playerX][playerY - 2] == '$')) {
  102.                             System.out.println("There is something, you can not move!");
  103.                         } else {
  104.                             if  (room[playerX][playerY - 1] == '$') {
  105.                                 if (room[playerX][playerY] == '@') {
  106.                                     room[playerX][playerY] = ' ';                                                              
  107.                    
  108.                                 } else {
  109.                                     room[playerX][playerY] = '.';
  110.                                 }
  111.                                 playerY--;
  112.                                 room[playerX][playerY] = '@';
  113.                                 if (room[playerX][playerY - 1] == '.') {
  114.                                     room[playerX][playerY - 1] = '*';
  115.                                     kisteaufziel++;                            
  116.                                 } else {
  117.                                     room[playerX][playerY - 1] = '$';
  118.                                     /*schaut, ob hinter einer Kiste ein Zielfeld ist, falls ja, wird die Kiste zu einem *,
  119.                                         falls nein, bleibt es bei $*/
  120.                                 }
  121.                             } else if  (room[playerX][playerY - 1] == '*') {
  122.                                 if (room[playerX][playerY] == '@') {
  123.                                     room[playerX][playerY] = ' ';
  124.                    
  125.                                 } else {
  126.                                     room[playerX][playerY] = '.';
  127.                                 }
  128.                                 playerY--;
  129.                                 if (room[playerX][playerY] == '*') {
  130.                                     room[playerX][playerY] = '+';
  131.                                     if (room[playerX][playerY - 1] == '.') {
  132.                                         room[playerX][playerY - 1] = '*';
  133.                                     } else {
  134.                                         room[playerX][playerY - 1] = '$';
  135.                                         kisteaufziel--;
  136.                                                     /*
  137.                                                     schaut, ob hinter einer Kiste auf einem Zielfeld noch ein Zielfeld ist, falls ja bleibt es bei *,
  138.                                                     falls nein, wird es zu einer Kiste
  139.                                                         */
  140.                                     }
  141.                                 } else {
  142.                                     room[playerX][playerY] = '@';
  143.                                     room[playerX][playerY - 1] = '$';      
  144.                                 }
  145.                
  146.                             } else {
  147.                                 if  (room[playerX][playerY - 1] == '.') {
  148.                                     if (room[playerX][playerY] == '@') {
  149.                                         room[playerX][playerY] = ' ';
  150.                    
  151.                                     } else {
  152.                                         room[playerX][playerY] = '.';
  153.                                     }
  154.                                     playerY--;
  155.                                     room[playerX][playerY] = '+';      
  156.                
  157.                                 } else {
  158.                                     if (room[playerX][playerY] == '@') {
  159.                                         room[playerX][playerY] = ' ';
  160.                                                         /*schaut, ob der Spieler sich auf einem Zielfeld befindet, falls ja, wird es zu einem +,
  161.                                                         falls nein, bleibt es ein @
  162.                                                         */
  163.                    
  164.                                     } else {
  165.                                         room[playerX][playerY] = '.';
  166.                                     }
  167.                                     playerY--;
  168.                                     room[playerX][playerY] = '@';
  169.                                 }
  170.                             }
  171.                         }
  172.                            
  173.        
  174.                         break;
  175.                
  176.                     case "d":
  177.                     case "down":
  178.                         if  (room[playerX][playerY + 1] == '#') {
  179.                             System.out.println("There is something, you can not move!");
  180.                         } else if  ((room[playerX][playerY + 1] == '$' && room[playerX][playerY + 2] == '#')
  181.                             || (room[playerX][playerY + 1] == '*' && room[playerX][playerY + 2] == '#')) {
  182.                             System.out.println("There is something, you can not move!");
  183.                         } else if  ((room[playerX][playerY + 1] == '$' && room[playerX][playerY + 2] == '$')
  184.                             || (room[playerX][playerY + 1] == '$' && room[playerX][playerY + 2] == '*')
  185.                             || (room[playerX][playerY + 1] == '*' && room[playerX][playerY + 2] == '*')
  186.                             || (room[playerX][playerY + 1] == '*' && room[playerX][playerY + 2] == '$')) {
  187.                             System.out.println("There is something, you can not move!");
  188.                         } else {
  189.                             if  (room[playerX][playerY + 1] == '$') {
  190.                                 if (room[playerX][playerY] == '@') {
  191.                                     room[playerX][playerY] = ' ';
  192.                    
  193.                                 } else {
  194.                                     room[playerX][playerY] = '.';
  195.                                 }
  196.                                 playerY++;
  197.                                 room[playerX][playerY] = '@';
  198.                                 if (room[playerX][playerY + 1] == '.') {
  199.                                     room[playerX][playerY + 1] = '*';
  200.                                     kisteaufziel++;
  201.                                 } else {
  202.                                     room[playerX][playerY + 1] = '$';
  203.                                 }
  204.                             } else if  (room[playerX][playerY + 1] == '*') {
  205.                                 if (room[playerX][playerY] == '@') {
  206.                                     room[playerX][playerY] = ' ';
  207.                    
  208.                                 } else {
  209.                                     room[playerX][playerY] = '.';
  210.                                 }
  211.                                 playerY++;
  212.                                 if (room[playerX][playerY] == '*') {
  213.                                     room[playerX][playerY] = '+';
  214.                                     if (room[playerX][playerY + 1] == '.') {
  215.                                         room[playerX][playerY + 1] = '*';
  216.                                     } else {
  217.                                         room[playerX][playerY + 1] = '$';
  218.                                         kisteaufziel--;
  219.                                     }
  220.                                 } else {
  221.                                     room[playerX][playerY] = '@';
  222.                                     room[playerX][playerY + 1] = '$';
  223.                                     kisteaufziel--;
  224.                                 }
  225.                
  226.                             } else {
  227.                                 if  (room[playerX][playerY + 1] == '.') {
  228.                                     if (room[playerX][playerY] == '@') {
  229.                                         room[playerX][playerY] = ' ';
  230.                    
  231.                                     } else {
  232.                                         room[playerX][playerY] = '.';
  233.                                     }
  234.                                     playerY++;
  235.                                     room[playerX][playerY] = '+';
  236.                
  237.                                 } else {
  238.                                     if (room[playerX][playerY] == '@') {
  239.                                         room[playerX][playerY] = ' ';
  240.                
  241.                                     } else {
  242.                                         room[playerX][playerY] = '.';
  243.                                     }
  244.                                     playerY++;
  245.                                     room[playerX][playerY] = '@';
  246.                                 }
  247.                             }
  248.                         }
  249.                         break;
  250.                
  251.                     case "l":          
  252.                     case "left":
  253.                         if  (room[playerX - 1][playerY] == '#') {
  254.                             System.out.println("There is something, you can not move!");
  255.                         } else if  ((room[playerX - 1][playerY] == '$' && room[playerX - 2][playerY] == '#')
  256.                             || (room[playerX - 1][playerY] == '*' && room[playerX - 2 ][playerY] == '#')) {
  257.                             System.out.println("There is something, you can not move!");
  258.                         } else if  ((room[playerX - 1][playerY] == '$' && room[playerX - 2][playerY] == '$')
  259.                             || (room[playerX - 1][playerY] == '$' && room[playerX - 2][playerY] == '*')
  260.                             || (room[playerX - 1][playerY] == '*' && room[playerX - 2][playerY] == '*')
  261.                             || (room[playerX - 1][playerY] == '*' && room[playerX - 2][playerY] == '$')) {
  262.                             System.out.println("There is something, you can not move!");
  263.                         } else {
  264.                             if  (room[playerX - 1][playerY] == '$') {
  265.                                 if (room[playerX][playerY] == '@') {
  266.                                     room[playerX][playerY] = ' ';
  267.                    
  268.                                 } else {
  269.                                     room[playerX][playerY] = '.';
  270.                                 }
  271.                                 playerX--;
  272.  
  273.                                 room[playerX][playerY] = '@';
  274.                                 if (room[playerX - 1][playerY] == '.') {
  275.                                     room[playerX - 1][playerY] = '*';
  276.                                     kisteaufziel++;
  277.                                 } else {
  278.                                     room[playerX - 1][playerY] = '$';
  279.                                 }
  280.                             } else if  (room[playerX - 1][playerY] == '*') {
  281.                                 if (room[playerX][playerY] == '@') {
  282.                                     room[playerX][playerY] = ' ';
  283.                    
  284.                                 } else {
  285.                                     room[playerX][playerY] = '.';
  286.                                 }
  287.                                 playerX--;
  288.                                 if (room[playerX][playerY] == '*') {
  289.                                     room[playerX][playerY] = '+';
  290.                                     if (room[playerX - 1][playerY] == '.') {
  291.                                         room[playerX - 1][playerY] = '*';
  292.                                     } else {
  293.                                         room[playerX - 1][playerY] = '$';
  294.                                         kisteaufziel--;
  295.                                     }
  296.                                    
  297.                                 } else {
  298.                                     room[playerX][playerY] = '@';
  299.                                     room[playerX - 1][playerY] = '$';
  300.                                     kisteaufziel--;
  301.                                 }
  302.                
  303.                             } else {
  304.                                 if  (room[playerX - 1][playerY] == '.') {
  305.                                     if (room[playerX][playerY] == '@') {
  306.                                         room[playerX][playerY] = ' ';
  307.                    
  308.                                     } else {
  309.                                         room[playerX][playerY] = '.';
  310.                                     }
  311.                                     playerX--;
  312.                                     room[playerX][playerY] = '+';
  313.                
  314.                                 } else {
  315.                                     if (room[playerX][playerY] == '@') {
  316.                                         room[playerX][playerY] = ' ';
  317.                    
  318.                                     } else {
  319.                                         room[playerX][playerY] = '.';
  320.                                     }
  321.                                     playerX--;
  322.                                     room[playerX][playerY] = '@';
  323.                                 }
  324.                             }
  325.                         }
  326.                
  327.                         break;
  328.                
  329.                     case "r":
  330.                     case "right":
  331.                         if  (room[playerX + 1][playerY] == '#') {
  332.                             System.out.println("There is something, you can not move!");
  333.                         } else if  ((room[playerX + 1][playerY] == '$' && room[playerX + 1][playerY] == '#')
  334.                             || (room[playerX + 1][playerY] == '*' && room[playerX + 1][playerY] == '#')) {
  335.                             System.out.println("There is something, you can not move!");
  336.                         } else if  ((room[playerX + 1][playerY] == '$' && room[playerX + 2][playerY] == '$')
  337.                             || (room[playerX + 1][playerY] == '$' && room[playerX + 2][playerY] == '*')                            
  338.                             || (room[playerX + 1][playerY] == '*' && room[playerX + 2][playerY] == '*')
  339.                             || (room[playerX + 1][playerY] == '*' && room[playerX + 2][playerY] == '$')) {
  340.                             System.out.println("There is something, you can not move!");
  341.                         } else {
  342.                             if  (room[playerX + 1][playerY] == '$') {
  343.                                 if (room[playerX][playerY] == '@') {
  344.                                     room[playerX][playerY] = ' ';
  345.                    
  346.                                 } else {
  347.                                     room[playerX][playerY] = '.';
  348.                                 }
  349.                                 playerX++;
  350.                                 room[playerX][playerY] = '@';
  351.                                 if (room[playerX + 1][playerY] == '.') {
  352.                                     room[playerX + 1][playerY] = '*';
  353.                                     kisteaufziel++;
  354.                                 } else {
  355.                                     room[playerX + 1][playerY] = '$';
  356.                                 }
  357.                
  358.                             } else if  (room[playerX + 1][playerY] == '*') {
  359.                                 if (room[playerX][playerY] == '@') {
  360.                                     room[playerX][playerY] = ' ';
  361.                    
  362.                                 } else {
  363.                                     room[playerX][playerY] = '.';
  364.                                 }
  365.                                 playerX++;
  366.                                 if (room[playerX][playerY] == '*') {
  367.                                     room[playerX][playerY] = '+';
  368.                                     if (room[playerX + 1][playerY] == '.') {
  369.                                         room[playerX + 1][playerY] = '*';
  370.                                     } else {
  371.                                         room[playerX + 1][playerY] = '$';
  372.                                         kisteaufziel--;
  373.                                     }
  374.                                 } else {
  375.                                     room[playerX][playerY] = '@';
  376.                                     room[playerX + 1][playerY] = '$';
  377.                                 }
  378.                                
  379.                                
  380.                                
  381.                             } else {
  382.                                 if  (room[playerX + 1][playerY] == '.') {
  383.                                     if (room[playerX][playerY] == '@') {
  384.                                         room[playerX][playerY] = ' ';
  385.                    
  386.                                     } else {
  387.                                         room[playerX][playerY] = '.';
  388.                                     }
  389.                                     playerX++;
  390.                                     room[playerX][playerY] = '+';
  391.                
  392.                                 } else {
  393.                                     if (room[playerX][playerY] == '@') {
  394.                                         room[playerX][playerY] = ' ';
  395.                    
  396.                                     } else {
  397.                                         room[playerX][playerY] = '.';
  398.                                     }
  399.                                     playerX++;
  400.                                     room[playerX][playerY] = '@';
  401.                                 }
  402.                             }
  403.                         }
  404.                         break;
  405.                
  406.                     case "h":
  407.                     case "help":
  408.                         System.out.println("Use up or u to move upwards.");
  409.                         System.out.println("Use down or d to move down");
  410.                         System.out.println("Use right or r to move to the right");
  411.                         System.out.println("Use left or l to move to the left");
  412.                         System.out.println("Use exit or e to end the game");
  413.                         System.out.print("\n");
  414.                         break;
  415.                    
  416.                     case "e":
  417.                     case "exit":
  418.                         exit = true; //Die while Schleif e wird nur im Fall exit = false ausgefuehrt; bei Eingabe von exit trif ft es nicht mehr zu
  419.                         break;
  420.                        
  421.                     default:
  422.                         System.out.println("Unknown command!");     //Falls eine falsche Eingabe getätigt wird, wird das ausgegeben
  423.                 }
  424.                 if (kisteaufziel == zielfeld) {                     //siegbedingung
  425.                     for (int i = 0; i < spielfeldhoehe; i++) {
  426.                         for (int j = 0; j < spielfeldbreite; j++) {
  427.                             System.out.print(room[j][i]);       //Spielfeld wird dargestellt
  428.                         }
  429.                         System.out.print("\n");            
  430.                     }
  431.                     System.out.println("You have won!");            //Siegtext
  432.                     exit = true;
  433.                 }
  434.             }
  435.         }
  436.     }
  437. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement