save & load
This commit is contained in:
parent
bca387a6dc
commit
8b439c694f
3
makefile
3
makefile
@ -3,7 +3,7 @@ CFLAGS=-Wall -g -std=c99 -c
|
|||||||
#-lm `sdl-config --cflags --libs` -lSDL_ttf
|
#-lm `sdl-config --cflags --libs` -lSDL_ttf
|
||||||
LDFLAGS=-std=c99 -lm `sdl-config --cflags --libs` -lSDL_ttf -lSDL_gfx -lSDL_mixer -lSDL_image
|
LDFLAGS=-std=c99 -lm `sdl-config --cflags --libs` -lSDL_ttf -lSDL_gfx -lSDL_mixer -lSDL_image
|
||||||
EXEC=bin/hex
|
EXEC=bin/hex
|
||||||
SRC=src/hex.c src/affichage_plateau.c src/action_plateau.c src/affichage_menu_principal.c src/window.c src/param.c src/en_jeu.c src/menu_principal.c src/draw.c src/action_menu_principal.c src/sound.c src/testJeu.c
|
SRC=src/hex.c src/affichage_plateau.c src/action_plateau.c src/affichage_menu_principal.c src/window.c src/param.c src/en_jeu.c src/menu_principal.c src/draw.c src/action_menu_principal.c src/sound.c src/testJeu.c src/sauvegarde.c
|
||||||
#$(wildcard src/*.c)
|
#$(wildcard src/*.c)
|
||||||
OBJ=$(SRC:.c=.o)
|
OBJ=$(SRC:.c=.o)
|
||||||
|
|
||||||
@ -14,6 +14,7 @@ src/%.o: src/%.c
|
|||||||
|
|
||||||
$(EXEC): $(OBJ)
|
$(EXEC): $(OBJ)
|
||||||
$(CC) -o $@ $^ $(LDFLAGS)
|
$(CC) -o $@ $^ $(LDFLAGS)
|
||||||
|
|
||||||
mv src/*.o obj/
|
mv src/*.o obj/
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@ -199,7 +199,7 @@ bool selection_menu (menu_t m, int* r)
|
|||||||
{
|
{
|
||||||
case 01:
|
case 01:
|
||||||
*r = M_CHARGER;
|
*r = M_CHARGER;
|
||||||
return false;
|
return true;
|
||||||
case 10:
|
case 10:
|
||||||
*r = M_JOUER;
|
*r = M_JOUER;
|
||||||
play_gong();
|
play_gong();
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
#include <SDL/SDL_ttf.h>
|
#include <SDL/SDL_ttf.h>
|
||||||
#include <SDL/SDL_rotozoom.h>
|
#include <SDL/SDL_rotozoom.h>
|
||||||
|
#include <SDL/SDL_image.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "param.h"
|
#include "param.h"
|
||||||
#include "draw.h"
|
#include "draw.h"
|
||||||
@ -420,9 +421,12 @@ void banane (SDL_Surface* window)
|
|||||||
|
|
||||||
bool end = false;
|
bool end = false;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
int cur = 0;
|
||||||
|
char* passcode = "stopdancingstupidbanana";
|
||||||
|
bool pause = false;
|
||||||
while (!end)
|
while (!end)
|
||||||
{
|
{
|
||||||
if (!(SDL_GetTicks() % 100))
|
if (!(SDL_GetTicks() % 100) && !pause)
|
||||||
{
|
{
|
||||||
SDL_BlitSurface (gif [i%8], NULL, window, &p);
|
SDL_BlitSurface (gif [i%8], NULL, window, &p);
|
||||||
SDL_Flip (window);
|
SDL_Flip (window);
|
||||||
@ -430,10 +434,27 @@ void banane (SDL_Surface* window)
|
|||||||
i = (i + 1) % 8 + 8;
|
i = (i + 1) % 8 + 8;
|
||||||
}
|
}
|
||||||
SDL_Event e;
|
SDL_Event e;
|
||||||
SDL_PollEvent (&e);
|
if (SDL_PollEvent (&e) && e.type == SDL_KEYDOWN)
|
||||||
if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE))
|
{
|
||||||
|
switch (e.key.keysym.sym)
|
||||||
|
{
|
||||||
|
case SDLK_p:
|
||||||
|
pause = true;
|
||||||
|
break;
|
||||||
|
case SDLK_r:
|
||||||
|
pause = false;
|
||||||
|
break;
|
||||||
|
default:;
|
||||||
|
}
|
||||||
|
//Uint8* key = SDL_GetKeyState(NULL);
|
||||||
|
if (e.key.keysym.sym == passcode[cur])
|
||||||
|
++cur;
|
||||||
|
else
|
||||||
|
cur = 0;
|
||||||
|
if (cur == strlen (passcode))
|
||||||
end = true;
|
end = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SDL_BlitSurface (erase, NULL, window, &p);
|
SDL_BlitSurface (erase, NULL, window, &p);
|
||||||
SDL_Flip (window);
|
SDL_Flip (window);
|
||||||
|
@ -15,6 +15,8 @@ typedef struct s_scrolling {
|
|||||||
|
|
||||||
void Affiche_menu_principal (menu_t m);
|
void Affiche_menu_principal (menu_t m);
|
||||||
|
|
||||||
|
void Affiche_menu_options (SDL_Surface* window, int rayon, int l);
|
||||||
|
|
||||||
void Affiche_entry (menu_t m, char* entry, bool pointe);
|
void Affiche_entry (menu_t m, char* entry, bool pointe);
|
||||||
|
|
||||||
scrolling_t init_scroll (SDL_Surface* window);
|
scrolling_t init_scroll (SDL_Surface* window);
|
||||||
|
@ -2,16 +2,100 @@
|
|||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <SDL/SDL_gfxPrimitives.h>
|
||||||
|
|
||||||
#include "param.h"
|
|
||||||
#include "draw.h"
|
#include "draw.h"
|
||||||
|
|
||||||
#define DBORD 4
|
#define DBORD 4
|
||||||
|
|
||||||
/* Internes */
|
/* Internes */
|
||||||
|
|
||||||
|
void Define_rayon (plateau_t p)
|
||||||
|
{
|
||||||
|
int decal_droite = 40;
|
||||||
|
p->marge_vert = p->window->h / 6;
|
||||||
|
int width = p->window->w - 2 * decal_droite;
|
||||||
|
int height = p->window->h - 2 * p->marge_vert;
|
||||||
|
int r1 = (height - (NBSIDE - 1)) / (.5 + NBSIDE * 1.5);
|
||||||
|
int r2 = width / ((3 * NBSIDE - 1) * cos (PI/6));
|
||||||
|
if (r1 < r2)
|
||||||
|
{
|
||||||
|
p->r = r1 - r1%2;
|
||||||
|
p->marge_hori = p->window->w - decal_droite - 1.5 * (NBSIDE) * 2 * p->r * cos(PI/6);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p->r = r2 - r2%2;
|
||||||
|
p->marge_hori = p->window->w - decal_droite - 1.5 * (NBSIDE) * 2 * p->r * cos(PI/6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bordures (plateau_t p)
|
||||||
|
{
|
||||||
|
// (horizontales) player 2
|
||||||
|
int l = (cos (PI / 6) - cos (5 * PI / 6)) * p->r;
|
||||||
|
int dx = p->marge_hori+ p->r - l / 2;
|
||||||
|
Sint16 x1 [5] = {dx,
|
||||||
|
dx - l / 2,
|
||||||
|
dx,
|
||||||
|
dx + NBSIDE * (l + 1) - .25 * l,
|
||||||
|
dx + NBSIDE * (l + 1)};
|
||||||
|
Sint16 y1 [5] = {p->marge_vert - p->r / 2,
|
||||||
|
p->marge_vert,
|
||||||
|
p->marge_vert + p->r / 2,
|
||||||
|
p->marge_vert + p->r / 2,
|
||||||
|
p->marge_vert - p->r / 2};
|
||||||
|
filledPolygonRGBA(p->window, x1, y1, 5, param->rgb_j2.r, param->rgb_j2.g, param->rgb_j2.b, 255);
|
||||||
|
dx += (NBSIDE - 1) * (l + 1) / 2;
|
||||||
|
Sint16 x2 [5] = {dx + .25 * l,
|
||||||
|
dx + NBSIDE * (l + 1),
|
||||||
|
dx + NBSIDE * (l + 1) + l / 2,
|
||||||
|
dx + NBSIDE * (l + 1),
|
||||||
|
dx};
|
||||||
|
int dy = p->marge_vert + 1.5 * p->r * NBSIDE + .5 * p->r;
|
||||||
|
Sint16 y2 [5] = {dy - p->r / 2,
|
||||||
|
dy - p->r / 2,
|
||||||
|
dy,
|
||||||
|
dy + p->r / 2,
|
||||||
|
dy + p->r / 2};
|
||||||
|
filledPolygonRGBA(p->window, x2, y2, 5, param->rgb_j2.r, param->rgb_j2.g, param->rgb_j2.b, 255);
|
||||||
|
Sint16 x3 [5] = {x1 [1],
|
||||||
|
x1 [1] - l / 2,
|
||||||
|
x2 [4],
|
||||||
|
x2 [0],
|
||||||
|
x1 [2]};
|
||||||
|
Sint16 y3 [5] = {y1 [1],
|
||||||
|
y1 [2],
|
||||||
|
y2 [4],
|
||||||
|
y2 [0],
|
||||||
|
y1 [2]};
|
||||||
|
filledPolygonRGBA(p->window, x3, y3, 5, param->rgb_j1.r, param->rgb_j1.g, param->rgb_j1.b, 255);
|
||||||
|
|
||||||
|
/*x [0] = ;
|
||||||
|
x [1] = ;
|
||||||
|
x [2] = ;
|
||||||
|
x [3] = ;
|
||||||
|
x [4] = ;
|
||||||
|
y [0] = ;
|
||||||
|
y [1] = ;
|
||||||
|
y [2] = ;
|
||||||
|
y [3] = ;
|
||||||
|
y [4] = ;
|
||||||
|
pos.x += (NBSIDE - 1) * (l + 1) / 2.;
|
||||||
|
pos.y += 1.5 * p->r * NBSIDE + .5 * p->r;
|
||||||
|
SDL_FillRect (p->window, &pos, param->j2);
|
||||||
|
|
||||||
|
// (Verticales) player 1
|
||||||
|
filledPolygonRGBA(p->window, x, y, 4, 255, 0, 255, 255);*/
|
||||||
|
|
||||||
|
SDL_Flip (p->window);
|
||||||
|
}
|
||||||
|
|
||||||
void Quadrille (plateau_t p)
|
void Quadrille (plateau_t p)
|
||||||
{
|
{
|
||||||
|
Define_rayon(p);
|
||||||
|
Bordures (p);
|
||||||
|
|
||||||
SDL_Surface* hex = SDL_CreateRGBSurface (SDL_HWSURFACE, 2 * p->r, 2 * p->r, p->window->format->BitsPerPixel, 0, 0, 0, 0);
|
SDL_Surface* hex = SDL_CreateRGBSurface (SDL_HWSURFACE, 2 * p->r, 2 * p->r, p->window->format->BitsPerPixel, 0, 0, 0, 0);
|
||||||
Hexagon (hex, p->r, param->ex, param->in, DBORD, &(p->l));
|
Hexagon (hex, p->r, param->ex, param->in, DBORD, &(p->l));
|
||||||
for (int i = 0; i < NBSIDE; ++i)
|
for (int i = 0; i < NBSIDE; ++i)
|
||||||
@ -29,6 +113,9 @@ void Quadrille (plateau_t p)
|
|||||||
|
|
||||||
void Quadrille_bis (plateau_t p)
|
void Quadrille_bis (plateau_t p)
|
||||||
{
|
{
|
||||||
|
Define_rayon(p);
|
||||||
|
Bordures (p);
|
||||||
|
|
||||||
SDL_Surface* hex = SDL_CreateRGBSurface (SDL_HWSURFACE, 2 * p->r, 2 * p->r, p->window->format->BitsPerPixel, 0, 0, 0, 0);
|
SDL_Surface* hex = SDL_CreateRGBSurface (SDL_HWSURFACE, 2 * p->r, 2 * p->r, p->window->format->BitsPerPixel, 0, 0, 0, 0);
|
||||||
SDL_Surface* hex1 = SDL_CreateRGBSurface (SDL_HWSURFACE, 2 * p->r, 2 * p->r, p->window->format->BitsPerPixel, 0, 0, 0, 0);
|
SDL_Surface* hex1 = SDL_CreateRGBSurface (SDL_HWSURFACE, 2 * p->r, 2 * p->r, p->window->format->BitsPerPixel, 0, 0, 0, 0);
|
||||||
SDL_Surface* hex2 = SDL_CreateRGBSurface (SDL_HWSURFACE, 2 * p->r, 2 * p->r, p->window->format->BitsPerPixel, 0, 0, 0, 0);
|
SDL_Surface* hex2 = SDL_CreateRGBSurface (SDL_HWSURFACE, 2 * p->r, 2 * p->r, p->window->format->BitsPerPixel, 0, 0, 0, 0);
|
||||||
@ -63,26 +150,6 @@ void Quadrille_bis (plateau_t p)
|
|||||||
SDL_Flip (p->window);
|
SDL_Flip (p->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
void define_rayon (plateau_t p)
|
|
||||||
{
|
|
||||||
int decal_droite = 40;
|
|
||||||
p->marge_vert = p->window->h / 6;
|
|
||||||
int width = p->window->w - 2 * decal_droite;
|
|
||||||
int height = p->window->h - 2 * p->marge_vert;
|
|
||||||
int r1 = (height - (NBSIDE - 1)) / (.5 + NBSIDE * 1.5);
|
|
||||||
int r2 = width / ((3 * NBSIDE - 1) * cos (PI/6));
|
|
||||||
if (r1 < r2)
|
|
||||||
{
|
|
||||||
p->r = r1 - r1%2;
|
|
||||||
p->marge_hori = p->window->w - decal_droite - 1.5 * (NBSIDE) * 2 * p->r * cos(PI/6);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
p->r = r2 - r2%2;
|
|
||||||
p->marge_hori = p->window->w - decal_droite - 1.5 * (NBSIDE) * 2 * p->r * cos(PI/6);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*Externes*/
|
/*Externes*/
|
||||||
|
|
||||||
void Affiche_hexagon (plateau_t p, int x, int y, int state)
|
void Affiche_hexagon (plateau_t p, int x, int y, int state)
|
||||||
@ -126,22 +193,38 @@ plateau_t init_plateau (SDL_Surface* window)
|
|||||||
plateau_t p = malloc (sizeof (struct s_plateau));
|
plateau_t p = malloc (sizeof (struct s_plateau));
|
||||||
p->grid = malloc (sizeof (int) * NBSIDE * NBSIDE);
|
p->grid = malloc (sizeof (int) * NBSIDE * NBSIDE);
|
||||||
p->hist = malloc (sizeof (int) * NBSIDE * NBSIDE);
|
p->hist = malloc (sizeof (int) * NBSIDE * NBSIDE);
|
||||||
for (int x = 0; x <= NBSIDE * NBSIDE; ++x)
|
for (int x = 0; x < NBSIDE * NBSIDE; ++x)
|
||||||
{
|
{
|
||||||
p->grid [x] = 0;
|
p->grid [x] = 0;
|
||||||
p->hist [x] = 0;
|
p->hist [x] = -1;
|
||||||
}
|
}
|
||||||
p->nb_coups = 0;
|
p->nb_coups = 0;
|
||||||
p->window = window;
|
p->window = window;
|
||||||
p->player = false;
|
p->player = false;
|
||||||
define_rayon(p);
|
|
||||||
Quadrille (p);
|
Quadrille (p);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plateau_t load_plateau (SDL_Surface* window, int* hist)
|
||||||
|
{
|
||||||
|
plateau_t p = malloc (sizeof (struct s_plateau));
|
||||||
|
p->grid = malloc (sizeof (int) * NBSIDE * NBSIDE);
|
||||||
|
p->hist = hist;
|
||||||
|
p->player = false;
|
||||||
|
for (int i = 0; i < NBSIDE * NBSIDE; ++i)
|
||||||
|
p->grid [i] = 0;
|
||||||
|
for (p->nb_coups = 0; p->nb_coups < NBSIDE * NBSIDE && hist [p->nb_coups] != -1; ++p->nb_coups)
|
||||||
|
{
|
||||||
|
p->grid [hist [p->nb_coups]] = PLAYER(p->player);
|
||||||
|
p->player = !p->player;
|
||||||
|
}
|
||||||
|
p->window = window;
|
||||||
|
Quadrille_bis (p);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
plateau_t actu_plateau (plateau_t p)
|
plateau_t actu_plateau (plateau_t p)
|
||||||
{
|
{
|
||||||
define_rayon(p);
|
|
||||||
Quadrille_bis (p);
|
Quadrille_bis (p);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,8 @@ void Affiche_hexagon (plateau_t p, int x, int y, int state);
|
|||||||
|
|
||||||
plateau_t init_plateau (SDL_Surface* window);
|
plateau_t init_plateau (SDL_Surface* window);
|
||||||
|
|
||||||
|
plateau_t load_plateau (SDL_Surface* window, int* hist);
|
||||||
|
|
||||||
plateau_t actu_plateau (plateau_t p);
|
plateau_t actu_plateau (plateau_t p);
|
||||||
|
|
||||||
void free_plateau (plateau_t p);
|
void free_plateau (plateau_t p);
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "draw.h"
|
#include "draw.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <SDL/SDL_gfxPrimitives.h>
|
||||||
|
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
|
14
src/en_jeu.c
14
src/en_jeu.c
@ -12,11 +12,16 @@
|
|||||||
#include "affichage_plateau.h"
|
#include "affichage_plateau.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "param.h"
|
#include "param.h"
|
||||||
|
#include "sauvegarde.h"
|
||||||
|
|
||||||
void en_jeu (SDL_Surface* window)
|
void en_jeu (SDL_Surface* window, int* hist)
|
||||||
{
|
{
|
||||||
Mix_PlayMusic(param->music, -1);
|
Mix_PlayMusic(param->music, -1);
|
||||||
plateau_t plateau = init_plateau (window);
|
plateau_t plateau;
|
||||||
|
if (hist == NULL)
|
||||||
|
plateau = init_plateau (window);
|
||||||
|
else
|
||||||
|
plateau = load_plateau (window, hist);
|
||||||
vec2 c = {0, 0};
|
vec2 c = {0, 0};
|
||||||
bool end = false;
|
bool end = false;
|
||||||
while (!end)
|
while (!end)
|
||||||
@ -41,7 +46,12 @@ void en_jeu (SDL_Surface* window)
|
|||||||
end = selection (plateau, c);
|
end = selection (plateau, c);
|
||||||
else if (SDLK_UP <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_LEFT)
|
else if (SDLK_UP <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_LEFT)
|
||||||
deplacement(plateau, &event, &c);
|
deplacement(plateau, &event, &c);
|
||||||
|
else if (event.key.keysym.sym == SDLK_a || event.key.keysym.sym == SDLK_b || event.key.keysym.sym == SDLK_n)
|
||||||
east1 (window, event.key.keysym.sym);
|
east1 (window, event.key.keysym.sym);
|
||||||
|
else if (event.key.keysym.sym == SDLK_s)
|
||||||
|
{
|
||||||
|
sauvegarde ("1", plateau->hist, 0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
end = selection (plateau, c);
|
end = selection (plateau, c);
|
||||||
|
@ -10,6 +10,6 @@
|
|||||||
|
|
||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
|
|
||||||
void en_jeu (SDL_Surface* window);
|
void en_jeu (SDL_Surface* window, int* hist);
|
||||||
|
|
||||||
#endif /* _EN_JEU_H_ */
|
#endif /* _EN_JEU_H_ */
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#define DWIDTH 800
|
#define DWIDTH 800
|
||||||
#define DHEIGHT 600
|
#define DHEIGHT 600
|
||||||
|
|
||||||
#define NBSIDE 11
|
#define NBSIDE param->size
|
||||||
|
|
||||||
#define PI 3.14159265
|
#define PI 3.14159265
|
||||||
#define RAC3 1.73205080757
|
#define RAC3 1.73205080757
|
||||||
@ -68,6 +68,9 @@ typedef struct s_param {
|
|||||||
unsigned char music_vol;
|
unsigned char music_vol;
|
||||||
Mix_Chunk* click,* gong;
|
Mix_Chunk* click,* gong;
|
||||||
unsigned char chunk_vol;
|
unsigned char chunk_vol;
|
||||||
|
int size;
|
||||||
}* param_t;
|
}* param_t;
|
||||||
|
|
||||||
|
param_t param;
|
||||||
|
|
||||||
#endif /* _GLOBALS_H_ */
|
#endif /* _GLOBALS_H_ */
|
||||||
|
14
src/hex.c
14
src/hex.c
@ -9,6 +9,7 @@
|
|||||||
#include "menu_principal.h"
|
#include "menu_principal.h"
|
||||||
#include "en_jeu.h"
|
#include "en_jeu.h"
|
||||||
#include "param.h"
|
#include "param.h"
|
||||||
|
#include "sauvegarde.h"
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -23,14 +24,25 @@ int main(int argc, char **argv)
|
|||||||
switch (retour)
|
switch (retour)
|
||||||
{
|
{
|
||||||
case M_JOUER:
|
case M_JOUER:
|
||||||
en_jeu (window);
|
en_jeu (window, NULL);
|
||||||
Reset_window(window);
|
Reset_window(window);
|
||||||
break;
|
break;
|
||||||
|
case M_CHARGER:
|
||||||
|
{
|
||||||
|
int * hist;
|
||||||
|
int ia;
|
||||||
|
printf (" -- %d\n", chargement ("1", &hist, &ia));
|
||||||
|
en_jeu (window, hist);
|
||||||
|
Reset_window(window);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case M_QUITTER:
|
case M_QUITTER:
|
||||||
end = 1;
|
end = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//en_jeu (window);
|
||||||
save_param(window);
|
save_param(window);
|
||||||
Free_window (window);
|
Free_window (window);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,8 @@ int menu_options (SDL_Surface* window, scrolling_t s, menu_t m)
|
|||||||
{
|
{
|
||||||
Affiche_menu_options (window, m->r, m->l);
|
Affiche_menu_options (window, m->r, m->l);
|
||||||
bool end = 0;
|
bool end = 0;
|
||||||
|
if (end)
|
||||||
|
end = 1;
|
||||||
/*while (!end)
|
/*while (!end)
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
@ -77,6 +79,7 @@ int menu_options (SDL_Surface* window, scrolling_t s, menu_t m)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int menu_principal (SDL_Surface* window)
|
int menu_principal (SDL_Surface* window)
|
||||||
|
@ -83,7 +83,7 @@ void load_param (SDL_Surface* w)
|
|||||||
}
|
}
|
||||||
fclose (param_file);
|
fclose (param_file);
|
||||||
}
|
}
|
||||||
|
param->size = 11;
|
||||||
Load_sound ();
|
Load_sound ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,8 +10,6 @@
|
|||||||
|
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
param_t param;
|
|
||||||
|
|
||||||
void load_param (SDL_Surface* w);
|
void load_param (SDL_Surface* w);
|
||||||
void save_param (SDL_Surface* w);
|
void save_param (SDL_Surface* w);
|
||||||
|
|
||||||
|
130
src/sauvegarde.c
Normal file
130
src/sauvegarde.c
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
#include "sauvegarde.h"
|
||||||
|
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "globals.h"
|
||||||
|
|
||||||
|
int listeSauvegarde(char*** nomSave){
|
||||||
|
DIR* rep = opendir("save/");
|
||||||
|
if(rep==NULL){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
struct dirent* d;
|
||||||
|
int i=0;
|
||||||
|
int nbSave=0;
|
||||||
|
int ext;
|
||||||
|
while((d=readdir(rep))!=NULL)
|
||||||
|
{
|
||||||
|
ext=strlen(d->d_name);
|
||||||
|
if (ext>3 && !strcmp(&d->d_name[ext-4], ".sav")){
|
||||||
|
nbSave++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rewinddir(rep);
|
||||||
|
char ** tmp;
|
||||||
|
tmp=malloc(sizeof(char*)*(nbSave));
|
||||||
|
int j;
|
||||||
|
while((d=readdir(rep))!=NULL)
|
||||||
|
{
|
||||||
|
ext=strlen(d->d_name);
|
||||||
|
if (ext>3 && !strcmp(&d->d_name[ext-4], ".sav")){
|
||||||
|
tmp[i]=malloc(sizeof(char)*(ext-2));
|
||||||
|
for(j=0;j<ext-4;j++){
|
||||||
|
tmp[i][j]= d->d_name[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp[i][ext-3]=0;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir(rep);
|
||||||
|
*nomSave = tmp;
|
||||||
|
return nbSave;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Renvoi 0 si la sauvegarde a eu lieu et 1 si il y a eu problème
|
||||||
|
|
||||||
|
int sauvegarde (char * nom, int * tab, int IA)
|
||||||
|
{
|
||||||
|
DIR* rep = opendir("save/");
|
||||||
|
|
||||||
|
if(rep==NULL){
|
||||||
|
if(mkdir("save/", S_IRWXU)){
|
||||||
|
closedir(rep);
|
||||||
|
return ERROR_CREATE_DIR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir(rep);
|
||||||
|
|
||||||
|
FILE* f_sauvegarde;
|
||||||
|
char desif[strlen(nom)+12];
|
||||||
|
strcpy(desif,"save/");
|
||||||
|
strcat(desif,nom);
|
||||||
|
strcat(desif,".sav");
|
||||||
|
f_sauvegarde=fopen(desif,"w+");
|
||||||
|
fprintf(f_sauvegarde,"\n%d\n",IA);
|
||||||
|
fprintf(f_sauvegarde,"%d\n",param->size);
|
||||||
|
int i;
|
||||||
|
for (i=0; i<param->size*param->size; ++i)
|
||||||
|
fprintf(f_sauvegarde,"%d\n", tab[i]);
|
||||||
|
fclose(f_sauvegarde);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int chargement(char *nom , int **tab, int *IA)
|
||||||
|
{
|
||||||
|
FILE* f_chargement;
|
||||||
|
char desif[strlen(nom)+12];
|
||||||
|
int *t;
|
||||||
|
int a=0, i, taille;
|
||||||
|
strcpy(desif,"save/");
|
||||||
|
strcat(desif,nom);
|
||||||
|
strcat(desif,".sav");
|
||||||
|
f_chargement=fopen (desif, "r");
|
||||||
|
if (f_chargement == NULL)
|
||||||
|
return ERROR_OPENFILE;
|
||||||
|
a=fscanf(f_chargement, "%d", IA);
|
||||||
|
|
||||||
|
printf ("1\n");
|
||||||
|
if(!a || *IA>2 || *IA<0){
|
||||||
|
return ERROR_IA;
|
||||||
|
}
|
||||||
|
printf ("2\n");
|
||||||
|
fscanf(f_chargement, "%d", &taille);
|
||||||
|
if(taille<1){
|
||||||
|
return ERROR_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf ("3\n");
|
||||||
|
t=malloc(sizeof(int)*taille*taille);
|
||||||
|
a=1, i = -1;
|
||||||
|
|
||||||
|
printf ("4\n");
|
||||||
|
while(a>0){
|
||||||
|
i++;
|
||||||
|
a=fscanf(f_chargement, "%d" , &t[i]);
|
||||||
|
}
|
||||||
|
fclose(f_chargement);
|
||||||
|
|
||||||
|
if(i!=taille*taille){
|
||||||
|
return ERROR_NB_VALUE;
|
||||||
|
}
|
||||||
|
param->size=taille;
|
||||||
|
*tab=t;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void supprimer(char * nom){
|
||||||
|
char desif[strlen(nom)+12];
|
||||||
|
strcpy(desif,"save/");
|
||||||
|
strcat(desif,nom);
|
||||||
|
strcat(desif,".sav");
|
||||||
|
unlink(desif);
|
||||||
|
}
|
9
src/sauvegarde.h
Normal file
9
src/sauvegarde.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#define ERROR_IA 1
|
||||||
|
#define ERROR_SIZE 2
|
||||||
|
#define ERROR_NB_VALUE 3
|
||||||
|
#define ERROR_OPENFILE 4
|
||||||
|
#define ERROR_CREATE_DIR 11
|
||||||
|
|
||||||
|
int listeSauvegarde(char*** nomSave );
|
||||||
|
int sauvegarde (char * nom , int * tab, int IA);
|
||||||
|
int chargement (char *nom , int **tab, int *IA);
|
@ -11,9 +11,9 @@
|
|||||||
|
|
||||||
void Load_sound (void)
|
void Load_sound (void)
|
||||||
{
|
{
|
||||||
param->music_vol = .25 * MIX_MAX_VOLUME;
|
param->music_vol = .5 * MIX_MAX_VOLUME;
|
||||||
param->music = Mix_LoadMUS ("ressources/theme.mp3");
|
param->music = Mix_LoadMUS ("ressources/theme.mp3");
|
||||||
Mix_VolumeMusic (param->music_vol);
|
Mix_VolumeMusic (param->music_vol);//param->music_vol);
|
||||||
|
|
||||||
param->chunk_vol = .25 * MIX_MAX_VOLUME;
|
param->chunk_vol = .25 * MIX_MAX_VOLUME;
|
||||||
printf ("%d\n", param->chunk_vol);
|
printf ("%d\n", param->chunk_vol);
|
||||||
|
@ -2,30 +2,28 @@
|
|||||||
|
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
static int taille_ligne = NBSIDE;
|
|
||||||
|
|
||||||
int testRecursif(int *tab, int i, int J);
|
int testRecursif(int *tab, int i, int J);
|
||||||
|
|
||||||
int testCaseDessus(int *tab, int i, int J){
|
int testCaseDessus(int *tab, int i, int J){
|
||||||
if(tab[i+taille_ligne]==J && testRecursif(tab, i+taille_ligne,J)){//la seconde condition est testée uniquement si la première est vrai donc le testRecursifJ1 sera appelé ssi tab[i+taille_ligne]==J1
|
if(tab[i+NBSIDE]==J && testRecursif(tab, i+NBSIDE,J)){//la seconde condition est testée uniquement si la première est vrai donc le testRecursifJ1 sera appelé ssi tab[i+NBSIDE]==J1
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int testCaseDessous(int *tab, int i, int J){
|
int testCaseDessous(int *tab, int i, int J){
|
||||||
if(i/taille_ligne>0 && tab[i-taille_ligne]==J && testRecursif(tab, i-taille_ligne,J)){
|
if(i/NBSIDE>0 && tab[i-NBSIDE]==J && testRecursif(tab, i-NBSIDE,J)){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int testCaseG(int *tab, int i, int J){
|
int testCaseG(int *tab, int i, int J){
|
||||||
if(i%taille_ligne!=0){
|
if(i%NBSIDE!=0){
|
||||||
if(tab[i-1]==J && testRecursif(tab, i-1, J)){
|
if(tab[i-1]==J && testRecursif(tab, i-1, J)){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(tab[i+taille_ligne-1]==J && testRecursif(tab, i+taille_ligne-1, J)){
|
if(tab[i+NBSIDE-1]==J && testRecursif(tab, i+NBSIDE-1, J)){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -33,8 +31,8 @@ int testCaseG(int *tab, int i, int J){
|
|||||||
}
|
}
|
||||||
|
|
||||||
int testCaseD(int *tab, int i, int J){
|
int testCaseD(int *tab, int i, int J){
|
||||||
if(i%taille_ligne!=taille_ligne-1){
|
if(i%NBSIDE!=NBSIDE-1){
|
||||||
if(i/taille_ligne>0 && tab[i-taille_ligne+1]==J && testRecursif(tab, i-taille_ligne+1, J)){
|
if(i/NBSIDE>0 && tab[i-NBSIDE+1]==J && testRecursif(tab, i-NBSIDE+1, J)){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(tab[i+1]==J && testRecursif(tab, i+1, J)){
|
if(tab[i+1]==J && testRecursif(tab, i+1, J)){
|
||||||
@ -47,13 +45,13 @@ int testCaseD(int *tab, int i, int J){
|
|||||||
int testRecursif(int *tab, int i, int J){// ne peut être appelée qu'avec un indice ou il y a un pion du joueur 1 (J1)
|
int testRecursif(int *tab, int i, int J){// ne peut être appelée qu'avec un indice ou il y a un pion du joueur 1 (J1)
|
||||||
tab[i]=tab[i]+2;
|
tab[i]=tab[i]+2;
|
||||||
if(J==J1){
|
if(J==J1){
|
||||||
if(i/taille_ligne==taille_ligne-1){
|
if(i/NBSIDE==NBSIDE-1){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return testCaseDessus(tab,i,J) || testCaseG(tab,i,J) || testCaseD(tab,i,J) || testCaseDessous(tab,i,J);
|
return testCaseDessus(tab,i,J) || testCaseG(tab,i,J) || testCaseD(tab,i,J) || testCaseDessous(tab,i,J);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if(i%taille_ligne==taille_ligne-1){
|
if(i%NBSIDE==NBSIDE-1){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return testCaseD(tab,i,J) || testCaseDessus(tab,i,J) || testCaseDessous(tab,i,J) || testCaseG(tab,i,J);
|
return testCaseD(tab,i,J) || testCaseDessus(tab,i,J) || testCaseDessous(tab,i,J) || testCaseG(tab,i,J);
|
||||||
@ -64,7 +62,7 @@ int testRecursif(int *tab, int i, int J){// ne peut être appelée qu'avec un in
|
|||||||
int testGagne(int *tab, int J){
|
int testGagne(int *tab, int J){
|
||||||
int i=0, a=0;
|
int i=0, a=0;
|
||||||
if(J==J1){
|
if(J==J1){
|
||||||
while(!a && i<taille_ligne){
|
while(!a && i<NBSIDE){
|
||||||
if(tab[i]==J1){
|
if(tab[i]==J1){
|
||||||
a=testRecursif(tab, i, J);
|
a=testRecursif(tab, i, J);
|
||||||
//i++;//si une case à été testé la case adjacente aura forcément été testée donc on peut décaler de 2 cases
|
//i++;//si une case à été testé la case adjacente aura forcément été testée donc on peut décaler de 2 cases
|
||||||
@ -73,15 +71,15 @@ int testGagne(int *tab, int J){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
while(!a && i<taille_ligne*taille_ligne){
|
while(!a && i<NBSIDE*NBSIDE){
|
||||||
if(tab[i]==J2){
|
if(tab[i]==J2){
|
||||||
a=testRecursif(tab, i, J2);
|
a=testRecursif(tab, i, J2);
|
||||||
//i=i+taille_ligne;//si une case à été testé la case adjacente aura forcément été testée donc on peut décaler de 2 cases
|
//i=i+NBSIDE;//si une case à été testé la case adjacente aura forcément été testée donc on peut décaler de 2 cases
|
||||||
}
|
}
|
||||||
i=i+taille_ligne;
|
i=i+NBSIDE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(i=0; i<taille_ligne*taille_ligne; i++){
|
for(i=0; i<NBSIDE*NBSIDE; i++){
|
||||||
if(tab[i]>J2){
|
if(tab[i]>J2){
|
||||||
tab[i]=tab[i]-2;
|
tab[i]=tab[i]-2;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user