Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

in der Schule haben wir in Informatik Programmieren mit Blue j als Thema. Für mich ist das sehr langweilig, da ich, wenn wir ein Arbeitsblatt mit Aufgaben zu einem Thema (while-schleife....) bekommen, nach 10 Minuten fertig bin, da ich die Grundlagen bereits von anderen Sprachen kenne.

Ich habe mir vorgenommen ein Spiel zu programmieren, allerdings kann(will) mir meine Lehrerin nicht helfen, da sie die Arbeitsblätter noch nicht alle erstellt hat... (Ich solle mir halt ein Buch kaufen:mod:)

Ich hab kein Bock jetzt ein 50er für nen 500 Seiten-Buch auszugeben, wo ich die Hälfte schon weiß.

Deshalb die Frage an euch: Könnt ihr mir helfen mit Blue j ein Spiel zu programmieren:confused:

Das Spiel sollte anfangs relativ einfach sein.

2D Shooter: Es erscheinen Zielscheiben, die abgeschossen werden.

Ich würde Dir von BlueJ abraten und wenn das Spiel wirklich komplett selbst zu programmieren, als IDE könnte ich Eclipse empfehlen. Es stellt sich dann zunächst die Frage wie graphisch komplex es werden soll (OpenGL) und ob es z.B. nur auf der Tastatur oder auch Maus / Joystick reagieren soll.

Ich würde erst einmal ein detailliertes Konzept erstellen.

Phil

  • Autor

ehr weniger grafisch komplex und einfach nur um was während dem Unterricht zu tun. Deshalb könnte ich nicht eclipse benutzen, da wir das in der Schule nicht haben

Kann dem Vorposter nur zustimmen, was das IDE angeht. Am sinnvollsten wäre es du verwendest Eclipse. Auch vielleicht deshalb, weil dir dann einfacher zu helfen ist, da sich deine Fragen nicht auf ein IDE bezieht, womit hier wahrscheinlich nur wenige größere Erfahrungen haben, sondern auf Java im allgemeinen.

Als Tutorial für empfiehlt sich zum einen das JAVA-Buch als auch Java ist auch Insel.

Wenn du ein Spiel Programmieren willst, welches nicht nur über die Konsole läuft solltest du dich in eine der gebräuchlichen GUI-APIs von Java einlesen.

Beispielsweise Swing. Jede Swing-Componente besitzt eine paint-Methode, wenn du diese Überschreibst kannst du das Aussehen der Componente beliebig anpassen (Zeichenbefehle, wie drawLine, drawRect, drawPolygon stehen hier zur Verfügung). In Kombination mit einem Timer (oder einfachen Threads) lassen sich da wirklich nette Sachen machen.

  • Autor

und wenn ich mir einfach ein paar 2-D-Spiele-Sourcecodes anschaue? Ich denke das würde mir vielleicht weiterhelfen, um gewisse "Befehle" zu lernen und in action zu sehen...

Zuerst einmal solltest du einige Grundlagen allgemeine Grundlagen der Spieleprogrammierung lernen, z.B. was eine Simulationsrate ist.

Danach kannst du dir anschauen, wie man in Java eigene Grafik-Objekte erstellt.

Mach doch einfach mal ein JFrame, leg darauf ein JPanel und überschreibe bei diesem JPanel die paint-Methode. Da kannst dann schonmal etwas rumprobieren.

Ich hab damals auch in der Schule mit BlueJ ein Rollenspiel programmiert. Dieses war dann aber nur Text-Based, aber es war ne beschäftigung für den langweiligen Java Unterricht mit nem Lehrer der jede Stunde 5 mal wiederholt hat. Anmerken muss man noch, das BlueJ eigentlich eher für Fachkonzepte geeignet ist und nicht für selbstständige Anwendungen.

Wenn ich mit meiner Vermutung richtig gehe, habt ihr vielleicht JBuilder bei euch in der Schule. Damit kannst du ziemlich komfortabel eine Oberfläche erstellen und deine BlueJ Klassen einbinden. Bei Open-GL und sonstigem grafischen Zeug kenn ich mich leider nicht aus. Wie gesagt, ich hab nur Variabeln rumgeschubst.

  • 1 Monat später...
  • Autor

eclipse... ich war auf deren Seite hab versucht mir einen Überblick zu verschaffen... vergebens

fängt schon an, dass ich nicht weiß, was ich downloaden soll...

Inzwischen arbeite ich mit greenfoot. Ist sehr praktisch.

Ich habe aber folgendes Problem:

max_el = Amplitude.getValue() ;

cannot find symbol - variable Amplitude

was könnte der Grund sein?

Bearbeitet von mco9

  • Autor

hoffe ist nicht zu viel

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)



public class Wand  extends World

{

    public Slider Amplitude;

    private h_feder Feder;



    public Wand()

    {    

        super(640, 480, 1);

        setBackground("wand.jpg");


        Feder = new h_feder();

        addObject(Feder, 102, 182);


        Amplitude = new Slider("(%) Amplitude",1,100);

        addObject(Amplitude,480,100);

    }

}

import greenfoot.*;  // (World, Actor, GreenfootImage, and Greenfoot)


