onpsx.de NewsArtikelSpieleFilmeCommunity  
Forum Gruppen  Chat           Team  Podcast  Impressum  Datenschutzerklärung 
     
Zurück   onpsx Forum > Off Topic > Technik-Ecke

Antwort
 
Themen-Optionen Ansicht
Alt 20.03.2009, 09:22   #61
Planet
50% air, 50% water, glass is always full
 
Benutzerbild von Planet
 
Registriert seit: 22.04.2004
PSN Name: PlanetJumble
Beiträge: 18.883
Danke vergeben: 1.783
Danke erhalten: 2.463
PS4 PSVR VITA AND
Standard

Zitat:
Zitat von chrizel Beitrag anzeigen
Aber in Smalltalk gibt es z.B. keine Zugriffsmodifier, und du weisst bestimmt welche Rolle Smalltalk in der Geschichte der OOP Sprachen gespielt hat.
Smalltalk behandelt zumindest Instanzvariablen als private members. Und du weisst bestimmt auch, dass alle objektorientierten Sprachen, die von Smalltalk gelernt haben, inzwischen Zugriffsmodifizierer benutzen. Und darüber hinaus weißt du bestimmt auch, welchen Stellenwert Smalltalk in der Softwareentwicklung heute hat...

Zitat:
Python hat auch keine Zugriffsmodifier... dort basiert vieles dann eher auf Konventionen (z.B. Underscore vor die Methodennamen) und nicht auf Sprachfeatures.
Ich sehe da nicht den kategorischen Unterschied zwischen Namenskonventionen und Schlüsselworten. Meiner Auffassung nach ist das ein und das selbe, nämlich ein Zugriffsmodifikator.

Zitat:
Auch finde ich Objektorientierung ganz am Anfang nicht relevant fuer einen Anfaenger. Die Leute sollten eher erst mal lernen wie ein Computer funktioniert, was Variablen, Fallunterscheidungen und Schleifen sind -- Funktionen schreiben koennen, ohne Klassen schreiben zu muessen (!) -- und erst dann kann man ueber Konzepte wie OOP nachdenken...
Da stimme ich dir zu, weswegen diese ersten Schritte in (vernünftigen) Java-Anfängerguides auch in einer main-Methode abgehandelt werden. Dass man eine Klassendeklaration darumbasteln muss, sollte auch keinen überfordern, das kann man für den Anfang einfach so hinnehmen. Und dann handelt man diese ersten Lernschritte in einer monolithischen main-Methode ab, bis man dann mit Methoden anfängt (die dann übrigens auch noch keine Zugriffsmodifikation brauchen).

Kurz: es liegt nicht an der Sprache, sondern am Lehrer/Tutorial.

Zitat:
evtl. waere es besser mit funktionaler Programmierung anzufangen, weil es sauberer und logischer ist wenn man nur mit mathematischem Wissen von der Schule daherkommt.
Dann verwirrt man die Anfänger mit Klammer-Clustern und einem Konzept, welches später so gut wie keine Praxisrelevanz hat. Es ist sicher sinnvoll, später im Grundstudium so eine Sprache einzusetzen, um mal eine andere Sicht kennenzulernen, aber zum Start? IMHO neiheihein!

Zitat:
Ist natuerlich alles IMHO.
dito! :]

Zitat:
Am Ende bleibt es eh egal -- jemand der sich wirklich fuer Programmierung interessiert, muss sich sowieso alles mal anschauen und alles irgendwie lernen.
Zumindest sollte man sich hüten, ein One-Trick-Pony zu werden. Wer nur Java lernt, dafür aber intensiv, kriegt nicht den Blick "zwischen die Zeilen" und wird zu unflexibel.
__________________
Planet ist offline   Mit Zitat antworten
Alt 25.03.2009, 14:19   #62
crack-king
Administrator
 
Benutzerbild von crack-king
 
Registriert seit: 07.01.2007
Ort: Pusemuckel
Beiträge: 41.355
Danke vergeben: 3.708
Danke erhalten: 3.727
PS4 PSVR VITA SWITCH PC AND
Standard

OMG, ihr wisst ja noch, dass ich auf einmal mein Programm nicht mehr starten konnte. Hab das ganze also hier hochgeladen und mir gedacht, dass der Lehrer mir halt helfen soll. Und heute lade ich das in Informatik runter und was ist? Es läuft tiptop...Ohne eine einzige Veränderung
crack-king ist offline   Mit Zitat antworten
Alt 29.04.2009, 21:26   #63
crack-king
Administrator
 
Benutzerbild von crack-king
 
Registriert seit: 07.01.2007
Ort: Pusemuckel
Beiträge: 41.355
Danke vergeben: 3.708
Danke erhalten: 3.727
PS4 PSVR VITA SWITCH PC AND
Standard

Hab mal wieder nen Problem mit BlueJ...Ja ich weiß, mal was ganz neues. Also das ganze ist schon weiter fortgeschritten und mittlerweile kann man das ganze zu zweit spielen. Jetzt wollte ich aber das nervige Flimmern von der Kugel wegbekommen, mir fällt aber keine Lösung ein. Das Ding muss ja immer neu gezeichnet und gelöscht werden, i-einen Weg drumherum müsste es doch geben. Aber kA, vll i-wie was mit zwei Ebenen oder so..weiß der Teufel xD

2. Problem. Will man zu zwei spielen und die Balken bewegen, muss man die Taste auf der Tastatur immer und immer wieder neu drücken. Gedrückt halten geht nicht. Liegt wohl daran, dass es nur einen Tastaturpuffer gibt, aber hat da einer ne Idee wie man das lösen könnte? Muss ja i-wie. Richtige Spiele laufen ja damit.

Und dann das letzte Problem, was zugegebenermaßen eher ein mathematisches ist. Momentan prallt die Kugel zwar vom Balken der Spieler ab, aber nur wenn sie direkt auf den Balken auftrifft. Wenn sie ihn aber nur i-wie seitlich andötscht, sieht es so aus als ob sie hindurchfliegt.Wollten den Ball also in mehrere Bereiche aufteilen und abfragen, wo und wie er auftrifft. Da unser Ball nen Radius von 10 hat, wollten wir den in 8 Bereichte mit 2,5 Pixeln aufteilen. Problem ist jetzt aber, wir müssen ja auch die horizontale Position kennen. Nur wie kommt man daran? im Kreis ist das ja etwas schwieriger. Wollten das über Sinus und so weiter machen, aber geht nicht. Vllt kennt da jemand noch ne Möglichkeit. Hoffe ihr versteht, was mein Problem ist.

Ahja, mein Infolehrer konnte mir bei keinem der Probleme helfen

Hier mal die drei Klassen des Programms

Spieler1sind eig die Balken)
Code:
import sum.kern.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Spieler1 extends Stift
{
    // Objekte
    Bildschirm derBildschirm;
    // Konstruktor
    public Spieler1(Bildschirm b)
    {
        super();
        derBildschirm = b;
    }

    // Dienste
    public void zeichneBalken()
    {
        zeichneRechteck(20,75);
    }
    public void loescheBalken()
    {
        radiere();
        zeichneRechteck(20,75);
        normal();
    }
    public void hoch()
    {
       if (vPosition()>0)
         {
            loescheBalken();
            dreheUm(90);
            bewegeUm(10);
            dreheUm(-90);
            zeichneBalken();
          }
          else
          {
           loescheBalken();
          dreheUm(-90);
          bewegeUm(0.1);
          dreheUm(90);
          zeichneBalken();
        }         
    }
    public void runter()
    {
        if(vPosition()<(derBildschirm.hoehe()-50))
        {
          loescheBalken();
          dreheUm(-90);
          bewegeUm(10);
          dreheUm(90);
          zeichneBalken();
        }
        else
        {
            loescheBalken();
            dreheUm(90);
            bewegeUm(0.1);
            dreheUm(-90);
            zeichneBalken();
        }
    }    
}
Kugel:
Code:
import sum.kern.*; 
import sum.werkzeuge.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Kugel extends Stift
{
    // Bezugsobjekte
    double a = 0.05;
    Rechner meinRechner;
    Bildschirm derBildschirm;
    // Attribute

    // Konstruktor
    public Kugel(Bildschirm b)
    {   
        super();
        meinRechner = new Rechner();
        derBildschirm = b;
    }

    // Dienste
    public void zeichneKugel()
    {
        zeichneKreis(10);
    }
    public void loescheKugel()
    {
        radiere();
        zeichneKreis(10);
        normal();
    }
    public void Richtung()
    {
        dreheBis(meinRechner.ganzeZufallszahl(-45,45));
    }
        
    public void Bewegung()
    {
        zeichneKugel();
        loescheKugel();
        bewegeUm(a);
        zeichneKugel();
    }
    public void Kollision(double pos,double pos2)
    {
        if(hPosition()<40 && vPosition() > pos && vPosition() < (pos+75) )
        {
            dreheUm(180-2*winkel());
        }
        if(hPosition()>600 && vPosition() > pos2 && vPosition() < (pos2+75) )
        {
            dreheUm(180-2*winkel());
        }
        else if(hPosition()<10 || hPosition()>630)
        {
            loescheKugel();
            bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
            Richtung();
        }
        else if(vPosition()>(derBildschirm.hoehe()-10))
        {
            dreheUm(360-2*winkel());
        }
        else if(vPosition()<10)
        {
            dreheUm(360-2*winkel());
        }

            
    }
}
Hauptprogramm(Hier wird dann das ganze Programm ausgeführt):
Code:
import sum.kern.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Hauptprogramm
{ 
    boolean running = true;
    // Objekte
    Kugel dieKugel;
    Bildschirm derBildschirm;
    Tastatur dieTastatur;
    Spieler1 derBalken;
    Spieler1 derBalken2;
    // Konstruktor
    public Hauptprogramm()
    {
        derBildschirm = new Bildschirm(640,480);
        dieKugel = new Kugel(derBildschirm);
        dieTastatur = new Tastatur();
        derBalken = new Spieler1(derBildschirm);
        derBalken2 = new Spieler1(derBildschirm);
    }

    // Dienste
    public void fuehreAus()
    {
        derBildschirm.nachVorn();
        derBalken.bewegeBis(10,300);
        derBalken2.bewegeBis(610,300);
        dieKugel.bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
        dieKugel.Richtung();
        while ( running = true)
        {
            dieKugel.Kollision(derBalken.vPosition(),derBalken2.vPosition());
            dieKugel.Bewegung();
            derBalken.zeichneBalken();
            derBalken2.zeichneBalken();
            if (dieTastatur.wurdeGedrueckt())
            {
                switch (dieTastatur.zeichen())
                {
                    case 'w':derBalken.hoch();break;
                    case 's':derBalken.runter();break;
                    case Zeichen.PFEILOBEN :derBalken2.hoch();break;
                    case Zeichen.PFEILUNTEN :derBalken2.runter();break;
                }
                dieTastatur.weiter();
            }
            
            
    }
    }
}
crack-king ist offline   Mit Zitat antworten
Alt 29.04.2009, 21:56   #64
chrizel
🌟🌟🌟🌟🌟
 
