src/init.c

Functions

Name
type_linked_t * create_type_linked()
void init_type_linked(type_linked_t * type_linked)
cell_t * create_cell()
void init_cell(cell_t * cell)
board_t * create_board()
void init_board(board_t * board)
scoring_table_t * init_scoring_table()
tile_t * create_tile()
void init_tile(tile_t * tile)
void fill_tile(tile_t * tile, cell_type_e type_0, cell_type_e type_1, cell_type_e type_2)
deck_t * create_deck()
void init_deck(deck_t * struct_deck)
tile_t ** creates_all_tiles()
args_t * create_and_init_args()
void updates_args(args_t * args, tile_t * tile, cell_t * cell, int score)
game_t * create_game()
void update_game(game_t * game, board_t * player, board_t * bot, tile_t * card_1, tile_t * card_2, deck_t * deck)
struct play * create_play()
void update_play(struct play * play, tile_t * tile, int n_coup, float gain_coup, play_t * next)

Functions Documentation

function create_type_linked

type_linked_t * create_type_linked()

function init_type_linked

void init_type_linked(
    type_linked_t * type_linked
)

function create_cell

cell_t * create_cell()

function init_cell

void init_cell(
    cell_t * cell
)

function create_board

board_t * create_board()

function init_board

void init_board(
    board_t * board
)

function init_scoring_table

scoring_table_t * init_scoring_table()

function create_tile

tile_t * create_tile()

function init_tile

void init_tile(
    tile_t * tile
)

function fill_tile

void fill_tile(
    tile_t * tile,
    cell_type_e type_0,
    cell_type_e type_1,
    cell_type_e type_2
)

function create_deck

deck_t * create_deck()

function init_deck

void init_deck(
    deck_t * struct_deck
)

function creates_all_tiles

tile_t ** creates_all_tiles()

function create_and_init_args

args_t * create_and_init_args()

function updates_args

void updates_args(
    args_t * args,
    tile_t * tile,
    cell_t * cell,
    int score
)

function create_game

game_t * create_game()

function update_game

void update_game(
    game_t * game,
    board_t * player,
    board_t * bot,
    tile_t * card_1,
    tile_t * card_2,
    deck_t * deck
)

function create_play

struct play * create_play()

function update_play

void update_play(
    struct play * play,
    tile_t * tile,
    int n_coup,
    float gain_coup,
    play_t * next
)

Source code

/* name : init.c
 * authors : eloi petit, matheo thomas, domitille vale
 * date : 23-06-24
 */

#include <stdio.h>
#include <stdlib.h>

#include "init.h"
#include "algos.h"

type_linked_t *create_type_linked(){
    type_linked_t *type_linked=malloc(sizeof(type_linked_t));
    init_type_linked(type_linked);
    return type_linked;
}

void init_type_linked(type_linked_t * type_linked){
    type_linked->cell_type=EMPTY;
    type_linked->tile=NULL;
    type_linked->next=NULL;
}

cell_t *create_cell(){
    cell_t *cell=malloc(sizeof(cell_t));
    init_cell(cell);
    return cell;
}

void init_cell(cell_t * cell){
    cell->id=0;
    cell->level=create_type_linked();
    for(int i=0;i<6;i++){
        cell->neighbour[i]=NULL;
    }
    cell->x=0;
    cell->y=0;
    cell->altitude=0;
    cell->selection=UNSELECT;
    //cell->parent=NULL;
}

