Du bist nicht angemeldet.

1

Montag, 27. Februar 2012, 18:29

Grafische Spieleelemente

Hallo zusammen,
ich habe mir mal vorgenommen, mich diese Tage mit grafischen Spielen auseinnanderzusetzen.
Mein Augenmerk fällt dabei auf den Spieleklassiker überhaupt, nämlich Billard.

Selbstverständlich habe ich mir meine Gedanken gemacht und versuche zu überlegen, wie Knuddels es schafft, "ein Billard-Fenster" zu öffnen.

Also habe ich mal versucht die Pakete zu loggen und stelle fest, dass das "? und =" Token unteranderem eine wichtige Rolle spielen.
Nun wird es vermutlich so sein, dass noch ein neues "Applet" geladen werden muss, nämlich billard90ajw.jar, bd.jar, und da fängt vermutlich mein Problem an, wieso sich es bei mir einfach nicht öffnet (also das Billard-Fenster)

Nach Google-Ergebnissen kam ich auf die "ClassLoader"-Methode, mit der ich diese Class-Dateien laden kann.

(AUSZUG!!!)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   URL jarURL = new File("PFAD zum .JAR").toURL();

        //Entweder so
        //ClassLoader classLoader =    new URLClassLoader(new URL[]{jarURL});

        //Oder so
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        if(classLoader != null && (classLoader instanceof URLClassLoader)){
            URLClassLoader urlClassLoader = (URLClassLoader)classLoader;
            Method addURL = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
            addURL.setAccessible(true);
            addURL.invoke(urlClassLoader, new Object[]{jarURL});
        }
        Class testRunnerClass = classLoader.loadClass("BillardManager");
        testRunnerClass.getMethod("main");


... vermutlich ist der Code völlig quatsch, denn ich kriege pausenlos Fehlermeldungen (z.B. java.lang.NoSuchMethodException: BillardManager.main)

Zu meiner Verteidigung muss ich auch sagen, dass mir dieses Fach an sich auch vorerst noch fremd ist, was grafische Sachen angeht.

Vill habt Ihr ja den ein oder anderen Tipp für mich, über jeden Ratschlag wäre ich dankbar - letztendlich wäre er ja für uns alle eine gute Sache.

Grüße
Plaxo

P.S.: Es geht mir dabei nicht um den 8-Ball Channel an sich, dass ist ja easy. Sondern wirklich um die 'Spielumgebung' mit dem Pool.

2

Dienstag, 28. Februar 2012, 12:06

Hast schon richtig gegoogelt.
Natürlich kann man Externe JAR's oder Klassen mit einem Classloader nachladen.

Dies benötigst du aber nicht. Normalerweise sollte die Billard-JAR in der Manifest bereits angegeben sein.

Ich weiß es leider nicht mehr genau, aber es werden vom Table immer nach jedem Zug die Daten verteilt - Leider kann ichs gerade nicht richtig und komplett wiedergeben..
Pro Zug werden die Ganzen Kugelpositionen dem Server mitgeteilt. Müsstet ihr mal mitloggen, dann seht ihr dies.

Ich glaub du musst da auch nicht viel machen. Einfach die Billard-Jar angeben (Meinetwegen über Manifest) und dann vom Server aus dem Clienten Sagen "Öffne mal..". Ich schau gleich mal ^^

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Blizzard« (19. Februar 2013, 12:26)


3

Donnerstag, 1. März 2012, 16:40

So hab ein bissl herausgefunden..
Beim channeleintritt musst du einen Zusatz-Style an dem Client versenden. Dieser stellt dann rechts die offenen Spiele dar:

Java-Quelltext

1
c.send("8\0" + channel.getName() + "\0l\0/billard j:\0L\0/billard j:\0r\0/billard i:\0R\0/billard i:\0m\0/billard j:");


Ich Liste mal alles etwas auf, wobei ich aber nicht alles beschreiben/definieren kann:



IN [15:59] a\0CHANNEL\0NICKNAME\00\01600\0894\0291\019\0pics/8-ball_bg7.jpg\06\0-\0-\00,0,0\0208,203,200\0[215,0,80]\0[0,0,240]\015\010\011\0208,203,200\0T\0Singles
15-17\0T\03000\0T\0T\0F\0F,T:0\0_G\0-1165575984



// Setzen der Spieleliste im Channel

IN [15:59] 8\0CHANNELNAME\0l\0/billard j:\0L\0/billard j:\0r\0/billard i:\0R\0/billard i:\0m\0/billard j:



// Kein Plan

IN [15:59] 0\0u\08-Ball 3\0+Spiel
eröffnen\0p\0-\0-\0michi2994\n4/Standard\0p\00,0,0\0pics/padlock2.gif\0pics/male.png\016\0-\0x
Götze + <3\n2/Standard\0p\00,0,0\0pics/male.png\016\0-\0



