From 4dfde3d966be0cc678426455adf1584b4d9f2e8b Mon Sep 17 00:00:00 2001 From: Tropicananass Date: Tue, 10 May 2016 00:03:02 +0200 Subject: [PATCH] final --- bin/hex | Bin 132648 -> 159376 bytes makefile | 2 +- src/action_menu.c | 217 ++++++++++++++++++++++ src/action_menu.h | 21 +++ src/action_plateau.c | 185 +++++++++---------- src/action_plateau.h | 4 +- src/affichage_menu.c | 387 ++++++++++++++++++++++++++++++++++++++++ src/affichage_menu.h | 13 ++ src/affichage_plateau.c | 39 +++- src/affichage_plateau.h | 4 +- src/en_jeu.c | 106 +++++++++-- src/globals.h | 18 +- src/hex.c | 23 ++- src/menu.c | 80 +++++++++ src/menu.h | 22 +++ src/menu_en_jeu.c | 227 +++++++++++++++++++++++ src/menu_en_jeu.h | 20 +++ src/menu_principal.c | 373 +++++++++++++++++++++++--------------- src/menu_principal.h | 2 +- src/sauvegarde.c | 19 +- src/sauvegarde.h | 6 + src/scrolling.c | 52 ++++++ src/scrolling.h | 4 + src/sound.c | 8 +- src/sub_menu.c | 161 +++++++++++++++++ src/sub_menu.h | 19 ++ 26 files changed, 1728 insertions(+), 284 deletions(-) create mode 100644 src/action_menu.c create mode 100644 src/action_menu.h create mode 100644 src/affichage_menu.c create mode 100644 src/affichage_menu.h create mode 100644 src/menu.c create mode 100644 src/menu.h create mode 100644 src/menu_en_jeu.c create mode 100644 src/menu_en_jeu.h create mode 100644 src/sub_menu.c create mode 100644 src/sub_menu.h diff --git a/bin/hex b/bin/hex index ebc1734ce5fc76e977dd41594c06a68ca0850cd8..76551f040164f4a604b317f9e9d81b7a04eb780a 100644 GIT binary patch literal 159376 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 literal 132648 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 diff --git a/makefile b/makefile index 171f4e2..3623ab2 100644 --- a/makefile +++ b/makefile @@ -5,7 +5,7 @@ LDFLAGS=-std=c99 -lm `sdl-config --cflags --libs` -lSDL_ttf -lSDL_gfx -lSDL_mixe EXEC=bin/hex SRCDIR=src OBJDIR=obj -SRC=hex.c affichage_plateau.c action_plateau.c affichage_menu_principal.c window.c param.c en_jeu.c menu_principal.c draw.c action_menu_principal.c sound.c testJeu.c sauvegarde.c scrolling.c +SRC=hex.c affichage_plateau.c action_plateau.c affichage_menu.c window.c param.c en_jeu.c menu_principal.c draw.c action_menu.c sound.c testJeu.c sauvegarde.c scrolling.c menu.c menu_en_jeu.c sub_menu.c #$(wildcard src/*.c) OBJ=$(SRC:.c=.o) diff --git a/src/action_menu.c b/src/action_menu.c new file mode 100644 index 0000000..715461b --- /dev/null +++ b/src/action_menu.c @@ -0,0 +1,217 @@ +/* + * action_menu_principal.c + * + * Created on: 21 avr. 2016 + * Author: nathan + */ + +#include "action_menu.h" + +#include +#include +#include +#include + +#include "affichage_menu.h" +#include "globals.h" +#include "sound.h" + +void deplacement_menu_mouse (menu_t m, const SDL_Event* event) +{ + vec2 pos = {event->motion.x - m->pos.x + m->l/2 - m->r, event->motion.y - m->pos.y}; + int ligne = round(pos.y / (1.5 * m->r) - .5); + int colone = round(pos.x / (m->l + 1.) - .5); + vec2 relative = {pos.x % (m->l + 1), pos.y % (int)(1.5 * m->r)}; + vec2 proj = {relative.y + relative.x / RAC3, relative.y - relative.x / RAC3}; + vec2 hex; + + if (ligne % 2) + { + if (proj.y < 0 && proj.x < m->r) + { + /* haut */ + hex.y = ligne - 1; + hex.x = colone - ligne / 2; + } + else if (relative.x > m->l / 2) + { + /* bas droite */ + hex.y = ligne; + hex.x = colone - ligne / 2; + } + else + { + /* bas gauche */ + hex.y = ligne; + hex.x = colone - ligne / 2 - 1; + } + } + else + { + if (-proj.y > m->r/2) + { + /* haut droite */ + hex.y = ligne - 1; + hex.x = colone - ligne / 2 + 1; + } + else if (proj.x < m->r/2) + { + /* haut gauche */ + hex.y = ligne - 1; + hex.x = colone - ligne / 2; + } + else + { + /* bas */ + hex.y = ligne; + hex.x = colone - ligne / 2; + } + } + + if (0 > hex.x || hex.x >= 3 || 0 > hex.y || hex.y >= 3 || (hex.x != 1 && hex.y != 1)) + { + hex.x = 1; + hex.y = 1; + } + if (hex.x != m->cur.x || hex.y != m->cur.y) + { + Affiche_entry(m, NORMAL); + m->cur.x = hex.x; + m->cur.y = hex.y; + Affiche_entry(m, POINTE); + play_clik(); + } +} + +void deplacement_menu_key (menu_t m, SDLKey key) +{ + Affiche_entry(m, NORMAL); + switch (key) + { + case SDLK_RIGHT: + ++(m->cur.x); + if (m->cur.y != 1) + m->cur.y = 1; + break; + case SDLK_LEFT: + --(m->cur.x); + if (m->cur.y != 1) + m->cur.y = 1; + break; + case SDLK_UP: + --(m->cur.y); + if (m->cur.x != 1) + m->cur.x = 1; + break; + case SDLK_DOWN: + ++(m->cur.y); + if (m->cur.x != 1) + m->cur.x = 1; + break; + default: + break; + } + if (m->cur.x >= 3) + m->cur.x = 0; + if (m->cur.x < 0) + m->cur.x = 2; + if (m->cur.y >= 3) + m->cur.y = 0; + if (m->cur.y < 0) + m->cur.y = 2; + Affiche_entry(m, POINTE); + play_clik(); +} + +void boom (SDL_Surface* window) +{ + SDL_Surface* tmp = IMG_Load ("ressources/.east/Boom.png"); + SDL_Surface* boom = rotozoomSurface(tmp, .0, fmin(window->h / (float)tmp->h, window->w / (float)tmp->w), 1); + SDL_Rect p = {(window->w - boom->w) / 2, (window->h - boom->h) / 2}; + SDL_Surface* lum = SDL_CreateRGBSurface (SDL_HWSURFACE, window->w, window->h, window->format->BitsPerPixel, 0, 0, 0, 0); + + SDL_FreeSurface(tmp); + tmp = SDL_CreateRGBSurface (SDL_HWSURFACE, window->w, window->h, window->format->BitsPerPixel, 0, 0, 0, 0); + SDL_BlitSurface (window, NULL, tmp, NULL); + + Mix_Chunk* boomS = Mix_LoadWAV("ressources/.east/Boom.wav"); + Mix_VolumeChunk (boomS, .1 * MIX_MAX_VOLUME); + if (boomS == NULL) + fprintf (stderr, "ressources/.east/Boom.mp3 : %s\n", SDL_GetError()); + Mix_PlayChannel(0, boomS, 0); + + bool end = false; + + int i = 255; + while (i >= 0) + { + if (!(SDL_GetTicks() % 40)) + { + SDL_FillRect (window, NULL, SDL_MapRGB (window->format, 0, 0, 0)); + + SDL_BlitSurface (boom, NULL, window, &p); + + Uint32 white = SDL_MapRGB (window->format, 255, 255, 255); + SDL_FillRect (lum, NULL, white); + SDL_SetAlpha(lum, SDL_SRCALPHA, i); + SDL_BlitSurface (lum, NULL, window, NULL); + SDL_Flip (window); + i -= 4; + } + } + + Uint32 black = SDL_MapRGB (window->format, 0, 0, 0); + SDL_FillRect (lum, NULL, black); + SDL_SetAlpha(lum, SDL_SRCALPHA, 1); + + while (i < 256) + { + if (!(SDL_GetTicks() % 10)) + { + SDL_BlitSurface (lum, NULL, window, NULL); + SDL_Flip (window); + i += 1; + } + } + + while (!end) + { + SDL_Event e; + SDL_PollEvent (&e); + if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) + end = true; + } + + SDL_BlitSurface (tmp, NULL, window, NULL); + + SDL_FreeSurface(tmp); + SDL_FreeSurface(boom); + SDL_FreeSurface(lum); + Mix_FreeChunk (boomS); +} + +int selection_menu (menu_t m) +{ + switch (10 * m->cur.x + m->cur.y) + { + case 01: + return M_LEFT; + case 10: + return M_UP; + case 11: + if (m->c == 15) + { + boom (m->window); + m->c = 0; + } + else + ++m->c; + return M_MID; + case 12: + return M_DOWN; + case 21: + return M_RIGHT; + default: + return M_NOT; + } +} diff --git a/src/action_menu.h b/src/action_menu.h new file mode 100644 index 0000000..15451a3 --- /dev/null +++ b/src/action_menu.h @@ -0,0 +1,21 @@ +/* + * action_menu_principal.h + * + * Created on: 21 avr. 2016 + * Author: nathan + */ + +#ifndef _ACTION_MENU_PRINCIPAL_H_ +#define _ACTION_MENU_PRINCIPAL_H_ + +#include +#include +#include "globals.h" + +void deplacement_menu_mouse (menu_t m, const SDL_Event* event); + +void deplacement_menu_key (menu_t m, SDLKey key); + +int selection_menu (menu_t m); + +#endif /* _ACTION_MENU_PRINCIPAL_H_ */ diff --git a/src/action_plateau.c b/src/action_plateau.c index cc6969f..0c90c60 100644 --- a/src/action_plateau.c +++ b/src/action_plateau.c @@ -18,8 +18,8 @@ int selection (plateau_t p, curseur_t c) p->player = !p->player; Affiche_hexagon(p, c.x, c.y, PLAYER(p->player)); return testGagne (p->grid, PLAYER(!p->player)); - } - /*for (int x = 0; x < NBSIDE; ++x) + }/* + for (int x = 0; x < NBSIDE; ++x) { for (int y = 0; y < NBSIDE; ++y) printf ("%d ", p->hist [y * NBSIDE + x]); @@ -30,115 +30,102 @@ int selection (plateau_t p, curseur_t c) return 0; } -void deplacement (plateau_t p, SDL_Event* event, curseur_t* c) +void deplacement_mouse (plateau_t p, SDL_MouseMotionEvent motion, curseur_t* c) { - switch (event->type) + vec2 pos = {motion.x - (p->marge_hori + p->r - p->l/2 - 2), motion.y - (p->marge_vert + 1)}; + int ligne = round(pos.y / (1.5 * p->r) - .5); + int colone = round(pos.x / (p->l + 1.) - .5); + vec2 relative = {pos.x % (p->l + 1), pos.y % (int)(1.5 * p->r)}; + vec2 proj = {relative.y + relative.x / RAC3, relative.y - relative.x / RAC3}; + vec2 hex; + if (ligne % 2) { - case SDL_MOUSEMOTION: - { - vec2 pos = {event->motion.x - (p->marge_hori + p->r - p->l/2 - 2), event->motion.y - (p->marge_vert + 1)}; - int ligne = round(pos.y / (1.5 * p->r) - .5); - int colone = round(pos.x / (p->l + 1.) - .5); - vec2 relative = {pos.x % (p->l + 1), pos.y % (int)(1.5 * p->r)}; - vec2 proj = {relative.y + relative.x / RAC3, relative.y - relative.x / RAC3}; - vec2 hex; - if (ligne % 2) + if (proj.y < 0 && proj.x < p->r) { - if (proj.y < 0 && proj.x < p->r) - { - /* haut */ - hex.y = ligne - 1; - hex.x = colone - ligne / 2; - } - else if (relative.x > p->l / 2) - { - /* bas droite */ - hex.y = ligne; - hex.x = colone - ligne / 2; - } - else - { - /* bas gauche */ - hex.y = ligne; - hex.x = colone - ligne / 2 - 1; - } + /* haut */ + hex.y = ligne - 1; + hex.x = colone - ligne / 2; + } + else if (relative.x > p->l / 2) + { + /* bas droite */ + hex.y = ligne; + hex.x = colone - ligne / 2; } else { - if (-proj.y > p->r/2) - { - /* haut droite */ - hex.y = ligne - 1; - hex.x = colone - ligne / 2 + 1; - } - else if (proj.x < p->r/2) - { - /* haut gauche */ - hex.y = ligne - 1; - hex.x = colone - ligne / 2; - } - else - { - /* bas */ - hex.y = ligne; - hex.x = colone - ligne / 2; - } + /* bas gauche */ + hex.y = ligne; + hex.x = colone - ligne / 2 - 1; } - - if (hex.x != c->x || hex.y != c->y) - { - - if (0 <= c->x && c->x < NBSIDE && 0 <= c->y && c->y < NBSIDE) - Affiche_hexagon(p, c->x, c->y, NORMAL); - c->x = hex.x; - c->y = hex.y; - if (0 <= hex.x && hex.x < NBSIDE && 0 <= hex.y && hex.y < NBSIDE) - { - Affiche_hexagon(p, c->x, c->y, PLAYER(p->player)); - play_clik(); - } - - } - - - - break; } - case SDL_KEYDOWN: - while (!SDL_PollEvent(event)) + else + { + if (-proj.y > p->r/2) + { + /* haut droite */ + hex.y = ligne - 1; + hex.x = colone - ligne / 2 + 1; + } + else if (proj.x < p->r/2) + { + /* haut gauche */ + hex.y = ligne - 1; + hex.x = colone - ligne / 2; + } + else + { + /* bas */ + hex.y = ligne; + hex.x = colone - ligne / 2; + } + } + + if (hex.x != c->x || hex.y != c->y) + { + + if (0 <= c->x && c->x < NBSIDE && 0 <= c->y && c->y < NBSIDE) + Affiche_hexagon(p, c->x, c->y, NORMAL); + c->x = hex.x; + c->y = hex.y; + if (0 <= hex.x && hex.x < NBSIDE && 0 <= hex.y && hex.y < NBSIDE) { - if (0 <= c->x && c->x < NBSIDE && 0 <= c->y && c->y < NBSIDE) - Affiche_hexagon(p, c->x, c->y, NORMAL); - switch (event->key.keysym.sym) - { - case SDLK_RIGHT: - ++(c->x); - break; - case SDLK_LEFT: - --(c->x); - break; - case SDLK_UP: - --(c->y); - break; - case SDLK_DOWN: - ++(c->y); - break; - default: - break; - } - if (c->x >= NBSIDE) - c->x = 0; - if (c->x < 0) - c->x = NBSIDE - 1; - if (c->y >= NBSIDE) - c->y = 0; - if (c->y < 0) - c->y = NBSIDE - 1; Affiche_hexagon(p, c->x, c->y, PLAYER(p->player)); play_clik(); - SDL_Delay (100); } + + } +} + +void deplacement_key (plateau_t p, SDLKey key, curseur_t* c) +{ + if (0 <= c->x && c->x < NBSIDE && 0 <= c->y && c->y < NBSIDE) + Affiche_hexagon(p, c->x, c->y, NORMAL); + switch (key) + { + case SDLK_RIGHT: + ++(c->x); + break; + case SDLK_LEFT: + --(c->x); + break; + case SDLK_UP: + --(c->y); + break; + case SDLK_DOWN: + ++(c->y); + break; + default: break; } - + if (c->x >= NBSIDE) + c->x = 0; + if (c->x < 0) + c->x = NBSIDE - 1; + if (c->y >= NBSIDE) + c->y = 0; + if (c->y < 0) + c->y = NBSIDE - 1; + Affiche_hexagon(p, c->x, c->y, PLAYER(p->player)); + play_clik(); } diff --git a/src/action_plateau.h b/src/action_plateau.h index 3def9ae..9ad6733 100644 --- a/src/action_plateau.h +++ b/src/action_plateau.h @@ -7,6 +7,8 @@ int selection (plateau_t p, curseur_t c); -void deplacement (plateau_t p, SDL_Event* event, curseur_t* c); +void deplacement_mouse (plateau_t p, SDL_MouseMotionEvent motion, curseur_t* c); + +void deplacement_key (plateau_t p, SDLKey key, curseur_t* c); #endif /* _ACTION_PLATEAU_H_ */ diff --git a/src/affichage_menu.c b/src/affichage_menu.c new file mode 100644 index 0000000..1c72477 --- /dev/null +++ b/src/affichage_menu.c @@ -0,0 +1,387 @@ +#include "affichage_menu.h" + +#include +#include +#include +#include +#include +#include "param.h" +#include "draw.h" + +#define NBOPTIONS 5 + +#define LEFT 0 +#define RIGHT 1 + + +/* Menu */ +/* Interne */ + +void Redim_entry (SDL_Surface** entry, int rayon, int l) +{ + SDL_Surface* entry_dim; + if ((*entry)->h / (float)(*entry)->w < rayon / (float)l) + entry_dim = rotozoomSurface(*entry, 0, l/(float)(*entry)->w, 1); + else + entry_dim = rotozoomSurface(*entry, 0, rayon/(float)(*entry)->h, 1); + SDL_FreeSurface (*entry); + *entry = entry_dim; +} + +SDL_Surface* Incruste (SDL_Surface* hex, char* title, int l, TTF_Font* font, SDL_Color c) +{ + SDL_Surface* hex_entry = SDL_CreateRGBSurface (SDL_HWSURFACE, hex->w, hex->h, hex->format->BitsPerPixel, 0, 0, 0, 0); + SDL_BlitSurface (hex, NULL, hex_entry, NULL); + + SDL_Surface* entry = TTF_RenderUTF8_Blended(font, title, c); + Redim_entry(&entry, hex->w / 2, l - 20); + + SDL_Rect position = {hex->w / 2 - l / 2 + (l - entry->w) / 2 - 1, hex->w / 2 / 2 + (hex->w / 2 - entry->h) / 2}; + + SDL_BlitSurface (entry , NULL, hex_entry, &position); + SDL_SetColorKey (hex_entry, SDL_SRCCOLORKEY, SDL_MapRGB(hex->format, 0, 0, 0)); + + SDL_FreeSurface (entry); + return hex_entry; +} + + + +void Case_menu (menu_t m, int rayon) +{ + SDL_Color fontColor = {100, 100, 100}; + + int l; + SDL_Surface* hex = SDL_CreateRGBSurface (SDL_HWSURFACE, 2*rayon, 2*rayon, m->window->format->BitsPerPixel, 0, 0, 0, 0); + Hexagon (hex, rayon, param->ex, param->in, 10, &l); + int xorig = (m->window->w - 4 * (l + 1)) / 2; + /* Charger */ + int dx = xorig - rayon + l/2 + 1; + SDL_Rect position = {dx + 1 * (l + 1) / 2, 0 + 1 * (1.5 * rayon)}; + SDL_Surface* hex_entry = Incruste(hex, m->entries [0], l, param->font, fontColor); + SDL_BlitSurface (hex_entry, NULL, m->window, &position); + SDL_FreeSurface (hex_entry); + + m->l = l; + m->r = rayon; + m->pos.x = dx; + m->pos.y = 0; + + /* Option */ + dx = xorig + 2 * (l + 1) - rayon + l/2 + 1; + position.x = dx + 1 * (l + 1) / 2; + hex_entry = Incruste(hex, m->entries [4], l, param->font, fontColor); + SDL_BlitSurface (hex_entry, NULL, m->window, &position); + SDL_FreeSurface (hex_entry); + + dx = xorig + 1 * (l + 1) - rayon + l/2 + 1; + for (int j = 0; j < 3; ++j) + { + position.x = dx + j * (l + 1) / 2; + position.y = 0 + j * (1.5 * rayon); + hex_entry = Incruste(hex, m->entries [j+1], l, param->font, fontColor); + SDL_BlitSurface (hex_entry, NULL, m->window, &position); + SDL_FreeSurface (hex_entry); + } + + SDL_FreeSurface(hex); +} + +/* Externes */ + +void Affiche_menu (menu_t m) +{ + int width = m->window->w - 20; + int height = m->window->h * 11. / 12; + + int r1 = width / (3 * RAC3); + int r2 = height / 5; + + if (r1 < r2) + r1 = r1 - r1 % 2; + else + r1 = r2 - r2 % 2; + + Case_menu (m, r1); + Affiche_entry(m, POINTE); + SDL_Flip (m->window); +} + +void Affiche_entry (menu_t m, bool pointe) +{ + int dx = m->pos.x + m->cur.x * (m->l + 1); + SDL_Rect position = {dx + m->cur.y * (m->l + 1) / 2, m->pos.y + m->cur.y * (1.5 * m->r)}; + SDL_Surface* hex = SDL_CreateRGBSurface (SDL_HWSURFACE, 2*m->r, 2*m->r, m->window->format->BitsPerPixel, 0, 0, 0, 0); + SDL_Surface* hex_entry; + SDL_Color c; + if (pointe) + { + Hexagon (hex, m->r, param->j1, param->in, 10, &(m->l)); + c.r = 255; c.g = 0; c.b = 0; + } + else + { + Hexagon (hex, m->r, param->ex, param->in, 10, &(m->l)); + c.r = 100; c.g = 100; c.b = 100; + } + switch (m->cur.x * 10 + m->cur.y) + { + case 01: + hex_entry = Incruste (hex, m->entries [0], m->l, param->font, c); + break; + case 10: + hex_entry = Incruste (hex, m->entries [1], m->l, param->font, c); + break; + case 11: + hex_entry = Incruste (hex, m->entries [2], m->l, param->font, c); + break; + case 12: + hex_entry = Incruste (hex, m->entries [3], m->l, param->font, c); + break; + case 21: + hex_entry = Incruste (hex, m->entries [4], m->l, param->font, c); + break; + } + + SDL_FreeSurface (hex); + SDL_BlitSurface (hex_entry, NULL, m->window, &position); + SDL_FreeSurface (hex_entry); + SDL_Flip (m->window); +} + +/* Menu options */ +/* Interne */ + +/*void print_arrow (SDL_Surface* window, bool side, ) +{ + SDL_Surface* arrow = SDL_CreateRGBSurface (SDL_HWSURFACE, 2*m->r, 2*m->r, window->format->BitsPerPixel, 0, 0, 0, 0); +} + +SDL_Rect cadre_options (SDL_Surface* window, int l) +{ + SDL_Rect pos = {(window->w - 4 * (l + 1)) / 2 + (l + 1) / 2, 0, 2 * l + 1, window->h * 11. /12}; + SDL_FillRect (window, &pos, param->ex); + pos.x += 10; + pos.y += 10; + pos.w -= 20; + pos.h -= 20; + SDL_FillRect (window, &pos, param->in); + return pos; +} + +int create_options_surfaces (SDL_Surface* entry [NBOPTIONS]) +{ + char* entry_name [NBOPTIONS] = {"Musique : ", "Son : ", "Couleurs : ", "Taille : ", "Retour"}; + // Also modify NBOPTIONS + int maxw = 0; + for (int i = 0; i < NBOPTIONS; ++i) + { + entry [i] = TTF_RenderUTF8_Blended (param->font, entry_name [i], param->rgb_ex); + if (maxw < entry[i]->w) + maxw = entry[i]->w; + } + return maxw; +} + +SDL_Rect blit_redim_options (SDL_Surface* window, SDL_Surface* entry [NBOPTIONS], SDL_Rect pos, int maxw, int size, int margev) +{ + for (int i = 0; i < NBOPTIONS - 1; ++i) + { + SDL_Surface* entry_dim; + if (pos.w / 2 < entry[i]->w) + { + entry_dim = rotozoomSurface(entry[i], 0, pos.w / (2. * maxw), 1); + SDL_FreeSurface (entry[i]); + } + else if (size < entry[i]->h) + { + entry_dim = rotozoomSurface(entry[i], 0, pos.w / (2. * maxw), 1); + SDL_FreeSurface (entry[i]); + } + else + entry_dim = entry[i]; + + SDL_Rect pos_entry = {pos.x + (pos.w / 2 - entry_dim->w) / 2, pos.y + (size - entry_dim->h) / 2, 0, 0}; + SDL_BlitSurface (entry_dim, NULL, window, &pos_entry); + + pos.y += size + margev; + + SDL_FreeSurface (entry_dim); + } + return pos; +} + +SDL_Rect blit_redim_retour (SDL_Surface* window, SDL_Surface* entry [NBOPTIONS], SDL_Rect pos, int maxw, int size) +{ + SDL_Surface* entry_dim; + if (pos.w / 2 < entry[NBOPTIONS-1]->w) + { + entry_dim = rotozoomSurface(entry[NBOPTIONS-1], 0, pos.w / (2. * maxw), 1); + SDL_FreeSurface (entry[NBOPTIONS-1]); + } + else if (size < entry[NBOPTIONS-1]->h) + { + entry_dim = rotozoomSurface(entry[NBOPTIONS-1], 0, pos.w / (2. * maxw), 1); + SDL_FreeSurface (entry[NBOPTIONS-1]); + } + else + entry_dim = entry[NBOPTIONS-1]; + + SDL_Rect pos_entry = {pos.x + (pos.w - entry_dim->w)/2 + 10, pos.y + (size - entry_dim->h) / 2, 0, 0}; + SDL_Rect pos_cadre = {pos_entry.x - 10, pos_entry.y - 10, entry_dim->w + 20, entry_dim->h + 20}; + SDL_FillRect (window, &pos_cadre, param->ex); + pos_cadre.x += 5; + pos_cadre.y += 5; + pos_cadre.w -= 10; + pos_cadre.h -= 10; + SDL_FillRect (window, &pos_cadre, param->in); + SDL_BlitSurface (entry_dim, NULL, window, &pos_entry); + + SDL_FreeSurface (entry_dim); + + return pos; +}*/ + +/* Externe + +void Affiche_menu_options (SDL_Surface* window, int rayon, int l) +{ + SDL_Surface* hex = SDL_CreateRGBSurface (SDL_HWSURFACE, rayon * 2, rayon * 2, window->format->BitsPerPixel, 0, 0, 0, 0); + Hexagon_single (hex, rayon, SDL_MapRGB(hex->format, 0, 0, 0), &l); + int dx = (window->w - 4 * (l + 1)) / 2 - rayon + l/2 + 1 + (l + 1); + SDL_Rect pos_hex = {dx + 2 * (l + 1) / 2, 2 * (1.5 * rayon)}; + SDL_BlitSurface (hex, NULL, window, &pos_hex); + SDL_FreeSurface (hex); + + SDL_Rect pos = cadre_options (window, l); + + int size = pos.h * 2 / 3. / NBOPTIONS; + int margev = pos.h / 3. / (NBOPTIONS + 1); + + pos.y += margev; + pos.w -= 40; + pos.x += 10; + + SDL_Surface* entry [NBOPTIONS]; + + int maxw = create_options_surfaces (entry); + + pos = blit_redim_options (window, entry, pos, maxw, size, margev); + pos = blit_redim_retour (window, entry, pos, maxw, size); + + for (int i = 0 ; i < window->h; ++i) + putPixel (window, pos.x + pos.w/2 + 10, i, SDL_MapRGB (window->format, 0, 255, 0)); + + + SDL_Flip (window); +}*/ + +void banane (SDL_Surface* window) +{ + SDL_Surface* gif [8]; + SDL_Rect p = {0, 0}; + + for (int i = 1; i <= 8; ++i) + { + char dir [254]; + sprintf (dir, "ressources/.east/Dancing_Banana%d.png", i); + SDL_Surface* tmpB = IMG_Load (dir); + float ch = window->h / (float)tmpB->h, cw = window->w / (float)tmpB->w; + if (cw < ch) + { + gif [i - 1] = rotozoomSurface(tmpB, .0, cw, 1); + p.y = (window->h - gif [i - 1]->h) / 2; + } + else + { + gif [i - 1] = rotozoomSurface(tmpB, .0, ch, 1); + p.x = (window->w - gif [i - 1]->w) / 2; + } + SDL_FreeSurface (tmpB); + } + + SDL_Surface* erase = SDL_CreateRGBSurface (SDL_HWSURFACE, gif[0]->w, gif[0]->h, window->format->BitsPerPixel, 0, 0, 0, 0); + p.w = gif [0]->w; + p.h = gif [0]->h; + SDL_BlitSurface (window, &p, erase, NULL); + + bool end = false; + int i = 0; + int cur = 0; + char* passcode = "stopdancingstupidbanana"; + bool pause = false; + while (!end) + { + if (!(SDL_GetTicks() % 100) && !pause) + { + SDL_BlitSurface (gif [i%8], NULL, window, &p); + SDL_Flip (window); + SDL_BlitSurface (erase, NULL, window, &p); + i = (i + 1) % 8 + 8; + } + SDL_Event e; + if (SDL_PollEvent (&e) && e.type == SDL_KEYDOWN) + { + 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; + } + } + + SDL_BlitSurface (erase, NULL, window, &p); + SDL_Flip (window); + + for (int i = 0; i < 8; ++i) + { + SDL_FreeSurface (gif [i]); + } + SDL_FreeSurface (erase); +} + +void east1 (SDL_Surface* window, SDLKey key) +{ + static int banana = 0; + switch (key) + { + case SDLK_a: + if (banana % 2) + ++banana; + else + banana = 0; + break; + case SDLK_b: + if (banana == 0) + ++banana; + else + banana = 0; + break; + case SDLK_n: + if (banana == 2 || banana == 4) + ++banana; + else + banana = 0; + break; + default: + banana = 0; + } + + if (banana == 6) + { + banane (window); + banana = 0; + } +} diff --git a/src/affichage_menu.h b/src/affichage_menu.h new file mode 100644 index 0000000..cfbb85b --- /dev/null +++ b/src/affichage_menu.h @@ -0,0 +1,13 @@ +#ifndef _AFFICHAGE_MENU_PRICIPAL_ +#define _AFFICHAGE_MENU_PRICIPAL_ + +#include +#include "globals.h" + +void Affiche_menu (menu_t m); + +void Affiche_entry (menu_t m, bool pointe); + +void east1 (SDL_Surface* window, SDLKey key); + +#endif /* _AFFICHAGE_MENU_PRICIPAL_ */ diff --git a/src/affichage_plateau.c b/src/affichage_plateau.c index 2798a1a..c3cd869 100644 --- a/src/affichage_plateau.c +++ b/src/affichage_plateau.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "draw.h" @@ -32,7 +33,6 @@ void Define_rayon (plateau_t p) p->marge_hori = (p->window->w - NBSIDE * l - NBSIDE * l / 2) / 2; p->marge_vert = (p->window->h - 1.5 * (NBSIDE) * p->r - p->r / 2) / 2; } - printf ("%d - %d - %d\n", p->r, r1, r2); } void Bordures (plateau_t p) @@ -131,6 +131,8 @@ void Quadrille (plateau_t p) Bordures (p); + Menu_button(p, 0); + SDL_Flip (p->window); } @@ -172,11 +174,46 @@ void Quadrille_bis (plateau_t p) Bordures (p); + Menu_button(p, 0); + SDL_Flip (p->window); } /*Externes*/ +void Menu_button (plateau_t p, bool pointe) +{ + SDL_Rect pos = {p->marge_hori + (p->window->w - 2 * p->marge_hori) / 48, p->marge_vert + p->r * 1.5 * (NBSIDE - 2) + p->r / 2, .h = (p->window->h - 2 * p->marge_vert) / 9}; + + SDL_Surface* tmp; + SDL_Color c; + if (pointe) + if (PLAYER(p->player) == J1) + c = param->rgb_j1; + else + c = param->rgb_j2; + else + c = param->rgb_ex; + tmp = TTF_RenderUTF8_Blended (param->font, "Menu", c); + SDL_Surface* menu = rotozoomSurface(tmp, .0, (pos.h - 8) / (float)tmp->h, 1); + SDL_FreeSurface (tmp); + pos. w = menu->w + 16; + SDL_FillRect (p->window, &pos, SDL_MapRGB (p->window->format, c.r, c.g, c. b)); + pos.w -= 8; + pos.h -= 8; + pos.x += 4; + pos.y += 4; + SDL_FillRect (p->window, &pos, param->in); + p->menu.x = pos.x; + p->menu.y = pos.y; + p->menu.w = pos.w; + p->menu.h = pos.h; + SDL_Rect postxt = {pos.x, pos.y}; + postxt.x = pos.x + (pos.w - menu->w) / 2; + SDL_BlitSurface (menu, NULL, p->window, &postxt); + SDL_Flip(p->window); +} + void Affiche_hexagon (plateau_t p, int x, int y, int state) { SDL_Rect position = {p->marge_hori + x * (p->l + 1) + y * (p->l + 1) / 2, p->marge_vert + y * (1.5 * p->r)}; diff --git a/src/affichage_plateau.h b/src/affichage_plateau.h index f5668d5..305806b 100644 --- a/src/affichage_plateau.h +++ b/src/affichage_plateau.h @@ -7,10 +7,10 @@ #define COLOR 32 -void putPixel(SDL_Surface * surface, Uint16 x, Uint16 y, Uint32 color); - void Affiche_hexagon (plateau_t p, int x, int y, int state); +void Menu_button (plateau_t p, bool pointe); + plateau_t init_plateau (SDL_Surface* window); plateau_t load_plateau (SDL_Surface* window, int* hist); diff --git a/src/en_jeu.c b/src/en_jeu.c index fce7976..ebb85e3 100644 --- a/src/en_jeu.c +++ b/src/en_jeu.c @@ -7,6 +7,8 @@ #include "en_jeu.h" +#include + #include "globals.h" #include "action_plateau.h" #include "affichage_plateau.h" @@ -14,9 +16,31 @@ #include "param.h" #include "sauvegarde.h" #include "scrolling.h" +#include "menu_en_jeu.h" + +bool fake_IA (plateau_t p, bool* end) +{ + if (!*end) + { + int casejouee; + do + { + casejouee = rand() % (NBSIDE * NBSIDE); + } while (p->grid [casejouee] != 0); + p->grid [casejouee] = PLAYER(p->player); + p->hist [p->nb_coups++] = casejouee; + p->player = !p->player; + Affiche_hexagon (p, casejouee / NBSIDE, casejouee % NBSIDE, NORMAL); + //Affiche_hexagon (p, p->hist[p->nb_coups - 2] / NBSIDE, p->hist[p->nb_coups - 2] % NBSIDE, PLAYER(p->player)); + *end = testGagne (p->grid, PLAYER(!p->player)); + return true; + } + return false; +} void en_jeu (SDL_Surface* window, int* hist) { + Reset_window(window); Mix_PlayMusic(param->music, -1); plateau_t plateau; if (hist == NULL) @@ -25,16 +49,18 @@ void en_jeu (SDL_Surface* window, int* hist) plateau = load_plateau (window, hist); vec2 c = {0, 0}; bool end = false; - scrolling_t s = init_dynamic_scroll (window, plateau); + bool gagne = false; + d_scrolling_t d = init_dynamic_scroll (window, plateau); + bool button = false; while (!end) { - SDL_Event event = dynamic_scroll (window, s, plateau); - //SDL_WaitEvent (&event); + SDL_Event event = dynamic_scroll (window, d, plateau); switch (event.type) { case SDL_VIDEORESIZE: resize_window(window, &event); plateau = actu_plateau(plateau); + d = resize_dynamic_scroll (window, d, plateau); break; case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_ESCAPE) @@ -45,33 +71,81 @@ void en_jeu (SDL_Surface* window, int* hist) plateau = actu_plateau(plateau); } else if (event.key.keysym.sym == SDLK_RETURN) - end = selection (plateau, c); + if (button) + { + if (menu_en_jeu(plateau) == M_DOWN) + end = true; + } + else + gagne = selection (plateau, c); else if (SDLK_UP <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_LEFT) - deplacement(plateau, &event, &c); + deplacement_key(plateau, event.key.keysym.sym, &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); - else if (event.key.keysym.sym == SDLK_s) + else if (event.key.keysym.sym == SDLK_m) { - sauvegarde ("1", plateau->hist, 0); + char* entries [5] = {"Joueur-IA1", "2 Joueurs", "Type", "Joueur-IA2", "IA1-IA2"}; + menu_t type = init_menu (window, entries); + Affiche_menu (type); } break; case SDL_MOUSEBUTTONUP: - end = selection (plateau, c); + if (button) + { + if (menu_en_jeu(plateau) == M_DOWN) + end = true; + } + else + gagne = selection (plateau, c); break; case SDL_MOUSEMOTION: - deplacement(plateau, &event, &c); + { + bool tmp = d_menu_mouse(plateau, event.motion); + if (button && !tmp) + Menu_button (plateau, 0); + button = tmp; + if (!button) + deplacement_mouse(plateau, event.motion, &c); break; + } case SDL_QUIT: end = true; break; + default: + { + Uint8 *keyboard = SDL_GetKeyState(NULL); + if (keyboard [SDLK_UP]) + deplacement_key (plateau, SDLK_UP, &c); + if (keyboard [SDLK_DOWN]) + deplacement_key (plateau, SDLK_DOWN, &c); + if (keyboard [SDLK_LEFT]) + deplacement_key (plateau, SDLK_LEFT, &c); + if (keyboard [SDLK_RIGHT]) + deplacement_key (plateau, SDLK_RIGHT, &c); + } + + } + if (gagne) + { + while (!end) + { + char new [50]; + sprintf (new, "Joueur %d Gagne !!", PLAYER(!plateau->player)); + SDL_Surface* txt; + if (PLAYER(!plateau->player) == J1) + txt = TTF_RenderUTF8_Blended (param->font, new, param->rgb_j1); + else + txt = TTF_RenderUTF8_Blended (param->font, new, param->rgb_j2); + SDL_Surface* final = rotozoomSurface (txt, .0, window->w / txt->w, 1); + SDL_FreeSurface (txt); + SDL_BlitSurface (final, NULL , window, NULL); + SDL_FreeSurface (final); + SDL_Event e; + SDL_WaitEvent (&e); + if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) + end = true; + } } - } - while (!end) - { - SDL_Event event; - SDL_WaitEvent (&event); - if (event.type == SDL_QUIT) - end = true; } free_plateau (plateau); Mix_HaltMusic(); diff --git a/src/globals.h b/src/globals.h index e3356ee..ffcd724 100644 --- a/src/globals.h +++ b/src/globals.h @@ -6,10 +6,13 @@ #include #include +#define OK 0 + #define DWIDTH 800 #define DHEIGHT 600 #define NBSIDE param->size +#define MAXSIZE 20 #define PI 3.14159265 #define RAC3 1.73205080757 @@ -20,11 +23,12 @@ #define NORMAL 0 #define POINTE 1 -#define M_JOUER 0 -#define M_CHARGER 1 -#define M_OPTIONS 2 -#define M_QUITTER 3 -#define M_HEX 5 +#define M_UP 0 +#define M_LEFT 1 +#define M_RIGHT 2 +#define M_DOWN 3 +#define M_MID 5 +#define M_NOT 6 typedef struct s_vec3{ int x; @@ -40,6 +44,8 @@ typedef struct s_vec2{ typedef struct s_vec2 curseur_t; typedef struct s_menu { + char** entries; + int nb_entries; int l; int r; vec2 pos; @@ -58,6 +64,8 @@ typedef struct s_plateau { int *hist; int nb_coups; bool player; + int ia; + SDL_Rect menu; }* plateau_t; typedef struct s_param { diff --git a/src/hex.c b/src/hex.c index 1d6a4c8..79dc01f 100644 --- a/src/hex.c +++ b/src/hex.c @@ -4,6 +4,8 @@ ********************************************************/ #include +#include +#include #include "window.h" #include "globals.h" #include "menu_principal.h" @@ -13,30 +15,33 @@ int main(int argc, char **argv) { + srand(time(0)); SDL_Surface* window = init_window(); load_param(window); Reset_window (window); bool end = 0; + char* file; while (!end) { - int retour = menu_principal(window); - Reset_window(window); - switch (retour) + switch (menu_principal(window, &file)) { - case M_JOUER: + case M_UP: en_jeu (window, NULL); Reset_window(window); break; - case M_CHARGER: + case M_LEFT: { int * hist; int ia; - printf (" -- %d\n", chargement ("1", &hist, &ia)); - en_jeu (window, hist); - Reset_window(window); + int err = chargement (file, &hist, &ia); + if (err != OK) + printf ("Erreur chargement : %d\n", err); + else + en_jeu (window, hist); + Reset_window(window); break; } - case M_QUITTER: + case M_DOWN: end = 1; } } diff --git a/src/menu.c b/src/menu.c new file mode 100644 index 0000000..5126f93 --- /dev/null +++ b/src/menu.c @@ -0,0 +1,80 @@ +/* + * menu.c + * + * Created on: 9 mai 2016 + * Author: nathan + */ + +#include "menu.h" + +#include "action_menu.h" +#include "affichage_menu.h" +#include "window.h" + + + +menu_t init_menu (SDL_Surface* window, char** entries) +{ + menu_t m = malloc (sizeof (struct s_menu)); + m->entries = entries; + m->window = window; + m->cur.x = 1; + m->cur.y = 1; + m->c = 0; + return m; +} + +void free_menu (menu_t m) +{ + free (m); +} + +int evenement_menu (SDL_Surface* window, menu_t m, SDL_Event event, bool persist_select) +{ + switch (event.type) + { + case SDL_VIDEORESIZE: + resize_window(window, &event); + Affiche_menu (m); + break; + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_f) + { + window = fullscreen_window(window); + Affiche_menu (m); + } + else if (event.key.keysym.sym == SDLK_RETURN) + return selection_menu (m); + else if (SDLK_UP <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_LEFT) + deplacement_menu_key (m, event.key.keysym.sym); + else + east1 (window, event.key.keysym.sym); + break; + case SDL_MOUSEBUTTONUP: + return selection_menu (m); + break; + case SDL_MOUSEMOTION: + deplacement_menu_mouse (m, &event); + break; + default: + { + Uint8 *keyboard = SDL_GetKeyState(NULL); + if (keyboard [SDLK_UP]) + deplacement_menu_key (m, SDLK_UP); + if (keyboard [SDLK_DOWN]) + deplacement_menu_key (m, SDLK_DOWN); + if (keyboard [SDLK_LEFT]) + deplacement_menu_key (m, SDLK_LEFT); + if (keyboard [SDLK_RIGHT]) + deplacement_menu_key (m, SDLK_RIGHT); + if (persist_select) + { + if (keyboard [SDLK_RETURN]) + return selection_menu (m); + if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_LEFT)) + return selection_menu (m); + } + } + } + return M_NOT; +} diff --git a/src/menu.h b/src/menu.h new file mode 100644 index 0000000..4630749 --- /dev/null +++ b/src/menu.h @@ -0,0 +1,22 @@ +/* + * menu.h + * + * Created on: 9 mai 2016 + * Author: nathan + */ + +#ifndef _SRC_MENU_H_ +#define _SRC_MENU_H_ + +#include +#include + +#include "globals.h" + +menu_t init_menu (SDL_Surface* window, char** entries); + +void free_menu (menu_t m); + +int evenement_menu (SDL_Surface* window, menu_t m, SDL_Event event, bool persist_select); + +#endif /* _SRC_MENU_H_ */ diff --git a/src/menu_en_jeu.c b/src/menu_en_jeu.c new file mode 100644 index 0000000..73e2ce8 --- /dev/null +++ b/src/menu_en_jeu.c @@ -0,0 +1,227 @@ +/* + * menu_en_jeu.c + * + * Created on: 9 mai 2016 + * Author: nathan + */ + +#include "menu_en_jeu.h" + +#include "affichage_menu.h" +#include "affichage_plateau.h" +#include "menu.h" +#include "sub_menu.h" +#include "sauvegarde.h" + + +void random_char_9 (char* s) +{ + for (int i = 0; i < 8; ++i) + s[i] = 'A' + rand() % 26; + s[9]= '\0'; +} + +bool d_menu_mouse (plateau_t p, SDL_MouseMotionEvent motion) +{ + if (p->menu.x < motion.x && motion.x < p->menu.x + p->menu.w && p->menu.y < motion.y && motion.y < p->menu.y + p->menu.h) + { + Menu_button (p, 1); + return true; + } + return false; +} + +int menu_save (plateau_t p) +{ + char* entries [5] = {"<", "Save", "", "Retour", ">"}; + entries [2] = malloc (sizeof (char) * 12); + int cur = 0; + strcpy (entries [2], "_\0"); + menu_t m = init_menu (p->window, entries); + Affiche_menu(m); + int retour; + bool end = false; + + while (!end) + { + SDL_Event event; + SDL_WaitEvent (&event); + if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) + { + retour = M_DOWN; + } + else if (event.type == SDL_KEYDOWN && SDLK_a <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_z && cur < 8) + { + Uint8* keyboard = SDL_GetKeyState(NULL); + if ((keyboard [SDLK_RSHIFT] || keyboard [SDLK_LSHIFT]) ^ keyboard [SDLK_CAPSLOCK]) + entries [2] [cur] = event.key.keysym.sym - 'a' + 'A'; + else + entries [2] [cur] = event.key.keysym.sym; + ++cur; + if (cur == 8) + entries [2] [cur] = '\0'; + else + { + entries [2] [cur] = '_'; + entries [2] [cur + 1] = '\0'; + } + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + } + else if (event.type == SDL_KEYDOWN && SDLK_KP0 <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_KP9 && cur < 8) + { + entries [2] [cur] = event.key.keysym.sym - SDLK_KP0 + '0'; + ++cur; + if (cur == 8) + entries [2] [cur] = '\0'; + else + { + entries [2] [cur] = '_'; + entries [2] [cur + 1] = '\0'; + } + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + } + else if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_BACKSPACE && cur > 0) + { + entries [2] [cur] = '\0'; + --cur; + entries [2] [cur] = '_'; + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + } + else + retour = evenement_menu(p->window, m, event, 0); + + switch (retour) + { + case M_UP: + if (0 < cur && strlen (entries [2]) < 9) + { + end = true; + char** liste; + int nb = listeSauvegarde (&liste); + for (int i = 0; i < nb && end; ++i) + if (!strcmp (entries [2], liste [i])) + { + strcpy (entries [2], "existe déjà"); + cur = 1; + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + end = 0; + } + free_liste (liste, nb); + if (end) + { + entries [2] [cur] = '\0'; + sauvegarde (entries [2], p->hist, p->ia); + } + } + break; + case M_LEFT : + { + random_char_9 (entries [2]); + cur = 8; + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + break; + } + case M_RIGHT : + { + random_char_9 (entries [2]); + cur = 8; + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + break; + } + case M_DOWN : + end = true; + break; + case M_MID : + break; + } + } + + + free_menu(m); + free (entries [2]); + return retour; +} + +int menu_en_jeu (plateau_t p) +{ + SDL_Surface* save = SDL_CreateRGBSurface (SDL_HWSURFACE, p->window->w, p->window->h, p->window->format->BitsPerPixel, 0, 0, 0, 0); + SDL_BlitSurface (p->window, NULL, save, NULL); + SDL_Surface* ombre = SDL_CreateRGBSurface (SDL_HWSURFACE, p->window->w, p->window->h, p->window->format->BitsPerPixel, 0, 0, 0, 0); + SDL_FillRect (ombre, NULL, SDL_MapRGB (p->window->format, 0, 0, 0)); + SDL_SetAlpha(ombre, SDL_SRCALPHA, 200); + SDL_BlitSurface (ombre, NULL, p->window, NULL); + SDL_FreeSurface (ombre); + + char* entries [5] = {"Music", "Save", "HEX", "Quitter", " Son "}; + menu_t m = init_menu (p->window, entries); + Affiche_menu(m); + int retour; + bool end = false; + + while (!end) + { + SDL_Event event; + SDL_WaitEvent (&event); + if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) + { + retour = M_DOWN; + } + else + retour = evenement_menu(p->window, m, event, 0); + switch (retour) + { + case M_UP: + menu_save (p); + m->cur.x = 1; + m->cur.y = 1; + Affiche_menu(m); + break; + case M_LEFT : + menu_music (p->window, NULL); + m->cur.x = 1; + m->cur.y = 1; + Affiche_menu(m); + break; + case M_RIGHT : + menu_son (p->window, NULL); + m->cur.x = 1; + m->cur.y = 1; + Affiche_menu(m); + break; + case M_DOWN : + end = true; + break; + case M_MID : + end = true; + break; + } + } + free_menu(m); + SDL_BlitSurface (save, NULL, p->window, NULL); + SDL_FreeSurface (save); + return retour; +} diff --git a/src/menu_en_jeu.h b/src/menu_en_jeu.h new file mode 100644 index 0000000..8ab8da7 --- /dev/null +++ b/src/menu_en_jeu.h @@ -0,0 +1,20 @@ +/* + * menu_en_jeu.h + * + * Created on: 9 mai 2016 + * Author: nathan + */ + +#ifndef _MENU_EN_JEU_H_ +#define _MENU_EN_JEU_H_ + +#include +#include + +#include "globals.h" + +bool d_menu_mouse (plateau_t p, SDL_MouseMotionEvent motion); + +int menu_en_jeu (plateau_t p); + +#endif /* _MENU_EN_JEU_H_ */ diff --git a/src/menu_principal.c b/src/menu_principal.c index de4472c..4beb7b0 100644 --- a/src/menu_principal.c +++ b/src/menu_principal.c @@ -1,160 +1,255 @@ #include "menu_principal.h" -#include "action_menu_principal.h" -#include "affichage_menu_principal.h" +#include + +#include "action_menu.h" +#include "affichage_menu.h" +#include "menu.h" #include "globals.h" #include "window.h" #include "scrolling.h" +#include "sound.h" +#include "sauvegarde.h" +#include "sub_menu.h" -menu_t init_menu_principal (SDL_Surface* window) +int menu_taille (SDL_Surface* window, scrolling_t scroll) { - menu_t m = malloc (sizeof (struct s_menu)); - m->window = window; - m->cur.x = 1; - m->cur.y = 1; - m->c = 0; - return m; -} - -menu_t init_menu_options (SDL_Surface* window) -{ - menu_t m = malloc (sizeof (struct s_menu)); - m->window = window; - m->cur.x = 1; - m->cur.y = 1; - return m; -} - -void free_menu (menu_t m) -{ - free (m); -} - -scrolling_t resize_scroll (SDL_Surface* w, scrolling_t s) -{ - char** msg = s->msgstr; - SDL_Color* c = s->c; - int nb = s->nb_surf; - free_scroll (s); - s = init_scroll (w, msg, c, nb); - return s; -} - -int menu_options (SDL_Surface* window, scrolling_t s, menu_t m) -{ - Affiche_menu_options (window, m->r, m->l); - bool end = 0; - if (end) - end = 1; - /*while (!end) - { - SDL_Event event; - event = scroll_msg (window, s); - switch (event.type) - { - case SDL_VIDEORESIZE: - resize_window(window, &event); - Affiche_menu_principal(m); - s = resize_scroll(window, s); - break; - case SDL_KEYDOWN: - if (event.key.keysym.sym == SDLK_ESCAPE) - end = 1; - break; - else if (event.key.keysym.sym == SDLK_f) - { - window = fullscreen_window(window); - Affiche_menu_principal(m); - scroll = resize_scroll(window, scroll); - } - else if (event.key.keysym.sym == SDLK_RETURN) - end = selection_menu (m, &retour); - else if (SDLK_UP <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_LEFT) - deplacement_menu (m, &event); - break; - case SDL_MOUSEBUTTONUP: - end = selection_menu (m, &retour); - break; - case SDL_MOUSEMOTION: - deplacement_menu (m, &event); - break; - case SDL_QUIT: - end = 1; - break; - } - }*/ - return 0; -} - -int menu_principal (SDL_Surface* window) -{ - menu_t m = init_menu_principal (window); - Affiche_menu_principal(m); + char* entries [5] = {"<", "TAILLE", "", "Retour", ">"}; + entries [2] = malloc (sizeof (char)* 8); + sprintf (entries [2], "%dx%d", param->size, param->size); + menu_t m = init_menu (window, entries); + Affiche_menu(m); int retour; - bool end = 0; - char* message [] = {"Crédits : petite bite & gros chakal Corp.", "Breaking News : Le Soudan en manque de soudeurs", "lmqsdkmq", "There is nothing to see here ... BASTARD !"}; - SDL_Color c [] = {{170,10,107}, {60,255,1}, {0, 0, 0}, {200, 180, 201}}; - scrolling_t scroll = init_scroll (window, message, c, 4); + bool end = false; + while (!end) { SDL_Event event; event = scroll_msg (window, scroll); - switch (event.type) + if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) { - case SDL_VIDEORESIZE: - resize_window(window, &event); - Affiche_menu_principal(m); - scroll = resize_scroll(window, scroll); - break; - case SDL_KEYDOWN: - if (event.key.keysym.sym == SDLK_ESCAPE) - { - retour = M_QUITTER; - end = 1; - } - else if (event.key.keysym.sym == SDLK_f) - { - window = fullscreen_window(window); - Affiche_menu_principal(m); - scroll = resize_scroll(window, scroll); - } - else if (event.key.keysym.sym == SDLK_RETURN) - end = selection_menu (m, &retour); - else if (SDLK_UP <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_LEFT) - deplacement_menu_key (m, event.key.keysym.sym); - else - east1 (window, event.key.keysym.sym); - break; - case SDL_MOUSEBUTTONUP: - end = selection_menu (m, &retour); - break; - case SDL_MOUSEMOTION: - deplacement_menu_mouse (m, &event); - break; - case SDL_QUIT: - retour = M_QUITTER; - end = 1; - break; - default: + retour = M_DOWN; + } + else + retour = evenement_menu(window, m, event, 0); + if (event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f)) + scroll = resize_scroll(window, scroll); + switch (retour) + { + case M_UP: + break; + case M_LEFT : + if (param->size > 1) { - Uint8 *keyboard = SDL_GetKeyState(NULL); - if (keyboard [SDLK_UP]) - deplacement_menu_key (m, SDLK_UP); - if (keyboard [SDLK_DOWN]) - deplacement_menu_key (m, SDLK_DOWN); - if (keyboard [SDLK_LEFT]) - deplacement_menu_key (m, SDLK_LEFT); - if (keyboard [SDLK_RIGHT]) - deplacement_menu_key (m, SDLK_RIGHT); + --param->size; + sprintf (entries [2], "%dx%d", param->size, param->size); + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; } - - } - if (retour == M_OPTIONS) + break; + case M_RIGHT : { - menu_options (window, scroll, m); - retour = -1; + if (param->size < SIZE_MAX) + { + ++param->size; + sprintf (entries [2], "%dx%d", param->size, param->size); + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + } + break; } + case M_DOWN : + end = true; + break; + case M_MID : + break; + } + } + free (entries [2]); + free_menu(m); + Mix_HaltMusic(); + return retour; +} +int menu_options (SDL_Surface* window, scrolling_t scroll) +{ + char* entries [5] = {"Music", "Taille", "OPTIONS", "Retour", " Son "}; + menu_t m = init_menu (window, entries); + Affiche_menu(m); + int retour; + bool end = false; + + while (!end) + { + SDL_Event event; + event = scroll_msg (window, scroll); + if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) + { + retour = M_DOWN; + } + else + retour = evenement_menu(window, m, event, 0); + if (event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f)) + scroll = resize_scroll(window, scroll); + switch (retour) + { + case M_UP: + menu_taille (window, scroll); + m->cur.x = 1; + m->cur.y = 1; + Affiche_menu(m); + break; + case M_LEFT : + menu_music (window, scroll); + m->cur.x = 1; + m->cur.y = 1; + Affiche_menu(m); + break; + case M_RIGHT : + menu_son (window, scroll); + m->cur.x = 1; + m->cur.y = 1; + Affiche_menu(m); + break; + case M_DOWN : + end = true; + break; + case M_MID : + break; + } + } + free_menu(m); + return retour; +} + +int menu_charger (SDL_Surface* window, scrolling_t scroll, char** file) +{ + char* entries [5] = {"<", "CHARGER", "", "Retour", ">"}; + entries [2] = malloc (sizeof (char)* 9); + char** liste; + int nb_sav = listeSauvegarde(&liste); + int cur = 0; + sprintf (entries [2], "%s", liste[cur]); + menu_t m = init_menu (window, entries); + Affiche_menu(m); + int retour; + bool end = false; + + while (!end) + { + SDL_Event event; + event = scroll_msg (window, scroll); + if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) + { + retour = M_DOWN; + } + else + retour = evenement_menu(window, m, event, 0); + if (event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f)) + scroll = resize_scroll(window, scroll); + switch (retour) + { + case M_UP: + *file = malloc (sizeof (char) * (strlen(entries[2]) + 1)); + strcpy (*file, entries [2]); + end = true; + retour = M_UP; + break; + case M_LEFT : + { + + if (!cur) + cur = nb_sav - 1; + else + --cur; + sprintf (entries [2], "%s", liste[cur]); + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + break; + } + case M_RIGHT : + { + cur = (cur + 1) % nb_sav; + sprintf (entries [2], "%s", liste[cur]); + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + break; + } + case M_DOWN : + end = true; + break; + case M_MID : + break; + } + } + free (entries [2]); + free_liste (liste, nb_sav); + free_menu(m); + return retour; +} + +int menu_principal (SDL_Surface* window, char** file) +{ + char* entries [5] = {"Charger", "Jouer", "HEX", "Quitter", "Options"}; + menu_t m = init_menu (window, entries); + Affiche_menu(m); + int retour; + bool end = false; + char* message [] = {"Crédits : petite bite & gros chakal Corp.", "Breaking News : Le Soudan en manque de soudeurs", "lmqsdkmq", "There is nothing to see here ... BASTARD !"}; + SDL_Color c [] = {{170,10,107}, {60,255,1}, {0, 0, 0}, {200, 180, 201}}; + scrolling_t scroll = init_scroll (window, message, c, 4); + + while (!end) + { + SDL_Event event; + event = scroll_msg (window, scroll); + if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) + { + retour = M_DOWN; + } + else + retour = evenement_menu(window, m, event, 0); + switch (retour) + { + case M_UP: + end = true; + break; + case M_LEFT : + if (menu_charger (window, scroll, file) == M_UP) + { + end = true; + retour = M_LEFT; + } + m->cur.x = 1; + m->cur.y = 1; + Affiche_menu(m); + break; + case M_RIGHT : + menu_options (window, scroll); + m->cur.x = 1; + m->cur.y = 1; + Affiche_menu(m); + break; + case M_DOWN : + end = true; + break; + case M_MID : + break; + } + if (event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f)) + scroll = resize_scroll(window, scroll); } free_menu(m); free_scroll (scroll); diff --git a/src/menu_principal.h b/src/menu_principal.h index 8509082..23be11e 100644 --- a/src/menu_principal.h +++ b/src/menu_principal.h @@ -3,6 +3,6 @@ #include -int menu_principal (SDL_Surface* window); +int menu_principal (SDL_Surface* window, char** file); #endif /* _MENU_PRINCIPAL_H_ */ diff --git a/src/sauvegarde.c b/src/sauvegarde.c index adb716f..06b981c 100644 --- a/src/sauvegarde.c +++ b/src/sauvegarde.c @@ -21,7 +21,7 @@ int listeSauvegarde(char*** nomSave){ while((d=readdir(rep))!=NULL) { ext=strlen(d->d_name); - if (ext>3 && !strcmp(&d->d_name[ext-4], ".sav")){ + if (ext>3 && !strcmp(&d->d_name[ext-4], ".sav") && ext<13){ nbSave++; } } @@ -32,13 +32,13 @@ int listeSauvegarde(char*** nomSave){ while((d=readdir(rep))!=NULL) { ext=strlen(d->d_name); - if (ext>3 && !strcmp(&d->d_name[ext-4], ".sav")){ + if (ext>3 && !strcmp(&d->d_name[ext-4], ".sav") && ext<13){ tmp[i]=malloc(sizeof(char)*(ext-2)); for(j=0;jd_name[j]; } - tmp[i][ext-3]=0; + tmp[i][ext-4]=0; i++; } } @@ -48,6 +48,13 @@ int listeSauvegarde(char*** nomSave){ } +void free_liste (char** liste, int n) +{ + for (int i = 0; i < n; ++i) + free (liste[i]); + free (liste); +} + // 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) @@ -96,7 +103,7 @@ int chargement(char *nom , int **tab, int *IA) return ERROR_IA; } fscanf(f_chargement, "%d", &taille); - if(taille<1 || taille > 25){ + if(taille<1 || taille > SIZE_MAX){ return ERROR_SIZE; } @@ -112,8 +119,8 @@ int chargement(char *nom , int **tab, int *IA) if(i!=taille*taille){ return ERROR_NB_VALUE; } - param->size=taille; - *tab=t; + param->size = taille; + *tab = t; return 0; } diff --git a/src/sauvegarde.h b/src/sauvegarde.h index b7dee2c..af72238 100644 --- a/src/sauvegarde.h +++ b/src/sauvegarde.h @@ -1,3 +1,6 @@ +#ifndef _SAVEGARDE_H_ +#define _SAVEGARDE_H_ + #define ERROR_IA 1 #define ERROR_SIZE 2 #define ERROR_NB_VALUE 3 @@ -5,5 +8,8 @@ #define ERROR_CREATE_DIR 11 int listeSauvegarde(char*** nomSave ); +void free_liste (char** liste, int n); int sauvegarde (char * nom , int * tab, int IA); int chargement (char *nom , int **tab, int *IA); + +#endif /* _SAVEGARDE_H_ */ diff --git a/src/scrolling.c b/src/scrolling.c index e4d92a8..dcf2e8e 100644 --- a/src/scrolling.c +++ b/src/scrolling.c @@ -130,6 +130,16 @@ void free_scroll (scrolling_t s) free (s); } +scrolling_t resize_scroll (SDL_Surface* w, scrolling_t s) +{ + char** msg = s->msgstr; + SDL_Color* c = s->c; + int nb = s->nb_surf; + free_scroll (s); + s = init_scroll (w, msg, c, nb); + return s; +} + SDL_Event scroll_msg (SDL_Surface* window, scrolling_t s) { int t0 = SDL_GetTicks(); @@ -237,3 +247,45 @@ SDL_Event dynamic_scroll (SDL_Surface* window, d_scrolling_t d, plateau_t p) return e; } + +d_scrolling_t resize_dynamic_scroll (SDL_Surface* window, d_scrolling_t d, plateau_t p) +{ + free_scroll (d->s); + d->s = malloc (sizeof (struct s_scrolling)); + char* msg [2] = {"Au tour du Joueur 2", "Au tour du Joueur 1"}; + SDL_Color c [2] = {param->rgb_j2, param->rgb_j1}; + + int size = Cadre_scroll (window); + d->s->nb_surf = 2; + d->s->c = c; + d->s->msgstr = msg; + create_messages_surfaces (d->s, size, window->format->BitsPerPixel); + + d->id = p->nb_coups%2; + d->precedent = NULL; + + nb_msg_max (d->s, window); + + SDL_Surface* j1 = d->s->msg [1]; + + char new [50]; + sprintf (new, "Dernier coup : joueur %d en %2d - %2d ", PLAYER(!p->player), p->hist[p->nb_coups - 1] / NBSIDE + 1, p->hist[p->nb_coups - 1] % NBSIDE + 1); + if (PLAYER(!p->player) == J1) + d->s->msg[1] = create_one_surface (new, param->rgb_j1, d->s->msg[0]->h, window->format->BitsPerPixel); + else + d->s->msg[1] = create_one_surface (new, param->rgb_j2, d->s->msg[0]->h, window->format->BitsPerPixel); + + + init_pos_dim (d->s, window); + + d->s->first_msg = 0; + d->s->nb_msg = 1; + if (d->precedent != NULL && d->precedent != d->s->msg [1]) + SDL_FreeSurface (d->precedent); + d->precedent = d->s->msg [1]; + d->s->msg [1] = j1; + d->s->nb_surf = 2; + + return d; + +} diff --git a/src/scrolling.h b/src/scrolling.h index 0d05a2c..934800e 100644 --- a/src/scrolling.h +++ b/src/scrolling.h @@ -33,10 +33,14 @@ scrolling_t init_scroll (SDL_Surface* window, char** msg, SDL_Color* c, int nb_m void free_scroll (scrolling_t s); +scrolling_t resize_scroll (SDL_Surface* w, scrolling_t s); + SDL_Event scroll_msg (SDL_Surface* window, scrolling_t s); d_scrolling_t init_dynamic_scroll (SDL_Surface* window, plateau_t p); SDL_Event dynamic_scroll (SDL_Surface* window, d_scrolling_t d, plateau_t p); +d_scrolling_t resize_dynamic_scroll (SDL_Surface* window, d_scrolling_t d, plateau_t p); + #endif /* _SCROLLING_H_ */ diff --git a/src/sound.c b/src/sound.c index 720e171..64caabb 100644 --- a/src/sound.c +++ b/src/sound.c @@ -13,12 +13,11 @@ void Load_sound (void) { param->music_vol = .5 * MIX_MAX_VOLUME; param->music = Mix_LoadMUS ("ressources/theme.mp3"); - Mix_VolumeMusic (0);//param->music_vol); + Mix_VolumeMusic (param->music_vol);//param->music_vol); - param->chunk_vol = .25 * MIX_MAX_VOLUME; - printf ("%d\n", param->chunk_vol); + param->chunk_vol = .5 * MIX_MAX_VOLUME; param->click = Mix_LoadWAV("ressources/Click.wav"); - Mix_VolumeChunk (param->click, .5 * param->chunk_vol); + Mix_VolumeChunk (param->click, param->chunk_vol); param->gong = Mix_LoadWAV("ressources/Gong.wav"); Mix_VolumeChunk (param->gong, param->chunk_vol); @@ -33,6 +32,7 @@ void Free_sound (void) void play_clik (void) { + Mix_VolumeChunk (param->click, param->chunk_vol); Mix_PlayChannel(0, param->click, 0); } diff --git a/src/sub_menu.c b/src/sub_menu.c new file mode 100644 index 0000000..80bf18b --- /dev/null +++ b/src/sub_menu.c @@ -0,0 +1,161 @@ +/* + * sub_menu.c + * + * Created on: 9 mai 2016 + * Author: nathan + */ + +#include "sub_menu.h" + +#include + +#define VOL(x) x * MIX_MAX_VOLUME / 100 + +int menu_music (SDL_Surface* window, scrolling_t scroll) +{ + bool en_jeu = Mix_PlayingMusic(); + if (!en_jeu) + Mix_PlayMusic (param->music, -1); + char* entries [5] = {"<", "MUSIC", "", "Retour", ">"}; + entries [2] = malloc (sizeof (char)* 4); + unsigned int vol = param->music_vol * 100 / MIX_MAX_VOLUME; + sprintf (entries [2], "%u", vol); + menu_t m = init_menu (window, entries); + Affiche_menu(m); + int retour; + bool end = false; + + while (!end) + { + SDL_Event event; + if (scroll == NULL) + SDL_WaitEvent (&event); + else + event = scroll_msg (window, scroll); + if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) + { + retour = M_DOWN; + } + else + retour = evenement_menu(window, m, event, 1); + if ((event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f)) && scroll != NULL) + scroll = resize_scroll(window, scroll); + switch (retour) + { + case M_UP: + break; + case M_LEFT : + if (param->music_vol > 0) + { + --vol; + sprintf (entries [2], "%d", vol); + param->music_vol = VOL (vol); + Mix_VolumeMusic (param->music_vol); + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + } + break; + case M_RIGHT : + { + if (param->music_vol < MIX_MAX_VOLUME) + { + ++vol; + sprintf (entries [2], "%d", vol); + param->music_vol = VOL (vol); + Mix_VolumeMusic (param->music_vol); + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + } + break; + } + case M_DOWN : + end = true; + break; + case M_MID : + break; + } + } + free (entries [2]); + free_menu(m); + if (!en_jeu) + Mix_HaltMusic(); + return retour; +} + +int menu_son (SDL_Surface* window, scrolling_t scroll) +{ + char* entries [5] = {"<", " SON ", "", "Retour", ">"}; + entries [2] = malloc (sizeof (char)* 4); + unsigned int vol = param->chunk_vol * 100 / MIX_MAX_VOLUME; + sprintf (entries [2], "%u", vol); + menu_t m = init_menu (window, entries); + Affiche_menu(m); + int retour; + bool end = false; + + while (!end) + { + SDL_Event event; + if (scroll == NULL) + SDL_WaitEvent (&event); + else + event = scroll_msg (window, scroll); + if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)) + { + retour = M_DOWN; + } + else + retour = evenement_menu(window, m, event, 1); + if ((event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f)) && scroll != NULL) + scroll = resize_scroll(window, scroll); + switch (retour) + { + case M_UP: + break; + case M_LEFT : + if (param->chunk_vol > 0) + { + --vol; + sprintf (entries [2], "%d", vol); + param->chunk_vol = VOL (vol); + play_clik(); + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + } + break; + case M_RIGHT : + { + if (param->chunk_vol < MIX_MAX_VOLUME) + { + ++vol; + sprintf (entries [2], "%d", vol); + param->chunk_vol = VOL (vol); + play_clik(); + vec2 c = m->cur; + m->cur.x = 1; + m->cur.x = 1; + Affiche_entry (m, 0); + m->cur = c; + } + break; + } + case M_DOWN : + end = true; + break; + case M_MID : + break; + } + } + free (entries [2]); + free_menu(m); + return retour; +} diff --git a/src/sub_menu.h b/src/sub_menu.h new file mode 100644 index 0000000..3d69212 --- /dev/null +++ b/src/sub_menu.h @@ -0,0 +1,19 @@ +/* + * sub_menu.h + * + * Created on: 9 mai 2016 + * Author: nathan + */ + +#ifndef _SUB_MENU_H_ +#define _SUB_MENU_H_ + +#include +#include "globals.h" +#include "scrolling.h" + +int menu_music (SDL_Surface* window, scrolling_t scroll); + +int menu_son (SDL_Surface* window, scrolling_t scroll); + +#endif /* _SUB_MENU_H_ */