board_t *create_board(){
    board_t *board=malloc(sizeof(board_t));
    init_board(board);

    cell_t *cur_cell=NULL;
    cell_t **cell_tab=(cell_t **)malloc(390*sizeof(cell_t*));

    int i=0;
    int k=0;

    // creates all cells and stock them in cell_tab
    for(k=0;k<390;k+=39){

        for(i=k;i<k+20;i++){
            cur_cell=create_cell();
            cur_cell->id=i;
            cell_tab[i]=cur_cell;
            cur_cell=cur_cell->neighbour[2];
        }

        for(i=k+38;i>k+19;i--){
            cur_cell=create_cell();
            cur_cell->id=i;
            cell_tab[i]=cur_cell;
            cur_cell=cur_cell->neighbour[5];
        }
    }

    // creates link between cells
    for(k=0;k<390;k+=39){
        // i=k
        cell_tab[k]->neighbour[2]=cell_tab[k+1];
        if(k){
            cell_tab[k]->neighbour[1]=cell_tab[k-19];
            cell_tab[k-19]->neighbour[4]=cell_tab[k];
        }
        for(i=k+1;i<k+19;i++){
            if(k){
                cell_tab[i]->neighbour[0]=cell_tab[i-20];
                cell_tab[i-20]->neighbour[3]=cell_tab[i];

                cell_tab[i]->neighbour[1]=cell_tab[i-19];
                cell_tab[i-19]->neighbour[4]=cell_tab[i];
            }
            cell_tab[i]->neighbour[2]=cell_tab[i+1];
            cell_tab[i]->neighbour[5]=cell_tab[i-1];
        }
        // i=k+19
        cell_tab[k+19]->neighbour[5]=cell_tab[k+18];
        if(k){
            cell_tab[k+19]->neighbour[0]=cell_tab[k-19];
            cell_tab[k-19]->neighbour[3]=cell_tab[k+19];
        }

        // i=k+38
        cell_tab[k+38]->neighbour[5]=cell_tab[k+37];

        for(i=k+37;i>k+20;i--){

            cell_tab[i]->neighbour[0]=cell_tab[i-20];
            cell_tab[i-20]->neighbour[3]=cell_tab[i];

            cell_tab[i]->neighbour[1]=cell_tab[i-19];
            cell_tab[i-19]->neighbour[4]=cell_tab[i];

            if(i!=k+20 && i!=k+38){
                cell_tab[i]->neighbour[5]=cell_tab[i-1];
                cell_tab[i]->neighbour[2]=cell_tab[i+1];
            }
        }
        // i=k+20
        cell_tab[k+20]->neighbour[2]=cell_tab[k+21];
    }

    board->cell=cell_tab[165];
    board->cell_tab=cell_tab;

    return board;
}

void init_board(board_t * board){
    board->cell=NULL;
    board->table=init_scoring_table();
    board->score=0;
    board->rocks=0;
    board->cell_tab=NULL;
}

scoring_table_t *init_scoring_table(){
    scoring_table_t *scoring_table=malloc(sizeof(scoring_table_t));
    scoring_table->blue_mult=0;
    scoring_table->blue_nb_alt=0;
    scoring_table->yellow_mult=0;
    scoring_table->yellow_nb_alt=0;
    scoring_table->red_mult=0;
    scoring_table->red_nb_alt=0;
    scoring_table->purple_mult=0;
    scoring_table->purple_nb_alt=0;
    scoring_table->green_mult=0;
    scoring_table->green_nb_alt=0;
    return scoring_table;
}

tile_t *create_tile(){
    tile_t *tile=malloc(sizeof(tile_t));
    init_tile(tile);
    return tile;
}

void init_tile(tile_t * tile){
    tile->id=0;
    for(int i=0; i<3; i++){
        tile->cell_tab[i]=NULL;
        tile->cell_types[i]=QUARRY_GRAY;
    }
    tile->orientation=0;
}

void fill_tile(tile_t *tile, cell_type_e type_0, cell_type_e type_1, cell_type_e type_2){
    tile->cell_types[0]=type_0;
    tile->cell_types[1]=type_1;
    tile->cell_types[2]=type_2;
}

deck_t *create_deck(){
    deck_t *deck=malloc(sizeof(deck_t));
    deck->n=0;
    deck->tile_tab=NULL;
    return deck;
}

void init_deck(deck_t *struct_deck){
    tile_t **deck = malloc(34* sizeof(tile_t *));
    tile_t **tile_tab = creates_all_tiles();
    for(int i=0;i<34;i++){
        int random = rand() % 34;
        if(tile_tab[random]) {
            deck[i] = tile_tab[random];
            tile_tab[random] = NULL;
        }
        else {
            i--;
        }
    }
    free(tile_tab);
    struct_deck->n = DECK_NUMBER-1;
    struct_deck->tile_tab=deck;
}