// Command: Bei welchem Nick beitreten? (Command /billard j:Nick)

OUT [15:59] e\0CHANNEL\0/billard j:NICKNAME



// Dies hier ist das Billard-Popup mit den Infos des Spiels, sowie den Buttons "Spiel Beitreten",..

IN [15:59] k\0Spiel von Nickname
(billard)õssudõ2a69õf\0\0\0hÿÿÿãp~õbÿÿÿBNp~õbÿÿÿU-õU\0
\0\nBãSp~õbëëÿU-õU\0 \0\nBãCp~õBSp~õbëëÿFp~õGACBBp~õbëëÿBCbSpiel
BeitretenõcesdbgOhÿÿÿãEp~õbëëÿU-õU\0 \0\0BãWp~õbëëÿU-õU\0
\0\0Bããp~õbëëÿBCbFenster SchließenõcesdbgOhÿÿÿãEp~õbëëÿU-õU\0
\0\0BãWp~õbëëÿU-õU\0 \0\0BããããCp~õBNpBNpBWpUpics/layout/boxS_tl.pngõU\0
\0 BãCpUpics/layout/boxS_tc.pngõU\0 \0 BãEpUpics/layout/boxS_tr.pngõU\0
\0 BããWpUpics/layout/boxS_cl.pngõU\0 \0 BãEpUpics/layout/boxS_cr.pngõU\0
\0 BãSpBWpUpics/layout/boxS_bl.pngõU\0 \0
BãCpUpics/layout/boxS_bc.pngõU\0 \0 BãEpUpics/layout/boxS_br.pngõU\0 \0
BããCp~õGABBBp~õBCcõf\0\0\0hÞÞÿãWlSpiel von x Götze + <3
(billard)õbgUf\0\0\0hÞÞÿããããCp~õBCp~õBNp~õU-õU\0 \0 BãSp~õbëëÿU-õU\0 \0
BãCp~õBCc#_Besitzer_:°@°_°BB°°>_hx Götze + \<3|/serverpp "|/w
"<°_°r° (11, °>male.png<°)°

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
} else if(cmd.equals("billard")) {
    		//#### START
    		if(arg.equals("start")) {
    			// Dies wird später alles beim betreten des Channels versendet (jetzt nur für DEV zwecke)
    			client.send("8\0" + channel.getName() + "\0l\0/billard j:\0L\0/billard j:\0r\0/billard i:\0R\0/billard i:\0m\0/billard j:");
    			client.send("0\0u\0" + channel.getName() + "\0+Spiel eröffnen\0p\0-\0-\0Testnick 1\n4/Standard\0p\00,0,0\0pics/padlock2.gif\0pics/male.png\016\0-\0Testnick 2\n2/Standard\0p\00,0,0\0pics/male.png\016\0-\0");
    		
    		// Open..
    		} else if(arg.startsWith("j:")) {
    			
    			client.send("a\0/Billard 3529\0" + client.getName() + "\00\01600\0894\0801\0365\0pics/billdot92663B.gif\09\0-\0!\00,0,0\0255,231,165\0[131,0,34]\0[0,0,255]\010\03\014\0255,231,165\0T\0Singles 15-17\0T\03000\0T\0T\0F\0F,T:0\0_G\0-1165575984");
    			client.send("?\00\0BillardManager\0/Billard 3529");
    			
    		// Billardinfo
    		} else if(arg.startsWith("i:")) {
    			StringBuilder whois = new StringBuilder();
            	whois.append("Test1");
            	Popup popup = new Popup("Spiel von $NICKNAME (billard)", "Spiel von $NICKNAME (billard)", whois.toString(), 460, 350);
            	Panel panel = new Panel();
            	panel.addComponent(new Button("Fenster Schließen"));

            	
            	Button buttonMessage = new Button("Spiel Beitreten");
            	buttonMessage.setCommand("/billard j:NICKNAME");
            	buttonMessage.disableClose();
            	panel.addComponent(buttonMessage);

            	popup.addPanel(panel);
            	popup.setOpcode("k", client.getName());
            	client.send(popup.toString());
    		}
    	} else {

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Blizzard« (19. Februar 2013, 12:24)


Es haben sich bereits 4 registrierte Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Ice.Net, Steelix2011, wishdream, KevStar

Localhost

Ehemaliger Supporter

Beiträge: 345

Wohnort: 127.0.0.1

  • Private Nachricht senden

4

Montag, 5. März 2012, 15:55

Hi,

für das Setzen der Spieleliste ist das 0-Token da. Das 8-Token ist dazu da, um die Befehle zu setzen. ;)
Außerdem gibt es noch ein 9-Token zum Entfernen der Spieleliste.

Zitat

9\0CHANNEL
No support via message.

"Der gute Programmierer ist nicht der, der keine Fehler macht, sondern der, der seine Fehler rasch findet und behebt."

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Ahmeet