Memory oyunu-C de Programlandi.

berdann
30-01-2007, 00:46   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
3 mesaj
Kayıt Tarihi:Kayıt: Oca 2007


[resim][/resim][kod][/kod]

berdann
30-01-2007, 00:52   |  #2  
OP Taze Üye
Teşekkür Sayısı: 0
3 mesaj
Kayıt Tarihi:Kayıt: Oca 2007


#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("Luetfen iki sayi giriniz örnegin \"1,2\"\n");
    return FALSE;
  }
  if ((row < 0) || (row > 3)) {
   
    printf("Satir yanlis girildi\n");
    return FALSE;
  }
  if ((col < 0) || (col > 4)) {
   
    printf("Suetun yanlis girildi\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("Oyuncu ");
    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.Kart (Satir,Suetun): ");
      read = scanf("%d , %d", turned, turned + 1);
      getchar();
    } while (!isMoveOk(turned[0], turned[1], read, field, 0, NULL));

  
    displayField(field, 1, turned);
   
    printf("Oyuncu ");
    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.Kart (Satir,Suetun): ");
      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("Kazandiniz!\n");
      getchar();
      playerPairs[player]++;
    } else {
     
      printf("Kazanamadiniz =(\n");
      getchar();
      if (player == 0) {
        player = 1;
      } else {
        player = 0;
      }
    }
  }


  if (playerPairs[0] > playerPairs[1]) {
    printf("Birinci oyuncu kazandi %d : %d.\n"
           "Congratulations!!!\n", playerPairs[0], playerPairs[1]);
  } else if (playerPairs[1] > playerPairs[0]) {
    printf("Ikinci oyuncu kazandi%d : %d.\n"
           "Well done!!!\n", playerPairs[1], playerPairs[0]);
  } else {
    printf("Berabere.\n");
  }

  return 0;
}

destkop
30-01-2007, 10:43   |  #3  
Yıllanmış Üye
Teşekkür Sayısı: 0
558 mesaj
Kayıt Tarihi:Kayıt: Ara 2005

kodların yanına ne işe yaradıklarını açıklama olarak yazsaydın keşke. yeni başlayan için kaynak olludu

berdann
30-01-2007, 13:07   |  #4  
OP Taze Üye
Teşekkür Sayısı: 0
3 mesaj
Kayıt Tarihi:Kayıt: Oca 2007

Haklisin ,
Aciklamalari almanca olarak yaziyorum ödevde
Onlari türkceye cevirmek gerekliydi ve oldukca amanimi aliyor cevirmek.bir dahakinde denerim.