tile_t ** creates_all_tiles(){
    tile_t **tile_tab=malloc(37*sizeof(tile_t*));
    int i=0;
    //for (i=0;i<3;i++){
        tile_tab[i]=create_tile();
        init_tile(tile_tab[i]);
        fill_tile(tile_tab[i], BLUE_PLACE, QUARRY_GRAY, QUARRY_GRAY);
        tile_tab[i]->id=i;
    //}
    for (i=1;i<5;i++){
        tile_tab[i]=create_tile();
        init_tile(tile_tab[i]);
        fill_tile(tile_tab[i], i+7, QUARRY_GRAY, QUARRY_GRAY);
        tile_tab[i]->id=i;
    }
    for (i=5;i<8;i++){
        tile_tab[i]=create_tile();
        init_tile(tile_tab[i]);
        fill_tile(tile_tab[i], i-2, QUARRY_GRAY, QUARRY_GRAY);
        tile_tab[i]->id=i;
    }

    i=8;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, QUARRY_GRAY, RED_PLACE);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, QUARRY_GRAY, MARKET_YELLOW);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, QUARRY_GRAY, HOUSE_BLUE);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, QUARRY_GRAY, PURPLE_PLACE);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, BARRAK_RED, QUARRY_GRAY);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, BARRAK_RED, TEMPLE_PURPLE);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, BARRAK_RED, PURPLE_PLACE);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, PARK_GREEN, MARKET_YELLOW);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, PARK_GREEN, YELLOW_PLACE);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, PARK_GREEN, BARRAK_RED);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], BARRAK_RED, QUARRY_GRAY, MARKET_YELLOW);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], BARRAK_RED, QUARRY_GRAY, TEMPLE_PURPLE);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], BARRAK_RED, QUARRY_GRAY, YELLOW_PLACE);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], MARKET_YELLOW, QUARRY_GRAY, TEMPLE_PURPLE);
    tile_tab[i]->id=i;
    i++;

    //for(int k=0;k<2;k++){
        tile_tab[i]=create_tile();
        init_tile(tile_tab[i]);
        fill_tile(tile_tab[i], MARKET_YELLOW, QUARRY_GRAY, BARRAK_RED);
        tile_tab[i]->id=i;
        i++;
    //}

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], PARK_GREEN, QUARRY_GRAY, MARKET_YELLOW);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], PARK_GREEN, QUARRY_GRAY, BLUE_PLACE);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], QUARRY_GRAY, HOUSE_BLUE, GREEN_PLACE);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], QUARRY_GRAY, HOUSE_BLUE, PURPLE_PLACE);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, TEMPLE_PURPLE, RED_PLACE);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], HOUSE_BLUE, TEMPLE_PURPLE, MARKET_YELLOW);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], GREEN_PLACE, HOUSE_BLUE, BARRAK_RED);
    tile_tab[i]->id=i;
    i++;
    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], GREEN_PLACE, HOUSE_BLUE, QUARRY_GRAY);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], MARKET_YELLOW, HOUSE_BLUE, RED_PLACE);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], MARKET_YELLOW, TEMPLE_PURPLE, QUARRY_GRAY);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], MARKET_YELLOW, BARRAK_RED, BLUE_PLACE);
    tile_tab[i]->id=i;
    i++;

    tile_tab[i]=create_tile();
    init_tile(tile_tab[i]);
    fill_tile(tile_tab[i], YELLOW_PLACE, TEMPLE_PURPLE, HOUSE_BLUE);
    tile_tab[i]->id=i;

    return tile_tab;
}

args_t *create_and_init_args(){
    args_t *args=malloc(sizeof(args_t));
    args->tile=NULL;
    args->cell=NULL;
    args->score=0;
    return args;
}

void updates_args(args_t *args, tile_t *tile, cell_t *cell, int score){
    args->cell=cell;
    args->tile=tile;
    args->score=score;
}

game_t * create_game(){
    game_t *game=malloc(sizeof(game_t));
    game->card_1=NULL;
    game->card_2=NULL;
    game->deck=NULL;
    game->player=NULL;
    game->bot=NULL;
    game->selected_card=0;
    game->player_board=1;
    return game;
}

void update_game(game_t *game, board_t *player, board_t *bot, tile_t *card_1, tile_t *card_2, deck_t *deck){
    game->card_1=card_1;
    game->card_2=card_2;
    game->deck=deck;
    game->player=player;
    game->bot=bot;
}



struct play * create_play(){
    struct play *play=malloc(sizeof(struct play));
    play->tile=NULL;
    play->n_coup=0;
    play->gain_coup=0;
    play->next=NULL;
    return play;
}

void update_play(struct play *play, tile_t *tile, int n_coup, float gain_coup, play_t *next){
    play->tile=tile;
    play->n_coup=n_coup;
    play->gain_coup=gain_coup;
    play->next=next;
}

Updated on 2024-06-28 at 08:11:55 +0200