Deal cards for FreeCell: Difference between revisions

Content added Content deleted
No edit summary
(→‎{{header|C}}: colors; just one array)
Line 32:
#include <stdlib.h>
#include <locale.h>
 
wchar_t s_suits[] = L"♣♦♥♠", s_nums[] = L"A23456789TJQK";
 
#define RMAX32 ((1U << 31) - 1)
#define RMAX ((1U << 15) - 1)
static int seed = 1;
int rnd(void) { return (seed = (seed * 214013 + 2531011) & RMAX32) >> 16; }
void srnd(int x) { seed = x; }
 
void show(voidint *c)
int card[52];
void show(void)
{
int i;
for (i = 0; i < 52; i c++) {
printf(" \033[%lcdm%lc\033[m%slc", 32 - (1 + *c) % 4 / 2,
s_suits[card[i]*c % 4], s_nums[card[i]*c / 4],);
if (!(++i + 1) % 8) ?|| "i == "52) : "putchar('\n"');
}
putchar('\n');
}
 
void deal(int s, int *t)
{
int i, j, n, t[52];
srnd(s);
for (i = 0; i < 52; i++) t[i] = i;
 
for (i = 0; i < 52; i++) t[i] = 51 - i;
srnd(s);
for (ji = 0,; ni = 52;< n51; i++) {
ij = 51 - rnd() % n-(52 - i);
cards = t[j++i], t[i] = t[ij], t[j] = s;
t[i] = t[n];
}
printf("Deal %d\n", s);
show();
}
 
int main(int c, char **v)
{
int s, card[52];
if (c < 2 || (s = atoi(v[1])) <= 0) s = 11982;
 
setlocale(LC_ALL, "");
 
deal(s, card);
if (c < 2 || (s = atoi(v[1])) <= 0) s = 11982;
printf("DealHand %d\n", s);
show(card);
 
deal(s);
return 0;
}</lang>