moglars: Game - STARSHIPDUEL - Bitte testen

Hallo

Um der Sprache Javascript näher zu kommen, habe ich mich mit einem etwas grösseren (jedenfalls für mich) Projekt versucht. Es handelt sich um ein kleines 2-Player-Game. Da ich mir die Sprache vollständig selbst beigebracht habe, könnte es sein, dass ich mir "ungeeignete Angewohnheiten angeeignet" habe. Ich wäre über jedes noch so kleine Kommentar in dieser Hinsicht froh. Ansonsten dürft ihr das Spiel frei testen und von mir aus ändern. Wie findet ihr das Spiel (die Idee, die Ausführung)? Was könnte man verbessern? Ist die Organisation des Codes sinnvoll? Könnte man etwas ändern? Vielleicht habt ihr sogar Antworten auf Fragen, die ich nicht gestellt habe. Das Spiel funktioniert sowohl mit FF wie IE. IE scheint aber performancemässig etwas mehr Probleme zu haben. Vor allem, wenn man zoomt. Dann nämlich verlangsamt sich das Spiel extrem. Auch nachdem die Ansicht wieder auf 100% gestellt wurde. Vielleicht habe nur ich das Problem. Ich wollte eine Save-Load-Funktion implementieren, was ich jedoch aufgab.

Gruss: moglars

