Ideen für Informatik-Präsentation

  • Hey Ho,


    da ich für Informatik für nach den Ferien noch meine GFS (ne präsentation die wie ne klausur zählt) vorbereiten muss, wollte ich mich mal an euch wenden. Problem ist, ich muss ein Programm in Java schreiben, kann aber schlecht den schwierigkeitsgrad einschätzen.
    hier mal eine liste von ideen, die ich bisher hatte:

    • TicTacToe
    • Schiffe versenken
    • Ping-Pong (Winkel in Java?)
    • Snake
    • Hangman
    • Erweiterter Taschenrechner (Wurzel, Potenz, Fakultät, Klammern, Permutation, Variantion, Logorithmus, Brüche, Winkelfunktionen, Speichern von Ergebnissen, imaginäre Zahlenbereiche, Umrechnung von Einheiten, Umrechnung von Zahlensystemen, Eingabe von physikalischen und mathematischen Konstanten ...)
    • Mensch ärgere dich nicht
    • 4 gewinnt
    • Game of Life
    • Tetris
    • Verwaltungssoftware für Bücher, Spiele, … (Datenbankeinbindung)
    • Vokabeltrainer
    • Schere-Stein-Papier
    • Stadt-Land-Fluss


    weitere ideen sind natürlich willkommen :)Was meine Programmierkenntnisse angeht: GUI-Programmierung mit Buttons/Timern/nicht-klickbaren Objekten, ansonsten so grundlegendes zeugs wie schleifen, arrays, ...
    zum schwierigkeitsgrad: vor ein paar jahren hat mal die volle punktzahl für ein chatprogramm bekommen, bei dem man auf einem PC einen server starten kann, und jeder, der im selben lan-netzwerk den client startet, kann dann in einem einzigen chatroom mit anderen reden. der PC-user mit dem server muss zum "mitreden" auch den client starten.
    wenn ich mir noch ein paar zusätzliche kenntnisse aneignen muss, sollte das kein allzu großes problem sein, ich würde aber ungern zuviel neues auf einmal lernen, da ich die nächsten 2 wochen auch noch einen ferienjob habe & daher nicht sooo viel zeit.


    danke im voraus


    misteradi1




    PS: ich würde ungern unmengen von aufwendigen texturen erstellen, wenn sich das vermeiden lässt :winking_face:

    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 ()

  • Ich kann dir eine spontane, persönliche Einschätzung der Themen geben. Ich würde noch weitere Meinungen abwarten, meine Bewertung kann völliger Mist sein :p

    • TicTacToe Zu wenig für eine Präsentation, die wie eine Klausur zählt
    • Schiffe versenken Schon mehr vom Umfang, je nachdem wie viele "Features" du einbaust (Multiplayer auf zwei PCs usw.) durchaus sinnvoll
    • Ping-Pong (Winkel in Java?) Das geht ganz einfach, wenn du einen 2D-Vektor einbaust, der deine Kugel bewegt (Steigungsdreieck). Wenn du nicht weißt was ich meine kannst du gerne fragen. Vom Umfang her würde ich sagen ist es okay.
    • Snake Passt imo auch vom Umfang
    • Hangman Mehr als Tic Tac Toe aber weniger als die vorherigen drei Vorschläge
    • Erweiterter Taschenrechner (Wurzel, Potenz, Fakultät, Klammern, Permutation, Variantion, Logorithmus, Brüche, Winkelfunktionen, Speichern von Ergebnissen, imaginäre Zahlenbereiche, Umrechnung von Einheiten, Umrechnung von Zahlensystemen, Eingabe von physikalischen und mathematischen Konstanten ...) Hier kann man halt sehr gut Funktionen erweitern, wenn der Lehrer mehr haben möchte, ist an sich auch relativ interessant, wobei viele Operationen nicht wirklich viel Eigenleistung benötigen, da sie schon in der Standardbibliothek existieren
    • Mensch ärgere dich nicht Kommt mir schon recht aufwändig für, wenn du das gut umsetzt gibt es bestimmt ne gute Note
    • 4 gewinnt Würde ich vielleicht auf eine Stufe mit Snake, Ping Pong etc. setzen, eher etwas leichter.
    • Game of Life Ist eigentlich recht simpel, da es glaube ich nur aus einer Funktion besteht, die in einer verschachtelten Schleife ausgeführt wird und eben der Methode zum Zeichnen. Kann aber auch sein, dass ich was vergessen habe und es etwas komplexer ist
    • Tetris Hätte was
    • Verwaltungssoftware für Bücher, Spiele, … (Datenbankeinbindung) Puh, kann ich schlecht beurteilen
    • Lesetagebuch? Nee...
    • Vokabeltrainer Wenn du genug Features einbaust könnte man das machen
    • Schere-Stein-Papier Zu simpel imo
    • Stadt-Land-Fluss Weiß nicht wie es gemeint ist, das bewerte ich mal nicht
  • Hab Ping-Ping in Javascript geschrieben, als kleines Schulprojekt^^ funzt eigentlich klasse, mit Computer als Gegner, Winkel rechnen mit Sin Cos und Tan, dieser Radiant oder wie das heisst hat mich am anfang sehr durcheinander gebraucht^^ war aber schon ne coole Sache^^ Um das jetzt in Java zu Coden.. Da hätt ich jetzt kein Ansatz so.. Hab das mit diesem Canvas simpel geklärt :face_with_tongue:
    (Btw... Muss mir endlich mal angucken was diese Vectoren sind? XD)


    Tick Tack Toe auch, kurze Sache, kein Plan wie viel du da brauchst^^ Hatte das in einer guten Stunde fertig.. Natürlich auch wieder in Javascript und für Schule :face_with_tongue:

  • theoretisch kann ich auch grundlagen von HTML/CSS, Javascript, JQuery und PHP (praktikum bei internetfirma mit homepagewartung und so zeug). muss aber ich java sein weil meine klassenkameraden in HTML grad mal listen erstellen können -.- (und die anderen genannten sprachen garnicht)
    hast du dein ticktacktoe gegen PC gegner gemacht? oder gegen andere menschen über LAN? und falls PC, mit zufälliger auswahl oder KI? ich hätt jetzt spontan nämlich keine ahnung wie ich dem PC ne akzeptable KI für TickTackToe programmieren könnte :grinning_face_with_smiling_eyes:


    @shokyo: das "lesetagebuch war eigentlich ein unterpunkt zur verwaltungssoftware & nur als notiz für mich gedacht. der unterpunkt ist beim kopieren von word in den browser aber verloren gegangen. ich hatte mir das halt so in richtung oberfläche für tabellenverwaltung gedacht, das werd ich aber wahrscheinlich eher privat mal machen, nicht jetzt als GFS. auch bedingt dadurch, dass ich ungern mit datenbanken programmier (abgesehen von so SELECT x FROM y WHERE a=b und so abfragezeugs halt)

    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 ()

  • ich hab mich jetzt entschlossen, "schiffe versenken" zu programmieren. ich denk das krieg ich auch hin, nur eine frage - fällt euch eine elegantere lösung für die spielfeldverwaltung ein, als 64 panels, buttons oder was-weiß-ich zu erstellen?
    es geht nur um die GUI, also wie der user auswählt, welches feld er beschießen will.
    abspeichern werd ich die daten entweder in nem zweidimensionalen array oder als variablen. jedes feld auf dem spielfeld kriegt dann z.B. ne nummer in richtung "a1", "c5", "h8", etc. (feldgröße 8x8). dazu braucht es noch booleans, die z.B. abspeichern, ob ein feld schon beschossen wurde oder ob sich dort ein schiff befindet.
    schnelle antwort wär super :thumbs_up:

    Zitat

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


    - Albert Einstein

  • Also um die Speichermöglichkeit würd ich mir weniger Gedanken machen als um die Klassen, bzw die Softwareplanung/Aufbau.


    Beim Feldauswählen würd ich eine Riesige Fläche machen mit nem Gitter drauf und dann den Felder ne fix breite geben (zB. 10 pixel). Wenn man nun ins Feld klickt kann man gewählte Feld einfach aus der "EventPosition" rauslesen.


    Code
    public void actionPerformed(ActionEvent event) {     xfeld = Math.round(event.x / 10);                     //oder (int) event.x / 10    yfeld = dasselbe nur mit y }


    Fürs Feld zu speichern eigenen sich byte[][] da kannste 0 unbenutzt, 1 ins leere geballert und 10 schiffchen ist da, 11 schiffchen getroffen verwenden. Um zu checken ob wer gewonnen hat ist einfach :grinning_face_with_smiling_eyes: dann musste nur gucken ob der Spieler noch ne 10 im Arrayfeld hat.


    EDIT:
    Falls du das Fenster dynamisch gestalten will musst du die Feldbreite vorher kurz berechen:


    Code
    public void actionPerformed(ActionEvent event) { 
        int Feldbreite = event.width/8;
        int Feldhoehe = event.height/8;
        xfeld = Math.round(event.x / Feldbreite);   
        yfeld = Math.round(event.y / Feldhoehe);
    }

    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

    4 Mal editiert, zuletzt von Cheefkoch ()

  • danke erstmal :smiling_face:
    dann stellt sich mir nur leider die frage, wie man eine riesige fläche mit nem gitter erstellt :grinning_face_with_smiling_eyes:
    bzw. wie nennt sich das zugehörige gui-element? ich kenn mich da leider nicht besonders gut aus - bin ja auch noch anfänger :smiling_face:
    oder meinst du einfach eine tabelle? oder das "gridLayout"? letzteres wäre ja wieder genauso unübersichtlich wie mit buttons, bzw. genau das gleiche, nur dass ich nicht extra die größe jedes buttons einzeln angeben muss.

    Zitat

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


    - Albert Einstein

  • wie nennt sich das zugehörige gui-element?

    Also ich würd ein Bild nehmen mit nem Gitter oder eine Wasserfläche mit gezeichnetem Gitter (Awesome Paint Skills).


    Tabellen eignen sich dafür nur bedingt, du könntest ne dursichtige Tabelle über das Bild legen und Rote X bzw Schwarze X für die Schüsse reinschreiben. (Es gibt meistens nicht "die perfekte Lösung" :grinning_face_with_smiling_eyes: nur krative umsetzungen die sich besser eignen)


    Das GridLayout ist, soweit ich weiss, ein LayoutManager. Der guckt nur dass die Elemte richtig geordnet und skaliert werden (halt "das layout managed").

    nur dass ich nicht extra die größe jedes buttons einzeln angeben muss.

    Bloss nicht :grinning_squinting_face:
    For-loop und berechnen lassen. Ist viel einfacher 1-3 Zahl für die Berechnung zu ändern als 64 Absolute Koordinaten.


    //Cheefkoch

    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

  • inzwischen bin ich ein gutes stück weiter, das programm ist jetzt soweit, dass man es starten kann, mehrere buttons zur auswahl hat, was man tun möchte (LAN-spiel, KI-spiel, Info (so ne art credits), exit).
    desweiteren habe ich eine klasse "game.java" fertig, mit der man über ein JFrame auswählen kann, wo man seine schiffe setzen möchte. nach abschluss dieses prozesses wird das ergebnis im programmordner als "ships_pos_host.txt" gespeichert (format: 1. zeile x-koordinaten, 2. zeile y-koordinaten)


    jetzt hatte ich hier mal eine kleine konzeptidee aufgestellt, wie ich das eigentliche spiel über einen server steuern würde (also ein LAN-spiel, ein KI-spiel hab ich zwar auch noch nicht, wäre aber wesentlich einfacher als die LAN-variante da alles auf einem rechner ist --> kein java.net-schei**)
    kann gut sein, dass da noch ein paar sachen fehlen, ich hab das um 22 uhr angefangen zu skizzieren, da bin ich nich mehr 100% leistungsfähig. auch nicht mehr 80% :grinning_squinting_face:
    http://www.directupload.net/file/d/4165/vutrb63l_png.htm


    jetzt meine frage: kennt sich einer von euch mit java-netzwerkprogrammierung aus & kann mir sagen, ob das so funktioniert? ich weiß nur, dass da mit sockets und pipapo irgendwie gearbeitet wird, hab mich aber noch nicht besonders ausführlich damit auseinandergesetzt. was die einspeisung der ".txt" mit den Schiffskoordinaten in das programm des anderen spielers angeht, würde ich über IO-operations einfach den text als string auslesen und dann weiterverarbeiten.


    danke im voraus


    Misteradi1




    PS: @Cheefkoch: die buttons bzw. auch die reihen/spalten beschriftungen hab ich jetzt doch per layoutmanager gemacht.
    PPS: wenn ihr zufällig wisst, wie man 64 buttons erstellt, die die bezeichnungen "a1" bis "h8" haben, ohne 64 Mal den Button zu deklarieren, 64x einen ActionListener hinzuzufügen, 64x den Button zu einem Panel hinzuzufügen und dann bei einem reset-knopf noch 64x die Buttonfarbe zurückzusetzen, die beim schiffe platzieren geändert wurde, wär das echt cool :grinning_squinting_face:
    (kurz gesagt: kann man mit einer schleife die namen der buttons hochzählen? beim schiffe platzieren hab ich die buttons über getcomponent hochgezählt, was gefühlsmäßig (ohne jetzt groß darüber nachzudenken) auch beim actionlistener, button auf panel und beim resetknopf funktioneren müsste. wenns da noch ne andere möglichkeit gäb, wär das aber echt cool, dann kann ich auch die buttons kompakter deklarieren.

    Zitat

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


    - Albert Einstein

  • wohl eher nicht :grinning_face_with_smiling_eyes:
    ich studier nächstes jahr angewandte informatik, da kommt's auch dran :grinning_face_with_smiling_eyes:


    bezüglich meines "schiffe versenken" spiels: die benutzeroberfläche ist soweit fertig, derzeit bin ich grade an einem server mit mehreren threads, damit 2 clients eine verbindung herstellen können. geht wahrscheinlich auch ohne multithreading, aber ich würd gern soviel wie möglich ausprobieren :grinning_face_with_smiling_eyes:

    Zitat

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


    - Albert Einstein

  • Du tust mir Leid, ehrlich. Java ist mit Abstand die schlechteste Programmiersprache die es im kompletten Internetz gibt.
    Größter Müll überhaupt und wie gesagt, es tötet Menschen. RiP.

  • derzeit hab ich grad das problem, dass ich für eine höhere benutzerfreundlichkeit tooltips zu den einzelnen buttons hinzufügen will. Diese sollen dann den namen des entsprechenden JButtons anzeigen, z.B. der Tooltip des JButtons a1 soll "a1" anzeigen. der tooltip soll also den variablennamen anzeigen, der bei der deklaration verwendet wurde (z.B. JButton a1 = new JButton()). diversen google-ergebnissen zufolge geht das nicht - könnt ihr das bestätigen? (bzw. widerlegen)

    Zitat

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


    - Albert Einstein

  • Wenn man die Java-Docs vom JButton anschaut sieht man sofort, dass kein Konstruktor mit Tooltip existiert -> nicht möglich. Man könnte ne Wrapper Klasse für den Button schreiben, welche eine solche instanzierung beinhaltet.


    Ansonsten empfehle ich dir deine Buttons mit (meinem Lieblingen den) For-Schlaufen zu "Tooltippen"

    Code
    string[] horizontal = {"A","B","C","D","E","F","G","H"};int[] vertical = {1,2,3,4,5,6,7,8};int i = 0;for(JButton b : Buttons){    b.setTooltipText = string.Format("%s%d", horizontal[i % 8], vertical[i / 8]);    i++;}


    Wobei Buttons deine JButtons aufm Spielfeld sind (Liste, Panel Children oder whatever).



    ps. +1 Person die zu Faul ist die Docs zu lesen :grinning_squinting_face:




    Kleiner Edit/Nachtrag


    Wenn deine JButtons schon so heissen we der Tooltip sollte auch

    Code
    for(JButton b : JButtons){
        b.setTooltipText = b.getName();
    }

    funktionieren.

    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 ich wollte nur wissen, ob es möglich ist, irgendwie den namen einer variable (bzw. eines buttons) als string zu verarbeiten. alles andere habe ich über z.B. über getComponent gelöst.

    Java
    //hier wären dann noch die betreffenden zeilen mit z.B. a1.setName("a1") bis h8.setName("h8")
    for (int i = 0; i < gameBackground.getComponentCount(); i++) {
    	if (i > 9 && i % 9 != 0) {
    		((AbstractButton) gameBackground.getComponent(i)).addActionListener(this);
    		((AbstractButton) gameBackground.getComponent(i)).setToolTipText( gameBackground.getComponent(i).getName());
    	}
    }

    die if-schleife dient dazu, die labels (die auch auf dem JPanel gameBackground befindlich sind) "auszusortieren".
    davon abgesehen - was meinst du mit


    Wenn man die Java-Docs vom JButton anschaut sieht man sofort, dass kein Konstruktor mit Tooltip existiert -> nicht möglich. Man könnte ne Wrapper Klasse für den Button schreiben, welche eine solche instanzierung beinhaltet.

    mir ist nicht ganz klar was du damit sagen willst, "JButton.setToolTipText("text")" geht nämlich. die betreffende methode ist laut javadoc von JComponent geerbt.




    //edit: nebenbei bemerkt: JButton.getName() liefert NICHT den namen, der bei der deklaration verwendet wurde, man muss zuerst über .setName("name") einen namen zuweisen. tut man das nicht, liefert .getName() "null" zurück.

    Zitat

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


    - Albert Einstein

  • nebenbei bemerkt: JButton.getName() liefert NICHT den namen, der bei der deklaration verwendet wurde, man muss zuerst über .setName("name") einen namen zuweisen. tut man das nicht, liefert .getName() "null" zurück.

    nice 2 know :grinning_face_with_smiling_eyes: Da hab ich mich vertan (sorry).


    mir ist nicht ganz klar was du damit sagen willst, "JButton.setToolTipText("text")" geht nämlich. die betreffende methode ist laut javadoc von JComponent geerbt.

    Was ich sagen wollte war: Es gibt keine möglichkeit die Tooltip Eigenschaft beim erzeugen der Instanz direkt zu setzen. Natürlich kann man die den Tooltip mit der entsprechenden Methode setzen wenn die Klasse diese Eigenschaft + Methode besitzt, ich ging nur davon aus dass du sie gleich beim Instanziieren/erzeugen setzen willst. (Im Sinne von JButton A1 = new JButton(Name = A1, Tooltip = "A1", Grösse = 40 usw);



    ps. Deine If-Sortierung ist für manche Programmierer ein Dorn im Auge, da Code möglichst universal einsetzbar sein sollte und nicht durch hinzufügen eines einzelnen Komponenten unbrauchbar wird.

    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

  • sicher, ich bin auch nicht 100% mit der funktion der schleife zufrieden. wenn du mir eine andere möglichkeit nennen kannst, durch die buttons zu iterieren, nehme ich sie gerne an :grinning_face_with_smiling_eyes:
    problem ist halt, dass ich nicht für jeden button den code schreiben will, es sind immerhin 64 stück. außerdem - der code, um schiffe zu setzen hat allein schon fast 40 zeilen. wär schon arg blöd, wenn ich 40*64= 2560 zeilen code schreiben müsste :grinning_squinting_face:
    nebenbei bemerkt: "gameBackground" ist ein JPanel, auf dem nur die buttons und die JLabels angeordnet sind. alle anderen buttons, also "reset", "fertig" usw. sind daneben, direkt 'auf' dem JFrame.
    im anhang noch ein bild des betreffenden JFrames. "gameBackground" ist der grau hinterlegte Bereich.