Bakgrund
Vi fick till uppgift att välja en valfri inlämningsuppgift för momentet Internetprogrammering I, som har stark anknytning till kursen. Jag valde att se om det var möjligt att implementera spelet Othello i Java. Då Othello är ett strategispel behövs det datorkapacitet för att kunna göra en intelligent sökning av möjliga drag för en spelare. Om ett Othellodrag var möjligt att beräkna hos en Webserver, vore det högst intressant, eftersom tillgång till hög prestanda i en klient då inte är viktigt. Man kan då t.ex. använda en s.k. tunn klient för spelet Othello, medans de tyngre krävande delarna ligger i Webservern.
Nu var det viktigt att se vilken typ av kommunikation som kan användas mellan en Webserver och en klient. De olika tekniker som jag lärde mig om i momentet Internetprogrammering I var bl.a.
XML-RPC
. Jag bestämde mig sedan för att prova den tekniken.
Introduktion till XML-RPC
Det är en
specifikation
och en rad olika implementationer, som tillåter mjukvara att köras på olika operativ system för att göra remote procedure call (RPC) över Internet. Dess RPC använder sig av HTTP för transport och XML för formatet. XML-RPC är designat för att vara så enkelt som möjligt, medans det tillåter komplexa data strukturer att bli sända, processade och tillbakaskickade.
Introduktion till Othello
Othello är ett brädspel för två personer. På ett bräde med 8x8 rutor lägger man runda, tvåsidiga brickor som kan vändas från vit till svart och vice versa. Se här för en engelsk beskrivning på reglerna, eller hur man spelar.
Uppgift - problem
Jag valde att se om det var möjligt att dels implementera spelet Othello som en JApplet, samt som en klient (JFrame) med tillhörande Webserver. Kommunikationen mellan Webservern och klienten sker m.h.a. det s.k.
XML-RPC
protokollet, vilket ingår i Webservices. Othello som JFrame har all AI implementerad i en egen WebServer som startas på en egen maskin.
Uppgiften är uppdelad i olika logiska Javapaket. Nedan följer en kort engelsk sammanfattning på de Javapaket som har skapats och används för spelet Othello. Se javadocs för en utförligare beskrivning av innehållet i de olika paketen.
-
ai.alphabeta - contains the Artificial Intelligence for the package
-
othello.ai - contains the Artificial Intelligence Interface for Othello
-
othello.board - contains all the necessary classes related to the Othelloboard
-
othello.com - contains the class ComModel and ComHandler, which acts as a Client towards the Artificial Intelligent (AI) package.
-
othello.com.xmlrpc.client - contains the class OthelloClient with the communication package
XML-RPC
implemented in order to communicate to a WebServer with
XML-RPC
.
-
othello.com.xmlrpc.server - contains the class OthelloServer with the communication package
XML-RPC
implemented in order to communicate to a Client with
XML-RPC
.
-
othello.gui - contains all the classes for the Gui
-
othello.gui.html - contains the html files
-
othello.gui.images - contains all images used for this project
-
othello.gui.styles - contains the styles for the html files
Resultat
Resultatet är en dels en implementerad JApplet på denna sida med ett väl fungerande Gui, samt en JFrame som nedladdningsbar jar-fil med Othellospelet. Othello som JFrame har all AI implementerad i en egen WebServer som kan startas på en egen maskin.
Artificiell Intelligens (AI)
Den AI-teknik som har använts är alphabeta pruning med en sökning på djupet d för ett drag. På djupet d värderas brädet för alla kombinationer av de möjliga olika dragen på brädet. Den värderingen som ger högst värde används sedan som ett förslag på det bästa draget. Se vidare boken
"Artificial Intelligence: A Modern Approach", skriven av Russell & Norvig, för mer information om alphabeta pruning.
Othello som JApplet
Othello i form av en JApplet, har här all sin AI implementerad lokalt. Anledningen till det är de säkerhetsproblem som uppstår då kommunikationen ska sättas upp till en annan server från en JApplet. Provspela gärna nedan på denna JApplet.
Othello som en fristående applikation (JFrame)
Mitt Othellospel består av två delar, där en Webserver startas på valfri dator, och där en klientdel bestående av ett Gui kan startas på en annan dator. Fördelen med att ha servern på en separat dator är att den är slukar processorkapacitet då den används.
Othello som en fristående applikation (JFrame), kan köras enligt följande:
-
Hämta filen: othello.jar
-
Kör igång min OthelloServer som XML-RPC-Server med:
-
Unix: java -classpath othello.jar:. othello.com.xmlrpc.server.OthelloServer <host> <port>
-
Win32: java -classpath othello.jar;. othello.com.xmlrpc.server.OthelloServer <host> <port>
-
Kör igång mitt Othello som XML-RPC-klient med:
-
Unix: java -classpath othello.jar:. othello.gui.OthelloJFrame <host> <port>
-
Win32: java -classpath othello.jar;. othello.gui.OthelloJFrame <host> <port>
Javakoden för Uppgift14
|