Benutzerbild von chrizel
 
Registriert seit: 21.09.2003
PSN Name: chrizeliq
Beiträge: 9.785
Danke vergeben: 90
Danke erhalten: 307
PS2 PS3 PS4 VITA
Standard

Zitat:
Zitat von crack-king Beitrag anzeigen
Hab mal wieder nen Problem mit BlueJ...Ja ich weiß, mal was ganz neues. Also das ganze ist schon weiter fortgeschritten und mittlerweile kann man das ganze zu zweit spielen. Jetzt wollte ich aber das nervige Flimmern von der Kugel wegbekommen, mir fällt aber keine Lösung ein. Das Ding muss ja immer neu gezeichnet und gelöscht werden, i-einen Weg drumherum müsste es doch geben. Aber kA, vll i-wie was mit zwei Ebenen oder so..weiß der Teufel xD
Das was du willst nennt sich Double buffering - man zeichnet die Szene in einen Zeichenbereich im Speicher und nicht direkt auf dem Bildschirm - danach flipt man die beiden Buffer und die neue Szene wird angezeigt. Damit kann man Flackern vermeiden. Die primaere Frage ist halt, ob deine tolle ( :-x ) sum-Library sowas kann. Mit den echten Java-Libraries waere das wahrscheinlich weniger ein Problem zu realisieren... aber ueber dieses sum wurde ja hier schon geschimpft.

Zitat:
2. Problem. Will man zu zwei spielen und die Balken bewegen, muss man die Taste auf der Tastatur immer und immer wieder neu drücken. Gedrückt halten geht nicht. Liegt wohl daran, dass es nur einen Tastaturpuffer gibt, aber hat da einer ne Idee wie man das lösen könnte? Muss ja i-wie. Richtige Spiele laufen ja damit.
Technisch gibt es keinen Grund. Man kann KeyDown-Ereignisse behandeln -- eine Beschraenkung wird dir halt wahrscheinlich wieder von dieser bescheidenen sum-Library auferlegt.

Zitat:
Und dann das letzte Problem, was zugegebenermaßen eher ein mathematisches ist. Momentan prallt die Kugel zwar vom Balken der Spieler ab, aber nur wenn sie direkt auf den Balken auftrifft. Wenn sie ihn aber nur i-wie seitlich andötscht, sieht es so aus als ob sie hindurchfliegt.Wollten den Ball also in mehrere Bereiche aufteilen und abfragen, wo und wie er auftrifft. Da unser Ball nen Radius von 10 hat, wollten wir den in 8 Bereichte mit 2,5 Pixeln aufteilen. Problem ist jetzt aber, wir müssen ja auch die horizontale Position kennen. Nur wie kommt man daran? im Kreis ist das ja etwas schwieriger. Wollten das über Sinus und so weiter machen, aber geht nicht. Vllt kennt da jemand noch ne Möglichkeit. Hoffe ihr versteht, was mein Problem ist.
Kannst du mathematisch wahrscheinlich einfacher loesen: http://mathworld.wolfram.com/Circle-...ersection.html Also den Kreis mit der dort angegebenen Formel darauf pruefen, ob er mit bestimmten Linien kollidiert.
chrizel ist offline   Mit Zitat antworten
Alt 30.04.2009, 12:33   #65
crack-king
Administrator
 
Benutzerbild von crack-king
 
Registriert seit: 07.01.2007
Ort: Pusemuckel
Beiträge: 41.355
Danke vergeben: 3.708
Danke erhalten: 3.727
PS4 PSVR VITA SWITCH PC AND
Standard

Hmn...das mit dem double buffering hört sich schonmal gut an, hab da nur so meine Probleme mit dem einbauen. Verstehe das ganze nicht so recht. Müsste das theoretisch in ne neue Klasse?

http://www.realapplets.com/tutorial/...Buffering.html

Ich hab mich mal versucht an diesem Tutorial zu orientieren, aber naja, i-wie krieg ich nichtmal den Anfang hin. Ne Klasse Applet gibts scheinbar bei mir und so weiter. Aber dann erweitert er sie ja um Applet und ich wollte das ganze in die Klasse "Kugel" einbauen, da diese ja flackert. Aber kann ich denn eine Klasse um zwei erweitern? Die Klasse Kugel ist ja schon ein Stift und soll jetzt am besten auch ein Applet sein. Das grobe System davon verstehe ich, nur die Implementierung ist einfach nur ein Graus Vielleicht kann mir zumindest jemand paar Tipps geben, wie es sein KÖNNTE.

