Erste Schritte Arbeiten mit SuM (Stifte und Mäuse)

Mitsch93

Mitglied
Hallo zusammen.
Ich stelle mich mal kurz vor. Ich heiße Michael, bin 17 Jahre und besuche ein Gymnasium.
Im Informatikunterricht verwenden wir seit diesem Schuljahr JDK mit SuM (Stifte und Mäuse).

Nun habe ich eine Aufgabe für das restliche Halbjahr erhalten, da ich mit
den normalen Aufgaben immer schnell fertig bin; ein Spiel zu programmieren.
Ich weiß auch schon, was ich machen möchte, allerdings fehlen wir einige Grundlagen
dafür und weder die Dokus, die ich mir angesehen habe, noch meine Lehrerin helfen mir weiter.


Mein erstes Problem ist, wie ich ein Bild anzeigen lassen.
Ich habe es bereits mit einigen "image" Klassen versucht, aber habe es wohl
falsch angegangen.

Allerdings kann ich jetzt nicht die "normalen" Javabefehle benutzen, da wir
mit SuM arbeiten.
Hier ist ein Beispiel davon, was wir mal gemacht haben. Die Kugel ist z.B.
über einen Tisch gerollt.
In dieser Art würde ich dann auch mein Spiel programmieren.

Java:
import sum.kern.*;

public class Kugel
{
    //Bezugsobjekte
    Buntstift hatBuntstift;
    Tisch kenntTisch;
    
    //Attribute
    int zRadius;
    int zFarbe;
    double zGeschwindigkeit;

    // Konstruktor
    public Kugel(int pXPos, int pYPos, int pRadius, int pFarbe, int pGeschwindigkeit)
    {
        hatBuntstift    = new Buntstift();
        zRadius         = pRadius;
        zFarbe          =pFarbe;
        zGeschwindigkeit=pGeschwindigkeit;
        hatBuntstift.bewegeBis(pXPos,pYPos);
        hatBuntstift.dreheBis(15);
        hatBuntstift.setzeFarbe(zFarbe);
        hatBuntstift.setzeFuellmuster(1);
    }
    
    public void zeichneDich()
    { 
         hatBuntstift.zeichneKreis(zRadius);
    }
    
    public void loescheDich()
    { 
         hatBuntstift.radiere();
         this.zeichneDich();
         hatBuntstift.normal();
    }
    
    public void rolle()
    { 
        this.loescheDich();
        this.hatBuntstift.bewegeUm(zGeschwindigkeit);
        this.zeichneDich();
        if (hatBuntstift.hPosition()>kenntTisch.gibXPos()+kenntTisch.gibBreite()-zRadius) //rechts
                hatBuntstift.dreheBis(180-hatBuntstift.winkel());
        if (hatBuntstift.hPosition()<kenntTisch.gibXPos()+zRadius) //rechts
                hatBuntstift.dreheBis(180-hatBuntstift.winkel());
        if (hatBuntstift.vPosition()<kenntTisch.gibYPos()+zRadius) //oben
                hatBuntstift.dreheBis(360-hatBuntstift.winkel());
        if (hatBuntstift.vPosition()>kenntTisch.gibYPos()+kenntTisch.gibHoehe()-zRadius) //unten
                hatBuntstift.dreheBis(360-hatBuntstift.winkel());
    }
    
    public void lerneTischKennen(Tisch pTisch)
    {
        kenntTisch = pTisch;
    }
    
    public double XPos()
    {
        return hatBuntstift.hPosition();
    }
    
    public double YPos()
    {
        return hatBuntstift.vPosition();
    }
    
    
    public void gibFrei()
    {
        loescheDich();
        hatBuntstift.gibFrei();
    }
}

Würde mich freuen, wenn mir jemand helfen kann. Es werden sicher noch einige
Fragen folgen.

MfG
Mitsch93
 
Zuletzt bearbeitet von einem Moderator:
das kennt niemand,
entweder du hast ein Lehrbuch dazu mit konkreten schnell auffindbaren Kapitel
'SuM kann auch Bilder anzeigen und zwar so: ..'
oder viel wahrscheinlicher ist das überhaupt nicht vorgesehen

wenn dir deine Lehrerin nichts zu Bildern sagen kann, dann ist das auch kaum in der Aufgabe zu fordern

------

