(podlinkowuję kontekst sprawy: http://4programmers.net/Forum/Newbie/210976-niepoprawne_dzialanie_funkcji_-_multum_problemow?p=919474#id919474)
Zastosowałem się do rady @rincewind oraz poniekąd do @Shalom i stworzyłem taki oto kod rysujący lub tworzący od podstaw tablicę dwuwymiarową.
Prościej moim zdaniem nie dało się napisać a wszystko jest opatrzone komentarzem. W takim więc razie nie jest to już "spagetti code" (funkcję wyświetlającą odpowiednie napisy i manipulujące funkcją drawcrowd wam oszczędzam bo jest nic nie znacząca).
Problem w tym, że znak zdefiniowany w zmiennej cel nie wyświetla się zawsze, jakby był uzależniony od rand(), chociaż funkcja ta losuje dla niego tylko współrzędne.
// tablica do wypełnienia ludźmi
char tLudzie[wer][kol];
// współrzędne celu
unsigned X, Y;
returned drawcrowd(bool bRysowacNaNowo, bool bUkrycCel, char nic, char cel, char inni, unsigned uLiczebnoscTlumu) {
// twórz tablicę tLudzie na nowo gdy:
if (bRysowacNaNowo) {
// jak rysować na nowo to określ pozycję celu
X = random(wer, 0);
Y = random(kol, 0);
if (X < 0) X = 0;
else if (X > wer - 1) X = wer - 1;
if (Y < 0) Y = 0;
else if (Y > kol - 1) Y = kol - 1;
// nadpisz tablicę - najpierw wiersz, potem wszystkie kolumny wiersza
for (int a = 0; a < wer - 1; a++) {
for (int b = 0; b < kol - 1; b++) {
nLogic = random(100, 0);
// bezwarunkowo wstaw znak nicości - można potem nadpisać
tLudzie[a][b] = nic;
// ludzie zwykli
if (nLogic > uLiczebnoscTlumu) tLudzie[a][b] = inni;
// nadpisz zwykłego "ludzia" jako cel gdy:
if (a == X && b == Y) {
// określ czy masz go wtopić w tłum czy nie
switch (bUkrycCel) {
case false: tLudzie[a][b] = cel; break;
case true: tLudzie[a][b] = inni;
}
}
}
}
}
// rysuj tłum - wiersz i wszystkie jego kolumny (repeat)
for (int a = 0; a < wer - 1; a++) {
for (int b = 0; b < kol - 1; b++) {
cout << tLudzie[a][b];
}
// bezwarunkowo odstęp na końcu kolumn wiersza
cout << "\n";
}
return success;
}
Ktokolwiek wie dlaczego, powiedzmy... X jako char dla zmiennej cel się nie pojawia ZAWSZE, tylko mniej więcej raz na parę uruchomień?