Avatar billede hh_21 Nybegynder
06. december 2002 - 15:27 Der er 1 kommentar og
1 løsning

En algoritme til computerskud i sænkeslagskibe.

Jeg har en spilleplade bestående af felter [10,10] og skibe, der består af felter [2-5]. Når en computer starter med at skyde skyder den random indtil den rammer noget. Derefter skyder den, vha. en ny metode, i de omkringliggende retninger (nord, syd, øst og vest), for at ramme det næste felt. Disse to metoder virker fint og de sørger for ikke at skyde udenfor pladen.

Derefter har jeg en metode der bliver ved med at skyde i den retning som den er begyndt at gå. Herefter er der rigtig mange special tilfælde. Hvis den først har ramt i midten og går til venstre, skal den når den rammer et felt (hvor attributten ramt og isSkib ikke er sat), der er i vandet. Så skal den jo starte fra det første felt og gå til højre indtil skibet er sunket.

Jeg har stort set fået det hele til at virke, men jeg brugte 25 timer på det. Det blev til rigtig meget kode og kontrollering af specialtilfælde.

Jeg vil gerne vide om der er en nemmere metode, da der matematisk og programmeringsmæssigt må være en smartere måde at få den til at skyde skibet i sænk. Computerens "intelligens" skal dog kun fungere på denne måde som beskrevet ovenover. Nogen idéer ???
Avatar billede fliv Nybegynder
14. januar 2003 - 22:47 #1
Jeg ville umiddelbart overveje at strukturere ovenstående som en stribe prioriterede handlinger, forstået på den måde at computerspilleren forsøger nummer 1 først, hvis den ikke findes forsøges nummer 2 osv.

1) Findes midst to sammenhængende "Ramt" felter hvor der ikke er skudt for begge "ender"?  Hvis ja, skyd efter det første af disse felter.

2) Findes der enkelte "Ramt" felter hvor en af siderne ikke erbeskudt? Hvis ja, skyd her

3) Skyd efter et tilfældigt frit felt.


Fordelen ved dette er at computerspilleren ikke skal "huske på" hvad den gjorde sidst. Algoritmen starter så at sige forfra hver tur, hvilket normalt giver en lidt mere simpel kode. (Og underletter debugging!)

Bemærk at jeg forudsætter at computeren husker følgende status for alle felter:
Bool Skudt //Angiver om der er skudt efter feltet
Bool Ramt // angiver om der er ramt et skib

Ovenstående er blot en skitse. Du vil formentlig komme til at finde flere actions end de tre, der blot medtaget for at illistrere den gennerelle idé om at undgå at koden så at sige skal huske hvad der skete sidste tur, når man kan konstruere algoritmen så en har samme effekt.

Jeg håber du kan bruge ovenstående til noget. Det er ikke særlig konkret med hensyn til implementering i kode, men jeg opfattede ikke spørgsmålet som at det var her du havde nogen problemer.

Mvh
Flemming
Avatar billede soulslider Nybegynder
25. februar 2003 - 22:08 #2
Hvis du stadigt er interesseret i et svar på dit spørgsmål kan du sende mig din mail, så kan jeg sende dig mit sænkeslagskib spil med source kode samt dokumentation over AI delen.. Det er måske lidt for omfattende at poste her :)

Jeg fik 11 for opgaven ... :)

skriv til: kimmstensborg@hotmail.com
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester