/* * P4.java * * Copyright 2014 Benjamin Grouteau STH1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. * * */ public class P4 { // Positionne les jetons + tour public static void main (String args[]) { int newgame; newgame=1; //Variable qui permet de recommencer le jeu while(newgame==1) { //Boucle de nouveau jeu //Initialisation des differentes variables : String [][] m = new String [6][7]; //matrice principale int j, i, t, fin, nbjoueur,niveau, tour; int [] v = new int [7]; //Tableau de la somme String joueur1, joueur2; fin=0; //Variable qui decide de la fin du jeu tour=1; //Variable du nombre de tour nbjoueur=0; //Variable qui permet le choix du nombre de joueurs niveau=0; t=0; m=initialisation(m); //Début instructions : System.out.println("\n"+"\t"+"Pret pour un puissance 4 ?"+"\n"); System.out.println("\t"+"1 ou 2 joueurs ?"); nbjoueur=Lire.i(); System.out.println("\n"+"\t"+"Joueur 1 entrez votre prenom"+"\n"); joueur1=Lire.S(); if(nbjoueur==2) { System.out.println("\t"+ "Joueur 2 entrez votre prenom"); joueur2=Lire.S();} else {joueur2="Ordinateur";} if(nbjoueur==1){ System.out.println("\n"+"\t"+"Niveau facile (1) ou difficile (2) ?"+"\n"); niveau=Lire.i(); t=debuttour(nbjoueur);} while (fin!=1 && tour<43) { //arret si qqn gagne ou si tout est rempli // 42 tours maximum au puissance 4 if (t%2==0) { System.out.println("\n" +joueur1 + " tour numero "+tour+ " . Choisir la colonne entre 1 et 7 :" ); //permet de définir un ordre des joueurs tours paires et impaires j=Lire.i(); while (j<1 || 7=7) { //boucle de condition si la colonne est complète et nouvelle demande System.out.println("\n"+"la colonne " + (j+1) + " est pleine, rejouer et changer de colonne "); System.out.print("\n"); if (t%2==0) {j=Lire.i();} else { j=entree(nbjoueur, tour, joueur2, niveau, m);} j=j-1; //permet d'avoir coresspondance entre colonne entrée et colonne tableau i=Colonne(j, v);} //v[j] est la ligne donnée grace au ss programme System.out.println("\n"+" Le jeton est en colonne " + (j+1) + " et " + i +" eme ligne" + "\n"); //donne ligne et colonne du jeton //attribution des différentes valeurs en fonction du joueur 1 ou 2 if (t%2==0) { m[6-i][j]="x";} //[6-v[j]] permet de commencer à la ligne du bas else { m[6-i][j]="o";} affichage(m); //Verification de fin de jeu :: while à double condition soit fin=1, soit t=42 //Par victoire : fin=verif(m, joueur1, joueur2); //grace au ss programme verif qui sort fin=1 ou fin=0 sil n'y a rien //Cas de la partie nulle : if (tour==42) System.out.println("\n"+"Partie nulle"); //Quand toutes les verifications sont faites, on peut passer au tours suivant t=t+1; tour=tour+1; } //Fin de la boucle while System.out.print("\t"+"Fin de la partie. Vouler vous rejouer ? Si oui, tapez 1" + "\n"); newgame=Lire.i(); //Permet de recommencer } } public static int debuttour (int nbjoueur){ int debut, t; System.out.println("Voulez vous commencer si oui tapez 1 : "+"\n"); debut=Lire.i(); if (debut==1) t=0; else t=1; return t; } public static String[][] initialisation (String [][]m) { //initialisation matrice jeu int i,j; for (i=0;i<6;i++){ for (j=0;j<7;j++){ m[i][j]=".";}} return m;} public static void affichage (String [][]m) { //affichage de la matrice de jeu int i,j,colonne; String [] numerocolonne = new String [7]; colonne=1; //Variable qui permet de numéroter la matrice jeu dans le tableau numerocolonne for (j=0;j<7;j++){ //initialisation tableau sous la matrice numerocolonne[j]="|"+colonne+"|"; colonne=colonne+1;} for (i=0;i<6;i++){ //Affichage matrice principale for (j=0;j<7;j++){ System.out.print(m[i][j]+"\t"); } System.out.print("\n"); } System.out.print("\n"); for (j=0;j<7;j++){ //affichage des numéros de colonne de la matrice de jeu dans le tableau en dessous System.out.print(numerocolonne[j]+"\t"); } System.out.print("\n"); } public static int entree (int nbjoueur, int tour, String joueur2, int niveau, String [][]m){ // sous programme : en fonction de la demande, un ou deux joueurs. Ordinateur ou non int k; k=(int) (Math.random()*(7) ) + 1; int i, j; if (nbjoueur==1 && niveau==1) { //choix ordi niveau 1 System.out.println("\n"+joueur2 + " joue. Tour numero "+tour +"\n"); k=k; } //colonne choisi aléatoirement entre 1 et 7 if (nbjoueur==1 && niveau==2) { //choix ordi niveau deux (pas sous programme, qq problème. System.out.println("\n"+joueur2 + " joue. Tour numero "+tour +"\n"); //D'abord priorité à la victoire for (j=0;j<7;j++){ for (i=5;i>2;i--){ if (m[i][j]=="o" && m[i-1][j]=="o" && m[i-2][j]=="o" && m[i-3][j]=="."){ k=j+1;} //+1 partout pour que cela corresponde après }} for (j=0;j<4;j++){ //Lignes for (i=5;i>-1;i--){ //ici les colonnes seulement de la 1 à la 3 mais lignes de 5 à 0 (en effet on peut faire des lignes sur toute les colonnes) if (m[i][j]=="o" && m[i][j+1]=="o" && m[i][j+2]=="o" && m[i][j+3]=="." ){ k=j+4;} if (m[i][j]=="o" && m[i][j+1]=="o" && m[i][j+3]=="o" && m[i][j+2]=="."){ k=j+3;} if (m[i][j]=="o" && m[i][j+2]=="o" && m[i][j+3]=="o"&& m[i][j+1]=="."){ k=j+2;} if ( m[i][j+1]=="o" && m[i][j+2]=="o" && m[i][j+3]=="o"&& m[i][j]=="."){ k=j+1;} }} for (j=3;j<7;j++){ for (i=5;i>2;i--){ if (m[i][j]=="o" && m[i-1][j-1]=="o" && m[i-2][j-2]=="o" && m[i-2][j-3]!="." && m[i-3][j-3]=="."){ k=j-2;} if (m[i][j]=="o" && m[i-1][j-1]=="o" && m[i-1][j-2]!="." && m[i-3][j-3]=="o" && m[i-2][j-2]=="."){ k=j-1;} if (m[i][j]=="o" && m[i][j-1]!="." && m[i-2][j-2]=="o" && m[i-3][j-3]=="o" && m[i-1][j-1]=="."){ k=j;} if ((i==5) && m[i-1][j-1]=="o" && m[i-2][j-2]=="o" && m[i-3][j-3]=="o"){ k=j;} if (m[i-1][j]!="." && m[i-1][j-1]=="o" && m[i-2][j-2]=="o" && m[i-2][j-3]=="o"&& m[i][j]=="."){ k=j+1; } }} for (j=0;j<4;j++){ for (i=5;i>2;i--){ if (m[i][j]=="o" && m[i-1][j+1]=="o" && m[i-2][j+2]=="o" && m[i-2][j+3]!="." && m[i-3][j+3]=="."){ k=j+4; } if (m[i][j]=="o" && m[i-1][j+1]=="o" && m[i-1][j+2]!="." && m[i-3][j+3]=="o" && m[i-2][j+2]=="."){ k=j+3; } if (m[i][j]=="o" && m[i][j+1]!="." && m[i-2][j+2]=="o" && m[i-3][j+3]=="o" && m[i-1][j+1]=="."){ k=j+2; } if ((i==5) && m[i-1][j+1]=="o" && m[i-2][j+2]=="o" && m[i-3][j+3]=="o"){ k=j;} if (m[i-1][j]!="." && m[i-1][j+1]=="o" && m[i-2][j+2]=="o" && m[i-2][j+3]=="o" && m[i][j]=="."){ k=j+1; } }} //Ensuite la non-defaite : for (j=0;j<7;j++){ for (i=5;i>2;i--){ if (m[i][j]=="x" && m[i-1][j]=="x" && m[i-2][j]=="x" && m[i-3][j]=="."){ k=j+1;} }} for (j=0;j<4;j++){ //Lignes for (i=5;i>-1;i--){ //ici les colonnes seulement de la 1 à la 3 mais lignes de 5 à 0 (en effet on peut faire des lignes sur toute les colonnes) if (m[i][j]=="x" && m[i][j+1]=="x" && m[i][j+2]=="x" && m[i][j+3]=="." ){ k=j+4;} if (m[i][j]=="x" && m[i][j+1]=="x" && m[i][j+3]=="x" && m[i][j+2]=="."){ k=j+3;} if (m[i][j]=="x" && m[i][j+2]=="x" && m[i][j+3]=="x"&& m[i][j+1]=="."){ k=j+2;} if ( m[i][j+1]=="x" && m[i][j+2]=="x" && m[i][j+3]=="x"&& m[i][j]=="."){ k=j+1;} }} for (j=3;j<7;j++){ for (i=5;i>2;i--){ if (m[i][j]=="x" && m[i-1][j-1]=="x" && m[i-2][j-2]=="x" && m[i-2][j-3]!="." && m[i-3][j-3]=="."){ k=j-2;} if (m[i][j]=="x" && m[i-1][j-1]=="x" && m[i-1][j-2]!="." && m[i-3][j-3]=="x" && m[i-2][j-2]=="."){ k=j-1;} if (m[i][j]=="x" && m[i][j-1]!="." && m[i-2][j-2]=="x" && m[i-3][j-3]=="x" && m[i-1][j-1]=="."){ k=j;} if ((i==5) && m[i-1][j-1]=="x" && m[i-2][j-2]=="x" && m[i-3][j-3]=="x"){ k=j+1;} if (m[i-1][j]!="." && m[i-1][j-1]=="x" && m[i-2][j-2]=="x" && m[i-2][j-3]=="x"&& m[i][j]=="."){ k=j+1; } }} for (j=0;j<4;j++){ for (i=5;i>2;i--){ if (m[i][j]=="x" && m[i-1][j+1]=="x" && m[i-2][j+2]=="x" && m[i-2][j+3]!="." && m[i-3][j+3]=="."){ k=j+4; } if (m[i][j]=="x" && m[i-1][j+1]=="x" && m[i-1][j+2]!="." && m[i-3][j+3]=="x" && m[i-2][j+2]=="."){ k=j+3; } if (m[i][j]=="x" && m[i][j+1]!="." && m[i-2][j+2]=="x" && m[i-3][j+3]=="x" && m[i-1][j+1]=="."){ k=j+2; } if ((i==5) && m[i-1][j+1]=="x" && m[i-2][j+2]=="x" && m[i-3][j+3]=="x"){ k=j+1;} if (m[i-1][j]!="." && m[i-1][j+1]=="x" && m[i-2][j+2]=="x" && m[i-2][j+3]=="x" && m[i][j]=="."){ k=j+1; } }}} if (nbjoueur==2) { //choix joueurs System.out.println("\n" +joueur2 + " Tour numero "+tour+ " Choisir la colonne entre 1 et 7 :"); k=Lire.i(); while (k<1 || 77) case 0 : v[j]=v[j]+1; break; //necessaire à la boucle switch case 1 : v[j]=v[j]+1; break; case 2 : v[j]=v[j]+1; break; case 3 : v[j]=v[j]+1; break; case 4 : v[j]=v[j]+1; break; case 5 : v[j]=v[j]+1; break; case 6 : v[j]=v[j]+1; break; } return v[j]; //la valeur v[j] est renvoyé au programme } //Elle correspond à la ligne du jeton public static int verif (String[][] m, String joueur1, String joueur2) { //Troisieme sous programme : le programme de verification qui permet de savoir s'il y a victoire et de qui //Variables ssous programmes int i, j, k, fin; //i, j simplement variable pour définir respectivement ligne et colonne dans le sous programme k=0; //permet de faire le balayage à partir de la case m[i][j] fin=0; //permet de finir le jeu (boucle while fin) for (j=0;j<7;j++){ //Colonnes for (i=5;i>2;i--){ //les i sonts soustraits : du bas vers le haut car la ligne 0 est la plus en haut, et 5 la plus en bas, donc on remonte //on a choisi le bon intervalle ou cela est possible : de la ligne 5 à la ligne 3 car on ajoute jusqu'à -3, donc on a vérifié toutes les cases ou celà était possible if (m[i][j]=="x" && m[i-1][j]=="x" && m[i-2][j]=="x" && m[i-3][j]=="x"){ System.out.println("\n"+joueur1 + " a gagne" +"\n"); fin=1;} if (m[i][j]=="o" && m[i-1][j]=="o" && m[i-2][j]=="o" && m[i-3][j]=="o"){ System.out.println("\n"+joueur2 + " a gagne"+"\n"); fin=1;} }} for (j=0;j<4;j++){ //Lignes for (i=5;i>-1;i--){ //ici les colonnes seulement de la 1 à la 3 mais lignes de 5 à 0 (en effet on peut faire des lignes sur toute les colonnes) if (m[i][j]=="x" && m[i][j+1]=="x" && m[i][j+2]=="x" && m[i][j+3]=="x"){ System.out.println("\n"+joueur1 + " a gagne"+"\n"); fin=1;} if (m[i][j]=="o" && m[i][j+1]=="o" && m[i][j+2]=="o" && m[i][j+3]=="o"){ System.out.println("\n"+joueur2 + " a gagne"+"\n"); fin=1;} }} for (j=3;j<7;j++){ //Diagonale de droite à gauche for (i=5;i>2;i--){ //meme principe if (m[i][j]=="x" && m[i-1][j-1]=="x" && m[i-2][j-2]=="x" && m[i-3][j-3]=="x"){ System.out.println("\n"+joueur1 + " a gagne"+"\n"); fin=1;} if (m[i][j]=="o" && m[i-1][j-1]=="o" && m[i-2][j-2]=="o" && m[i-3][j-3]=="o"){ System.out.println("\n"+joueur2 + " a gagne"+"\n"); fin=1;} }} for (j=0;j<4;j++){ //Diagonale de gauche à droite for (i=5;i>2;i--){ if (m[i][j]=="x" && m[i-1][j+1]=="x" && m[i-2][j+2]=="x" && m[i-3][j+3]=="x"){ //[i-1] car il ne faut pas oublier que l'on démarre à la ligne la plus basse de la matrice et que l'on remonte System.out.println("\n"+joueur1 + " a gagne"+"\n"); fin=1;} if (m[i][j]=="o" && m[i-1][j+1]=="o" && m[i-2][j+2]=="o" && m[i-3][j+3]=="o"){ System.out.println("\n"+joueur2 + " a gagne"+"\n"); fin=1;} }} return fin; } }