#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define FALSE 0
#define TRUE 1
#define REMOVED 10
void
swap(char *a, char *b)
{
char t = *a;
*a = *b;
*b = t;
}
void
init(char field[], int *pairsLeft, int *player)
{
int i, random;
srand((unsigned int) time(NULL));
for (i = 0; i < 10; ++i) {
field[2*i] = field[2*i+1] = i;
}
for (i = 0; i < 20; ++i) {
random = (int) ((20.0 - i) * (rand() / (RAND_MAX + 1.0)));
swap(field + i, field + i + random);
}
*pairsLeft = 10;
*player = 0;
}
void
displayField(char field[], int turned, int turnedIndex[])
{
int turnThis = FALSE;
int i, j, k;
for (i = 0; i < 6; ++i) {
printf("\n\n\n\n\n\n\n\n\n\n");
}
printf(" 0 1 2 3 4\n");
printf(" +---+---+---+---+---+\n");
for (i = 0; i < 4; ++i) {
printf(" %d |", i);
for (j = 0; j < 5; ++j) {
if (*field != REMOVED) {
turnThis = FALSE;
for (k = 0; k < turned; ++k) {
if ((i == turnedIndex[2*k]) && (j == turnedIndex[2*k+1])) {
turnThis = TRUE;
break;
}
}
if (turnThis == TRUE) {
printf(" %d |", *field);
} else {
printf(" # |");
}
} else {
}
++field;
}
printf("\n");
printf(" +---+---+---+---+---+\n");
}
printf("\n");
}
int
isMoveOk(int row, int col, int read,
char field[], int turned, int turnedIndex[])
{
int i;
if (read != 2) {
scanf("%*s");
printf("Bitte Geben Sie zwei Zahlen wie \"1,2\"\n");
return FALSE;
}
if ((row < 0) || (row > 3)) {
printf("Zeile ist falsch eingegeben\n");
return FALSE;
}
if ((col < 0) || (col > 4)) {
printf("Spalte ist falsch eingegeben\n");
return FALSE;
}
if (field[row * 5 + col] == REMOVED) {
printf("Card is already removed\n");
return FALSE;
}
for (i = 0; i < turned; ++i) {
if ((row == turnedIndex[2*i]) && (col == turnedIndex[2*i+1])) {
printf("Card is already turned\n");
return FALSE;
}
}
return TRUE;
}
int
isPair(char field[], int *turned, int *pairsLeft)
{
if (field[turned[0]*5 + turned[1]] == field[turned[2]*5 + turned[3]]) {
field[turned[0]*5 + turned[1]] = field[turned[2]*5 + turned[3]] = REMOVED;
(*pairsLeft)--;
return TRUE;
} else {
return FALSE;
}
}
int
main(void)
{
int pairsLeft;
int player;
int read;
int turned[4];
int playerPairs[2] = {0, 0};
char field[20];
init(field, &pairsLeft, &player);
while (pairsLeft != 0) {
displayField(field, 0, NULL);
printf("Spieler ");
if (player == 0) {
printf("1 (%d:%d)\n", playerPairs[0], playerPairs[1]);
} else {
printf("2 (%d:%d)\n", playerPairs[1], playerPairs[0]);
}
do {
printf("1.Karte (Zeile,Spalte): ");
read = scanf("%d , %d", turned, turned + 1);
getchar();
} while (!isMoveOk(turned[0], turned[1], read, field, 0, NULL));
displayField(field, 1, turned);
printf("Spieler ");
if (player == 0) {
printf("1 (%d:%d)\n", playerPairs[0], playerPairs[1]);
} else {
printf("2 (%d:%d)\n", playerPairs[1], playerPairs[0]);
}
do {
printf("2.Karte (Zeile,Spalte): ");
read = scanf("%d , %d", turned + 2, turned + 3);
getchar();
} while (!isMoveOk(turned[2], turned[3], read, field, 1, turned));
displayField(field, 2, turned);
if (isPair(field, turned, &pairsLeft)) {
printf("GEWONNEN!\n");
getchar();
playerPairs[player]++;
} else {
printf("nicht gewonnen =(\n");
getchar();
if (player == 0) {
player = 1;
} else {
player = 0;
}
}
}
if (playerPairs[0] > playerPairs[1]) {
printf("Spieler 1 hat gewonnen %d : %d.\n"
"Congratulations!!!\n", playerPairs[0], playerPairs[1]);
} else if (playerPairs[1] > playerPairs[0]) {
printf("Spieler 2 hat gewonnen %d : %d.\n"
"Well done!!!\n", playerPairs[1], playerPairs[0]);
} else {
printf("Unendschieden.\n");
}
return 0;
}
tarik tekin
xumutxx@hotmail.de