Dann zu dem KeyDown-Ereignis. Ich glaube du hast mich falsch verstanden. Man kann die Taste schon gedrückt halten und der Balken bewegt sich dann je nachdem hoch oder runter, aber sobald der andere Spieler das drückt, geht nichts mehr. Also muss man andauernd drücken.

EDIT: Wer möchte kann sich ja hier mal ne funktionierende Version des Programms und meines Spieles herunterladen

http://rapidshare.com/files/227492458/Pong.rar.html

Geändert von crack-king (30.04.2009 um 12:42 Uhr)
crack-king ist offline   Mit Zitat antworten
Alt 04.05.2009, 20:39   #66
crack-king
Administrator
 
Benutzerbild von crack-king
 
Registriert seit: 07.01.2007
Ort: Pusemuckel
Beiträge: 41.355
Danke vergeben: 3.708
Danke erhalten: 3.727
PS4 PSVR VITA SWITCH PC AND
Standard

Hiho, ich verzweifel langsam hier :/ Hab die mathematische Funktion von chrizel einmal eingebaut. Funktioniert aber nicht so richtig, zumindest wenn ich das alles richtig eingebaut hab. Könnte vielleicht jemand mal drüber schauen und gegebenenfalls mal sagen, was falsch ist? UNd ja, das sum.Kern fürn Arsch ist, weiß ich selbst

Kugel:
Code:
import sum.kern.*; 
import sum.werkzeuge.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Kugel extends Stift
{
    // Bezugsobjekte
    double a = 0.05;
    double c = 10;
    Rechner meinRechner;
    Bildschirm derBildschirm;
    // Attribute

    // Konstruktor
    public Kugel(Bildschirm b)
    {   
        super();
        meinRechner = new Rechner();
        derBildschirm = b;
    }

    // Dienste
    public void zeichneKugel()
    {
        zeichneKreis(c);
    }
    public void loescheKugel()
    {
        radiere();
        zeichneKreis(c);
        normal();
    }
    public void Richtung()
    {
        dreheBis(meinRechner.ganzeZufallszahl(-45,45));
    }
        
    public void Bewegung()
    {
        zeichneKugel();
        loescheKugel();
        bewegeUm(a);
        zeichneKugel();
    }
    public void Kollision2(double x1, double x2, double y2, double y1, double a1, double a2, double d1, double d2)
    {
        if (((c*c)*meinRechner.wurzel(((((hPosition()-x2)-(hPosition()-x1))
           *(((hPosition()-x2)-(hPosition()-x1)))+(((vPosition()-y2)-(vPosition()-y1))
           *((vPosition()-y2)-(vPosition()-y1))))-(((x1*y2)-(x2*y1))*((x1*y2)-(x2*y1))))))>0)
        {
            dreheUm(180-2*winkel());
        }
                else if (((c*c)*meinRechner.wurzel(((((a2-(hPosition()))-(a1-(hPosition())))
                          *(((a2-(hPosition()))-(a1-(hPosition()))))+(((d2-(vPosition()))-(d1-(vPosition())))
                          *((d2-(vPosition()))-(d1-(vPosition())))))-(((a1*d2)-(a2*d1))*((a1*d2)-(a2*d1))))))>0)
        {
            dreheUm(180-2*winkel());
        }
                else if(hPosition()<10 || hPosition()>630)
        {
            loescheKugel();
            bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
            Richtung();
        }
        else if(vPosition()>(derBildschirm.hoehe()-10))
        {
            dreheUm(360-2*winkel());
        }
        else if(vPosition()<10)
        {
            dreheUm(360-2*winkel());
        }
    }
    public void Kollision(double pos,double pos2)
    {
        if(hPosition()<40 && vPosition() > pos && vPosition() < (pos+75) )
        {
            dreheUm(180-2*winkel());
        }
        if(hPosition()>600 && vPosition() > pos2 && vPosition() < (pos2+75) )
        {
            dreheUm(180-2*winkel());
        }
        else if(hPosition()<10 || hPosition()>630)
        {
            loescheKugel();
            bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
            Richtung();
        }
        else if(vPosition()>(derBildschirm.hoehe()-10))
        {
            dreheUm(360-2*winkel());
        }
        else if(vPosition()<10)
        {
            dreheUm(360-2*winkel());
        }

            
    }
}
Spieler:
Code:
import sum.kern.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Spieler1 extends Stift
{
    // Objekte
    Bildschirm derBildschirm;
    // Konstruktor
    public Spieler1(Bildschirm b)
    {
        super();
        derBildschirm = b;
    }

    // Dienste
    public void zeichneBalken()
    {
        zeichneRechteck(20,75);
    }
    public void loescheBalken()
    {
        radiere();
        zeichneRechteck(20,75);
        normal();
    }
    public void hoch()
    {
       if (vPosition()>0)
         {
            loescheBalken();
            dreheUm(90);
            bewegeUm(10);
            dreheUm(-90);
            zeichneBalken();
          }
          else
          {
           loescheBalken();
          dreheUm(-90);
          bewegeUm(0.1);
          dreheUm(90);
          zeichneBalken();
        }         
    }
    public void runter()
    {
        if(vPosition()<(derBildschirm.hoehe()-50))
        {
          loescheBalken();
          dreheUm(-90);
          bewegeUm(10);
          dreheUm(90);
          zeichneBalken();
        }
        else
        {
            loescheBalken();
            dreheUm(90);
            bewegeUm(0.1);
            dreheUm(-90);
            zeichneBalken();
        }
    }    
}
hauptprogramm:
Code:
import sum.kern.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Hauptprogramm
{ 
    boolean running = true;
    // Objekte
    Kugel dieKugel;
    Bildschirm derBildschirm;
    Tastatur dieTastatur;
    Spieler1 derBalken;
    Spieler1 derBalken2;
    // Konstruktor
    public Hauptprogramm()
    {
        derBildschirm = new Bildschirm(640,480);
        dieKugel = new Kugel(derBildschirm);
        dieTastatur = new Tastatur();
        derBalken = new Spieler1(derBildschirm);
        derBalken2 = new Spieler1(derBildschirm);
    }

    // Dienste
    public void fuehreAus()
    {
        derBildschirm.nachVorn();
        derBalken.bewegeBis(10,300);
        derBalken2.bewegeBis(610,300);
        dieKugel.bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
        dieKugel.Richtung();
        while ( running = true)
        {
            dieKugel.Kollision2(derBalken.hPosition(),derBalken.hPosition(),derBalken.vPosition(),(derBalken.vPosition()+75), derBalken2.hPosition(), derBalken2.hPosition(), derBalken2.vPosition(), (derBalken2.vPosition()+75));
            dieKugel.Bewegung();
            derBalken.zeichneBalken();
            derBalken2.zeichneBalken();
            if (dieTastatur.wurdeGedrueckt())
            {
                switch (dieTastatur.zeichen())
                {
                    case 'w':derBalken.hoch();break;
                    case 's':derBalken.runter();break;
                    case Zeichen.PFEILOBEN :derBalken2.hoch();break;
                    case Zeichen.PFEILUNTEN :derBalken2.runter();break;
                }
                dieTastatur.weiter();
            }
            
            
    }
    }
}

