Jednorazowe losowanie znaku do gry

Odpowiedz Nowy wątek
2015-01-06 14:47
0

Witam.
Chcę zrobić losowanie ruchu gracza w grze kółko krzyżyk, tak by nie zaczynał zawsze np X tylko wylosowany znak a następnie już na przemian.
I właśnie nie wiem jak rozwiązać ten problem gdyż jak dodam kod losujący ciągle wywala mi jeden znak przez całą grę. Jak temu zaradzić?
Oto fragment kodu


    char sign;
      char array[2] = {'O','X'};
    sign = rand()%2;
   if(sign == 'O')
   {
  who_player =player2;

   }
   else if(sign == 'X')
   {
   who_player =player1;
   }
 sign = (sign == 'O') ? 'X' : 'O';

Pozostało 580 znaków

2015-01-06 14:49
0

a masz srand(time(NULL));?

Pozostało 580 znaków

2015-01-06 15:04
0

Zapomniałem dodać fakt, ale to i tak nic nie zmieniło...

Pozostało 580 znaków

2015-01-06 15:08
1

skorzystaj z tej biblioteki
http://www.cplusplus.com/reference/random/
(wymaga c++11)

Pozostało 580 znaków

2015-01-06 15:10
0

Pokaż więcej kodu, bo to powinno dobrze działać.

sign = rand()%2;
   if(sign == 'O')

Wtf?
Wiesz, że rand zwraca int? Nie zwróci magicznie znaku z twojej tablicy.
Więc jakim cudem sign może być równe O lub X?

edytowany 3x, ostatnio: some_ONE, 2015-01-06 15:16
'O' lub 'X' może być konwertowane na int. To, że sign nie osiąga tych wartości akurat wynika z czegoś innego. - twonek 2015-01-06 15:13
Czyli jak losuje rand()%2 to nie ma opcji, żeby sign było równe O lub X. Ale poprawiłem odpowiedź, bo była trochę niejasna. - some_ONE 2015-01-06 15:14

Pozostało 580 znaków

2015-01-06 15:10
1

Przykład

#include <iostream>
#include <random>
using namespace std;

int main(){
    default_random_engine generator;
    bernoulli_distribution distribution(0.5);

    for(size_t i = 0; i < 10; ++i)
        cout << (distribution(generator)? 'X' : 'O') << endl;

    return 0;
}
edytowany 4x, ostatnio: spartanPAGE, 2015-01-06 15:12

Pozostało 580 znaków

2015-01-06 15:12
1
sign = rand()%2;
if(sign == 'O')

raczej array[sign] == 'O'

Pozostało 580 znaków

2015-01-06 15:19
1
loleq1111 napisał(a):

Zapomniałem dodać fakt, ale to i tak nic nie zmieniło...

Bo srand(time(NULL)); dodaje się jeden raz na początku programu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-10 13:26
0

po co sobie komplikować życie z tym znakiem?

int znak
[...]
if (znak==0)
{
     sign='X';
} 

Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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