Code (Aufteilung von den Aufgaben eines Spiels) OK?

  • Antworten:8
Jonathan
  • Forum-Beiträge: 16

03.06.2014, 23:06:37 via Website

Hallo,

ich hab mir jetzt vorgenommen mit zwei Freunden ein Spiel für Android-Smartphones zu programmieren, wobei ich das Programmieren übernehme. Hab jetzt mal eine ganz einfache kleine App gemacht, die einen Kreis von oben nach unten wandern lässt. Dies habe ich mit einer SurfaceView, etc realisiert - so, wie es in dem Spiel später auch werden sollte. Daher meine Frage: Was sagt ihr zu dem Code(-stil). Mit Codestil meine ich nicht, wie ich den Code formatiere, sondern wie ich die einzelen Aufgaben eines Spiels aufteile, also Einteilung der Threads, usw .. ist der Anfang so schon mal gut und ich kann weiterarbeiten oder ist was nicht optimal?

Hier der Code: www.mediafire.com/?v4uz1dvu7h490s9

Danke schon mal :) :D

— geändert am 03.06.2014, 23:47:56

Antworten
Andy N.
  • Forum-Beiträge: 22.375

03.06.2014, 23:19:07 via Website

Hallo,

bitte sei so gut und gestalte deinen Threadtitel den Regeln entsprechend noch etwas aussagekräftiger, damit andere User besser erkennen können, worum es hier geht.
(Hierfür unter deinem ersten Post einfach auf "bearbeiten" klicken, dann kannst du oben nochmal den Titel anpassen)

Danke :)

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

Antworten
Jonathan
  • Forum-Beiträge: 16

03.06.2014, 23:48:26 via Website

Gemacht :D

Antworten
Georg C.
  • Forum-Beiträge: 235

04.06.2014, 02:22:25 via Website

Hallo,
was Du mit Deiner Frage ereichen / bezwecken möchtest - keine Ahnung?
Lob?
Aber zur Frage.

Sollte es Dein (Programmlayout / ... Entwurf) sein - Kompliment!
Hier mache ich weiter!
...
Leider, -> vermute ich, dass Du sich an einem Tutorial, ... Muster bedient hast, und ...
Meine Vermutung basiert an ein paar "Sachen" die eigentlich unkorrekt sind.
Einer, der so artiges Rumpf entwickelt, wird so was (mir bekannte Code- Stellen) NIE! selber implementieren!
Daher, Grundgerüst (ok.) Vermute selbst Implementierung tendiert zu Fehlern.

LG
Georg

— geändert am 04.06.2014, 02:23:16

Sorry für Gramatik & Stilistik Fehler.

Antworten
Jonathan
  • Forum-Beiträge: 16

04.06.2014, 15:04:46 via Website

Georg C.

was Du mit Deiner Frage ereichen / bezwecken möchtest - keine Ahnung?
Lob?

Sollte es Dein (Programmlayout / ... Entwurf) sein - Kompliment!
Hier mache ich weiter!
...
Leider, -> vermute ich, dass Du sich an einem Tutorial, ... Muster bedient hast, und ...
Einer, der so artiges Rumpf entwickelt, wird so was (mir bekannte Code- Stellen) NIE! selber implementieren!
Daher, Grundgerüst (ok.) Vermute selbst Implementierung tendiert zu Fehlern.

Also was ich bezweck möchte ist, dass ihr mir sagt, ob das so als Grundgerüst brauchbar ist und was man verbessern könnte. Bis jetzt hab ich alles ohne Tutorial gemacht (zum ersten Mal), habe nur developer.android.com benutzt. Davor habe ich das selbe schon öfters mit einem Tutorial gemacht. Anscheinend ist davon was hängen geblieben und ich habe das, was hängen geblieben ist, wiederverwendet.

Aber was genau tendiert zu Fehlern? Und wie mache ich es besser/richtig? Im Internet findet man nur haufen Tutorials, die so ähnlich wie mein Code sind ..