Geändert von crack-king (04.05.2009 um 20:47 Uhr)
crack-king ist offline   Mit Zitat antworten
Alt 04.05.2009, 20:45   #67
spy
What If You Fall In
 
Benutzerbild von spy
 
Registriert seit: 12.06.2006
Ort: Unterfranken
PSN Name: spynose
Beiträge: 12.886
Danke vergeben: 509
Danke erhalten: 531
PS4 SWITCH MAC iPhone
Standard

Mach Zeilen nicht länger als 80 Zeichen, das macht den Code lesbarer.
spy ist offline   Mit Zitat antworten
Alt 04.05.2009, 20:47   #68
crack-king
Administrator
 
Benutzerbild von crack-king
 
Registriert seit: 07.01.2007
Ort: Pusemuckel
Beiträge: 41.355
Danke vergeben: 3.708
Danke erhalten: 3.727
PS4 PSVR VITA SWITCH PC AND
Standard

ist es jetzt etwas besser?^^
crack-king ist offline   Mit Zitat antworten
Alt 04.05.2009, 21:10   #69
spy
What If You Fall In
 
Benutzerbild von spy
 
Registriert seit: 12.06.2006
Ort: Unterfranken
PSN Name: spynose
Beiträge: 12.886
Danke vergeben: 509
Danke erhalten: 531
PS4 SWITCH MAC iPhone
Standard

Zitat:
Zitat von crack-king Beitrag anzeigen
ist es jetzt etwas besser?^^
Ich weiß nicht genau, ob ich eine Verbesserung sehe. Auf jeden Fall fehlt etwas Dokumentation, damit man weiß, was wo passiert und gemacht wird.

Ich habs mal durch den Formatierer laufen lassen, jetzt siehts so aus
Code:
import sum.kern.*;
import sum.werkzeuge.*;

