Trochę o strategii gry w statki

0

Na poczontek proshe o nieczytamnie tego postu przez osoby o silnym poczuciu polskiej ortografii. Chodi o to, ze ostatnio mam biore udzial w turnmieju. Polega on na tym, ze trzeba napisac program grajoncy w statki. Ogolne chodi o to, ze program musi umiec generowac planshe, oraz po podaniu zakodowanej planshy, np:

0 - pole niestrzelane
2 - pudlo
3 - trafiony, niezatopiony
4 - trafiony zatopiony

zwrocil planshe zmieniajonc jedno 0 na 1, co bedzie sygnalizowac strzal na to pole. Czy ktos moze ma jakies ciekawe strategie do zaprezentowania?--Delphi 4

Skysh The God, Your Slave

0

Mimo silnego poczucia polskiej ortografii ;-) postanowilem zaprezentowac moja osobista strategie gry w statki. Nie wiem na ile jest implementowalna komputerowo, moze byc tez zbyt latwa do rozgryzienia.
W starciach z ludzmi byla jednak niezla.

W pierwszej fazie strzelalem w co drugie pole (jakby w czarne pola szachwonicy), zwykle zaczynajac od przekatnych. To pozwala zabic wszystkie statki z wyjatkiem (statystycznie) 2 jedynek. Poszukiwania nietrafionych jedynek to juz byla czysta psychologia - np jesli miedzy zabitymi statkami byla dziura odpowiadajaca jedynce warto wnia sprobowac, boludzie czesto ukladaja statki obok siebie. Nie bardzo to umiem opisac, ale kazdy kto gral chyba wie o co chodzi.

Mialem tez strategie ustawiania stakow: polegala ona na stloczeniu wszystkich duzych jak najbardziej obok siebie i rozsianiu 4 jedynek nieregularnie na pozostalym wolnym polu. Cel chyba oczywisty...

Jak cos napiszesz to opublikuj, zobaczymy czy Twoj program zasluguje na nazwe Deep Blue ;)--Pawel

Delphi6

0

Ja proponuję zrobić namiastkę sztucznej inteligęcji (podobną do tej, którą robię w moich AI Warcabach).

Polega to na tym, że program zapisuje wszystkie posunięcia swoje i przeciwników w pliku na dysku i wzależności i od tego czy wygra partię w następnych rozgrywkach stosuje podobne strategie (jeśli wygra gracz program będzie stosował jego posunięcia).

Jak to rozwiązać technicznie? :

  • masz plik zawierający listę ustawień planszy, gdzie należy strzelić, ile razy wygrał ten kto tak grał i ile razy przegrał.
    np: &ltplansza zapisana binarnie (przekształcasz zmienne z byte na char pamiętaj: wartość char=#0 zamyka ciąg &gt&gt nie możesz jej stosować) >&lt dwa bajty zapisujące współżędne strzału(też binarnie jak wyżej)>&ltjlość wygranych>&ltjakiś znak oddzielający>&ltjlość wygranych&gt
  • sytuację z gry dopasowujesz do tych zawartych w bazie danych (obracasz planszą, dopasowujesz kawałki itp &gt&gt musisz zrobić jakiś dobry algorytm) &gt&gt robisz w ten sposób listę "opłacalnych ruchów" (każdemu przypisujesz odpowiednie prawdopodobieństwo skuteczności - w zależności od tego jak często on wygrywał). (taka lista przy planszy 10*10 będzie zawierać maksymalnie 100 pól)
  • losujesz ruch z poprzednio spożądzonej listy (według wcześniej ustalonych prawdopodobieństw skuteczności) (ludzie też nie zawsze wybierają ruch, który wydaje się najlepszy)

Oczywiście po skończeniu rozgrywki musisz uaktualnić bazę AI

P.S. Proponuję też zrobienie możliwości uaktualnienia jej przez internet i jeśli użytkownik jest on-line wysyłanie jego bazy AI do ciebie (na serwer).

Potrzebyjesz takrze jakiegoś systemu awaryjnego (np jakby ruch wystąpił po raz pierwszy i nie dało go się dopasować do żadnej z jóż zapisanych strategii &gt&gt np taki jak w pierwszej odpowiedzi)
--Sebo +)
(D3)

0

Nie powiedzialem ze kazda rozgrywka jest niezalezna i program nie ma mozliwosci apmietania danychz poprzednich rozgrywek. Co do pomyslu nr1. Moje doswiadczenie z grami w incie moofi mi, ze lepiej jest na poczontku strzelac rzadziej, tzn w nastepujocom metode: nie strzelam calej kratki, tylko robie z czrnych pol szachownicy jeszcze rzadszom krate, a potem dostrzeliwuje pozostale. To pozwala wzglednie shybko wyeliminowac czworke, ew jeszcze jednom trojke jak sie uda. Ale strategia rozstawiania jest oki. Problem polega na tym, czy zrobic kilka gotowych plansh i potem losowo dostawiac jedynki, czy generowac plansze calkowicie od zera. Piszcie co uwazacie...--Delphi 4

Skysh The God, Your Slave

0

Co do strzelania: bylem niejasny, nie mialem na mysli strzelania 'w szachownice' po kolei - raczej losowo. Moja metoda zaczynania od przekatnych przy grze 'reczno-kartkowej' sluzyla w gruncie rzeczy temu zeby sie nie pomylic wypelniajac szachwonice.

Generowanie od zera przy ciasnych warunkach jest w gruncie rzeczy rownowazne wyborowi sposrod wszystkich predefiniowanych plansz spelniajacych te warunki. Przy dzisiejszych komputerach pewnie nawet nie bedzie zauwazalnej roznicy w czasie wykonania. --Pawel

Delphi6

0

Siemka Skysh, moge powiedziec ci dokladnie jaka taktyka gral moj program na dzisiejszym proturnieju bo i tak ja zmienie:

  • zaczynal od strzelania po rogach
  • najwazniejszy element (on sie sprawdzil): gdy zatopil juz jakis statek oddawal kolejny strzal na tej linii i jesli bylo znow trafienie to kolejny w ten sposob szybko usuwal zgrupowanie wiekszych statkow
  • jesli uszkodzil juz jakis statek to mial w inteligentny sposob go topic czyli brac pod uwage rozmieszczenie pozostalych statkow i to w jakim ulozeniu ten statek po zatopieniu odkrywalby najmniej pola (ta czesc programu nie spelnila zupelnie swojej roli gdyz rozwazalem tylko rozstawienie statkow podobne do mojego)
  • gdy zostaly same jedynki mial 50% na strzal losowy i 50% na strzal wedlug mojej taktyki topienia jedynek: zakladala ona ze 1-3 statki byly przy skupieniach wiekszych statkow lub przy brzegu i co najmniej jedna jedenka rozmieszczona zupelnie losowo i tu bylo 75% na strzal przy brzegu lub innym statku i 25% na strzal w takie miejsce na planszy ze w wypadku trafienie odkryloby mi najwiecej pola - czyli po prostu w ten rejon gdzie oddalem najmniej strzalow (to nie wyszlo najlepiej lub po prostu nie mialem szczescia)

ogolnie rzecz biorac przekombinowalem i napisalem program tak jakbym mial grac ze soba a nie z kims innym
--Delphi 5 (paskal is good too)

0

Co to za sztuczny mózg bez pamięci?
Aby gra była choć trochę inteligentna obowiązkowao musi analizować swoje dobre i złe posunięcia...
Dla mnie "deep blue" wcale nie jest przełomowym programem - napakowali mu do pamięci wszystkie możliwe strategie szachowe i się cieszą, że je "umie"!
Przełomem będzie program, który będzie "umiał" się uczyć... (właśnie pracuję nad taką inteligęcją w "AI Warcabach")
Czemu kazda rozgrywka ma być niezalezna?

P.S. Problem polega na tym, że Ci od robienia gier wciąż uważają (albo są po prostu za leniwi), że znajdą jakąś uniwersalną i bezbłędną strategię tymczasem natura i tak wygrywa (bo jest nieprzewidywalna)...

P.S.2: Zrobiłem prototyp inteligętnego wiruska. Działa on na podstawie naturalnej rewolucji ('przerzywa najlepszy" - potrafi się mutować). Jednak dalszych prac zaniechałem... Jest zbyt niebespieczny!--Sebo +)
(D3)

0

Ej Sebo, twoj pomysl z sztuczna inteligencja naprawde bardzo mi sie podoba. Rzeczywiscie analiza
bledow jest w 100% przydatna, ale jest 1 problem plik z takimi analizami moze trohe zajmowac, no nie.
A jeszcze odnosnie wirkow... hmmmm... powiedz mi jak bardzo niebezpieczny moze byc wirus w Delphi?

                              K_asm_il
0

K_asm_il -&gt Wirus napisany w Delphi może być CHOLERNIE niebezpieczny. Sam jednego zrobiłem. Teoretycznie, dzięki wstawkom w ASM byłby w stanie SPALIĆ część peryferiów wysyłając do nich napięcie 60v, poza tym jest w stanie się "rozmnażać" bardzo skutecznie rozwalić windowsa. Ale po tym jak przejrzałem pełną listę jego możliwości, usunąłem EXEca i kod źródłówy (nie zostawiłem niczego) bo stwierdziłem że byłby zbyt niebezpieczny gdyby komuś udało się go ukraść.

PS. Nazwa kodowa wiruska to "AnnihilatoR". Przy okazji, takim nickiem się czasami podpisuję na Polchacie.-------
Pozdro
my_nick, www.gryzonie.prv.pl

0

Eeee, z tym 60V to sie zgrywasz, nie?--Pawel

Delphi6

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0