Replace space with tabs
This commit is contained in:
parent
35c058f954
commit
f1b97c1fdb
1 changed files with 91 additions and 91 deletions
180
ace.c
180
ace.c
|
@ -9,8 +9,8 @@
|
||||||
#define RESET_COLOR() printf("\033[0m")
|
#define RESET_COLOR() printf("\033[0m")
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int value; /* 1 to 13 (Ace to King) */
|
int value; /* 1 to 13 (Ace to King) */
|
||||||
int suit; /* 0 to 3 (Hearts, Spades, Diamonds, Clubs) */
|
int suit; /* 0 to 3 (Hearts, Spades, Diamonds, Clubs) */
|
||||||
} card;
|
} card;
|
||||||
|
|
||||||
card deal_card();
|
card deal_card();
|
||||||
|
@ -21,14 +21,14 @@ struct termios orig_termios;
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
card player_hand[10], cpu_hand[10];
|
card player_hand[10], cpu_hand[10];
|
||||||
int player_num_cards = 0, cpu_num_cards = 0;
|
int player_num_cards = 0, cpu_num_cards = 0;
|
||||||
char action;
|
char action;
|
||||||
|
|
||||||
/* Set terminal to return read syscall without enter */
|
/* Set terminal to return read syscall without enter */
|
||||||
struct termios new_termios;
|
struct termios new_termios;
|
||||||
|
|
||||||
tcgetattr(STDIN_FILENO, &orig_termios);
|
tcgetattr(STDIN_FILENO, &orig_termios);
|
||||||
new_termios = orig_termios;
|
new_termios = orig_termios;
|
||||||
|
@ -45,7 +45,7 @@ int main()
|
||||||
int player_score;
|
int player_score;
|
||||||
int cpu_score;
|
int cpu_score;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
CLEAR_SCREEN();
|
CLEAR_SCREEN();
|
||||||
MOVE_CURSOR(1, 1);
|
MOVE_CURSOR(1, 1);
|
||||||
printf("You Computer\n");
|
printf("You Computer\n");
|
||||||
|
@ -57,32 +57,32 @@ int main()
|
||||||
display_hand(player_hand, player_num_cards, 1, player_score);
|
display_hand(player_hand, player_num_cards, 1, player_score);
|
||||||
display_hand(cpu_hand, cpu_num_cards, 0, cpu_score);
|
display_hand(cpu_hand, cpu_num_cards, 0, cpu_score);
|
||||||
|
|
||||||
/* Check if the player has busted */
|
/* Check if the player has busted */
|
||||||
if (player_score > 21) {
|
if (player_score > 21) {
|
||||||
printf("\n\033[38;2;255;0;0mBust! You lose.\033[0m\n");
|
printf("\n\033[38;2;255;0;0mBust! You lose.\033[0m\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\nHit (h) or stand (s)? ");
|
printf("\nHit (h) or stand (s)? ");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
char action;
|
char action;
|
||||||
read(STDIN_FILENO, &action, 1);
|
read(STDIN_FILENO, &action, 1);
|
||||||
|
|
||||||
if (action == 'h') {
|
if (action == 'h') {
|
||||||
player_hand[player_num_cards++] = deal_card();
|
player_hand[player_num_cards++] = deal_card();
|
||||||
} else if (action == 's') {
|
} else if (action == 's') {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Computer's turn to deal
|
/* Computer's turn to deal
|
||||||
* Customise here if you want more wins
|
* Customise here if you want more wins
|
||||||
*/
|
*/
|
||||||
while (cpu_score < 17) {
|
while (cpu_score < 17) {
|
||||||
cpu_hand[cpu_num_cards++] = deal_card();
|
cpu_hand[cpu_num_cards++] = deal_card();
|
||||||
cpu_score = calculate_score(cpu_hand, cpu_num_cards);
|
cpu_score = calculate_score(cpu_hand, cpu_num_cards);
|
||||||
}
|
}
|
||||||
|
|
||||||
CLEAR_SCREEN();
|
CLEAR_SCREEN();
|
||||||
MOVE_CURSOR(1, 1);
|
MOVE_CURSOR(1, 1);
|
||||||
|
@ -91,102 +91,102 @@ int main()
|
||||||
cpu_score = calculate_score(cpu_hand, cpu_num_cards);
|
cpu_score = calculate_score(cpu_hand, cpu_num_cards);
|
||||||
|
|
||||||
/* Determine win or lose */
|
/* Determine win or lose */
|
||||||
if (player_score > 21) {
|
if (player_score > 21) {
|
||||||
printf("\033[38;2;255;0;0mComputer wins!\033[0m\n", cpu_score);
|
printf("\033[38;2;255;0;0mComputer wins!\033[0m\n", cpu_score);
|
||||||
} else if (cpu_score > 21) {
|
} else if (cpu_score > 21) {
|
||||||
printf("\033[38;2;0;255;0mYou win!\033[0m\n", player_score);
|
printf("\033[38;2;0;255;0mYou win!\033[0m\n", player_score);
|
||||||
} else if (player_score > cpu_score) {
|
} else if (player_score > cpu_score) {
|
||||||
printf("\033[38;2;0;255;0mYou win!\033[0m\n", player_score);
|
printf("\033[38;2;0;255;0mYou win!\033[0m\n", player_score);
|
||||||
} else if (player_score < cpu_score) {
|
} else if (player_score < cpu_score) {
|
||||||
printf("\033[38;2;255;0;0mComputer wins!\033[0m\n", cpu_score);
|
printf("\033[38;2;255;0;0mComputer wins!\033[0m\n", cpu_score);
|
||||||
} else {
|
} else {
|
||||||
printf("\033[38;2;255;255;0mDraw!\033[0m\n", player_score);
|
printf("\033[38;2;255;255;0mDraw!\033[0m\n", player_score);
|
||||||
}
|
}
|
||||||
|
|
||||||
display_hand(player_hand, player_num_cards, 1, player_score);
|
display_hand(player_hand, player_num_cards, 1, player_score);
|
||||||
display_hand(cpu_hand, cpu_num_cards, 0, cpu_score);
|
display_hand(cpu_hand, cpu_num_cards, 0, cpu_score);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
/* Reset terminal */
|
/* Reset terminal */
|
||||||
tcsetattr(STDIN_FILENO, TCSANOW, &orig_termios);
|
tcsetattr(STDIN_FILENO, TCSANOW, &orig_termios);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
card deal_card()
|
card deal_card()
|
||||||
{
|
{
|
||||||
card card;
|
card card;
|
||||||
card.value = rand() % 13 + 1;
|
card.value = rand() % 13 + 1;
|
||||||
card.suit = rand() % 4;
|
card.suit = rand() % 4;
|
||||||
return card;
|
return card;
|
||||||
}
|
}
|
||||||
|
|
||||||
int calculate_score(card hand[], int num_cards)
|
int calculate_score(card hand[], int num_cards)
|
||||||
{
|
{
|
||||||
int score = 0, num_aces = 0;
|
int score = 0, num_aces = 0;
|
||||||
|
|
||||||
for (int i = 0; i < num_cards; i++) {
|
for (int i = 0; i < num_cards; i++) {
|
||||||
if (hand[i].value == 1) {
|
if (hand[i].value == 1) {
|
||||||
score += 11;
|
score += 11;
|
||||||
num_aces++;
|
num_aces++;
|
||||||
} else if (hand[i].value > 10) {
|
} else if (hand[i].value > 10) {
|
||||||
score += 10;
|
score += 10;
|
||||||
} else {
|
} else {
|
||||||
score += hand[i].value;
|
score += hand[i].value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (score > 21 && num_aces > 0) {
|
while (score > 21 && num_aces > 0) {
|
||||||
score -= 10;
|
score -= 10;
|
||||||
num_aces--;
|
num_aces--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_hand(card hand[], int num_cards, int is_player, int total)
|
void display_hand(card hand[], int num_cards, int is_player, int total)
|
||||||
{
|
{
|
||||||
const char *suits[] = {"\033[38;2;255;0;0m♥\033[0m", "\033[38;2;0;0;255m♠\033[0m", "\033[38;2;255;0;255m♦\033[0m", "\033[38;2;0;255;0m♣\033[0m"};
|
const char *suits[] = {"\033[38;2;255;0;0m♥\033[0m", "\033[38;2;0;0;255m♠\033[0m", "\033[38;2;255;0;255m♦\033[0m", "\033[38;2;0;255;0m♣\033[0m"};
|
||||||
|
|
||||||
if (is_player) {
|
if (is_player) {
|
||||||
printf("Cards - ");
|
printf("Cards - ");
|
||||||
} else {
|
} else {
|
||||||
/* Alignment */
|
/* Alignment */
|
||||||
MOVE_CURSOR(2, 28);
|
MOVE_CURSOR(2, 28);
|
||||||
printf("Cards - ");
|
printf("Cards - ");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < num_cards; i++) {
|
for (int i = 0; i < num_cards; i++) {
|
||||||
/* Bold */
|
/* Bold */
|
||||||
printf("\033[1m");
|
printf("\033[1m");
|
||||||
switch (hand[i].value) {
|
switch (hand[i].value) {
|
||||||
case 1:
|
case 1:
|
||||||
printf("A%s ", suits[hand[i].suit]);
|
printf("A%s ", suits[hand[i].suit]);
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
printf("J%s ", suits[hand[i].suit]);
|
printf("J%s ", suits[hand[i].suit]);
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
printf("Q%s ", suits[hand[i].suit]);
|
printf("Q%s ", suits[hand[i].suit]);
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
printf("K%s ", suits[hand[i].suit]);
|
printf("K%s ", suits[hand[i].suit]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("%d%s ", hand[i].value, suits[hand[i].suit]);
|
printf("%d%s ", hand[i].value, suits[hand[i].suit]);
|
||||||
}
|
}
|
||||||
RESET_COLOR();
|
RESET_COLOR();
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
if (is_player) {
|
if (is_player) {
|
||||||
printf("Total - ");
|
printf("Total - ");
|
||||||
} else {
|
} else {
|
||||||
MOVE_CURSOR(3, 28);
|
MOVE_CURSOR(3, 28);
|
||||||
printf("Total - ");
|
printf("Total - ");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bold and inverted colors */
|
/* Bold and inverted colors */
|
||||||
printf("\033[1m\033[47;30m");
|
printf("\033[1m\033[47;30m");
|
||||||
printf(" %d ", total);
|
printf(" %d ", total);
|
||||||
RESET_COLOR();
|
RESET_COLOR();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue