monaxys
2 years ago
7 changed files with 130 additions and 4 deletions
@ -1,2 +1,3 @@ |
|||||||
CC=cc
|
CC=cc
|
||||||
CFLAGS=-ansi -pedantic -Wall -g
|
CFLAGS=-std=c99 -pedantic -Wall -g
|
||||||
|
LDFLAGS =
|
||||||
|
@ -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 */ |
@ -0,0 +1,59 @@ |
|||||||
|
#include "dealer.h" |
||||||
|
#include <stdint.h> |
||||||
|
#include <limits.h> |
||||||
|
#include <fcntl.h> |
||||||
|
#include <unistd.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#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; |
||||||
|
} |
||||||
|
|
@ -0,0 +1,10 @@ |
|||||||
|
#ifndef DEALER_H_ENTRY |
||||||
|
#define DEALER_H_ENTRY |
||||||
|
#include <stdio.h> |
||||||
|
#include "card.h" |
||||||
|
|
||||||
|
struct card *pick_card(); |
||||||
|
int fill_deck(struct card *deck); |
||||||
|
|
||||||
|
int shuffle_deck(struct card *deck); |
||||||
|
#endif /* DEALER_H_ENTRY */ |
@ -1,4 +1,16 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include "dealer.h" |
||||||
|
#define PLAERSCNT 4 |
||||||
|
|
||||||
|
int money, bet; |
||||||
|
char players[PLAERSCNT] = {1, 2, 3, 4}; |
||||||
|
|
||||||
int main(int argc, char **argv) |
int main(int argc, char **argv) |
||||||
{ |
{ |
||||||
|
struct card deck[52]; |
||||||
|
fill_deck(deck); |
||||||
|
if(shuffle_deck(deck)){ |
||||||
|
return 2; |
||||||
|
} |
||||||
return 0; |
return 0; |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue