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

0

Ej a wlanczales tego wirusa kiedys, co.

          K_asm_il
0

K_asm_il w dniu 4.4.2002 18:48 napisal:
Ej Sebo, twoj pomysl z sztuczna inteligencja naprawde bardzo mi sie podoba. Rzeczywiscie analiza
&gtbledow jest w 100% przydatna, ale jest 1 problem plik z takimi analizami moze trohe zajmowac, no nie.
&gtA jeszcze odnosnie wirkow... hmmmm... powiedz mi jak bardzo niebezpieczny moze byc wirus w Delphi?
&gt
&gt K_asm_il

Taki plik na pewno się rozrośnie (ale pomyśl ile GB mieći się pod twoją czaszką).

Pisanie wirósów (przynajmniej według mnie) nie jest po to by zepsuć komuś kompa (po to są bąby)
dobry wirus powinien praktycznie nigdy się nie ujawnić(gdy rozwala płytkę główną to jest chyba trochę zauważalne?) niszczenie kompa jest skutkiem ubocznym (choroba gdy atakuje organizm to chce się rozmnożyć a nie go zniszczyć) mutacji.

chodzi o to że tamten wirusik się ciogle mutował (nie tylko kodował - ale zmieniał swoje działanie) w rezultacie powstawały nowe (lepsze lub gorsze wirki)

nie wiem jaki antywirus by sobie z czymś takim poradził :)

Dodam jeszcze że po kilku dniach sam wytworzył w sobie funkcje niszczące

ps: już nie piszę wirusów--Sebo +)
(D3)

0

Mojego wirusa testowałem tylko raz. Nawet po uruchomieniu w trybie bezpiecznym przeznaczonym do testów skończyło się osmaloną kartą dźwiękową (na szczęście działała) i Winzgrozą niesprawną do czasu przeinstalowania kilku plików konfiguracyjnych. No ale, jak już mówiłem, wywaliłem tego wirusa bo mógłby być zbyt niebezpieczny beż trybu testowego.

Sebo -&gt W czym i jak napisałeś tego wirusa że był w stanie sam siebie przerabiać?-------
Pozdro
my_nick, www.gryzonie.prv.pl

0

Ej, Sebo czyli to byl wirus inteligentny, jednak jestes dobry w tworzeniu sztucznej inteligencji,
ale nie przesadzaj, nie rob tak groznyh wirusow, nie chce bysmy skonczyli tak jak ludzie w filmie MATRIX :)

                     K_asm_il
0

To byl zart, hcialem powidziec tylko ze Sebo nie umie wirosow robis.

                     K_asm_il
0

my_nick w dniu 5.4.2002 15:6 napisal:
&gtSebo -&gt W czym i jak napisałeś tego wirusa że był w stanie sam siebie przerabiać?

On nie był w stanie się sam przerabiać! On po prostu zamiast się kopiować pisał nowego wir'ka! A i jeszcze oprucz tego nie sprawdzał czy robi to dobrze! Nie oznaczał zainfekowanych plików. I nie pisałem go by zepsuć kompa tylko, żeby sprawdzić czy program komputerowy może ewoulować... Masz rację nie umiem pisać wirusów jeśli dla ciebie wirusem jest program który spala płyty główne, formatuje dyski itp. - mój wirus miał sam się napisać!--Sebo +)
(D3)

0

W takim razie sformułuję pytanie inaczej: W jak zrobiłeś ten program że był w stanie robić inne programy?-------
Pozdro
my_nick, www.gryzonie.prv.pl

0

my_nick w dniu 6.4.2002 21:25 napisal:
W takim razie sformułuję pytanie inaczej: W jak zrobiłeś ten program że był w stanie robić inne programy?

Próbowałeś kiedyś kodowania polimorfoicznego? (Zajrzyj do książki "Programowanie wirysów i anty wirusów" teraz autora nie pamiętam ale jak mi oddadzą ją to wpiszę na forum)
Więc, taki program kodujący się polomorfoicznie pisze za każdym razem kod który ma go rozpakować.
Urzuwa do tego zaprogramowanych przez autora poleceń przeplatanych jakimś nic nie robiącym stuffem...
Mój - w podobny sposób układał bardziej znaczące kody i jak jurz pisałem nie sprawdzał błędów. By nie rozwalać (od razu) kompa swoje dzieci umieszczał w nowych plikach. istnieje małe ~0 prawdopodobieństwo, że zrobi coś lepszego, ale pomysl sobie jakie jest prawdopodobieństwo zbudowania komórki z atomów! A jednak życie jakoś powstało! --Sebo +)
(D3)

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