From f99f5cdea29d844df7091924f427b3a88fff0cb8 Mon Sep 17 00:00:00 2001 From: monaxys Date: Wed, 22 Jun 2022 21:25:19 +0300 Subject: [PATCH] deck basics --- Makefile | 6 +++--- config.mk | 3 ++- src/card.h | 34 ++++++++++++++++++++++++++++++ src/dealer.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/dealer.h | 10 +++++++++ src/main.c | 12 +++++++++++ src/player.h | 10 +++++++++ 7 files changed, 130 insertions(+), 4 deletions(-) create mode 100644 src/card.h create mode 100644 src/dealer.c create mode 100644 src/dealer.h create mode 100644 src/player.h diff --git a/Makefile b/Makefile index 20b955a..f217076 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ include config.mk -c-jack: src/main.c - $(CC) $^ -o $@ +c-jack: src/main.c src/dealer.c + $(CC) $^ -o $@ $(LDFLAGS) %.o: src/%.c - $(CC) $^ -c + $(CC) $(CFLAGS) $^ -c clean: rm -f *.o c-jack diff --git a/config.mk b/config.mk index bfc5e13..791e7fc 100644 --- a/config.mk +++ b/config.mk @@ -1,2 +1,3 @@ CC=cc -CFLAGS=-ansi -pedantic -Wall -g +CFLAGS=-std=c99 -pedantic -Wall -g +LDFLAGS = diff --git a/src/card.h b/src/card.h new file mode 100644 index 0000000..5fee025 --- /dev/null +++ b/src/card.h @@ -0,0 +1,34 @@ +#ifndef CARD_H_ENTRY +#define CARD_H_ENTRY +//Описание структуры карты + +enum suits +{ + hearts = 0, + spades, + clubs, + diamonds +}; +enum rangs +{ + two = 0, + three, + four, + five, + six, + seven, + eight, + nine, + ten, + jack, + queen, + king, + ace +}; +struct card +{ + enum rangs rang; + enum suits suit; +}; + +#endif /* CARD_H_ENTRY */ diff --git a/src/dealer.c b/src/dealer.c new file mode 100644 index 0000000..d1cee0b --- /dev/null +++ b/src/dealer.c @@ -0,0 +1,59 @@ +#include "dealer.h" +#include +#include +#include +#include +#include +#define CARD_AMOUNT_SUIT 13 +#define SUIT_AMOUNT 4 +#define CARD_AMOUNT_DECK CARD_AMOUNT_SUIT * SUIT_AMOUNT + +int fill_deck(struct card *deck) +{ + puts("заполняем колоду..."); + for(int i = 0; i < SUIT_AMOUNT; i++) + { + for (int k = 0; k < CARD_AMOUNT_SUIT; k++) + { + deck[k + i * CARD_AMOUNT_SUIT].rang = k; + deck[k + i * CARD_AMOUNT_SUIT].suit = i; + } + } + return 0; +} +static uint8_t get_num() +{ + int fd = open("/dev/urandom", O_RDONLY); + if (fd < 0) { + return -1; + } + uint8_t c; + do{ + read(fd, &c, 1); + if(c == EOF){ + close(fd); + return -2; + } + }while(c >= (UCHAR_MAX + 1) / CARD_AMOUNT_DECK * CARD_AMOUNT_DECK); + close(fd); + return abs(c % CARD_AMOUNT_DECK); +} + +int shuffle_deck(struct card *deck) +{ + for(int i = 0, k = 0; i < 1000; i++, k++){ + if(k >= CARD_AMOUNT_DECK){ + k = 0; + } + uint8_t chg_card = get_num(); + if (chg_card >= CARD_AMOUNT_DECK || chg_card < 0){ + return 1; + } + struct card tmp = deck[k]; + deck[k] = deck[chg_card]; + deck[chg_card] = tmp; + + } + return 0; +} + diff --git a/src/dealer.h b/src/dealer.h new file mode 100644 index 0000000..6b36f48 --- /dev/null +++ b/src/dealer.h @@ -0,0 +1,10 @@ +#ifndef DEALER_H_ENTRY +#define DEALER_H_ENTRY +#include +#include "card.h" + +struct card *pick_card(); +int fill_deck(struct card *deck); + +int shuffle_deck(struct card *deck); +#endif /* DEALER_H_ENTRY */ diff --git a/src/main.c b/src/main.c index c05c0c4..b18792b 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,16 @@ +#include +#include "dealer.h" +#define PLAERSCNT 4 + +int money, bet; +char players[PLAERSCNT] = {1, 2, 3, 4}; + int main(int argc, char **argv) { + struct card deck[52]; + fill_deck(deck); + if(shuffle_deck(deck)){ + return 2; + } return 0; } diff --git a/src/player.h b/src/player.h new file mode 100644 index 0000000..ceb0fc4 --- /dev/null +++ b/src/player.h @@ -0,0 +1,10 @@ +#ifndef PLAYER_H_ENTRY +#define PLAYER_H_ENTRY + +struct player +{ + int money; + +} + +#endif /* PLAYER_H_ENTRY */