/**

 * The AnimatedActor class serves as a superclass for other, more specific

 * Actor classes. It provides a mechanism to give actors an animated image.<p>

 * 

 * To use this class, you need a sequence of image files to be used for the

 * animation. Let's say we create four files named "cat0.png", "cat1.png",

 * "cat2.png" and "cat3.png". In this case, our base name would be "cat", the

 * suffix is ".png", and the number of images is 4.<p>

 * 

 * You can create an animated actor by subclassing this class, and calling this

 * class's constructor with the base name, suffix, and number of images as a 

 * parameter. So, to make an animated cat, I might have a subclass 'Cat' with 

 * the folling constructor"<p>

 * 

 * <pre>

 *   public Cat() {

 *       super("cat", ".png", 4);

 *   }

 * <pre>

 * 

 * The image files have to be numbered starting at 0, and they have to ve in the

 * scenario's 'image' folder.<p>

 * 

 * The image will change with every act step.

 * 

 * @author mik

 * @version 1.0

 */

public class AnimatedActor extends Mover

{

    private GreenfootImage[] images;

    private int currentImage = 0;

    private boolean hin = true;

    private double max_el;






    /**

     * Construct an animated actor. This assumes that you have provided image

     * file (in the 'images' folder) named 'basenameN.suffix', where N is

     * [0..numberOfImages-1].

     * 

     * @param basename  The base name of the image files.

     * @param suffix  The suffix of the image files (must include the ".").

     * @param noOfImages  The number of images to be use din the animation.

     */

    public AnimatedActor(String basename, String suffix, int noOfImages)

    {

        images = new GreenfootImage[noOfImages];

        for(int i=0; i < noOfImages; i++) {

            images[i] = new GreenfootImage(basename + i + suffix);

        }

        setImage(images[currentImage]);

    }


    /**

     * Act - do whatever the AnimatedActor wants to do. This method is called whenever

     * the 'Act' or 'Run' button gets pressed in the environment.

     * 

     * Method was changed! Now the animation waves, i.e. not 12341234, but 1234321

     */




    public void act() 


    {


      //  max_el = Amplitude.getValue() ;


        //*Math.sin(w*t);





        if(hin) 

        {    

            currentImage = (currentImage + 1) % images.length;

        }

        if(hin==false)

        {

            currentImage = (currentImage-1) % images.length;

        }



        setImage(images[currentImage]);




            if (currentImage==images.length-1)

            {

                hin = false;

            }

            if (currentImage==0)

            {

                hin = true;

            }


    }

}

und Amplitude ist auch deklariert, aber in einer Anderen Klasse.

Und diese Klassen haben offenbar nichts miteinander zu tun. Damit du auf Amplitude zugreifen kannst, brauchst du erst einmal ein Exemplar der Klasse Wand. Davon ist aber in AnimatedActor.act weit und breit nichts zu sehen.

  • Autor

Juhu, danke!

für die, die's interessiert: jetzt Sieht meine Klasse Wand so aus...

public class Wand  extends World

{

    public Slider Amplitude;

    private AnimatedSpring Feder_2;



    public Wand()

    {    

        super(640, 480, 1);

        setBackground("wand.jpg");




        Amplitude = new Slider("(%) Amplitude",1,100);

        addObject(Amplitude,480,100);


        Feder_2 = new AnimatedSpring(Amplitude,"feder0",".png",11);

       /* es wird dem Konstruktor jetzt nun auch ein Slider übergeben, der

      dann intern und private existiert. so kann ich dann innerhalb vom Objekt 

      Feder_2 der klasse AnimatedSpring auf die Variable des Sliders zugreifen */

        addObject(Feder_2, 102, 182); 

    }

}

  • Autor

Hallo,

ich mal wieder:).

unter Line2D Example - Java Now ist folgender Code zu finden.

import javax.swing.*;

import java.awt.*;

import java.awt.geom.*;


public class Line2D1 extends JApplet {

  private Line2D Shape1;

  private Line2D Shape2;


  public Line2D1 () {

    Shape1 = new Line2D.Float (20.F, 30.F, 150.F, 130.F);

    Shape2 = new Line2D.Double ();

    Shape2.setLine (20.F, 60.F, 120.F, 20.F);

  }


  public void paint (Graphics g) { //FRAGE: woher soll ich bitte das

                                     Graphics g "holen"

    Graphics2D g2D;

    boolean Hit;


    g2D = (Graphics2D) g;


    Hit = Shape1.intersectsLine (Shape2);

    g2D.drawString ("intersects = " + Hit, 20, 145);


    g2D.draw (Shape1);

    g2D.draw (Shape2);

  }


}

Das Graphics Objekt musst du nirgendswo herholen, jedenfalls nich zwangsläufig. Die paint()-Methode wird zur Laufzeit aufgerufen wenn das Applet gezeichnet werden soll, dabei wird automatisch das Graphics Objekt zur Verfügung gestellt. In dem Fall kann es dir also egal sein woher es kommt, es ist da und du kannst darauf zeichnen. Und das was du darauf zeichnest wird dann auch angezeigt.

Es gibt aber auch Möglichkeiten sich selber solche Graphics Objekte zu erzeucgen, zum Beispiel wenn man in Java selber Bilder zeichnet.

Wenn du später (SPÄTER!!!) auf 3D umsteigen willst, dann kann ich dir die JMonkeyEngine [OpenGL] (jMonkeyEngine.com) empfehlen.

Mit dem Tutorial kann man sich schon mal eine Weile beschäftigen, aber man muss echt Zeit investieren um die ganze 3D Logik erstmal zu verstehen.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.