J'ai ajouté un ércan de fin quand le taquin est complété , mais il y a d'autres chose a réglé comme le fait que le nombre de ligne et cologne était des constante ,la case vide doit être en haut a gauche et pas en bas a droite , et rajouter des déplacements avec la souris et pas juste les fléches
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#define NB_LIGNES 4
|
||||||
|
#define NB_COLS
|
||||||
|
|
||||||
|
#define TAILLE_CASE 100
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
#ifndef CONFIG_H
|
#ifndef CONFIG_H
|
||||||
#define CONFIG_H
|
#define CONFIG_H
|
||||||
|
/*La grille doit être en 3 et 8 */
|
||||||
#define NB_LIGNES 4
|
#define MAX_TAILLE 8
|
||||||
#define NB_COLS 4
|
|
||||||
|
|
||||||
#define TAILLE_CASE 100
|
#define TAILLE_CASE 100
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
int main(void){
|
int main(void){
|
||||||
int grille[NB_LIGNES][NB_COLS], touche;
|
int grille[NB_LIGNES][NB_COLS], touche;
|
||||||
char *nom_image = NULL;
|
char *nom_image = NULL;
|
||||||
int choix_fait = 0;
|
int choix_fait = 0,jeu_fini = 0;
|
||||||
|
|
||||||
init_affichage();
|
init_affichage();
|
||||||
|
|
||||||
@@ -26,21 +26,20 @@ int main(void){
|
|||||||
if(ToucheEnAttente()) {
|
if(ToucheEnAttente()) {
|
||||||
touche = Touche();
|
touche = Touche();
|
||||||
|
|
||||||
printf("Touche reçue : %d (Caractère : %c)\n", touche, (char)touche);
|
|
||||||
|
|
||||||
if(touche == '1' || touche == 38) {
|
if(touche == XK_1 || touche == XK_KP_1) {
|
||||||
nom_image = "image1.png";
|
nom_image = "image1.png";
|
||||||
choix_fait = 1;
|
choix_fait = 1;
|
||||||
}
|
}
|
||||||
else if(touche == '2' || touche == 233) {
|
else if(touche == XK_2 || touche == XK_KP_2) {
|
||||||
nom_image = "image2.png";
|
nom_image = "image2.png";
|
||||||
choix_fait = 2;
|
choix_fait = 2;
|
||||||
}
|
}
|
||||||
else if(touche == '3' || touche == 34) {
|
else if(touche == XK_3 || touche == XK_KP_3) {
|
||||||
nom_image = "image3.png";
|
nom_image = "image3.png";
|
||||||
choix_fait = 3;
|
choix_fait = 3;
|
||||||
}
|
}
|
||||||
else if(touche == 'q' || touche == 27) {
|
else if(touche == XK_q || touche == XK_Q) {
|
||||||
fermer_affichage();
|
fermer_affichage();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -55,23 +54,38 @@ int main(void){
|
|||||||
|
|
||||||
afficher_plateau(grille);
|
afficher_plateau(grille);
|
||||||
|
|
||||||
while(1){
|
while(jeu_fini == 0){
|
||||||
|
|
||||||
if (ToucheEnAttente()){
|
if (ToucheEnAttente()){
|
||||||
touche = Touche();
|
touche = Touche();
|
||||||
|
|
||||||
/* Pour quitter cliquer sur q minuscule ou Escape (27) */
|
/* Pour quitter on clique sur q */
|
||||||
if (touche == 'q' || touche == 27) break;
|
if (touche == XK_q || touche == XK_Q) break;
|
||||||
|
|
||||||
/* Debug : affiche le code touche */
|
|
||||||
printf("Touche appuyée : %d\n", touche);
|
|
||||||
|
|
||||||
/* Déplacement et mise a jour de l'affichage */
|
/* Déplacement +on affiche la nouvelle grille */
|
||||||
deplacer(grille, touche);
|
deplacer(grille, touche);
|
||||||
afficher_plateau(grille);
|
afficher_plateau(grille);
|
||||||
|
/*On vérifie si on a gagner */
|
||||||
|
if(verifier_victoire(grille) == 1 ){
|
||||||
|
jeu_fini = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (jeu_fini == 1){
|
||||||
|
ChoisirCouleurDessin(CouleurParNom("white"));
|
||||||
|
RemplirRectangle(50,150,300,100);
|
||||||
|
|
||||||
|
ChoisirCouleurDessin(CouleurParNom("red"));
|
||||||
|
EcrireTexte(60,200,"Bravo",2);
|
||||||
|
EcrireTexte(60,230,"Appuyer pour quitter...",1);
|
||||||
|
|
||||||
|
Touche();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fermer_affichage();
|
fermer_affichage();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|||||||
@@ -3,11 +3,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
/* Codes des touches avec les fleches (standards X11) */
|
#include <graph.h>
|
||||||
#define FL_GAUCHE 65361
|
|
||||||
#define FL_HAUT 65362
|
|
||||||
#define FL_DROITE 65363
|
|
||||||
#define FL_BAS 65364
|
|
||||||
|
|
||||||
void initialiser_plateau(int grille[NB_LIGNES][NB_COLS]){
|
void initialiser_plateau(int grille[NB_LIGNES][NB_COLS]){
|
||||||
int i, j;
|
int i, j;
|
||||||
@@ -34,23 +31,24 @@ void deplacer(int grille[NB_LIGNES][NB_COLS], int touche) {
|
|||||||
for(i = 0; i < NB_LIGNES; i++) {
|
for(i = 0; i < NB_LIGNES; i++) {
|
||||||
for(j = 0; j< NB_COLS; j++) {
|
for(j = 0; j< NB_COLS; j++) {
|
||||||
if (grille[i][j] == 0) {
|
if (grille[i][j] == 0) {
|
||||||
|
/*vide i/j est l'adresse du trou*/
|
||||||
vide_i = i;
|
vide_i = i;
|
||||||
vide_j = j;
|
vide_j = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* INiitialisation cible */
|
/*cible i/j c'est l'adress de la case voisine qu'on veut faire glisser */
|
||||||
cible_i = vide_i;
|
cible_i = vide_i;
|
||||||
cible_j = vide_j;
|
cible_j = vide_j;
|
||||||
|
|
||||||
/* Calculer la cible */
|
/* Calculer la cible */
|
||||||
if(touche == FL_GAUCHE) cible_j = vide_j + 1;
|
if(touche == XK_Left) cible_j = vide_j - 1;
|
||||||
if(touche == FL_DROITE) cible_j = vide_j - 1;
|
if(touche == XK_Right) cible_j = vide_j + 1;
|
||||||
if(touche == FL_HAUT) cible_i = vide_i + 1;
|
if(touche == XK_Up) cible_i = vide_i - 1;
|
||||||
if(touche == FL_BAS) cible_i = vide_i - 1;
|
if(touche == XK_Down) cible_i = vide_i + 1;
|
||||||
|
|
||||||
/* Vérifier les murs */
|
/* Vérifier les bords */
|
||||||
if (cible_i < 0 || cible_i >= NB_LIGNES ||
|
if (cible_i < 0 || cible_i >= NB_LIGNES ||
|
||||||
cible_j < 0 || cible_j >= NB_COLS) {
|
cible_j < 0 || cible_j >= NB_COLS) {
|
||||||
return;
|
return;
|
||||||
@@ -74,15 +72,33 @@ void melanger_plateau(int grille[NB_LIGNES][NB_COLS]) {
|
|||||||
/* tirage d'un nombre entre 0 et 3 */
|
/* tirage d'un nombre entre 0 et 3 */
|
||||||
direction = rand() % 4;
|
direction = rand() % 4;
|
||||||
|
|
||||||
/* On convertit ce nombre en code de touche fléchée */
|
if (direction == 0)touche_aleatoire = XK_Left;
|
||||||
/* Rappel : FL_GAUCHE vaut 65361 donc 65361 + 0, 1, 2 ou 3 donne les 4 flèches */
|
else if (direction == 1)touche_aleatoire = XK_Up;
|
||||||
touche_aleatoire = FL_GAUCHE + direction;
|
else if (direction == 2)touche_aleatoire = XK_Right;
|
||||||
|
else touche_aleatoire = XK_Down;
|
||||||
if (i < 5) {
|
|
||||||
printf("DEBUG: Coup %d, Direction %d, Touche %d\n", i, direction, touche_aleatoire);
|
|
||||||
}
|
|
||||||
/* On joue le coup */
|
|
||||||
deplacer(grille, touche_aleatoire);
|
deplacer(grille, touche_aleatoire);
|
||||||
}
|
}
|
||||||
printf("---DEBUG: Fin du mélange ! ---\n");
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int verifier_victoire(int grille[NB_LIGNES][NB_COLS]){
|
||||||
|
int i,j,compteur = 1;
|
||||||
|
for(i = 0; i < NB_LIGNES; i++) {
|
||||||
|
for(j = 0; j< NB_COLS; j++) {
|
||||||
|
/*La dernière case en bas a droite doit être vide */
|
||||||
|
if (i == NB_LIGNES - 1 && j == NB_COLS - 1){
|
||||||
|
if(grille[i][j] != 0){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/*les autres cases doivent être dans l'orde*/
|
||||||
|
if(grille[i][j] != compteur){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
compteur++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,11 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
void initialiser_plateau(int grille[NB_LIGNES][NB_COLS]);
|
void initialiser_plateau(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_cologne);
|
||||||
/*Nouvelle fonction pour gérer le déplacment */
|
void deplacer(int grille[MAX_TAILLE][MAX_TAILLE], int touche);
|
||||||
void deplacer(int grille[NB_LIGNES][NB_COLS], int touche);
|
void deplacer_souris(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_cologne,int clic_x,int clic_y);
|
||||||
|
void melanger_plateau(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_cologne);
|
||||||
|
|
||||||
void melanger_plateau(int grille[NB_LIGNES][NB_COLS]);
|
int verifier_victoire(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_cologne);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user