algorytm.org

Kółko-Krzyżyk



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Kółko-Krzyżyk
Ocena użytkowników:***** / 41
SłabyŚwietny 
Wpisany przez Bartłomiej Bartnicki, 01 kwietnia 2007 13:15

Kółko-Krzyżyk, jedna z najbardziej popularnych gier. Każdy z nas grał w nią na pewno wiele razy. Założeniem gry jest ułożenie w jednym rzędzie (pion lub poziom) lub w skosie trzech takich samych znaków (istnieje 8 takich możliwości - 3 w pionie, 3 w poziomie i dwa pod skosem).

Przejdźmy do pisania: Podstawą gry jest tablica[3][3]. Duża część gry będzie losowa, komputer będzie podejmował tylko decyzje w logicznej ripoście na nasze ruchy, więc nie będzie to gra w której komputer zawsze wygrywa.

Struktura programu będzie następująca:

pętla(dopóki nikt nie wygra i nie ma remisu)
{
  Wyświetl aktualny stan gry
  jeżeli (ruch komputera)
  {
     komputer wstawia swój znak
  }
  w przeciwnym wypadku
  {
     użytkownik wstawia swój znak
  }
  sprawdzenie czy ktoś wygrał
  jeżeli teraz był ruch komputera to zaznacz teraz ruch użytkownika
  jeżeli teraz był ruch użytownika to zaznacz teraz ruch komputera
}

Przejdźmy teraz do opisania poszczególnych metod:

Zacznijmy od funkcji, która zaprezentuje wynik gry. Ota jeden z najprostszych przykładów:
  1 2 3
a  | |
b  | |
c  | |

Miejsca w których mogą pojawić się znaki niech będą zmiennymi char wypełnionymi spacją, główna pętla gry będzie drukować aktualną wersje w której zmiennym tym możemy nadać wartość X lub O.

Następnie mamy funkcję sprawdzającą czy ktoś wygrał. Będzie ona sprawdzać czy w którymkolwiek rzędzie (pion lub poziom) lub skosie nie ma trzech takich samych znaków (X lub O). Zabezpieczyć się należy również przed sytuacją remisu, w której nie ma już wolnego miejsca do wstawiania kolejnych znaków X lub O i nikt do tej pory nie wygrał, np:
  1 2 3
a O|X|O
b O|X|X
c X|O|O

Kolejnym zadaniem będzie nauczenie komputera myśleć - czyli napisanie funkcji, która będzie sterować ruchami komputera.
    Funkcja ta będzie sprawdzać:
  • czy w którymkolwiek rzędzie/skosie nie ma dwóch swoich znaków i jednego pustego. Jeżeli taką sytuacje napotka to zapełnia puste pole swoim znakiem i w ten sposób wygrywa,
  • następnie algorytm sprawdzi czy w którymkolwiek rzędzie/skosie nie ma dwóch znaków przeciwnika i jednego pustego. Jeżeli taką sytuacje napotka to zapełnia puste pole, blokując tym samym wygraną przeciwnika,
  • ostatnią możliwością jest to, że żaden z powyższych przykładów nie ma miejsca, wtedy niech funkcja losowa wybierze pole to zapełnienia.

Ostatnią funkcją jest pobieranie informacji o ruchu od gracza. Zależy ona od sposobu reprezentacji graficznej gry, jeśli zrobiłeś to tak jak ja napisałem to możesz poprosić użytkownika o podanie współrzędnych np: a1. Pamiętaj żeby zabezpieczyć program przed podaniem niewłaściwych współrzędnych np b5, albo d1. Oraz przed podaniem współrzędnych pola które jest już wypełnione, np: b3 dla gry poniżej:
  1 2 3
a  | |
b  |O|X
c  | |X



Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Tomasz GietkaC/C++Borland Builder 6/Dev-C++ 4.9.6.0
.cpp
.cpp
***** / 14
Kamil KonieczkaC/C++
.cpp
.cpp
***** / 18
Tomasz LubińskiJava
.java
.java
***** / 18
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 01 czerwca 2010 21:30
Komentarze
photo
-8 # nightcrawler 2013-03-01 23:42
świetny algorytm, w szczególności fragment uczący komputer 'myśleć' ;) pozdrawiam, i dzięki, przyda mi się do projektu z programowania ;)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # PM11 2015-02-07 14:34
Dopiero zobaczyłem stronkę a już pokochałem.Z algorytmu skorzystam.
Dziękuję.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # LenBon 2016-04-26 12:35
Dzięki za algorytm ) Przyda sie do projektu.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Piotrek Z Matematyki 2017-01-04 00:31
Z da się z nim wygrać.
Gracz zaczyna pierwszy daje środek
Komputer daje lewy górny róg
Gracz daje prawy górny róg


Zadna z sytuacji(dwa x kolo siebie i wolna przstrzen lub dwa o kolo siebie i wolna przestrzen)

komputer losuje cos innego niz lewy donly rog
graczy wygrywa
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # michał3332 2017-03-22 23:57
takie proste, a ja tyle kombinowałem, dzięki :)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # ElaD 2018-03-21 13:52
Czy ktoś z was potrafiłby przełożyć to na język programowania dla dzieci Scratch (scratch.mit.edu)

Z góry dziękuję i pozdrawiam
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # MateuszK2001 2018-11-15 19:58
To nie działa.
Gracz może doprowadzić do sytuacji, gdy komputer aby nie przegrać będzie zmuszony zaznaczyć 2 pola na raz a jest to nie możliwe.
Np.
1) Gracz daje w prawy górny róg - komputer losuje na środek
2) Gracz daje w lewy dolny - komputer losuje prawy dolny
3) Gracz daje lewy górny i w tym momencie komputer jest na przegranej pozycji
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz