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:
S

SlaterB

Gast
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
 

VfL_Freak

Top Contributor
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
 

Mitsch93

Mitglied
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?
 

Naaram

Mitglied
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.
 

Naaram

Mitglied
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?
 
S

SlaterB

Gast
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
 

Mitsch93

Mitglied
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?
 

Naaram

Mitglied
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.
 

Naaram

Mitglied
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.
 

Mitsch93

Mitglied
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.
 
S

SlaterB

Gast
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
 

Mitsch93

Mitglied
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?
 

VfL_Freak

Top Contributor
und wo fügst Du ihn hinzu ???:L???:L
wird er auch sichtbar / verfügbar gesetzt ???:L???:L

Fragen über Fragen ..... ;(

gruß
Klaus
 
S

SlaterB

Gast
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
 

Naaram

Mitglied
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
monsterherz Arbeiten mit Random Java Basics - Anfänger-Themen 12
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
D Erste Schritte Sinvolle Architektur und paketübergreifendes Arbeiten Java Basics - Anfänger-Themen 2
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
F Arbeiten mit Arrays Java Basics - Anfänger-Themen 2
B Kann man eine Tabelle in Eclipse erzeugen und damit arbeiten? Java Basics - Anfänger-Themen 8
P Erste Schritte Arbeiten mit Klassen Java Basics - Anfänger-Themen 8
K Interface: wie damit arbeiten Java Basics - Anfänger-Themen 4
G Graphische Darstellung (Arbeiten mit einem Window) Java Basics - Anfänger-Themen 1
N Mit der gleichen BlockingQueue in zwei Klassen arbeiten Java Basics - Anfänger-Themen 12
M Neuen Ordner im Überverzeichnis erstellen, und dadrin arbeiten Java Basics - Anfänger-Themen 4
M Input/Output Arbeiten mit extrem vielen Dateien Java Basics - Anfänger-Themen 8
A Mit Enums in Methoden arbeiten Java Basics - Anfänger-Themen 8
D Wie mit Bibliotheken ohne API arbeiten? Java Basics - Anfänger-Themen 16
S Arbeiten mit einer CSV Datei und Überprüfen von einem Datum in einem Textfeldern Java Basics - Anfänger-Themen 4
S Arbeiten mit arrays Java Basics - Anfänger-Themen 4
D Arbeiten mit Twitter4J Java Basics - Anfänger-Themen 2
R mit klassen-instanzen arbeiten in packages Java Basics - Anfänger-Themen 10
H Arbeiten mit Properties Java Basics - Anfänger-Themen 8
hdi Worst-Performance-Award für Arbeiten mit ListModel Java Basics - Anfänger-Themen 7
G Mit Javadoc arbeiten Java Basics - Anfänger-Themen 13
L Arbeiten mit Vectoren in einer Hashtable Java Basics - Anfänger-Themen 2
Y Mit Interface arbeiten Java Basics - Anfänger-Themen 9
G mit Threads arbeiten Java Basics - Anfänger-Themen 2
N Herangehensweise - mit vielen Variablen arbeiten Java Basics - Anfänger-Themen 6
M Arbeiten mit ArrayList Java Basics - Anfänger-Themen 9
G mit Strings arbeiten Java Basics - Anfänger-Themen 7
G in Java mit Schnittstellen arbeiten Java Basics - Anfänger-Themen 5
G Arbeiten mit einem Fenster Java Basics - Anfänger-Themen 11
G erstes Arbeiten mit Collections Java Basics - Anfänger-Themen 17
G erstes Arbeiten mit Packages Java Basics - Anfänger-Themen 2
C Arbeiten mit MDI Java Basics - Anfänger-Themen 2
J Arbeiten mit Strings Java Basics - Anfänger-Themen 5
E Aus Datei einlesen und weiter mit arbeiten! Java Basics - Anfänger-Themen 15
Z In Bild-dateien(jpg) zeichnen und arbeiten. Java Basics - Anfänger-Themen 4
A Arbeiten mit mehreren Klassen Java Basics - Anfänger-Themen 4
G Stifte und Mäuse Klasse laden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben