Błąd podczas losowania znaku dla graczy

0

Witam,
podpowiedział by mi ktoś, dlaczego przydziela ten sam znak??

//------------------------------------------game.h------------------------------------------
#include <string>
using namespace std;
enum SIGN { SGN_CIRCLE = 'O', 
	    SGN_CROSS = 'X' };
enum FIELD { FLD_EMPTY=0,
	     FLD_CIRCLE = SGN_CIRCLE,
	     FLD_CROSS = SGN_CROSS };
enum GAMESTATE { GS_NOTSTARTED, 
	         GS_MOVE, 
	         GS_WON, 
	         GS_DRAW };

class CPlayer{
private:
	string m_Player1;
	string m_Player2;
public:
	CPlayer()
	{m_Player1=m_Player2= "???";}
	char Losowanie();
	void Wczytaj();
	void Pokaz();
	string Gracz () { return m_Player1;}
	string Gracz2 () { return m_Player2;}
};

//------------------------------------------game.cpp------------------------------------------
#include <iostream>
#include <ctime>
#include <string>
#include "game.h"
using namespace std;
//class CPlayer 
void CPlayer::Wczytaj()
{
	cout << "Podaj nazwe Gracza nr.1: ";
	getline(cin,m_Player1);
	cout << "Podaj nazwe Gracza nr.2: ";
	getline(cin,m_Player2);
}
void CPlayer::Pokaz()
{
	CPlayer* Los,*Los2;
	Los=new CPlayer;
	Los2=new CPlayer;
	cout <<  m_Player1 << " - " << Los->Losowanie()<<endl;
	cout << m_Player2 << " - " << Los2->Losowanie()<<endl;
}
char CPlayer::Losowanie()
{
	SIGN Znak; 
	srand(static_cast<unsigned>(time(NULL)));
	return (static_cast<char>(Znak = (rand() % 2 == 0 ? SGN_CIRCLE : SGN_CROSS)));
}
//------------------------------------------main.cpp------------------------------------------
#include <iostream>
#include "game.h"

int main ()
{
	CPlayer* Gracz;
	Gracz=new CPlayer;
	Gracz->Wczytaj();
	Gracz->Pokaz();
        delete Gracz;
	system("pause");
	return 0;
}
 

Dzięki z góry. :)

0

Funkcja time zwraca "jakiś czas" ale zapewne jest on tutaj z dokładnością do sekundy. Wywołujesz losowanie kilka razy, ale trwa to tak krótko, że z całą pewnością jest to ta sama sekunda - z tego powodu ziarno generatora jest identyczne i "losowa" liczba też jest identyczna.

Przenieś srand na początek main. Wystarczy, że zrobisz to raz.

Poza tym (teraz dopiero się przyjrzałem) ten kod jest dziwny. Po co to losowanie dwa razy? Przecież masz tylko dwóch graczy. Pierwszy dostaje losowy znak a drugi dostaje ten, który został a nie losowy!

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