diff --git a/docs/grammaire.txt b/docs/grammaire.txt new file mode 100644 index 0000000..bae9040 --- /dev/null +++ b/docs/grammaire.txt @@ -0,0 +1,84 @@ +Version modifiable: + + +Alphabet {ε , arène[1 à n], perso[1 à n], perso[1 à n] (bot), joueur 1, joueur 2, bot, + j1, j2, ordi, a, b, x, y, l1, r1, haut, bas, droite, gauche, egalite, vrai, faux, n, s, + + } + + +JEU -> PARTIE | QUITTER +QUITTER -> ε +PARTIE -> ARENE PERSO JOUEUR, PERSO JOUEUR, ROUND1 | QUITTER +ARENE -> arene1 | arene2 | ... | arene n +PERSO -> perso1 | perso2| ....| perso n | BOT +BOT -> perso1 (bot) | perso2 (bot) | ....| perso n (bot) +ROUND1 -> ROUND, VAINQUEUR ,ROUND2 +ROUND2 -> ROUND, VAINQUEUR ,ROUND3 | ROUND, VAINQUEUR, JOUEUR, QUITTER +ROUND3 -> ROUND,VAINQUEUR, JOUEUR, QUITTER +ROUND -> JOUEUR ACTION JOUEUR ACTION +ACTION -> ATTAQUE | DEPLACEMENT | DEFENSE | FIN DE TIMER | GAGNE | (+ cas ou le joueur ne bouge pas) +ATTAQUE -> n,NORMAL | s,SPECIAL +SPECIAL -> a SUCCES ACTION | b SUCCES ACTION | x SUCCES ACTION | y SUCCES ACTION | (+combinaison de touche)SUCCES ACTION +NORAML -> a SUCCES ACTION | b SUCCES ACTION | x SUCCES ACTION | y SUCCES ACTION | (+combinaison de touche)SUCCES ACTION +SUCCES -> vrai | faux +DEPLACEMENT -> haut ACTION | bas ACTION | droite ACTION | gauche ACTION |(+combinaison de touche)ACTION +DEFENSE -> l1 ACTION | r1 ACTION +FIN DE TIMER -> egalite +GAGNE -> vrai | faux +VAINQUEUR -> joueur 1 | joueur 2 | bot | egalite +JOUEUR -> j1 | j2 | ordi + + + + + + + + + + +extension a inserer de dans la grammaire + +action (+ cas ou le joueur ne bouge pas) + +attaque/deplacement (combinaison de touche)ACTION + +est ce que toute les commandes ne devriat pas être directement dans action? + + + + + +ex: arène2 Perso3 j1 Perso1 j2 (liste des actions1) joueur2 (liste des actions2)joueur1 (liste des actions3)joueur1 j1 ε + +"lsite des actions" correspond a action durant un ROUND (expliqué plus bas) + +signifie que dans la partie, l'arène 2 a été selectionné, le joueur 1 a pris le personnage 3 le joueur 2 le personnage 1, +les joueurs ont effectué une liste d'action qui ont fait que le joueur2 gagne la première manche, les joueurs ont effectué une +liste d'action qui ont fait que le joueur1 la seconde, les joueurs ont effectué une +liste d'action qui ont fait que le joueur 1 la troisième, le joueur 1 +gagne donc la partie, la partie prends fin + +ex: +liste de actions1: j1 gauche n a vrai s b faux n x vrai s l1 vrai droite....faux faux j2 droite n b vrai n b vrai s a faux ....true true + +le joueur 1 a d'abord effectué (dans l'ordre) un deplacement à "gauche", puis une attaque "n" normal correspondant a la touche "a" +qui a aboutit "vrai", puis il a lancé une attaque spécial "s" en appuyant sur "b" mais elle n'a pas aboutit.... il n'a pas +gagné ce round, ("faux" avant le j2), le joueur 2 a appuyé (dans l'ordre) sur les touches "droite", "b", "b", "a".... et a remporté ce round. + + + +ex2: arène1 Perso1 j1 Perso1(bot) ordi (liste des actions1) egalite (liste des actions2) bot (liste des actions3) bot ordi ε + +signifie que, l'arène 1 a été selectionné, le joueur1 a pris le perso1 , il a joué contre un ordi qui a pris le joueur1, +le premier round n'a pas donné de vaiqueur (a cause du timer), le bot gagne le second round, le bot gagne le troisième +round, l'ordi gagne donc la partie, la partie prends fin + +ex: +liste de actions1: j1 gauche n a faux s b faux n x faux l1 s y vrai.... egalite ordi droite n b vrai n b vrai s a faux.... egalite + +signifie que le joueur 1 a appuyé (dans l'ordre) sur les touches "gauche", "a", "b", "x", "l1",... le timer a été +écoulé il y a une égalité, le bot a appuyé (dans l'ordre) sur les touches "droite", "b", "b", "a"....le timer a été +écoulé il y a une égalité + diff --git a/docs/syntaxe.txt b/docs/syntaxe.txt new file mode 100644 index 0000000..94a581f --- /dev/null +++ b/docs/syntaxe.txt @@ -0,0 +1,27 @@ + +(interface graphique) + +Launcher -> fct Start qui permet de lancer le menu afin de configurer la partie, elle ne prends aucun paramêtre + +Menu -> fct Selection qui permet de choisir une arene et un joueur + + +(moteur du jeu) + +Engine -> fct game qui lance le moteur du jeu avec les configuration correspondant a "Config" (ex:arène et skin perso) + +(gameplay) + + ->fct _ qui lance la boucle du jeu (cf gameplay_loop2.drawio) + + +element moteur du jeu (https://docs.google.com/document/d/1eCxAiBJTWdCK0AfzmLIlXzun_GEAG0jeMs8qg8kWJqs/edit) + + + +Config -> toute les config selectionné dans le menu (arene, nb_joueur, perso) + Config est un tableau (d'entier?) + + + + diff --git a/src/configuration/Config.java b/src/configuration/Config.java new file mode 100644 index 0000000..2048aea --- /dev/null +++ b/src/configuration/Config.java @@ -0,0 +1,165 @@ +package configuration; + +import java.util.Random; + +public class Config { + + // tester a la main (okay normalement mais ajouter des test) + public static void main(String[] args) { + int[] tempfortest = { 0, 2, 1, 1 }; // {arene/nb_joueur/perso1/perso2} 0=alatoire + config(tempfortest); + } + + // les variable a configurer + // sel1 pour savoir si on a deja selectionner le joueur 1 + + public static String arene, perso1, perso2; + public static int nb_joueur; + private static boolean sel1 = false; + + /* + * fonction config qui prend en entre un tableau d'entier chaque case + * correspondant a une variable, et ne retourne rien mais modifie la valeur des + * variables par des fonctions annexes + */ + + private static void config(int[] tab) { + int i = 0; + while (i < tab.length) { + + switch (i) { + case 0: + SelArene(tab[i]); + i++; + break; + + case 1: + NbJoueur(tab[i]); + i++; + break; + + case 2: + SelPerso(tab[i]); + i++; + break; + + case 3: + SelPerso(tab[i]); + i++; + break; + /* + * case 4: ? + */ + + default: + System.out.println("ERROR OUT OF BOUNDS CONFIG ARRAY"); + i = tab.length; + break; + } + } + System.out.println(arene + " " + nb_joueur + " " + perso1 + " " + perso2 + " " + sel1); + } + + /* + * fonction SelArene prend un entier en parametre et permet de choisir l'arene + * du jeu + */ + + private static void SelArene(int s) { + switch (s) { + case 0: + SelArene(random(1, 2)); + break; + case 1: + arene = "arene1.png"; + break; + + case 2: + arene = "arene2.png"; + break; + + default: + System.out.println("ERROR ARENE INEXISTANTE"); + } + } + + /* + * fonction NbJoueur prend un entier en parametre et permet de determiner si un + * bot sera necessaire + */ + + private static void NbJoueur(int s) { + switch (s) { + case 1: + nb_joueur = 1; + break; + + case 2: + nb_joueur = 2; + break; + default: + System.out.println("ERROR NUMBER OF PLAYER"); + } + + } + + /* + * fonction SelArene prend un entier en parametre et permet de choisir le + * personnage en fonction du joueur + */ + + private static void SelPerso(int s) { + if (sel1 == false) { + switch (s) { + case 0: + SelPerso(random(1, 2)); + break; + case 1: + perso1 = "perso1.png"; + sel1 = true; + break; + case 2: + perso1 = "perso2.png"; + sel1 = true; + break; + default: + System.out.println("ERROR PERSO INEXISTANT"); + } + } else if (sel1 == true) { + + switch (s) { + case 0: + SelPerso(random(1, 2)); + break; + + case 1: + perso2 = "perso1.png"; + sel1 = false; + if (perso1 == perso2) { + perso2 = "perso1_swapcolor.png"; + } + break; + + case 2: + perso2 = "perso2.png"; + sel1 = false; + if (perso1 == perso2) { + perso2 = "perso2_swapcolor.png"; + } + break; + default: + System.out.println("ERROR PERSO INEXISTANT"); + } + } else { + System.out.println("ERROR SELECTION PLAYER"); + } + } + + // fonction nombre aleatoire entre deux borne + private static int random(int min, int max) { + Random random = new Random(); + int value = random.nextInt(max - 1 + min) + min; + return value; + } + +} diff --git a/textures/perso1_sprite(to update).png b/textures/perso1_sprite(to update).png new file mode 100644 index 0000000..2250e81 Binary files /dev/null and b/textures/perso1_sprite(to update).png differ