Gra Kuku w C; losowanie kart

0

Witam, muszę napisać w C grę karcianą kuku na 2 graczy, w tym jeden to tzw. komputer. Problem w tym, że nie mogę nawet wylosować graczom kart (na szczęście tylko 12 kart, a nie cała talia). Do tego gracz ma podawać swoje imie, a pzrebieg rozgrywki (tzn. ilośc wygranych) ma być zapisywana w pliku tekstowym. Może macie jakieś rady? Jestem bardzo początkujący dodam jeszcze:p Do tej pory napisałem niewiele i przyda mi się każda pomoc.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define karty 12
int talia[karty]={11,12,13,14,21,22,23,24,31,32,33,34};
/*pierwsza liczba oznacza kolor, a druga figore*/

int main(void)
{
	tasuj(talia);
	/*dalej powinna być reszta rozgrywki ale nie moge ruszyc z miejsca*/
	return 0;
}


int tasuj(int talia[])
{
int i,j,temp;
srand(time(NULL));
for (i=0; i<12; i++)
	{
	j = rand()%12;
	temp = talia[i];
	talia[i] = talia[j];
	talia[j] = temp;  
 /* tutaj probuje przetasować moja tablice talia, w dalszej kolejnosci chcialem aby gracz1 dostał                                                                                                                     pierwsze 3 karty z pzretasowanej tablicy, a gracz komputerowy nastepne 4*/

	printf("[%d] tablica to %d\n",i,talia[i]); /* printf tylko do sprawdzania, czy rzeczywiście losuje bez powtorzen- niestety nie losuje*/
}
return 0;
}
0

to co losujesz to liczby pseudolosowe.

aby otrzymać unikatowe liczby należy podać programowi unikatową liczbe. (cóż głupie ale inaczej nie da rady...) liczba pobierana to jednostka czasu. funkcja programu ją otrzymuje i generuje to co potrzebujemy

...
int main(void)
{
   srand ( time(NULL) ); //tyle wystarczy
   tasuj(talia);
...
0

Chyba nie rozumiem. Przeniosłem srand do maina, teraz wyglada to tak:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define karty 12
int talia[karty]={11,12,13,14,21,22,23,24,31,32,33,34};
/*pierwsza liczba oznacza kolor, a druga figore*/

int main(void)
{
	srand(time(NULL));
	tasuj(talia);
	
	return 0;
}


int tasuj(int talia[])
{
int i,j,temp;

for (i=0; i<12; i++)
{
	j = rand()%12;
	temp = talia[i];
	talia[i] = talia[j];
	talia[j] = temp;

	printf("[%d] tablica to %d\n",i,talia[i]);
}
return 0;
}

Jednak w dalszym ciągu wylosowane liczby się powtarzają.

1

Za każdym razem musisz usuwać z tablicy wartość która już była wylosowana.
Potem losujesz z elementów jeszcze nie losowanych.

To jest przerobiony kod do losowania kart z mojej gry karcianej:

 
losujkarty()       
{
ilenierozdanych=12;
for(int i=0;i<12;i++)
{
int x=rand()%ilenierozdanych;
printf("Karta nr %i = %i",i,TabKart[x]);
for (int y=x;y<12;y++)
{
TabKart[y]=TabKart[y+1]; 
}
ilenierozdanych-=1;
}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1