hier hat sich jemand anders anscheinend damit versucht
http://www.java-forum.org/allgemeine-java-themen/115790-problem-bilder-laden-sum-kern.html
gefunden über Suchmaschine 'SuMKern image', du kannst gerne noch mehr suchen
 
Moin,

Mein erstes Problem ist, wie ich ein Bild anzeigen lassen.
Ich habe es bereits mit einigen "image" Klassen versucht, aber habe es wohl
falsch angegangen.

Wo versuchst Du denn in Deinem Code ein 'Bild' (was genau meinst Du denn?) anzuzeigen ?
Was genau möchtest Du denn fragen ?

Gruß
Klaus
 
Leider haben wir kein Lehrbuch dazu.

In SuM gibt es zwar die Klasse Bild, aber ich bekomme immer eine Nullpointerexception in sum.multimedia
und der Konstruktor wird als Fehler markiert.

Hier ist das Testprogramm, mit dem ich es versucht habe.
Ich will einfach eine Grafik anzeigen lassen.
[Java]
import sum.kern.*;
import sum.multimedia.*;

public class Spiel
{

public static void main(String args[])
{

Bildschirm meinBildschirm;
Bild meinBild;

//Initialisierung
meinBildschirm = new Bildschirm();
meinBild = new Bild(200,200,200,523,"C:/BlueJ/Helden/yoda.png");

//Aktionsteil
meinBild.zeige();

//Aufräumen
meinBild.gibFrei();
meinBildschirm.gibFrei();

}
}
[/Java]

Hier wird mir der Fehler angezeigt.
meinBild = new Bild(200,200,200,523,"C:/BlueJ/Helden/yoda.png");
Ja, der Pfad ist richtig.

In der Dokumentation von der Klasse Bild gibt es 4 Möglichkeiten,
um ein Bild zu erzeugen. Ich habe, wie man sieht
Bild(double pLinks, double pOben, double pBreite, double pHoehe)
Ein leeres Bild wird erzeugt.
Bild(double pLinks, double pOben, double pBreite, double pHoehe, Bild pBild)
Das Bild, das als Parameter uebergeben wird, wird uebernommen.
Bild(double pLinks, double pOben, double pBreite, double pHoehe, String pPfad)
Das Bild, dessen Pfadname uebergeben wird, wird von der Festplatte geladen.
Bild(double pLinks, double pOben, double pBreite, double pHoehe, String pPfad, Applet pApplet)
Das Bild, dessen Pfadname uebergeben wird, wird von der Festplatte in ein Applet geladen.

Wenn das alles nichts helfen sollte, muss ich mir was anderes einfallen lassen, um eine
Grafik anzuzeigen. Bin schon mit java.awt am rumbasteln.
Kann mir zur Not jemand ein einfaches Beispiel für das stinknormale Erstellen eines Beispieles geben?
 
Hallo also mit Bordmitteln von SuM geht es ja nicht, weil die Buntstift-Klasse da nix bietet.

Was du natürlich machen kannst ist, du kannst die Buntstiftklasse hacken um da mit normalen Java-Funktionen alles möglich zu zeichnen. Ich weiss ja nicht, ob es im Sinne des Erfinders wäre. Ich bin grade dabei da spasses halber ein Beispiel zu machen. Mal sehen, wie weit ich komme.
 
Also Fehler gefunden. Erste Zeile muss
Code:
import sum.ereignis.*;
heissen. Es gibt tatsächlich zwei klassen mit dem Namen Bildschirm in versch. Paketen.

Das Programm läuft bei mir aber trotzdem nicht sauber, hast du ein komplettes funktionierendes Beispiel mit Fenstern?
 
wenn die NPE im Bild-Konstruktor auftritt, kann der Import von Bildschirm wohl nicht entscheidend sein,
es sei denn es wird intern im Hintergrund irgendwas initialisiert..

dass das Bild bisher mit dem Bildschirm nicht verknüpft ist wäre danach ein anderes Problem, vielleicht einfaches add()?
kann ich nicht weiter beurteilen
 
Nur das obige Testprogramm habe ich bis jetzt.
Mit dem Bildschirm aus ereignis funktioniert das Bild schonmal.
Allerdings kann ich jetzt nicht mehr Klassen wie Maus verwenden, die in sum.kern vorkommen.

