Ustawienie figur w losowych szachach nie jest oczywistym użyciem polecenia rand();
W niżej zaproponowanym programie można znaleźć tablicę globalną i polskie nazwy ponieważ program przeznaczony był na potrzeby platformy Arduino (wymaga przeróbek cout) dla pewnego kółka szachowego (gdzie łatwiej było wytłumaczyć polskimi nazwami).
DevC++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #include <iostream> #include <cstdlib> #include <ctime> using namespace std; typedef uint8_t byte; byte losowanie[8]; #define BIERKA_WIEZA 2 #define BIERKA_KON 3 #define BIERKA_GONIEC 4 #define BIERKA_DAMA 5 #define BIERKA_KROL 6 unsigned int random(unsigned int x) { return rand()%x; } void wstawLosowanie(byte miejsce, byte figura) { byte i=0, i_puste=0; do { if (i_puste==0 && miejsce==0 && losowanie[i]==0) { //jeśli na początek wstawia do pierwszego pustego pola losowanie[i] = figura; break; //jesli wstawia w pierwsze miejsce to koniec petli } else {//wstawia gdzieś dalej poza pierwszym zerem if (losowanie[i]==0) i_puste++; i++; } } while ((i_puste!=miejsce || losowanie[i]!=0) && i<7); losowanie[i] = figura; } /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void randomFisher() //losowanie figur Fishera { // randomSeed(analogRead(0)); srand( time( NULL ) ); for (byte i=0; i<8; i++) losowanie[i]=0; //Losuj pozycje goncow: byte goniecBialopolowy = (byte) (random(4)*2); byte goniecCzarnopolowy = (byte) (random(4)*2 + 1); // cout << "czarnopolowy = " << (int) goniecCzarnopolowy << ", bialopolowy = " << (int)goniecBialopolowy << endl; losowanie[goniecBialopolowy] = BIERKA_GONIEC; losowanie[goniecCzarnopolowy] = BIERKA_GONIEC; byte krol = (byte)(random(4) + 1); //jedno z czterech pozostalych pol oprocz skrajnych (bo tam wieze) +1 ominiecie pierwszego pola // cout << "krol = " <<(int) krol << endl; //odlicza i_puste (puste pola) dopoki nie doliczy do "krol", jak doliczy sprawdza jeszcze // czy to pole nie jest czasem różne od 0 jeśli jest to leci o 1 dalej wstawLosowanie(krol, BIERKA_KROL); //wstaw na miejscu krol do tablicy BIERKE_KROLA byte lewaWieza = random(krol); //losuj po lewej stronie krola random(0,krol) - bez krola wstawLosowanie(lewaWieza, BIERKA_WIEZA); byte prawaWieza = random(5-krol); /* Prawa wieza: 1 4 krol=1 (pola po lewej 1 po prawej 4 wolne) 2 3 krol 2 3 2 krol 3 4 1 krol 4 radom(krol) prawa wieza random(5-krol) lewa wieza*/ // cout << "lewa wieza=" <<(int) lewaWieza << ",prawa = "<<(int) prawaWieza<< endl; wstawLosowanie(prawaWieza+(krol-1), BIERKA_WIEZA); //+krol-1 bo pola puste po lewej trzeba dodać byte dama = random(3); wstawLosowanie(dama, BIERKA_DAMA); wstawLosowanie(0, BIERKA_KON); wstawLosowanie(0, BIERKA_KON); for (uint8_t i=0; i<8; i++) cout << (int) losowanie[i]; } int main(int argc, char** argv) { randomFisher(); return 0; } |