Hier der Download: File-Upload.net (333kb)

  1. Hier der Download: File-Upload.net (333kb)

    Gibts das auch mit einem nicht-proprietären Format lieve irgendwo online anzusehen?

    1. Gibts das auch mit einem nicht-proprietären Format lieve irgendwo online anzusehen?

      Ich werde mich gleich darum bemühen.

      1. Gibts das auch mit einem nicht-proprietären Format lieve irgendwo online anzusehen?

        Fertig. Leider werden die Explosionen nicht schnell genug geladen, ich denke ich müsste sie vorladen, um dieses Problem zu beheben. Aber für den ersten Einblick dürfte es reichen.

        Hier der Link: http://moglars.bplaced.net/STARSHIPDUEL/main12.html

        1. Fertig. Leider werden die Explosionen nicht schnell genug geladen, ich denke ich müsste sie vorladen, um dieses Problem zu beheben. Aber für den ersten Einblick dürfte es reichen.

          Hier der Link: http://moglars.bplaced.net/STARSHIPDUEL/main12.html

          Sieht ganz nett aus - allerdings wird nach der 1 Runde in Opera 10.60 das 2. Schiff nicht mehr angezeigt, wenn es bereits zerstört wurde.

          1. Sieht ganz nett aus - allerdings wird nach der 1 Runde in Opera 10.60 das 2. Schiff nicht mehr angezeigt, wenn es bereits zerstört wurde.

            Ich werde jetzt alle Bilder vorladen, damit sie während dem Spiel nicht nachgeladen werden müssen. Dann sollte das zweite Schiff wie das erste wieder erscheinen.

            1. Ich werde jetzt alle Bilder vorladen, damit sie während dem Spiel nicht nachgeladen werden müssen. Dann sollte das zweite Schiff wie das erste wieder erscheinen.

              Wenn man allerdings nach einer Runde auf "continue" klickt, gibts kein zweites Schiff, mit der Sekundärwaffe lässt sich das nicht vorhandene Schiff aber dennoch zerstören :D

              1. Wenn man allerdings nach einer Runde auf "continue" klickt, gibts kein zweites Schiff, mit der Sekundärwaffe lässt sich das nicht vorhandene Schiff aber dennoch zerstören :D

                Ja, stimmt. Ich könnte ja das "continue" unsichtbar machen, bis man auf "restart" geklickt hat. Oder man siehts als ein "Easter Egg" an.

                1. Oder man siehts als ein "Easter Egg" an.

                  Den muss ich mir merken :p

                  1. Oder man siehts als ein "Easter Egg" an.

                    Den muss ich mir merken :p

                    Ein mögliches Easter Egg wäre noch:

                    #C0FFEE //Programmierer brauchen es.

  2. Welche Tasten gibt es??

    1. Welche Tasten gibt es??

      QWES und Arrow

      Ich würde es allerdings per default auf WASD und Arrow ändern.

      1. QWES und Arrow

        pfeiltasten gehen nur oben und unten bei mir wie feuert man da?

        1. pfeiltasten gehen nur oben und unten bei mir wie feuert man da?

          Gute Frage :) du kannst sie aber selbst einstellen, das hat der Autor bereits eingebaut.

          1. pfeiltasten gehen nur oben und unten bei mir wie feuert man da?

            Gute Frage :) du kannst sie aber selbst einstellen, das hat der Autor bereits eingebaut.

            Die Browser weisen bei mir Unterschiede bei der Nummberierung der Tasten auf. Am besten stellt man die Tasten über das Menü selbst ein. Die Bilder werden jetzt alle vorgeladen, in Opera sollte das Skript jetzt auch funktionieren (habs getestet). In Opera bereitet die Tastenabfrage Probleme. Es werden nur 2-3 Tasten aufs Mal erkannt. Wenn mehr als 2 aufs Mal gedrückt werden, gibts Probleme. Kann man das irgendwie für Opera lösen?

  3. Eine neuere Version steht hier zur Verfügung: http://www.file-upload.net/download-2707631/STARSHIPDUEL.7z.html(333kb)

  4. Hallo,

    Um der Sprache Javascript näher zu kommen, habe ich mich mit einem etwas grösseren (jedenfalls für mich) Projekt versucht. Es handelt sich um ein kleines 2-Player-Game.

    Respekt, das sieht doch ganz gut aus. :)

    Da ich mir die Sprache vollständig selbst beigebracht habe, könnte es sein, dass ich mir "ungeeignete Angewohnheiten angeeignet" habe. Ich wäre über jedes noch so kleine Kommentar in dieser Hinsicht froh.

    – Was mir zuerst auffällt ist, dass du grundsätzlich auf das abschließende Semikolon verzichtest. Es gehört eigentlich dazu, auch wenn der Compiler versucht, es nachträglich einzusetzen.

    – Es werden viele globale Variablen verwendet. Das wird v.a. dann zum Problem, wenn noch andere, fremde Scripts dazukommen sollten. Prinzipiell kann man das Ganze Spiel auch so einkapseln, dass keine einzige globale Variable nötig ist. Wenn du eine Variable im globalen Scope mit var deklarierst, wird sie trotzdem global (lokal in window = global).

    Das globale Objekt (window) hat ja ohnehin schon sehr viele Eigenschaften und Methoden, jede zusätzliche globale Variable vergrößert die Liste der zu durchsuchenden Namen im Scope. JavaScript ist perfomanter, wenn möglichst alle Variablen, auf die eine Funktion zugreift, im lokalen Scope liegen.

    Wenn immer auf etwas außerhalb des lokalen Scope wie z.B. foo.bar.baz mehrfach zugegriffen werden soll, ist es daher besser, den Wert bzw. eine Referenz lokal zu speichern, und dann mit der lokalen Variablen zu arbeiten, also nicht z.B. ein DOM-Element mehrfach raussuchen:

    $("infobox").innerHTML = this.enemy.playername + " WINS!"  
    $("infobox").style.visibility = "visible"  
    
    

    Sondern nur einmal:

    var infoBox = $("infobox");  
    infobox.innerHTML = this.enemy.playername + " WINS!";  
    infobox.style.visibility = "visible";  
    
    

    – Die Funktion document.getElementById durch eine namens $ zu ersetzen, ist nicht nötig. Es reicht, eine Referenz darauf in $ zu speichern:
    var $ = document.getElementById;

    Das war für mich so das Auffälligste, was man noch verbessern könnte.

    Gruß, Don P

    P.S.:

    Da ich mir die Sprache vollständig selbst beigebracht habe,

    Das kann ich von mir auch behaupten, d.h. wenn ich ehrlich bin, hab' ich sie hauptsächlich mit Hilfe des SELFHTML-Forums gelernt.
    Das darf auch mal gesagt werden, obwohl viele am Forum herummeckern. Allein durch hier Mitlesen und dann selber Herumprobieren lernt man sehr viel, wenn man will. :)

    1. Danke,

      Dein Beitrag war sehr hilfreich.

      Ich fasse das mal für mich noch mal zusammen:

      • Semikolon nicht vergessen
      • globale Variablen vermeiden
      • var $ = document.getElementById;

      Dem Spiel fehlt nur noch einen Endscreen als Ergänzung zum Startscreen und dem dazwischenliegenden Menü. Im Endscreen werd ich wohl eine Statistik anzeigen lassen, z.B: "Wie viele Schüsse habe ich abgeschossen? Wie gross ist meine Treffsicherheit?". Vielleicht kommt dann noch ein Rundensystem dazu: Wer erst 3 mal gewinnt hat gewonnen. Nach einer Runde könnte man weitere Waffen einkaufen. Geld könnte man während dem Spiel einsammeln (Objekte abschiessen). Dann könnte man das Starshipduel auch als Teil eines grösseren Spiels einsetzen (z.B. taktisches Raumschiff-Brettspiel). Die Möglichkeiten sind enorm, das liebe ich am Programmieren: Man darf kreativ sein.

      hab' ich sie hauptsächlich mit Hilfe des SELFHTML-Forums gelernt.

      Das Forum ist in der Tat sehr nützlich.

      1. Hallo,

        Dem Spiel fehlt nur noch [...]
        Im Endscreen werd ich wohl [...]
        Vielleicht kommt dann noch ein Rundensystem dazu [...]
        Geld könnte man während dem Spiel einsammeln [...]
        Dann könnte man das Starshipduel auch als Teil eines grösseren Spiels einsetzen [...]

        Ähem... schön und gut, aber sag' mal: Hast du nichts besseres zum Programmieren? Ich meine, das Spiel ist ja ganz ansprechend gestaltet mit den Grafiken und so, aber inhaltlich doch eher langweilig bzw. vom Spielkonzept her irgendwie angestaubt. Ein Kassenschlager wird es wohl nicht werden ;)

        Ist nicht böse gemeint, ich beneide dich einfach um deine viele Zeit, die du anscheinend übrig hast just for fun...
        Könnte selber mehr Zeit oder einen Helfer mit übriger Zeit brauchen um mein eigenes JS-Projekt – wohl eher ein Lebenswerk ;) wenn's im derzeitigen Tempo weitergeht – zu beschleunigen.

        Habe es vor Jahren angefangen aus dem gleichen Grund wie du, um JS richtig zu lernen, und das ganze Ding inzwischen dreimal komplett umgeschrieben. Aber noch ist kein Ende absehbar, vielleicht wird es nie fertig, denn ich habe noch mindestens genausoviel vor wie du mit deinem, und mit jedem Schritt vorwärts fällt mir wieder etwas neues ein, was man noch einbauen könnte...

        Die Möglichkeiten sind enorm, das liebe ich am Programmieren: Man darf kreativ sein.

        Allerdings. Das gefällt mir auch am Prorammieren :)

        Gruß, Don P

        1. Ja, Ok, vielleicht sollte ich mein Projekt eingrenzen. Die viele freie Zeit liegt an den Ferien.

          var $ = document.getElementById; funktioniert überigens nur mit IE. Wer weiss warum.

  5. hi,

    ganz cooles player vs player game.

    aber ich hab mal 2 fragen an dich:

    1. Wie lange hast du dafür gebraucht?
    2. Was ist Dollar, Klammer auf? schreibweise: $("...")

    lg bebe

      1. Was ist Dollar, Klammer auf? schreibweise: $("...")

      Ein hundsgewöhlichr Funktionsaufruf mit einem unglücklich gewählten Namen, da diesen auch viele JavaScript-Frameworks teilen.

      1. Wie lange hast du dafür gebraucht?

      Zu lange. Irgendwann hat auch meine Konzentration nachgelassen, dann wurde es mühsam.

      1. Was ist Dollar, Klammer auf? schreibweise: $("...")

      $ soll document.getElementById ersetzen:

      function $(id) {
        return document.getElementById(id);
      }

  6. Ich möchte hier nun die Beta-Version (ich sag dem jetzt einfach mal so) vorstellen:

    Bis jetzt ist alles integriert, was ich wollte, ausser die Save-Load-Funktion, die jedoch bei einem so kleinen Spiel keine grosse Rolle spielt.

    Zu beachten ist auch das Balancing, welches noch nicht abgeschlossen ist. Die Werte der Schiffe können in der shiptemplates.js - Datei geändert werden. Schiffe können auch hinzugefügt werden.

    Download: http://www.file-upload.net/download-2715300/STARSHIPDUEL-Beta.7z.html

    Link: http://moglars.bplaced.net/STARSHIPDUEL/main Beta.html

    Have Fun!