Pisanie gry typu warcaby klasyczne w C


(B1504585) #1

Witam,

moim projektem na zajęcie tak jak w tytule tematu są warcaby, które muszą zawierać 2 tryby: Gracz vs Gracz oraz Gracz vs AI. Problem, którego nie mogę rozwiązać to jest poruszanie pionkami przy wielokrotnym biciu oraz poruszanie damką. Operacje wykonuje na tablicy 10x10.

Nie chcę, żadnych gotowców. Proszę o jakąś podpowiedź :wink:.

Kod funkcji:

Starałem się stworzyć coś takiego:

 


(kowgli) #2

Ale z czym dokładnie masz problem? To jest problem z gatunku tych, które rozwiązuje się na kartce papieru. Programowanie tego - w tym, czy innym języku - to wisienka na torcie. 

Poszukaj przykładów w sieci.


(Drobok) #3

pionek powinien mieć swój status (wg niego się poruszasz), a zbicie nie powinno kończyć ruchu jeśli jest możliwość zbicia kolejnego pionka 


(B1504585) #4

Bardziej chodziło mi jak powiedzieć użytkownikowi, że musi dokonać skoku (bicia) jeśli jest możliwe. Wydaje mi się jest to najtrudniejszy element, z którym sobie nie radzę :(.

@drobok: “pionek powinien mieć swój status”, chodzi Tobie o to czy jest to zwykły pionek czy damka ? Czy o jego położenie?


(Drobok) #5

położenie w wypadku warcabów to przerost formy nad treścią, ja bym zrobił tablicę dwuwymiarową w formie mapy na której znajdowały by się struktury pole, z zmiennymi:czy_cos_zajmuje, typ_zajmującego i kolor (wtedy masz 2 zmienne bool, więc krótsze warunki)

Jeśli wokół swojego zajętego pola masz inne zajęte pole z innym kolorem przez które możesz przeskoczyć (następne pole po przekątnej jest puste) to wtedy dodajesz ruch do wymuszonych, po ostatnim polu każesz użytkownikowi wybrać któryś z wymuszonych


(KamilDz) #6

Najbardziej intuicyjne rozwiązanie: podświetl piona i pole na które może wykonać bicie. Jak będzie miał kolejne bicie to znów go podświetlisz. 

Popatrz jak to jest tu rozwiązane: http://www.gry.pl/gra/warcaby-z-damka


(dobrygosc) #7

Na początku proponowałbym zainwestować w jakiejś porządne video kursy programowania w C:

http://strefakursow.pl/kursy/programowanie/szkola_programowania_w_jezyku_c.html

Jest tutaj dobra szkoła. Sam jakiś czas temu z niej korzystałem bo potrzebowałem takich podstaw. Wszystko jest łądnie wyjąścnione tak wiec naprawdę można to ogarnąć. 


(B1504585) #8

.


(B1504585) #9

Witam,

Natrafiłem jednak na problemy. Jak mam rozwiązać taką sytuację:

gracz ma jednego pionka, który może bić i pionka, który nie ma takiej sytuacji. Jak zrobić by gracz ruszył pionkiem, który ma bicie? Czy jedynym rozwiązaniem jest przechowywanie informacji o pozycji wszystkich pionków i ich sąsiadów, i pokarz dym ruchu aktualizowanie danych graczy?

Drugi problem to jak poradzić sobie z damką, która porusza się o dowolną ilość pól i może na jednej linii zbić parę pionków (dokładnie jeśli damka zaczyna z jednego rogu i “idzie” na drugi koniec może zbić max. 3 pionki) ? Chodzi dokładnie o tą nie regularność ruchu, który jest problematyczny.

 

problem rozwiązany :wink:


(B1504585) #10

Jaki będzie najprostszy algorytm dla gracza komputerowego, by wykonywał jakieś rozsądne ruchy ?


(enedil) #11

W jaki sposób działają komputerowe systemy grające w tego typu gry?

Zakładając brak AI, następuje przeszukiwanie wszystkich możliwych ruchów w kilku kolejnych ruchach, oraz ocena korzystności owych. W warcabach można szeregować korzyści poprzez stosunek własnych pozostałych pionków do tych przeciwnika. Wystarczy teraz znaleźć najlepsze ruchy dla gracza, komputera, gracza, komputera, itd, aż do przekroczenia pożądanego czasu myślenia lub oczekiwanej liczby iteracji.

 

Pole do gry można interpretować jako graf i zastosować w nim DFS (deep-first search0.


(B1504585) #12

@enedil Dzięki !


(B1504585) #13

Witam ponownie,

Czy taka struktura jest poprawna do tego zadania?

struct NODE {
	int tab[10][10];
	int wartość;
	struct NODE *liście = NULL;
};