Ideen für Informatik-Präsentation

  • Die Labels ändern sich ja nicht, kannste die nicht auch aufs JFrame auslagern?
    Falls ja könntest du, weil nur noch Buttons im Panel sind, mit Panel.getcomponents() die Ganzen Buttons auf einmal holen und leicht durchiterieren.

    Code
    for(JButton button : JPanel.getComponents()){     //Dostuff}

    oder einfach checken obs n Button oder ein Label ist und nur bei Buttons ausführen

    Code
    for(Component C : JPanel.getComponents()){
       if(C.getClass() == JButton){ 
           //Dostuff
       }
    }

    Könnt auch sein dass es C.getComponent() ist :grinning_face_with_smiling_eyes: Aber das Prinzip sollte verständlich sein.

    Meine Arbeit als Eventleiter? Ich sag dazu nur eines :grinning_squinting_face:

    ICH WUSSTE ICH BIN NICHT VERRÜCKT!!!

    Und noch n Offtopic :grinning_squinting_face:

    Naja bei so ein heissen Kerl wie cheef würde ich auch mit ihm sexen wollen XD

  • @Cheefkoch könnt ich schon. inzwischen hab ich aber ehrlich gesagt keine lust mehr das alles zu ändern :grinning_face_with_smiling_eyes:
    funktioniert ja auch so :smiling_face:
    trotzdem danke für die tipps :thumbs_up:



    PS: gameBackground.getComponent(i) liefert die komponente mit der betreffenden nummer zurück, angefangen bei nummer 0. getComponents() liefert einen array der komponenten zurück; könnt ich hier natürlich auch verwenden und dann einen neuen array erstellen, der nur die buttons enthält, aber dazu müsste ich ebenfalls einiges umprogrammieren, was ich wie gesagt vermeiden will.
    mein hauptproblem ist derzeit eigentlich der server, damit man über LAN spielen kann (Problem im sinne von "fehlt noch" - sollte eig. nicht mehr allzu schwer sein, ich muss nur noch rausfinden wie ich zwei clients gleichzeitig anspreche (per thread, aber da ich die koordinaten als .txt speichern will, muss ich da noch was umändern damit ich zwei verschiedene dateien mit koords hab.))
    PPS: mit C.getClass() lässt sich sicher arbeiten, das werde ich dann verwenden wenn ich nochmal sowas brauch :smiling_face:



    //edit: hat jemand zufällig eine idee, wie der server den spielern mitteilen könnte, dass sie am zug sind? vielleicht per abfrage einer variablen (z.B. boolean player1 = true/false) beim server?

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

    Einmal editiert, zuletzt von Misteradi1 ()

  • kennt sich jemand mit java I/O und java sockets aus? ich hätte da mal ein paar fragen, die ich gerne im TS besprechen würde.
    danke im voraus :smiling_face:

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

  • nachdem ich jetzt endlich fertig bin, hier der download link falls irgendjemand interessiert sein sollte:
    http://www.file-upload.net/dow…08-01-2016_20-20.jar.html
    achtung: spieler 1 und 2 müssen als verschiedene .jar dateien gestartet werden, sonst funktioniert es nicht (da man normal auch nicht auf demselben PC spielt stellt sich das problem auch garnicht).

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

    2 Mal editiert, zuletzt von Misteradi1 () aus folgendem Grund: überarbeitete version mit bugfixes

  • :grinning_face_with_smiling_eyes: Sieht gut aus, auch wenn die game.class ein wenig suboptimal ist.


    Zudem würd ich prüfen ob der Code einigermassen "aufgeräumt" ist keine Schnipsel wie zB. Spielfeld übrig bleiben.

    Meine Arbeit als Eventleiter? Ich sag dazu nur eines :grinning_squinting_face:

    ICH WUSSTE ICH BIN NICHT VERRÜCKT!!!

    Und noch n Offtopic :grinning_squinting_face:

    Naja bei so ein heissen Kerl wie cheef würde ich auch mit ihm sexen wollen XD

  • ja, die spielfeld.class mach ich noch raus, die hab ich ja letztendlich garnicht benutzt.
    suboptimal in welchem sinn? bzw. was würdest du verbessern? (klar, an einigen stellen hab ich ziemlich uneleganten code verwendet - behalt dabei aber im hinterkopf dass ich, als ich angefangen hab mit dem programm, nicht viel mehr wusste als schleifen, arrays und so grundlegenden kram.)




    PS: in der version die ich derzeit oben verlink hab kann man 5x dasselbe feld angreifen, um zu gewinnen. das hab ich in einer neuen version behoben, in der ich nur noch ein paar zusätzliche fehlermeldungen zur besseren differenzierung einbaue bevor ich sie hochlade.
    PPS: wie aufwändig wäre es, wenn ich die "System.out.println" befehle, die ich an einigen stellen verwende, in einem konsolenfenster ausgeben wollte? also ein fenster so ähnlich wie die kommandozeile?



    //edit: bezüglich dem teilweise ziemlich ungünstigen code: ich bin erstmal froh, dass ich damit fertig bin - am montag muss ich das programm fertig haben :grinning_squinting_face:

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

  • ich hab zwar die präsentation jetzt rum, aber zum spaß noch weiter damit rumprogrammiert. jetzt hab ich ein problem: im hauptmenü kann man ein frame öffnen, in dem man die anzahl der startschiffe einstellen kann (per JSlider). Das hat soweit auch funktioniert, aber mMn zuviel Platz verbraucht, deswegen wollte ich jetzt - als ich auch 3er, 4er und 5er Schiffe einbauen wollte - das ganze durch ne for-Schleife laufen lassen und dabei überprüfen, ob die Komponente die entsprechende Klasse besitzt (JTextArea oder JSlider). Leider funktioniert das ganze nicht so, wie es sollte; hier mal der Code:


    in der konsole wird ausgegeben:
    0_class javax.swing.JSlider
    1_class javax.swing.JSlider
    2_class javax.swing.JTextArea
    3_class javax.swing.JTextArea
    wenn ich das ganze jetzt starte, habe ich aber das falsche layout:

    eigentlich sollte oben die beiden JSlider sein, und mittig darunter jeweils das zugehörige JTextField.
    Hat irgendjemand eine Idee, warum das nicht so funktioniert, wie es sollte?
    Danke im Voraus :thumbs_up:


    //edit: shipChooser ist ein einfaches JFrame, mit dem außer der Deklaration bislang nichts getan wurde

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

    Einmal editiert, zuletzt von Misteradi1 ()

  • Hab keine Ahnung von swing und so, aaaaber... Statt dem "Class type = ..." Gedöhns dürfte auch instanceof funktionieren, oder hab ich gerade nen Denkfehler? Also als if-Abfrage "if(panel.getComponent(i) instanceof JSlider) { ... }", vorausgesetzt du hast JSlider importiert, was ich aber definitiv machen würde.


    //e: Kommentare im Code wären super, damit man auch weiß, was du da anstellen willst. Ist immer recht schwierig sich in fremdem Code zurechtzufinden. Auch mit Beschreibung deiner Variablen und so

  • Hab keine Ahnung von swing und so, aaaaber... Statt dem "Class type = ..." Gedöhns dürfte auch instanceof funktionieren, oder hab ich gerade nen Denkfehler? Also als if-Abfrage "if(panel.getComponent(i) instanceof JSlider) { ... }", vorausgesetzt du hast JSlider importiert, was ich aber definitiv machen würde.


    //e: Kommentare im Code wären super, damit man auch weiß, was du da anstellen willst. Ist immer recht schwierig sich in fremdem Code zurechtzufinden. Auch mit Beschreibung deiner Variablen und so

    ja, es geht auch mit "instanceof"; da ich das bisher noch nicht benutzt hatte (bin ja noch ziemlicher java anfänger), nur mal irgendwo gesehen, bin ich da garnicht drauf gekommen. das ist aber nicht das eigentliche problem, an dem, was in der konsole angezeigt wurde, konnte ich ja erkennen, dass jede der 4 Komponenten an die Reihe kam - nur irgendwie sche***t java auf meine gesetzen Bounds ...



    //edit: erstmal sorry, sollte sich jetzt jemand unnötig gedanken gemacht haben, aber ich habe inzwischen selbst eine Lösung gefunden: Ich hab einfach die einzelnen Komponenten zu einem "JComponent[]" Array hinzugefügt und dann den durchiteriert. Dadurch konnte ich das Panel weglassen (fällt mir grad auf - das hätte ich sowieso gekonnt ... ka warum ich das eingebaut hab), außerdem ändert jetzt z.B. setBounds nichts mehr an der Komponentenreihenfolge (bzw. theoretisch schon, aber das kann mir egal sein). Wenn ich das richtig verstanden hab, könnte ich das zwar über validate lösen, aber so geht es a) auch und b) einfacher.

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

    Einmal editiert, zuletzt von Misteradi1 ()

  • @Ginkor danke, aber lieber nicht xD
    damit hab ich schon beim spielfeldlayout rumprobiert (und letztlich dann ein GridLayout verwendet), und das hat mir gereicht xD
    ich mach das lieber von hand :grinning_face_with_smiling_eyes: (zumindest jetzt noch, vielleicht ändert sich das auch irgendwann)
    in dem fall würde es vermutlich sogar sinn machen / wäre einfacher, aber jetzt hab ich das ganze schon soweit fertig :smiling_face:
    ich häng nur grad am look & feel fest ... nichts tut, was es tun soll -.-

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

  • @Cheefkoch leider, so fürchte ich, werde ich nicht drum herum kommen, in naher zukunft wieder damit zu arbeiten - spätestens dann, wenn ich die größe des spielfelds variable machen will. DAS wiederum ist ohnehin eine Menge Arbeit, weil ich dann soviele ".setBounds(x,y,b,h)" im code anpassen muss, dass es mir jetzt schon graust. und dann darf ich das ganze auch noch über den server an spieler 2 weiterleiten, damit der auch die richtige spielfeldgröße hat ... wird bestimmt sehr lustig.
    naja, ich hab mir eh mal ne liste gemacht was ich noch alles ergänzen will :grinning_face_with_smiling_eyes:

    • chat
    • evtl. andere grafiken/texturen
    • KI-Spiel
    • Server umprogrammieren mit Selektoren, sodass nicht mehr 2 Threads pro Spieler laufen (bzw. wären es 3, wenn ich noch nen Chat hinzufüg)
    • veränderbare spielfeldgröße, wie gesagt
    • "hotseat"-modus: alle spieler spielen am selben PC & wechseln sich ab
    • zweites Fenster, in dem angezeigt wird, welche Felder der Gegner bisher angegriffen hat

    schon erledigt ist folgendes (im vergleich zur version, die irgendwo oben zum download steht):

    • Anzeige "Bereit" (damit man weiß, wann man an der Reihe ist)
    • Feldfarbe anpassen, also welche Farbe haben unberührte / leere / getroffene Felder
    • veränderbare Anfangsschiffzahl
    • Bei der Meldung gewonnen/verloren wird das Ergebnis angezeigt
    • anpassbarer "look and feel" (wobei das spielfeld im windows LAF total bekloppt aussieht - ein anwählen der felder ändert nicht die farbe des felds, sondern nur irgendwie die umrandung; vielleicht stell ich das spielfeld daher noch von Buttons auf ne eigene Klasse um, die eine Subklasse von JPanel ist & schon das ganze MouseEvent zeug mit drin hat. hat aber eher niedrige priorität, da lohnt sich der aufwand nicht, man kann ja einfach mit dem standard java LAF spielen ^^)

    in arbeit:

    • anleitungen an diversen stellen (wird wohl immer in arbeit sein, weil sich immer mal was ändert ^^)
    • mehr Schiffsgrößen (1x3, 1x4, 1x5)




    //edit: ich hab das spiel jetzt nochmal als aktuelle version hochgeladen; Downloadlink
    ansonsten hab ich mir überlegt, das ganze auf android noch zu machen & mal mit android studio rumprobiert. es scheint aber, dass das nicht so einfach ist, wie ich mir erhofft hatte, oder täusch ich mich da (hab nicht viel rumprobiert)? kennt sich da jemand mit aus?

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

    Einmal editiert, zuletzt von Misteradi1 ()

  • Falls du es für Android umsetzen willst, musst du komplett alles vergessen was du über Java's GUI gelernt hast und von vorne beginnen.


    Android nutzt XML-basierte GUIs. Es ist eine komplett andere Welt als die von Java-Desktop-Anwendungen, zB kannst du unter Android keine swing Packages für die GUI nutzen, weil diese nicht mitgeliefert werden und auch nicht unterstützt werden. Das selbe gilt für javax.* und sun.* Packages.


    Android hat eine sogenannte "TableLayout", die würde dir sicher für das Schlachtfeld nützen..

  • ich hab mir jetzt mal ein paar tutorials zu android studio angeschaut, ob ich dann wirklich das spiel auf android programmier überleg ich mir noch. die hauptprogrammierarbeit ist ja aber ohnehin nicht die GUI, sondern der rest :grinning_face_with_smiling_eyes:
    (was genau ist alles beim javax und sun package dabei? wenn da java NIO dazugehört, hab ich erstmal ein problem xD [bin grad am handy & kann nicht nachschauen])

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein

  • //update: neue version


    features:

    • einzelne schiffe per rechtsklick auf den ursprung eines schiffes löschen
    • die gewonnen/verloren benachrichtigung am ende zeigt das ergebnis an
    • keyboard shortcuts beim schiffe setzen (1-5 für schiffsgröße, "r" für reset, shift+click für ausrichtung nach unten)
    • eigene IP adresse im hauptmenü anzeigen lassen
    • möglichkeit, einen anderen look&feel für das spielfeld auszuwählen (mit windows look and feel sieht das arg blöd aus, weil dann nicht der ganze button, sondern nur die umrandung gefärbt wird)
    • look&feel menü ändert auch nachträglich das design von bereits geöffneten fenstern
    • einstellungen importieren/exportieren
    • anleitung (ist bei der version jetzt nicht dabei, weil die anleitung aus einer textdatei ausgelesen wird, die ich jetzt nicht mit hochgeladen hab - dazu hätte ich das ganze als zip hochladen müssen, das hab ich aber vergessen)

    in arbeit:

    • KI (künstliche Intelligenz bzw. computergegner)
    • schiffe per rechtsklick auf irgendeinen teil des schiffes entfernen
    • serverkonsole
    • zweites fenster, in dem angezeigt wird, welche felder der gegner bereits angegriffen hat
    • einstellungen automatisch importieren


    zur android version:
    soweit alles fertig (wenn auch sehr viel weniger reduzierter als die PC-version, man kann z.B. nicht auswählen wie viele schiffe man will, und den ganzen "customization"-luxus hab ich auch erstmal weggelassen), nur ein größeres problem hab ich noch:
    in der PC-version zeigt ein kleines panel in der ecke an, welcher spieler gerade an der reihe ist, in android wollte ich das über eine checkbox machen. problem dabei ist, dass diese checkbox laufend aktualisiert werden müsste, was auf dem UI-thread aber nicht geht, da sonst der input blockiert wird. Leider kann man die checkbox aber nicht von außerhalb des UI-threads verändern ...
    irgendwelche ideen, wie man das umgehen könnte?

    Zitat

    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.


    - Albert Einstein