EDIT: Klar, da wo ich z.B. "800-10" oder so und nen Kommentar mit "screenHeight-radius" oder so was ähnlich geschrieben hab, gehört natürlich die Bildschirmhöhe und der Kreisradius entsprechend ausgelesen. Außerdem müsste ich die FPS erhöhen.

— geändert am 04.06.2014, 20:19:07

Antworten
Georg C.
  • Forum-Beiträge: 235

04.06.2014, 21:54:35 via Website

Hi,
ich habe Dein Projekt NICHT! gestartet, nur den Code mir flüchtig angeschaut.

... Anscheinend ist davon was hängen geblieben und ich habe das, was
hängen geblieben ist, wiederverwendet. ...

An der Stelle Hut ab! (So lernt man ...) Kompliment.

Was mir (negatives) aufgefallen ist, sind:
1) Lasse es mit Interfaces "arbeiten"
2) Du hast (außer Falsche Thread Hierarchie) dein Grundgerüst zum gefährlichen Workaround gemacht
3) Nicht korrekte Namenvergebung

1- Das Schöne in Java sind die Interfaces, damit kann man sich ein STABILES, gut zum WARTEN, und vor allem für die Zukunft VIELSEITIGES Grundgerüst sich "basteln".

2- Die Hierarchie möchte nicht weiter vertiefen: (GameThread extends SimpleThread)
- GameThread soll (wenn überhaupt) die Höchste Priorität haben
Also besser so:
SimpleThread extends GameThread, XYZ Thread extends GameThread
Aber Du machst sich dein Grundgerüst mit den Threads "Abstürzt sicher"
(Ich habe mir den ?lazydragon "unter die Lupe" damals genommen, obwohl der Autor [wenn ich mich gut erinnre] NUR einen Thread hatte, was jedoch Hauptrelevante Objekte gesteuert hat und nicht nur als "Hauptloop-Gamenschleife" diente, war das schlecht im Code zum Laufzeit! kontrollieren ... Fazit - App stürzt ab, und sogar der [Autor] kann es nicht herausfinden ....)

Und dar sind wir bei extends Thread Thema.
Wenn Du eine Klasse vom XXX erben lässt, bist Du schon etwas (im Bezug auf Grundgerüst!) verloren. Bei eventuellem Bedarf (also bei Änderungen), musst du bei eventuellen Änderungen eine Interacen Lösung finden, im schlimmsten Fall, wird dich dass ne Fullrestrukturierung kosten .... .

Abstrakte Threads, haben seine Verwendung als sog. Demon- Klassen in der Große Java, ob es auf dem "kleinem" Android sinnvoll ist?

Selbstkonversation:
Und sonnst hast du nix zu meckern?
Doch.

GameState =/= PosX ...
Status eines Spieles hat nichts mit der Positionen zu tun.
Es könnte:
- isPlaying
- isPaused
- isRunning
... sein.

Wenn Du aber der Meinung bist, es wird schon, da passe ich schon auf .... versuche sich mit dem Thema auseinander zu setzten:
thread-vs-runnable
Auf die schnelle (geguckt) wird wichtiges erläutert:
Link

LG
Georg

Ps.
Ich möchte hier betonen, dass ich kein "King of Java" bin! Sollte ich im unrecht liegen - sorry!

— geändert am 04.06.2014, 21:55:22

Sorry für Gramatik & Stilistik Fehler.

Antworten
Jonathan
  • Forum-Beiträge: 16

04.06.2014, 22:12:56 via Website

Hab deine Antwort mal schnell durchgelesen und und mir "thread-vs-runnable" angeguckt.

Werde deinen Post jetzt nochmal Schritt für Schritt durchgehen und meinen Code verbessern.

im schlimmsten Fall, wird dich dass ne Fullrestrukturierung kosten ....

