|
int LONGUEUR_SERPENT_MAX = 500, longueur_serpent = 5; int pos_serpent[][] = new int [2] [LONGUEUR_SERPENT_MAX ]; int pos_pomme[] = new int [2]; int X = 0, Y = 1; // constante qui permettent de parcourir les tableaux à 2 dimensions int dep_X =0, dep_Y =1; // variable qui définissent la valeur du déplacement du serpent int TAILLE_ECRAN = 50; int score =0; int vitesse = 200; int choix; boolean jouer; boolean rejouer = true; String INSTRUCTIONS = "Le but du jeu est d’obtenir le serpent le plus long sans toucher les bords ni le serpent lui-même sous peine de perdre.\n Pour grandir et accélérer le serpent doit manger des fruits qui sont parsemés le long de l’interface de jeu. \nPour rétrécir et ralentir le serpent doit manger des pommes bleues"; void main() { menu(); } // début des fonctions void ecrit_menu(String texte, int positionV) { int lettresETchiffres [][][] = { { { 0,1,1,0} ,{ 1,0,0,1} ,{ 1,1,1,1} ,{ 1,0,0,1} ,{ 1,0,0,1} } ,//a { { 1,1,1,0} ,{ 1,0,1,0} ,{ 1,1,1,0} ,{ 1,0,0,1} ,{ 1,1,1,0} } ,//b { { 0,1,1,1} ,{ 1,0,0,0} ,{ 1,0,0,0} ,{ 1,0,0,0} ,{ 0,1,1,1} } ,//c { { 1,1,1,0} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,1,1,0} } ,//d { { 1,1,1,1} ,} 1,0,0,0} ,{ 1,1,0,0} ,{ 1,0,0,0} ,{ 1,1,1,1} } ,//e { { 1,1,1,1} ,{ 1,0,0,0} ,{ 1,1,0,0} ,{ 1,0,0,0} ,{ 1,0,0,0} } ,//f { { 0,1,1,0} ,{ 1,0,0,0} ,{ 1,0,1,1} ,{ 1,0,1,0} ,{ 0,1,1,0} } ,//g { { 1,0,0,1} ,{ 1,0,0,1} ,{ 1,1,1,1} ,{ 1,0,0,1} ,{ 1,0,0,1} } ,//h { { 0,1,1,1} ,{ 0,0,1,0} ,{ 0,0,1,0} ,{ 0,0,1,0} ,{ 0,1,1,1} } ,//i { { 1,1,1,1} ,{ 0,0,1,0} ,{ 0,0,1,0} ,{ 0,0,1,0} ,{ 1,1,0,0} } ,//j { { 1,0,0,1} ,{ 1,0,1,0} ,{ 1,1,0,0} ,{ 1,1,0,0} ,{ 1,0,0,1} } ,//k { { 1,0,0,0} ,{ 1,0,0,0} ,{ 1,0,0,0} ,{ 1,0,0,0} ,{ 1,1,1,1} } ,//l { { 1,0,0,1} ,{ 1,1,1,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} } ,//m { { 1,0,0,1} ,{ 1,1,0,1} ,{ 1,0,1,1} ,{ 1,0,0,1} ,{ 1,0,0,1} } ,//n { { 0,1,1,0} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 0,1,1,0} } ,//o { { 1,1,1,0} ,{ 1,0,0,1} ,{ 1,1,1,0} ,{ 1,0,0,0} ,{ 1,0,0,0} } ,//p { { 0,1,1,0} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,1,1} ,{ 1,1,1,1} } ,//q { { 1,1,1,0} ,} 1,0,0,1} ,{ 1,1,1,0} ,{ 1,0,1,0} ,{ 1,0,0,1} } ,//r { { 0,1,1,1} ,{ 1,0,0,0} ,{ 0,1,0,0} ,{ 0,0,1,0} ,{ 1,1,1,1} } ,//s { { 1,1,1,1} ,{ 0,1,0,0} ,{ 0,1,0,0} ,{ 0,1,0,0} ,{ 0,1,0,0} } ,//t { { 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 0,1,1,0} } ,//u { { 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 0,1,1,0} ,{ 0,1,1,0} } ,//v { { 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,1,1,1} ,{ 1,0,0,1} } ,//w { { 1,0,0,1} ,{ 1,0,0,1} ,{ 0,1,1,0} ,{ 0,1,1,0} ,{ 1,0,0,1} } ,//x { } 1,0,0,1} ,{ 0,1,1,0} ,{ 0,1,0,0} ,{ 0,1,0,0} ,{ 0,1,0,0} } ,//y { { 1,1,1,1} ,{ 0,0,0,1} ,{ 0,0,1,0} ,{ 0,1,0,0} ,{ 1,1,1,1} } ,//z { { 0,0,0,0} ,{ 0,0,0,0} ,{ 0,0,0,0} ,{ 0,0,0,0} ,{ 0,0,0,0} } ,//espace { { 0,1,1,0} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 0,1,1,0} } ,// 0 { { 0,0,1,0} ,{ 0,1,1,0} ,{ 1,0,1,0} ,{ 0,0,1,0} ,{ 0,0,1,0} } ,// 1 } { 0,1,1,0} ,{ 1,0,0,1} ,{ 0,0,1,0} ,{ 0,1,0,0} ,{ 1,1,1,1} } ,// 2 { { 1,1,1,1} ,{ 0,0,1,0} ,{ 0,1,0,0} ,{ 1,1,1,0} ,{ 1,1,1,0} } ,// 3 { { 1,0,0,1} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 1,1,1,1} ,{ 0,0,0,1} } ,// 4 { { 1,1,1,1} ,{ 1,0,0,0} ,{ 1,0,0,0} ,{ 0,1,1,1} ,{ 1,1,1,0} } ,// 5 { { 0,1,1,1} ,{ 1,0,0,0} ,} 1,0,0,0} ,{ 1,1,1,0} ,{ 0,1,1,0} } ,// 6 { { 1,1,1,1} ,{ 0,0,0,1} ,{ 0,0,1,0} ,{ 0,1,0,0} ,{ 1,0,0,0} } ,// 7 { { 0,1,1,0} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 0,1,1,0} ,{ 0,1,1,0} } ,// 8 { { 0,1,1,0} ,{ 1,0,0,1} ,{ 1,0,0,1} ,{ 0,1,1,1} ,{ 1,1,1,0} } // 9 } ; int ligne = 2, colonne = 1, index = 0; for (int i = 0; i < texte.length(); i ++) { if ((int)texte.charAt(i) == 32) index = (int)'z' - (int)'a' +1; else if ((int)texte.charAt(i) >= (int)'0' && (int)texte.charAt(i) <= (int)'9') index = (int)'z' - (int)'a' +2 + (int)texte.charAt(i) - (int)'0'; else index = (int)texte.charAt(i) - (int)'a'; for (int ligne_i =0; ligne_i <5; ligne_i ++) { for (int colonne_j =0; colonne_j <4; colonne_j ++) { if (lettresETchiffres[index][ligne_i][colonne_j] == 0) setPixel(colonne+colonne_j, ligne+ligne_i + positionV, "white"); else setPixel(colonne+colonne_j, ligne+ligne_i + positionV, "pink"); } } colonne = colonne+5; } } void initialisation_variable() { /* Fonction qui permet d'initialiser les variable chque fois qu'une partie se termine et que le joueur veut rejouer*/ longueur_serpent = 5; dep_X =0; dep_Y =1; score =0; vitesse = 200; choix = 0; jouer = false; rejouer = false; } void initialisation_jeu() { /* Fonction qui permet d'initialiser les variable chque fois qu'une partie se termine et que le joueur veut rejouer*/ Thread clavier = new Thread(new ecoute_clavier(), "clavier"); setKeyListener(clavier); dessine_ecran(TAILLE_ECRAN); sleep(100); choix_position_pomme(); pos_initiale(pos_serpent, longueur_serpent, TAILLE_ECRAN); } void menu() { dessine_ecran(TAILLE_ECRAN); affiche_menu(); // appel de la fonction qui affiche le menu au joueur choix = readInteger(" Que desirez-vous ?"); clear(); do{ if (choix == 1) { // Si le joueur veut jouer alors il a sélectionner choix=1 while (rejouer == true) { // boucle qui permet de faire rejouer le joueur si il le souhaite à la fin de la partie initialisation_variable(); initialisation_jeu(); //appel de fonction qui permettent d'initialiser la partie boucle_jeu(); //boucle qui permet de jouer } choix=3; /* jouer prend la valeur faux pour permettre de sortir de la boucle tant que do while et d'arrêter le programme.*/ } if (choix ==2) { //Si le joueur à choisit choix 2 c'est pour lire les règles du jeu println(INSTRUCTIONS); sleep(20000); //Cela permet d'afficher les règles du jeu pendant 20sec clear(); // instruction qui permet d'effacer le contenue sur la console menu(); //instruction qui rappel la fonction menu du début on sort donc du if (choix==2) } if (choix ==3) { //si le joueur veut sortir du jeu alors il choisit 3 jouer = false; /*instruction qui permet de sortir de la boucle do while qui s'éxecute tant que jouer est différent de false et donc du programme*/ } if (choix !=1 && choix !=2 && choix !=3) { menu(); /*si le joueur choisit autre chose que les nombres 1,2 ou3 alors on lui redemande de choisir un nombre en ré-éxecutant le menu*/ } } while (jouer != false); // boucle qui permet de sortir du programme ecrit_menu("au revoir", TAILLE_ECRAN /2); } void boucle_jeu() { while (test_collision(dep_X, dep_Y) == false && mange_lui_meme() == false) { sleep(vitesse); dessine_serpent(false); deplace_serpent(dep_X, dep_Y); if (test_pomme() == true ) { choix_position_pomme(); dessine_serpent(true); } dessine_serpent(true); } setKeyListener(null); // Permet d'éteindre l'écoute clavier perdu(); rejouer = readBoolean("Voulez-vous rejouer?"); } void perdu() { for (int i =0; i < TAILLE_ECRAN; i ++) { setPixel(i, i, "red"); } println("Votre score est :" + score); } class ecoute_clavier extends Thread { String direction; public void run() { direction = getLastKey(); //variable stockant la direction correspondant à la dernière touche pressé par le joueur changement_direction(direction); /* la variable direction permet alors d'exécuter la fonction changement_direction et d'orienter le serpent dans le bon sens*/ } } void dessine_ecran(int taille_ecran) { reset(taille_ecran, taille_ecran, false); // instruction qui permet d'initialiser un écran de taille 50 dessine_cadre(); //fonction qui permet de dessiner un cadre autour de l'écran } boolean mange_lui_meme() { //fonction qui vérifie si le serpent se rentre dedans for (int i =1; i < longueur_serpent; i ++) { if (pos_serpent [X][i] == pos_serpent [X][0] && pos_serpent [Y][i] == pos_serpent [Y][0]) { return true; /*si les coordonnées de la tête du serpent et celle du reste du serpent sont les même en abscisse ou en ordonnées alors la fonction renvoie true et le joueur a perdu*/ } } return false; } boolean test_pomme() { if (pos_serpent[X][0] == pos_pomme[X] && pos_serpent[Y][0] == pos_pomme[Y]) { score += 20; agrandir_serpent(5); vitesse -= 10; return true; } else { return false; } } void agrandir_serpent(int longueur_en_plus) { if (longueur_serpent + longueur_en_plus > LONGUEUR_SERPENT_MAX) return ; for (int i =0; i < longueur_en_plus; i ++) { pos_serpent[X][longueur_serpent + i] = pos_serpent[X][longueur_serpent -1]; pos_serpent[Y][longueur_serpent + i] = pos_serpent[Y][longueur_serpent -1]; } longueur_serpent += longueur_en_plus; } boolean test_pommeb() { if (pos_serpent[X][0] == pos_pomme[X] && pos_serpent[Y][0] == pos_pomme[Y]) { score -= 20; retrecir_serpent(5); vitesse -= 10; return true; } else { return false; } } void choix_position_pommeb() { pos_pomme[X] = random(1, TAILLE_ECRAN -2); pos_pomme[Y] = random(1, TAILLE_ECRAN -2); setPixel(pos_pomme[X], pos_pomme[Y], "blue"); } void retrecir_serpent(int longueur_en_plus) { if (longueur_serpent + longueur_en_plus > 5) return ; for (int i =0; i < longueur_en_plus; i ++) { pos_serpent[X][longueur_serpent - i] = pos_serpent[X][longueur_serpent +1]; pos_serpent[Y][longueur_serpent - i] = pos_serpent[Y][longueur_serpent +1]; } longueur_serpent -= longueur_en_plus; } void choix_position_pomme() { pos_pomme[X] = random(1, TAILLE_ECRAN -2); pos_pomme[Y] = random(1, TAILLE_ECRAN -2); setPixel(pos_pomme[X], pos_pomme[Y], "red"); } boolean test_collision(int dep_X, int dep_Y) { if (pos_serpent[X][0] + dep_X == -1 | pos_serpent[X][0] + dep_X == TAILLE_ECRAN) { return true; /* on vérifie que la position de la tête du serpent sur l'axe des abscisses plus le déplacement selon l'axe des abscisses est la même que l'un des côtés de l'écran alors le joueur à perdu*/ } if (pos_serpent[Y][0] + dep_Y == -1 | pos_serpent[Y][0] + dep_Y == TAILLE_ECRAN) { /* on vérifie que la position de la tête du serpent sur l'axe des ordonnées plus le déplacement selon l'axe des ordonnées est la même que l'un des côtés de l'écran alors le joueur à perdu*/ return true; } return false; } void pos_initiale(int pos_serpent[][], int longueur_serpent, int taille_ecran) { // fonction qui initialise la place du serpent à l'horizontale au centre de l'écran for (int i =0; i <= longueur_serpent -1; i ++) { if (i ==0) { pos_serpent[X][i] = taille_ecran /2; // permet d'afficher la tête du serpent au centre sur l'axe des abscisses pos_serpent[Y][i] = taille_ecran /2; //permet d'affiche la tête du serpent au centre sur l'axe des ordonnées } else { pos_serpent[X][i] = pos_serpent[X][i -1] +1; /*instruction qui attribue à la partie du tableau correspondant à celle qui stocke les abscisses des points du serpent , de prendre la valeur de l'indice précédent en ajoutant 1 pour que celle ci ne se chevauche pas*/ pos_serpent[Y][i] = pos_serpent[Y][i -1]; /*instruction qui attribue à la partie du tableau correspondant à celle qui stocke les ordonnées des points du serpent , de prendre la valeur de l'indice précédent sachant que le serpent est à l'horizontale*/ } } } void deplace_serpent(int dep_X, int dep_Y) { for (int i = longueur_serpent -1; i >= 0; i --) { if (i == 0) { pos_serpent[X][i] = pos_serpent[X][i] + dep_X; // permet de faire avancer la tête du serpent en ajoutant la valeur du déplacment des abscisses pos_serpent[Y][i] = pos_serpent[Y][i] + dep_Y; // permet de faire avancer la tête du serpent en ajoutant la valeur du déplacment des ordonnées } else { pos_serpent[X][i] = pos_serpent[X][i -1]; //permet de décaler les coordonnées des abscisses du serpent vers la droite dans le tableau pos_serpent[Y][i] = pos_serpent[Y][i -1]; //permet de décaler les coordonnées des ordonnées du serpent vers la droite dans le tableau } } } void dessine_serpent(boolean affiche) { if (affiche == true) { // si on veut afficher la serpent alors la variable affiche vaut true setPixel(pos_serpent[X][0], pos_serpent[Y][0], "magenta"); //permet de dessiner la tête du serpent et de le distinguer la tête du serpent qui est magenta for (int i =1; i < longueur_serpent; i ++) { setPixel(pos_serpent[X][i], pos_serpent[Y][i], "green"); // permet d'afficher le reste du serpent en vert } } else { // si affiche vaut false alors tous les pixels su serpent sont colorés en blanc même couleur que le fond for (int i =0; i < longueur_serpent; i ++) { setPixel(pos_serpent[X][i], pos_serpent[Y][i], "white"); } } } void dessine_cadre() { for (int i =0; i < TAILLE_ECRAN; i ++) { // permet d'afficher les barres horizontales qui forment le cadre du jeu setPixel(i, 0, "grey"); // on a les ordonnées qui valent 0 donc il s'agit de la barre du haut setPixel(i, TAILLE_ECRAN -1, "grey"); // on a les ordonnées qui valent TAILLE_ECRAN-1 donc il s'agit de la barre du bas sleep(10); } for (int i =0; i < TAILLE_ECRAN; i ++) { // permet de dessiner les barres verticales qui forment le cadre du jeu setPixel(0, i, "grey"); // on a les abscisses qui valent 0 donc il s'agit de la barre du gauche setPixel(TAILLE_ECRAN -1, i, "grey"); // on a les abscisses qui valent TAILLE_ECRAN-1 donc il s'agit de la barre du droite sleep(10); } } void changement_direction(String direction) { if (dep_X == 1 && dep_Y == 0) { if (direction == "Bas") { dep_Y = 1; dep_X = 0; } if (direction == "Haut") { dep_Y = -1; dep_X = 0; } return ; } if (dep_X == 0 && dep_Y == 1) { if (direction == "Gauche") { dep_X = -1; dep_Y = 0; } if (direction == "Droite") { dep_Y = 0; dep_X = 1; } return ; } if (dep_X == -1 && dep_Y == 0) { if (direction == "Haut") { dep_Y = -1; dep_X =0; } if (direction == "Bas") { dep_Y = 1; dep_X = 0; } return ; } if (dep_X == 0 && dep_Y == -1) { if (direction == "Droite") { dep_Y = 0; dep_X = 1; } if (direction == "Gauche") { dep_Y = 0; dep_X = -1; } return ; } } void affiche_menu() { ecrit_menu("1 jouer", 3); ecrit_menu("2 regles", 10); ecrit_menu("3 sortir", 17); } |
Retour