diff --git a/display.c b/display.c index 492270a5a7a8a04e9a4a70f2ec48cd36ed81734f..421b31ecf5f3e160660d96dbe03ca5b7da9e5439 100644 --- a/display.c +++ b/display.c @@ -13,35 +13,35 @@ static SDL_Renderer *renderer; static SDL_Texture *one_arm_texture, *objects_texture, *coin_texture; static SDL_Rect one_arm_rect, coin_rect; -static SDL_Rect object_rect; +static SDL_Rect object_rect; int object_height; // global for convenience -void *display_func(void *param) +void *display_func(void *param) { int one_arm_width, one_arm_height; SDL_Window *window; // ------------------------- - // Graphic initialization + // Graphic initialization // ------------------------- assert(SDL_Init(SDL_INIT_VIDEO) == 0); get_image_file_size("./one_armed_bandit.png", &one_arm_width, &one_arm_height); assert((window = SDL_CreateWindow("one_armed_bandit", SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, one_arm_width, + SDL_WINDOWPOS_UNDEFINED, one_arm_width, one_arm_height, SDL_WINDOW_OPENGL))!=NULL); - assert((renderer = SDL_CreateRenderer(window, -1, 0))!=NULL); - SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); // allow transparent mode! - assert((one_arm_texture=create_texture_from_image_file(renderer, "one_armed_bandit.png", + assert((renderer = SDL_CreateRenderer(window, -1, 0))!=NULL); + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); // allow transparent mode! + assert((one_arm_texture=create_texture_from_image_file(renderer, "one_armed_bandit.png", &one_arm_rect))!=NULL); - assert((coin_texture=create_texture_from_image_file(renderer, "coin.png", - &coin_rect))!=NULL); + assert((coin_texture=create_texture_from_image_file(renderer, "coin.png", + &coin_rect))!=NULL); // create the global texture containing all objects: - assert((objects_texture=create_texture_from_image_file(renderer, "objects.png", - &object_rect))!=NULL); + assert((objects_texture=create_texture_from_image_file(renderer, "objects.png", + &object_rect))!=NULL); object_height=object_rect.h/9; - - + + while(1){ for(double a = 0; a<8.0; a +=0.1){ @@ -49,47 +49,15 @@ void *display_func(void *param) } } - - + + // ------------------------- - // managing events: + // managing events: // ------------------------- - SDL_Event event; - bool quit=false; - do { - SDL_WaitEvent(&event); // passive waiting on an event - switch (event.type) - { - case SDL_QUIT: // if SDL_Quit() called - quit=true; - break; - case SDL_WINDOWEVENT: - if (event.window.event==SDL_WINDOWEVENT_CLOSE) // if windows closed by user - { - quit=true; - } - break; - case SDL_KEYDOWN: // if key pressed - switch(event.key.keysym.sym) - { - case SDLK_ESCAPE: - quit=true; - break; - case SDLK_SPACE: - wait_key_release(); - break; - case SDLK_s: - wait_key_release(); - break; - } - } -} while(!quit); - - - - + + SDL_DestroyTexture(objects_texture); SDL_DestroyTexture(one_arm_texture); SDL_DestroyRenderer(renderer); @@ -110,26 +78,26 @@ int wheel_func(double index){ SDL_RenderCopy(renderer, one_arm_texture, NULL, &one_arm_rect); SDL_Rect coin_rect_pos={700, 1020, coin_rect.w, coin_rect.h}; - SDL_RenderCopy(renderer, coin_texture, NULL, &coin_rect_pos); + SDL_RenderCopy(renderer, coin_texture, NULL, &coin_rect_pos); for (int i=0; i<4; i++){ SDL_Rect coin_rect_pos={700, 400-10*i, coin_rect.w, coin_rect.h}; - SDL_RenderCopy(renderer, coin_texture, NULL, &coin_rect_pos); - } + SDL_RenderCopy(renderer, coin_texture, NULL, &coin_rect_pos); + } SDL_Rect src_rect, dst_rect=object_rect; dst_rect.h=object_height*1.5; // display 1.5 object on screen for a wheel src_rect=dst_rect; src_rect.x=0; - + for(int i=0; i<3; i++){ // src_rect.y is positionned here on the 2nd object of objects.png - src_rect.y=object_height*index; - dst_rect.x=85 + i*104 + 1; + src_rect.y=object_height*index; + dst_rect.x=85 + i*104 + 1; dst_rect.y=410-object_height/2; // setup the coord. of the icon in the global renderer SDL_RenderCopy(renderer, objects_texture, &src_rect, &dst_rect); } - + SDL_RenderPresent(renderer); sleep(0.1); return 0; diff --git a/one_armed_bandit.c b/one_armed_bandit.c index 11028d5938422dacbb238f783943a0dbca24200c..96bd75b5278f68dae0807e0e1fa4508d5bb1c62b 100644 --- a/one_armed_bandit.c +++ b/one_armed_bandit.c @@ -10,11 +10,53 @@ #include "display.h" #include "one_armed_bandit.h" +int insert_coin(){ + +} + +int set_wheel_speed(int index){ + +} + +int next_wheel(){ + +} int main() { display_func(NULL); + SDL_Event event; + bool quit=false; + do { + SDL_WaitEvent(&event); // passive waiting on an event + switch (event.type) + { + case SDL_QUIT: // if SDL_Quit() called + quit=true; + break; + case SDL_WINDOWEVENT: + if (event.window.event==SDL_WINDOWEVENT_CLOSE) // if windows closed by user + { + quit=true; + } + break; + case SDL_KEYDOWN: // if key pressed + switch(event.key.keysym.sym) + { + case SDLK_ESCAPE: + quit=true; + break; + case SDLK_SPACE: + wait_key_release(); + break; + case SDLK_s: + wait_key_release(); + break; + } + } + } while(!quit); + return 0; } diff --git a/one_armed_bandit.h b/one_armed_bandit.h index 358fb066f1e2aa3066d93f8e925dd2b34645e4f0..13d21dbf7a4d5245a3afcf5aaef04a769e944f76 100644 --- a/one_armed_bandit.h +++ b/one_armed_bandit.h @@ -5,5 +5,14 @@ #define OBJECT_NB 7 #define WHEEL_NB 3 +typedef struct machine_a_sous{ + wheel* wheels; + int player_wallet; + int machine_wallet; +} machine; + +int insert_coin(); +int set_wheel_speed(int index); +int next_wheel(); #endif diff --git a/threads.c b/threads.c new file mode 100644 index 0000000000000000000000000000000000000000..3aa85332ed70b52d4874675d3bcdeeff6fe36842 --- /dev/null +++ b/threads.c @@ -0,0 +1,70 @@ +#define __GNU_SOURCE + +#include <stdio.h> +#include <stdlib.h> +#include <pthread.h> +#include <unistd.h> +#include <sys/types.h> + +#include "threads.h" + + +int run_thread(pthread_t* t, void* (*fn )(void*), void *arg){ + int err = pthread_create(t, NULL, fn, arg); + if (err) perror("Thread creation error"); + return err; +} + +int wait_for_thread(pthread_t t){ + int err = pthread_join(t, NULL); + if (err) perror("Thread join error"); + // else printf("thread joined\n"); + return err; +} + +int run_thread_and_wait (void* (*fn )(void*), void *arg){ + pthread_t t; + int err = pthread_create(&t, NULL, fn, arg); + if (err) { + perror("Thread creation error"); + return err; + } + err = pthread_join(t, NULL); + if (err) perror("Thread join error"); + //else printf("thread joined\n"); + return err; +} + +int run_threads_and_wait(void* (*fn )(void*), void** arg, int size_of_arg_type, int t_cnt){ + pthread_t *t = malloc(t_cnt*sizeof(pthread_t)); + + for(int i = 0; i<t_cnt; i++){ + int err = run_thread(&t[i], fn, (*arg) + size_of_arg_type*i); + if(err) return 1; + } + + for(int i = 0; i<t_cnt; i++){ + int err = wait_for_thread(t[i]); + if(err) return 2; + } + + free(t); + return 0; +} + +int run_threads_and_wait_single_param(void* (*fn )(void*), void* arg, int t_cnt){ + pthread_t *t = malloc(t_cnt*sizeof(pthread_t)); + + for(int i = 0; i<t_cnt; i++){ + int err = run_thread(&t[i], fn, arg); + if(err) return 1; + } + + for(int i = 0; i<t_cnt; i++){ + int err = wait_for_thread(t[i]); + if(err) return 2; + } + + free(t); + return 0; +} diff --git a/threads.h b/threads.h new file mode 100644 index 0000000000000000000000000000000000000000..437e6efae56813c4ebe534778cd397100b1f7361 --- /dev/null +++ b/threads.h @@ -0,0 +1,31 @@ +/** +* Authors : Sitbon Benjamin, Beck Léonard +* Small library to ease the use of pthread +*/ + + +/* + ___ _ + / _ )___ _________(_)__ ____ + / _ / _ `/ __/ __/ / -_) __/ + /____/\_,_/_/ /_/ /_/\__/_/ + + |^| |^| |^| |^| + | |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| | + | |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| | + | |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| | + +*/ +#define __GNU_SOURCE + +// #include <stdio.h> +// #include <stdlib.h> +#include <pthread.h> +#include <unistd.h> +#include <sys/types.h> + +int run_thread(pthread_t* t, void* (*fn )(void*), void *arg); +int wait_for_thread(pthread_t t); +int run_thread_and_wait (void* (*fn )(void*), void *arg); +int run_threads_and_wait(void* (*fn )(void*), void** arg, int size_of_arg_type, int t_cnt); +int run_threads_and_wait_single_param(void* (*fn )(void*), void* arg, int t_cnt); diff --git a/wheel.c b/wheel.c new file mode 100644 index 0000000000000000000000000000000000000000..716c7910d46e889a6a986771672a770bfad4e71d --- /dev/null +++ b/wheel.c @@ -0,0 +1,7 @@ +int set_speed(int s){ + +} + +int get_current_px(){ + +} diff --git a/wheel.h b/wheel.h new file mode 100644 index 0000000000000000000000000000000000000000..2ec8c28cd0789626e9f9076585395a9bb71e48ad --- /dev/null +++ b/wheel.h @@ -0,0 +1,7 @@ +typedef struct roue{ + int speed; + int current_px; +} wheel; + +int set_speed(int s); +int get_current_px();