Falls ich ganz neu anfangen müsste wäre es jetzt noch nicht schlimm, bis jetzt ist das ja (fast) nix. ;)

Was mir grade sofort auffällt: Du meinst, dass ich GameState nicht richtig benutze. Deine Vorschläge (isRunning, usw) klingen sinnvoll, aber wie speichere ich solche Daten sonst am besten? Ich hab da eine Idee: Ich mache eine Klasse, die ein Objekt auf dem Bildschrim darstellt. In dem Objekt sind alle Daten wie Position usw gespeichert. In dem DrawThread ist eine Liste dieser Objekte (oder nur eins, das alle Kind-Objekte beinhaltet), das dann in der draw-Funktion gezeichnet wird. Ist das so sinnvoll oder macht man das anders?

Wenn Du aber der Meinung bist, es wird schon

Hmm, so denk ich nicht, deshalb frag ich ja hier, damit ichs richtig mache und aus meinen Fehlern lernen kann :)

Antworten
Georg C.
  • Forum-Beiträge: 235

05.06.2014, 01:00:07 via Website

Hi,

... Was mir grade sofort auffällt: Du meinst, dass ich GameState nicht
richtig benutze. Deine Vorschläge (isRunning, usw.) klingen sinnvoll,
...

Nicht richtig benutzen ist falsch ausgedrückt. Damit verstößt Du einfach gegen die Namenskonventionen ... - Fertig!

Nachtrag:
Aber nicht nur;
Nach gewiesener Zeit .... (wobei Du dein Grundgerüst wieder verwenden ?würdest) wirst Du sicherlich SELBER! Rätseln müssen was:
c.drawCircle(state.ballPosX, state.ballPosY, 10, paintRed);
bedeutet.
Wäre:
c.drawCircle(ball.get(X), ball.get(Y), 10, paintRed);
nicht mehr aussagenkräftiger?
...
Ohne es Analysieren / Verfolgen! zu müssen, sind deutlich Koordinaten ... zu erkennen!
Nachtrag ende

... aber wie speichere ich solche Daten sonst am besten? ...

GARNICHT!

... und aus meinen Fehlern lernen kann ...

Es ist mir nicht Bewusst, dass Du Fehler gemacht hast! ...

Damit Deine Frage nicht einen "1000 Antworten" Thread generiert, werde ich eine kurze "?Vermerkung" Schreiben, und mich freundliche weise (aus dem Thread) verabschieden.

Damit man "den Rad nicht erneut erfinden muss" gibt es sehr viele sog. game engine!
Also Grundgerüste -> Motoren, .... -> Vorlagen ... wie es man nennen mag.

Google (z.B.) nach:
-> simple game engine for android <-

Bediene sich an einer "Gute" Vorlage (die also Stabil, Flexibel ... läuft / ist) oder investiere die Zeit dafür, - aus einem "Guten" Tut, die Vorlage herauskristallisieren!
Wenn Du einmal "so was" hast, dann bist Du in der Lage sehr viele Deine Ideen im "Augenblick" umzusetzen -> zu realisieren.
Weil:
wenn Dein Grundgerüst gut wird, werden Typische - Game - Aufgaben "pinatz":

Held held = new Held();
Gegner gegner = new Gegner();
Game.add(held);
Game.add(gegner);
...
CollisionDeteckt.check (held, gegner);
...

Nun, -> für so eine "Transparenz", -> sind viele schritte notwendig.

Damit ich mich "ohne schlechtes Gewissen" aus diesem Thread verabschieden darf, poste ich hier Link zum Buch (online Version) aus dem (aber nicht nur aus dem!) ich meine "Klugsch.... wissen" erworben habe.

VIEL ERFOLG! & over

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Jonathan
  • Forum-Beiträge: 16

06.06.2014, 00:39:02 via Website

Okey danke für die Anwtorten und deine Hilfe! :) Hat mich auf neue Ideen gebracht, die gar nicht mal so schlecht ausssehen :D

Antworten