Kółko i krzyżyk - w ciekawy sposób...
Jakis czas temu chciałem trochę pobawić się grami. Na pierwszy ogień poszła najprostsza gra czyli kółko i krzyżyk. Niestety wpisywanie wszystkiego ręcznie było dość nudne(). Teraz postanowiłem trochę uprościć tą sprawę i napisać program jak najciekawiej (tzn. bez zbędnego powtarzania się i nudnego kodu).
Pierwszy sposób to trzymanie całej planszy w jednym 32 bitowym int (uint32_t). Każdy gracz lub sekwencja kończąca gre byłaby maską. Pole opisane byłoby przez 2 bity (zajęte/nie zajęte + numer gracza lub pierwsze zajęcie przez gracza 0 a drugie zajęcie przez gracza 2). Wszystko by było pieknie gdyby dało się wpisać wartości binarne do kodu C - ale da się tylko w szesnastkowym. Dodatkowo tworzenie tablic nie było ciekawe ;) - ale IMHO to jest najoszczedniejszy sposób jeśli chodzi o pamięć i CPU (mylę się?)
| Wartość | Znaczenie w sposobie pierwszym | Znaczenie w sposobie drugim |
|---|---|---|
| Wartość | Znaczenie w sposobie pierwszym | Znaczenie w sposobie drugim |
| 00 | Puste | Puste |
| 01 | Puste | Zajęte przez gracza 1 |
| 10 | Zajęte przez gracza 0 | Zajęte przez gracza 0 |
| 11 | Zajęte przez gracza 1 | Błąd |
Teraz wpadłem na inny pomysł - oddzielenie pól, rzędów i planszy. Oto kod (nie jest do końca przetestowany - mogą być w nim błędy):
#include
typedef unsigned int uint;
typedef unsigned short ushort;
namespace ttt {
class field {
char player;
public:
field() : player(-1) {}
field(char p) : player(p) {}
field(field& f) : player(f.player) {}
void clear() {
player = false;
}
bool isOccupied() const {
return player >= 0;
}
char getPlayer() const {
return player;
}
bool setPlayer(char p) {
if(player >= 0)
return false;
player = p;
return true;
}
};
typedef std::vector fieldset;
class board {
std::vector
Czy ktoś zna jakiś ciekawszy sposób? A może krótszy/mniej pamięciożerny?
Komentarze do wpisu
Możesz śledzić odpowiedzi poprzez kanał RSS. Możesz dodać komentarz lub zostawić ślad (trackback) ze swojego bloga.
iss
Krzyrzyk? Cóż to za zwierz?
25 lipca 2007, 18:23:08
Uzytkownik
Nieortograficzny…
25 lipca 2007, 18:31:47
Dodaj komentarz