/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Kugel extends Stift {
    // Bezugsobjekte
    double a = 0.05;
    double c = 10;
    Rechner meinRechner;
    Bildschirm derBildschirm;

    // Attribute

    // Konstruktor
    public Kugel(Bildschirm b) {
        super();
        meinRechner = new Rechner();
        derBildschirm = b;
    }

    // Dienste
    // Diese Methode zeichnet eine Kugel mit ???
    // Wo kommt dieses c für die Methode, die du in der Methode aufrufst eigentlich her?
    // Wenn es keine Übergabeparameter ist, macht dann die Methode überhaupt Sinn?
    public void zeichneKugel() {
        zeichneKreis(c);
    }
    /**
    / Diese Methode loescht die Kugel. Dabei wird die alte Kugel geloescht, eine
    / neue gezeichnet und dann noch etwas mit ihr gemacht
    /*
    public void loescheKugel() {
        radiere();
        zeichneKreis(c);
        normal();
    }

    public void Richtung() {
        dreheBis(meinRechner.ganzeZufallszahl(-45, 45));
    }

    public void Bewegung() {
        zeichneKugel();
        loescheKugel();
        bewegeUm(a);
        zeichneKugel();
    }

    public void Kollision2(double x1, double x2, double y2, double y1,
            double a1, double a2, double d1, double d2) {
        // Diese if Abfrage macht etwas sehr seltsames
        if (((c * c) * meinRechner
                .wurzel(((((hPosition() - x2) - (hPosition() - x1))
                        * (((hPosition() - x2) - (hPosition() - x1))) + 
                        (((vPosition() - y2) - (vPosition() - y1)) * ((vPosition() - y2) - 
                                (vPosition() - y1)))) - (((x1 * y2) - (x2 * y1)) * ((x1 * y2) - 
                                        (x2 * y1)))))) > 0) {
            dreheUm(180 - 2 * winkel());
        } else if (((c * c) * meinRechner
                .wurzel(((((a2 - (hPosition())) - (a1 - (hPosition())))
                        * (((a2 - (hPosition())) - (a1 - (hPosition())))) + (((d2 - (vPosition())) - (d1 - (vPosition()))) * ((d2 - (vPosition())) - (d1 - (vPosition()))))) - (((a1 * d2) - (a2 * d1)) * ((a1 * d2) - (a2 * d1)))))) > 0) {
            dreheUm(180 - 2 * winkel());
        } else if (hPosition() < 10 || hPosition() > 630) {
            loescheKugel();
            bewegeBis(derBildschirm.breite() / 2, derBildschirm.hoehe() / 2);
            Richtung();
        } else if (vPosition() > (derBildschirm.hoehe() - 10)) {
            dreheUm(360 - 2 * winkel());
        } else if (vPosition() < 10) {
            dreheUm(360 - 2 * winkel());
        }
    }

    public void Kollision(double pos, double pos2) {
        if (hPosition() < 40 && vPosition() > pos && vPosition() < (pos + 75)) {
            dreheUm(180 - 2 * winkel());
        }
        if (hPosition() > 600 && vPosition() > pos2
                && vPosition() < (pos2 + 75)) {
            dreheUm(180 - 2 * winkel());
        } else if (hPosition() < 10 || hPosition() > 630) {
            loescheKugel();
            bewegeBis(derBildschirm.breite() / 2, derBildschirm.hoehe() / 2);
            Richtung();
        } else if (vPosition() > (derBildschirm.hoehe() - 10)) {
            dreheUm(360 - 2 * winkel());
        } else if (vPosition() < 10) {
            dreheUm(360 - 2 * winkel());
        }

    }
}
Ich hab bei zwei Methoden mal etwas kommentiert, damit du siehst, was ich unter Kommentierung verstehe.
Ich hab leider nicht soviel Lust, mich durch den ganzen Codewust zu arbeiten, aber es ist schwer leserlich, weswegen du auch den Fehler so schwer findest.

Was mich noch stört ist sowas:
Code:
else if (((c * c) * meinRechner
                .wurzel(((((a2 - (hPosition())) - (a1 - (hPosition())))
                        * (((a2 - (hPosition())) - (a1 - (hPosition())))) + (((d2 - (vPosition())) - (d1 - (vPosition()))) * ((d2 - (vPosition())) - (d1 - (vPosition()))))) - (((a1 * d2) - (a2 * d1)) * ((a1 * d2) - (a2 * d1)))))) > 0)
Das ist viel zu lang und verschachtelt. Da musst du dir was einfallen lassen. Evtl brauchst du mehrere Methoden, die dann ausführen sollen, was du willst. zB eine Methode "wurzel()" die macht, was auch immer du da willst. Und dann noch weitere Methoden, die einen Punkt verschieben oder was auch immer.
Beim Programmieren immer auf Lesbarkeit achten, dann ist er auch leichter wartbar. Vor allem sollte man auch in der Methode kommentieren. zB was passiert da in meiner if Abfrage. Kommentieren immer gleich wenn man etwas schreibt. Nicht erst danach, wo man wieder vergessen hat, was der Code da eigentlich macht.
Falls du Angst hast, du wirst dann nicht fertig und dein Lehrer gibt dir ne schlechte Note, dann sag deinen Eltern, dass euer Lehrer euch das schlecht erklärt und schick sie mal zu ihm.
Desweiteren kann ich als IDE Eclipse empfehlen. Damit kann ich am Besten arbeiten. Download hier. Eclipse Seite Wikipedia Eintrag
spy ist offline   Mit Zitat antworten
Alt 04.05.2009, 21:16   #70
crack-king
Administrator
 
Benutzerbild von crack-king
 
Registriert seit: 07.01.2007
Ort: Pusemuckel
Beiträge: 41.355
Danke vergeben: 3.708
Danke erhalten: 3.727
PS4 PSVR VITA SWITCH PC AND
Standard

Ja, das mit den Kommentaren ist sicherlich sinnvoll. Ich persönlich verstehe das ganze aber (noch) und denke das es reicht, wenn cih die Kommentare erst nachher setze. Aber du hast ja recht. Für andere ist es dann richtig schwer sich Einzuarbeiten.

Bei der Methode, wo du meinst, die wäre vieeeel zu lang, haperts bei mir. Ansonsten läuft alles. Aber diese Methode funktioniert einfach nicht. Muss mal schauen, wenn nicht, gebe ich das so ab und der Lehrer soll selbst schauen, wie er das Projekt fertig bekommt. Da der ganze Kurs nicht zurechtkommt, will der das Projekt quasi abbrechen und ich soll ne Musterlösung erstellen. Eigentlich wollte ich das daher richtig toll machen. Aber notfalls nehme ich die vereinfachte "schlechtere" Version.

Und ja, ich würde gerne mit Eclipse etc. arbeiten. Aber in der Schule müssen wir halt BlueJ benutzen und ich denke, dass ich nochmal anders aufgebaut als Eclipse. Wenn ich schon teilweise meine Probleme mit BlueJ habe, wird das damit wohl noch schwerer. Trotzdem danke für den Tipp. Nen Blick ist es sicherlich wert.
crack-king ist offline   Mit Zitat antworten
Alt 04.05.2009, 21:25   #71
spy
What If You Fall In
 
Benutzerbild von spy
 
Registriert seit: 12.06.2006
Ort: Unterfranken
PSN Name: spynose
Beiträge: 12.886
Danke vergeben: 509
Danke erhalten: 531
PS4 SWITCH MAC iPhone
Standard

Zitat:
Zitat von crack-king Beitrag anzeigen
Und ja, ich würde gerne mit Eclipse etc. arbeiten. Aber in der Schule müssen wir halt BlueJ benutzen und ich denke, dass ich nochmal anders aufgebaut als Eclipse. Wenn ich schon teilweise meine Probleme mit BlueJ habe, wird das damit wohl noch schwerer. Trotzdem danke für den Tipp. Nen Blick ist es sicherlich wert.
Ich hab mal gelesen, was BlueJ eigentlich bietet. Da steht Anfängern soll das objektorientierte Programmieren beigebracht werden. Dann vermute ich aber auch, dass es nicht den Funktionsumfang eines Eclipse hat bzw haben will.
Der Vorteil ist, dass man nach Einarbeitungszeit mit Eclipse die ganzen Methoden aus der API direkt mit JavaDoc Kommentaren in der IDE hat und mit Strg+Leertaste dann den Text vervollständigen kann und so Zeug, was du eigentlich gar nicht wissen musst

Aber da die handvoll Leute hier, die wissen was Java ist usw. schon "Profiwerkzeuge" nehmen, ist es schwer etwas zu deinem Problem zu sagen auf die Schnelle.
spy ist offline   Mit Zitat antworten
Alt 05.05.2009, 17:16   #72
crack-king
Administrator
 
Benutzerbild von crack-king
 
Registriert seit: 07.01.2007
Ort: Pusemuckel
Beiträge: 41.355
Danke vergeben: 3.708
Danke erhalten: 3.727
PS4 PSVR VITA SWITCH PC AND
Standard

Na gut, das kann natürlich sein. Aber trotzdem danke. Hab hier nen anderes Problem, was vielleicht einfacher sein dürfte.

Ich hab die Klasse Kugel und dann jetzt ncoh eine Klasse Spielstand. Diese hat zwei int Werte c und d, welche gleich 0 sind. Jetzt gibt es in dieser Klasse eine Methode mit welcher ich dsa ganze auf dem Bildschirm zeichnen lasse. Jetzt wollte ich aber einfügen, dass wenn der Ball abprallt, er den c oder d Wert um einen erhöht. Habe also so eine hat-Beziehung erstellt und wollte einen Wert nun erhöht. Leider kreige ich immer eine NullPointerException.

Code sieht wie folgt aus:
Code:
else if(hPosition()<10)
        {
            loescheKugel();
            bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
            Richtung();
            derSpielstand.d++;
        }
crack-king ist offline   Mit Zitat antworten
Alt 08.05.2009, 14:32   #73
Nullnummer
Dr. 0
 
Benutzerbild von Nullnummer
 
Registriert seit: 10.11.2007
Ort: ...in der Klinik
PSN Name: Nullnummer
Spielt gerade: verrückt
Beiträge: 3.270
Danke vergeben: 123
Danke erhalten: 70
PC AND
Standard

Zitat:
Zitat von spy Beitrag anzeigen
Wie siehts denn aus mit Microcontroller Programmierung mit C. Schon mal jemand drangewagt, oder macht das beruflich? Vor allem mit Atmels? Ich hab mich auf http://www.mikrocontroller.net/ umgesehen und überleg mir, was man sinnvolles bzw. aus Spaß entwerfen könnte, was dann mit einem Microcontroller gesteuert wird.

Wenn ich Zeit hab versuche ich mich von Zeit zu Zeit mal darin... würde mich aber eher als noob bezeichnen.... fummel auch mehr an PIC's in Basic rum...
__________________
Nullnummer
Spitzenideen - seit 1975
Nullnummer ist offline   Mit Zitat antworten
Alt 09.05.2009, 16:38   #74
Wooosh
"Nur Fliegen ist schöner"
 
Benutzerbild von Wooosh
 
Registriert seit: 09.06.2008
Ort: In(m) Essen
PSN Name: Wooosh
Spielt gerade: das Kein-Schlaf Spiel
Beiträge: 5.752
Danke vergeben: 0
Danke erhalten: 36
PS1 PS2 PS3 PSP VITA PC
Wooosh eine Nachricht über ICQ schicken
Standard

toll: egal was ich heute lese, es hat immer etwas mit der Schule von mir zu tun
Wooosh ist offline   Mit Zitat antworten
Alt 31.05.2009, 15:59   #75
spy
What If You Fall In
 
Benutzerbild von spy
 
Registriert seit: 12.06.2006
Ort: Unterfranken
PSN Name: spynose
Beiträge: 12.886
Danke vergeben: 509
Danke erhalten: 531
PS4 SWITCH MAC iPhone
Standard

Ich setz mich gerade mit C# auseinander. Ich hätte als Datenstruktur gerne eine ArrayList um da was zu sammeln und später in ein double[] Array umzuwandeln.
Laut MSDN gibts eine ArrayList, aber in VisualStudio 2008 Express Editions wird sie nicht angezeigt. Gibts die ArrayList dann nur für Käufer der Vollversion oder was?

Edit: Hat sich erledigt, war ein Fehler im inkludieren der Collection. Hat LinkedList kein Standard Add?

Geändert von spy (31.05.2009 um 18:54 Uhr)
spy ist offline   Mit Zitat antworten
Alt 31.05.2009, 19:31   #76
Papa Justify
Administrator
 
Benutzerbild von Papa Justify
 
Registriert seit: 07.09.2007
Ort: Wolfsburg
PSN Name: Papa_Justify
Beiträge: 4.516
Danke vergeben: 23
Danke erhalten: 87
PS1 PS2 PS3 PS4 VITA 3DS PC MAC iPhone
Standard

Zitat:
Zitat von spy Beitrag anzeigen
Hat LinkedList kein Standard Add?
http://msdn.microsoft.com/de-de/libr...bk(VS.85).aspx
Papa Justify ist offline   Mit Zitat antworten
Alt 11.06.2009, 16:00   #77
spy
What If You Fall In
 
Benutzerbild von spy
 
Registriert seit: 12.06.2006
Ort: Unterfranken
PSN Name: spynose
Beiträge: 12.886
Danke vergeben: 509
Danke erhalten: 531
PS4 SWITCH MAC iPhone
Standard

spy ist offline   Mit Zitat antworten
Alt 23.06.2009, 19:10   #78
spy
What If You Fall In
 
Benutzerbild von spy
 
Registriert seit: 12.06.2006
Ort: Unterfranken
PSN Name: spynose
Beiträge: 12.886
Danke vergeben: 509
Danke erhalten: 531
PS4 SWITCH MAC iPhone
Standard

Ich frag wohl an der falschen Ecke, aber ich habe XCode installiert für OS X und dort kann man, wenn ich das richtig verstehe, auch ganz normale Java Programme schreiben. Oder ist damit die veraltete Java Bridge gemeint?
spy ist offline   Mit Zitat antworten
Alt 23.06.2009, 20:58   #79
chrizel
🌟🌟🌟🌟🌟
 
Benutzerbild von chrizel
 
Registriert seit: 21.09.2003
PSN Name: chrizeliq
Beiträge: 9.785
Danke vergeben: 90
Danke erhalten: 307
PS2 PS3 PS4 VITA
Standard

Zitat:
Zitat von spy Beitrag anzeigen
Ich frag wohl an der falschen Ecke, aber ich habe XCode installiert für OS X und dort kann man, wenn ich das richtig verstehe, auch ganz normale Java Programme schreiben. Oder ist damit die veraltete Java Bridge gemeint?
Probiers doch aus. ^^ In der Beschreibung zu "Java Application" steht "This project builds an Ant-based Swing application " Aber Netbeans, Eclipse & Co. erscheinen mir fuer Java wahrscheinlich auch besser zu sein. Btw. Netbeans 6.7 (derzeit noch als RC hier http://www.netbeans.org/community/re.../67/index.html) hat fuer OSX eine neue Optik bekommen, sieht jetzt da ganz nett aus. http://wiki.netbeans.org/NewAndNoteW...7-WindowSystem Ja ich weiss, du bist wahrscheinlich eher noch im Eclipse-Lager.
chrizel ist offline   Mit Zitat antworten
Alt 23.06.2009, 21:14   #80
spy
What If You Fall In
 
Benutzerbild von spy
 
Registriert seit: 12.06.2006
Ort: Unterfranken
PSN Name: spynose
Beiträge: 12.886
Danke vergeben: 509
Danke erhalten: 531
PS4 SWITCH MAC iPhone
Standard

Zitat:
Zitat von chrizel Beitrag anzeigen
Probiers doch aus. ^^ In der Beschreibung zu "Java Application" steht "This project builds an Ant-based Swing application " Aber Netbeans, Eclipse & Co. erscheinen mir fuer Java wahrscheinlich auch besser zu sein. Btw. Netbeans 6.7 (derzeit noch als RC hier http://www.netbeans.org/community/re.../67/index.html) hat fuer OSX eine neue Optik bekommen, sieht jetzt da ganz nett aus. Ja ich weiss, du bist wahrscheinlich eher noch im Eclipse-Lager.
Klar probier ich es aus, muss mich aber erst Mal in die Funktionsweise der IDE einlesen
Netbeans hab ich für JavaFX Experimente benutzt, aber die Autovervollständigen Funktion ist bei Eclipse besser. Aber mal die neue Version antesten.
spy ist offline   Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.


Powered by vBulletin®
Copyright ©2000 - 2011, Jelsoft Enterprises Ltd.