Ich habe gesehen, dass der Bildschirm auch eine paint Methode hat.
Dazu steht in der Doku:
paint

public void paint(Graphics g)

wird intern aufgerufen.

Overrides:
paint in class Container

Allerdings weiß ich nicht, was ich genau, was ich als Parameter angeben soll.
Graphics ist ja aus jawa.awt und ist eine abstrakte Klasse, also kann ich schonmal kein
Objekt davon erzeugen. Aber wie soll das dann mit der paint Methode funktionieren?
 
wenn die NPE im Bild-Konstruktor auftritt, kann der Import von Bildschirm wohl nicht entscheidend sein,
es sei denn es wird intern im Hintergrund irgendwas initialisiert..

Die sind intern über geheime statische Variablen verbunden

Ich habe gesehen, dass der Bildschirm auch eine paint Methode hat.

Es ist ohne extreme Tricks nicht möglich selber mit AWT Funktionen zu zeichnen, ich habe jetzt die Doku studiert und da geht nichts in die Richtung.
 
Du musst mit deiner Lehrerin mal reden, wie sie sich das vorstellt. Bilder zeichnen ist im SuM ja offensichtlich nicht vorgesehen und ein normales Oberflächen-Toolkit zu lernen ist an sich nicht ganz ohne (und dauert auch bei viel interesse ziemlich).

Ich will dich auf keinen Fall von deiner Idee abbringen und Programmieren ist was IMHO was sehr spannendes, aber du brauchst auf jeden Fall einen realistischen Plan. Dieser kann dann durchaus das Lernen der Programmierung ohne SuM oder aber auch einen machbare Herausforderung mit SuM sein.
 
Hmm ja, ich werd mal am Freitag mit ihr reden.

Das Konzept des Spiels war ja nicht so schwierig. Man sollte am Anfang
4 Spieler aussuchen, mit denen man kämpfen möchte. Diese werden dann gezeichnet
und ein kleines Kampfmenü (4 Knöpfe mit 4 Attacken) wird angezeigt (ähnlich wie Pokemon).
Dann kämpft man eben miteinander. Mit einem GUI wäre das soweit, zumindest
theoretisch, möglich gewesen. Zumindest habe ich alle Befehle und Klassen, die ich brauche.
Fehlt nur noch das Zeichnen der Spieler.
 
du kannst doch irgendwas mit Zeichenbefehlen malen, einen Kreis mit Dreieck oben drüber für Kopf mit Hut oder auch nur ein dickes X,
wenn du das wieder löschen und an anderer Stelle korrekt neu malen musst ist das vielleicht sogar anspruchsvoller/ interessanter als ein Bild zu laden
 
Hi,
Ich melde mich mal wieder zurück.
Also: Das Spiel muss ich mit "normalen" Java programmieren.
Dazu gucke ich mir momentan ein Tutorial im Internet an.

Ich habe jetzt z.b. mal ganz simpel einen Knopf erstellt.
[Java]
Knopf = new javax.swing.JButton("LOS");
[/Java]

Allerdings wird er nicht gezeigt, wenn ich das Programm aufrufe.
Wodran liegt das?
 
komisches Tutorial, es braucht doch gewisse Grundkennnisse,
u.a. dass erzeugte Komponenten erst irgendwo anders, letztlich z.B. in ein JFrame, hinzugefügt werden müssen

schau dir in
Galileo Computing :: Java ist auch eine Insel – 19.4 Beschriftungen (JLabel)
Listing 19.3 com/tutego/insel/ui/swing/JLabelDemo.java
an was mit dem JLabel l passiert, nur das JLabel zu erzeugen reicht nicht

---

weitere Fragen zu Swing werde ich persönlich hier nicht beantworten, erstelle notfalls ein neues Thema
 
Java:
import javax.swing.*;

public class Spiel {
    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Hauptfenster hauptfenster = new Hauptfenster();
                hauptfenster.setSize(600, 400);
                hauptfenster.setVisible(true);
            }
        });
    }
}

Java:
import javax.swing.*;

public class Hauptfenster extends JFrame {
    JButton knopf = new JButton("LOS");

    public Hauptfenster() {
        getContentPane().add(knopf);
    }
}

Du solltest dennoch unbedingt ein echtes Swing Tutorial durchmachen.
 

Zurück
Oben