Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.*;
- public class CopyOfProjecteUF3 {
- public static int filPepito;
- public static int colPepito;
- public static int filSortida;
- public static int colSortida;
- public static int numLaberints = 0;
- static char[][][] testlaberints = new char[20][][];
- /**
- * Mostrar menu
- */
- public static void mostrarMenu(){
- System.out.println("Tria entre les següents opcions:");
- System.out.println("1 - Importar laberints");
- System.out.println("2 - Jugar");
- System.out.println("3 - Mostrar resultats");
- System.out.println("0 - Sortir");
- }
- // Funcio que guardara els resultats dins d' un fitxer
- public static void guardarResultats (int laberint,String jugador, String acabat, int moviments) throws IOException{
- DateFormat formatdata = new SimpleDateFormat("dd/MM/yyyy HH:mm");
- Date data = new Date();
- PrintWriter importfichero = new PrintWriter(new OutputStreamWriter(new FileOutputStream("resultats.txt", true), "UTF-8"));//new PrintWriter((new FileWriter("laberints.txt", true)));
- importfichero.println(formatdata.format(data)+ " " + laberint + " " + jugador + " " + acabat + " " + moviments);
- importfichero.close();
- }
- /**
- * S'importen els laberints des de fitxer
- * Heu de pensar els parà metres d'entrada i els valors de sortida
- * @throws FileNotFoundException
- */
- public static void importarLaberints() throws FileNotFoundException{
- int fila = 0;
- int col= 0;
- Scanner fichero = new Scanner(new File("laberints.txt"), "UTF-8");
- while (fichero.hasNextInt() && CopyOfProjecteUF3.numLaberints <= 20) {
- fila = fichero.nextInt();
- col = fichero.nextInt();
- System.out.println(fila + " " + col);
- testlaberints[numLaberints] = new char [fila][col];
- for (int i = 0; i < fila; i++) {
- int contador = 0;
- String totaLinia = fichero.next();
- for (int j = 0; j < col; j ++) {
- testlaberints[numLaberints][i][j] = (totaLinia.charAt(contador));
- System.out.print(testlaberints[numLaberints][i][j]);
- contador ++;
- }System.out.println();
- }
- if(obtenirFilColPepitoSortida(testlaberints[numLaberints], '☺', '♠')) {
- numLaberints++;
- }
- else {
- System.out.println("El laverint no te pepito o no te sortida, per aixo no sera importat");
- }
- }
- fichero.close();
- }
- /**
- * Cerca a la matriu la posició on està el pepito i el caràcter de sortida dins del laberint
- * i les desa a les variables globals filPepito, colPepito, filSortida, colSortida
- * @param matriu
- * @param pepito
- * @param sortida
- * @return
- */
- public static boolean obtenirFilColPepitoSortida(char[][] matriu, char pepito, char sortida){
- //Considerem que al laberint hi ha el caràcter del pepito i el de sortida
- boolean trobatPepitoSortida = true;
- //Inicialitzem les files a -1 per després saber si hem trobat la posició o no de cada caràcter
- filPepito = -1;
- filSortida = -1;
- //Recorrem la matriu per trobar el caràcter del pepito i de la sortida
- for (int i = 0; i < matriu.length; i++){
- for(int j = 0; j < matriu[i].length; j++){
- if(matriu[i][j] == pepito){
- //Hem trobat el pepito desem la seva fila i la seva columna a les variables globals filPepito i colPepito
- filPepito = i;
- colPepito = j;
- }else if(matriu[i][j] == sortida){
- //Hem trobat la sortida desem la seva fila i la seva columna a les variables globals filSortida i colSortida
- filSortida = i;
- colSortida = j;
- }
- }
- }
- //Si no hem trobat algun dels dos caràcters (pepito, sortida) retornem que no ha anat bé amb false
- //per despres mostrar un missatge a l'usuari
- if(filPepito == -1 || filSortida == -1){
- trobatPepitoSortida = false;
- }
- return trobatPepitoSortida;
- }
- /**
- * Imprimeix la matriu per pantalla
- * @param matriu Matriu a imprimir
- */
- public static void imprimirMatriu(char[][] matriu) {
- //Imprimim la matriu
- for (int fil = 0; fil < matriu.length; fil++) {
- for (int col = 0; col < matriu[fil].length; col++) {
- System.out.print(matriu[fil][col]);
- }
- System.out.println();
- }
- }
- /**
- * En aquesta funció haureu de dir a l'usuari que triï laberint d'entre els que hi ha i quan acabi de jugar desar els resultats
- * Heu de pensar els parà metres d'entrada i els valors de sortida
- * @throws IOException
- */
- public static void jugar(char[][][] laberints, Scanner teclat, char pepito, char sortida) throws IOException{
- System.out.println("Introdueix el número del laberint al que vols jugar del 1 al "+ (numLaberints));
- int opcioLaberint = teclat.nextInt();
- teclat.nextLine();
- System.out.println("Nom del jugador?");
- String nomjugador = teclat.nextLine();
- char[][]matriu = laberints[opcioLaberint-1];
- //Mirem en quina fila i columna estan els caràcters pepito '☺' i sortida '♠'.
- //filPepito, colPepito, filSortida, colSortida són variables globals
- boolean caractersOK = obtenirFilColPepitoSortida(matriu, pepito, sortida);
- //Si tenim el pepito i la sortida al laberint podem jugar amb aquell laberint
- if(caractersOK){
- imprimirMatriu(matriu);
- char opcio = teclat.next().charAt(0); //Si l'usuari introdueix una m vol dir que vol acabar la partida
- boolean aturarPartida = false;
- boolean finalPartida = false;
- int moviments = 0;
- while (!aturarPartida && !finalPartida) {
- boolean opcioOK = false;
- //Baixar
- if (opcio == 's' || opcio == 'S') {
- //Comprovem si podem baixar
- if (filPepito < matriu.length -1) {
- //Comprovem si la cel·la de sota està lliure
- if (matriu[filPepito+1][colPepito] == '·') {
- //Movem el pepito
- matriu[filPepito][colPepito] = '·';
- filPepito++;
- matriu[filPepito][colPepito] = pepito;
- }else if(matriu[filPepito+1][colPepito] == sortida){
- finalPartida = true;
- //Movem el pepito al final
- matriu[filPepito][colPepito] = '♠';
- filPepito++;
- matriu[filPepito][colPepito] = pepito;
- }
- }
- opcioOK = true;
- //Pujar
- }else if (opcio == 'w' || opcio == 'W') {
- //Comprovem si podem pujar
- if (filPepito > 0) {
- //Comprovem si la cel·la de dalt està lliure
- if (matriu[filPepito-1][colPepito] == '·') {
- //Movem el pepito
- matriu[filPepito][colPepito] = '·';
- filPepito--;
- matriu[filPepito][colPepito] = pepito;
- }else if(matriu[filPepito-1][colPepito] == sortida){
- finalPartida = true;
- //Movem el pepito al final
- matriu[filPepito][colPepito] = '♠';
- filPepito--;
- matriu[filPepito][colPepito] = pepito;
- }
- }
- opcioOK = true;
- // Dreta
- }else if (opcio == 'd' || opcio == 'D') {
- //Comprovem si podem tirar a la dreta
- if (colPepito < matriu[0].length - 1) {
- //Comprovem si la cel·la de la dreta està lliure
- if (matriu[filPepito][colPepito+1] == '·') {
- //Movem el pepito
- matriu[filPepito][colPepito] = '·';
- colPepito++;
- matriu[filPepito][colPepito] = pepito;
- }else if(matriu[filPepito][colPepito+1] == sortida){
- finalPartida = true;
- //Movem el pepito al final
- matriu[filPepito][colPepito] = '♠';
- colPepito++;
- matriu[filPepito][colPepito] = pepito;
- }
- }
- opcioOK = true;
- //Esquerra
- } else if (opcio == 'a' || opcio == 'A') {
- //Comprovem si podem anar a l'esquerra
- if (colPepito > 0) {
- //Comprovem si la cel·la de l'esquerra està lliure
- if (matriu[filPepito][colPepito-1] == '·') {
- //Movem el pepito
- matriu[filPepito][colPepito] = '·';
- colPepito--;
- matriu[filPepito][colPepito] = pepito;
- }else if(matriu[filPepito][colPepito-1] == sortida){
- finalPartida = true;
- //Movem el pepito al final
- matriu[filPepito][colPepito] = '♠';
- colPepito--;
- matriu[filPepito][colPepito] = pepito;
- }
- }
- opcioOK = true;
- }
- moviments++;
- //Aturarem la partida si l'usuari no introdueix cap tecla que sigui de pujar, baixar, dreta, esquerra
- aturarPartida = !opcioOK;
- //Imprimim la matriu
- imprimirMatriu(matriu);
- if(!aturarPartida && !finalPartida){
- opcio = teclat.next().charAt(0);
- }else if(aturarPartida){
- System.out.println("Has aturat la partida");
- guardarResultats(opcioLaberint ,nomjugador, "No", moviments);
- }else if(finalPartida){
- System.out.println("Has finalitzat la partida felicitats!");
- guardarResultats(opcioLaberint ,nomjugador, "Si", moviments);
- }
- }
- }else{
- //No hi ha el pepito o la sortida al laberint
- System.out.println("No hi ha el pepito o la sortida al laberint");
- }
- }
- /**
- * Es desen els resultats de la partida quan el jugador ja no vol jugar més
- * Heu de pensar els paràmetres d'entrada i els valors de sortida
- */
- public static void desarResultats(){
- }
- /**
- * Es recuperen els resultats de l'usuari actual i es mostren els seus resultats
- * Heu de pensar els paràmetres d'entrada i els valors de sortida
- * @throws FileNotFoundException
- */
- public static void mostrarResultats() throws FileNotFoundException{
- Scanner fichero = new Scanner(new File("resultats.txt"), "utf-8");
- while (fichero.hasNextLine()) {
- System.out.println(fichero.nextLine());
- }
- fichero.close();
- }
- public static void main(String[] args) throws IOException {
- //Declarem i inicialitzem variables
- Scanner teclat = new Scanner(System.in);
- char [][][] laberintsTurpedo = new char [0][][];
- char pepito = '☺';
- char sortida = '♠';
- //Mostrem el menú i li demanem l'opcio a l'usuari
- mostrarMenu();
- int opcioMenu = teclat.nextInt();
- teclat.nextLine();
- boolean sortir = false;
- while (!sortir) {
- switch(opcioMenu){
- case 1: importarLaberints();break;
- case 2: jugar(testlaberints,teclat,pepito,sortida);break; //inclou escollir laberint
- case 3: mostrarResultats();break;
- case 0: default: sortir = true;
- }
- if(!sortir){
- //Mostrem el menú i li demanem l'opcio a l'usuari
- mostrarMenu();
- opcioMenu = teclat.nextInt();
- teclat.nextLine();
- }
- }
- teclat.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement