Frage zu Processing

Hey
ich habe ein Problem, ich wollte das spiel Breakout mit dem Programm Processing schreiben aber ich kriege es nicht hin das die kugel an den Kästchen abspringt und die Kästchen dann weg gehen :(
Ich hoffe mir kann jemand helfen.



Java:
float f=0;
float geschwindigkeit_x = 5;
float geschwindigkeit_y = 5;
float a=255;
float b=0;
float pos_x=mouseX;
float pos_y=570;


int[][] level_1 = {  {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                  };






void setup()
{
size(600,577);
frameRate(70);
}

void draw()
{
  background(#000000);
  noStroke();
  fill(255,200,0);
  ellipse(pos_x,pos_y,20,20);
  rectMode(CENTER);
  rect(mouseX,560,120,20);
  rectMode(CORNER);
  fill(a);
  stroke(0);
  level();
  
  // verändern von x
  if (pos_x <= 25) {geschwindigkeit_x = random(6,13);}
  if (pos_x >= 570) {geschwindigkeit_x = random(-6,-13);}
  pos_x = pos_x + geschwindigkeit_x;
  
  // verändern von y
  if (pos_y <= 25) {geschwindigkeit_y = random(6,13);}
  if (pos_y >= 545 && pos_x <= mouseX+50 && pos_x >= mouseX-50) {geschwindigkeit_y = random(-6,-13);}
  pos_y = pos_y + geschwindigkeit_y;
  if (pos_y >=600) {noLoop();}
  
}

int level()
  {
    int anzahl_pillen = 0;
    for (int zeile = 0; zeile < (level_1.length); zeile++)  // Reihe
      {
      for (int spalte = 0; spalte < (level_1[0].length); spalte++)// Spalte
        {
        // Hintergrund zeichnen
        if (level_1[zeile][spalte] == 1)
          {
            fill(#FFFFFF);
            rect (spalte*level_1.length,zeile*level_1.length,width/level_1.length,height/level_1.length);
          }
        if (level_1[zeile][spalte] == 3)
          {
            fill(#7fff00);
            rect (spalte*level_1.length,zeile*level_1.length,width/level_1.length,height/level_1.length);
          }
        
        
        // Pillen zeichnen
        if (level_1[zeile][spalte] == 2)
          {
          fill(#ffa500);
          rect(spalte*level_1.length+level_1.length*0.5,zeile*level_1.length+level_1.length*0.5,5,5);
          anzahl_pillen++;
          }
        }
      }
    return anzahl_pillen;
  }
  
  float abstand(float x1,float y1,float x2,float y2)
  {return sqrt(sq(x2-x1)+sq(y2-y1));}

  int gefangen()
       {
       if (abstand(pos_x, pos_y, pos_x, pos_y) <  width/level_1.length)
         {return 3;}
       else
         {return 0;}
       }

       
       
       
   void mousePressed() {
  pos_x=mouseX;
  pos_y=570;
  loop();}
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Man muss für jede "Zelle" des Levels schauen, ob da ein Stein ist, und ob der Ball den Stein berührt, und wenn ja, dann löscht man den Stein und ändert die Bewegungsrichtung des Balls.

Ganz billig:

Java:
        if (!kollision())
        {
            // verändern von y
            if (pos_y <= 25)
            {
                geschwindigkeit_y = random(6, 13);
            }
            if (pos_y >= 545 && pos_x <= mouseX + 50 && pos_x >= mouseX - 50)
            {
                geschwindigkeit_y = random(-6, -13);
            }
            pos_y = pos_y + geschwindigkeit_y;
        }
        
        if (pos_y >= 600)
        {
            noLoop();
        }

    }
        
    boolean kollision()
    {
        for (int zeile = 0; zeile < (level_1.length); zeile++) // Reihe
        {
            for (int spalte = 0; spalte < (level_1[0].length); spalte++)// Spalte
            {
                if (level_1[zeile][spalte] == 3)
                {
                    
                    // Ganz Billig: Berechne Abstand zwischen Ballmittelpunkt
                    // und Rechtecksmittelpunkt
                    float x0 = spalte * level_1.length;
                    float y0 = zeile * level_1.length;
                    float w = width / level_1.length;
                    float h = height / level_1.length;
                    float centerX = x0 + w/2;
                    float centerY = y0 + h/2;
                    if (abstand(pos_x, pos_y, centerX, centerY) < 10)
                    {
                        // Bei einer Kollision, lösche den Stein und 
                        // ändere die Bewegungsrichtung
                        level_1[zeile][spalte] = 0;
                        geschwindigkeit_y = random(-6, -13);
                        return true;
                    }
                }
            }
        }
        return false;
        
    }

(da muss man halt ein bißchen mehr Arbeit reinstecken: Ein genauerer Kollisionstest, und eine bessere (passendere) Änderung der Bewegungsrichtung)
 
Es funktioniert aber trotzdem noch nicht das geht irgendwie nicht
wo muss ich das einfügen kannst du mir vielleicht das ganze programm einmal zeigen?

Ich arbeite noch nciht so lange mit Processing und kann das nciht so gut ;D
 

Marco13

Top Contributor
Das war der Teil zwischen der Zeile
[c]// verändern von y[/c]
und
[c]int level()[/c]

(Ich würde dir ja die Zeilennummern aus deinem Codeschnipsel nennen, aber ... (das, was da oben neben dem
icon4.gif
steht, kann man doch kaum übersehen...?)

Ich arbeite auch noch nicht lange mit Processing. Installiert habe ich es zum ersten mal heute mittag, etwa um 15:00 Uhr.

Falls du das (konkrete) Problem genauer beschreibst (genauer als "das geht nicht"), werde ich vielleicht versuchen, zu helfen, wenn ich kann, aber jetzt einfach so eine "schöne Abprallfunktion" zu entwickeln passt vermutlich nicht sooo in meinen Zeitplan....
 
Ich habe das jetzt so und dann kommt die fehlermeldung "unexpected token: boolean"



Java:
float f=0;
float geschwindigkeit_x = 5;
float geschwindigkeit_y = 5;
float a=255;
float b=0;
float pos_x=mouseX;
float pos_y=570;


int[][] level_1 = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
};






void setup()
{
size(600,577);
frameRate(70);
}

void draw()
{
background(#000000);
noStroke();
fill(255,200,0);
ellipse(pos_x,pos_y,20,20);
rectMode(CENTER);
rect(mouseX,560,120,20);
rectMode(CORNER);
fill(a);
stroke(0);
level();

// verändern von x
if (pos_x <= 25) {geschwindigkeit_x = random(6,13);}
if (pos_x >= 570) {geschwindigkeit_x = random(-6,-13);}
pos_x = pos_x + geschwindigkeit_x;

if (!kollision())
        {
            // verändern von y
            if (pos_y <= 25)
            {
                geschwindigkeit_y = random(6, 13);
            }
            if (pos_y >= 545 && pos_x <= mouseX + 50 && pos_x >= mouseX - 50)
            {
                geschwindigkeit_y = random(-6, -13);
            }
            pos_y = pos_y + geschwindigkeit_y;
        }
        
        if (pos_y >= 600)
        {
            noLoop();
        }
 
    
        
    boolean kollision()
    {
        for (int zeile = 0; zeile < (level_1.length); zeile++) // Reihe
        {
            for (int spalte = 0; spalte < (level_1[0].length); spalte++)// Spalte
            {
                if (level_1[zeile][spalte] == 3)
                {
                    
                    
                    float x0 = spalte * level_1.length;
                    float y0 = zeile * level_1.length;
                    float w = width / level_1.length;
                    float h = height / level_1.length;
                    float centerX = x0 + w/2;
                    float centerY = y0 + h/2;
                    if (abstand(pos_x, pos_y, centerX, centerY) < 10)
                    {
                        // Bei einer Kollision, lösche den Stein und 
                        // ändere die Bewegungsrichtung
                        level_1[zeile][spalte] = 0;
                        geschwindigkeit_y = random(-6, -13);
                        return true;
                    }
                }
            }
        }
        return false;
        
    }

}


int level()
{
int anzahl_pillen = 0;
for (int zeile = 0; zeile < (level_1.length); zeile++) // Reihe
{
for (int spalte = 0; spalte < (level_1[0].length); spalte++)// Spalte
{
// Hintergrund zeichnen
if (level_1[zeile][spalte] == 1)
{
fill(#FFFFFF);
rect (spalte*level_1.length,zeile*level_1.length,width/level_1.length,height/level_1.length);
}
if (level_1[zeile][spalte] == 3)
{
fill(#7fff00);
rect (spalte*level_1.length,zeile*level_1.length,width/level_1.length,height/level_1.length);
}


// Pillen zeichnen
if (level_1[zeile][spalte] == 2)
{
fill(#ffa500);
rect(spalte*level_1.length+level_1.length*0.5,zeile*level_1.length+level_1.length*0.5,5,5);
anzahl_pillen++;
}
}
}
return anzahl_pillen;
}

float abstand(float x1,float y1,float x2,float y2)
{return sqrt(sq(x2-x1)+sq(y2-y1));}

int gefangen()
{
if (abstand(pos_x, pos_y, pos_x, pos_y) < width/level_1.length)
{return 3;}
else
{return 0;}
}




void mousePressed() {
pos_x=mouseX;
pos_y=570;
loop();}
 
Zuletzt bearbeitet von einem Moderator:

Noctarius

Top Contributor
Gut gemeinter Tipp: Gewöhn dir gleich zu Anfang eine saubere Einrückung an, das macht viele Problemlösungen schon einfacher.
 
Und dann habe ich noch eine frage wie ich das machen kann das ich den ball lenken kann das er nicht zufällig abspringt sondern das wenn er den paddle auf der linken seite berührt das er dann nach links geht und wenn der ball rechts trifft das er dann nach rechts geht? ;)
 

Marco13

Top Contributor
Du meinst, wie man...
jetzt einfach so eine "schöne Abprallfunktion"
...entwickeln könnte? ;) Man muss rausfinden, an welcher Stelle das Paddel getroffen wurde, und die Richtung entsprechend ändern. Überleg' dir da erstmal was mit Bleistift und Papier (Computer aus!) und wenn du glaubst, eine Lösung zu haben, kannst du sie ja mal hier "reviewen" lassen (als Pseudocode oder so aufgeschrieben). Aber vielleicht in einem neuen Thread. Vermutlich schauen bei "Softwareentwickung/Processing" etliche Leute NICHT rein (weil sie sich - so wie ich - nicht mit Processing auskennen) die aber zum eigentlichen Problem vielleicht was sinnvolles sagen könnten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C SOLID Single Responsibility Priciple Frage Softwareentwicklung 2
K Frage OOP Softwareentwicklung 8
dgtKotlin Frage zu Kotlin source code Softwareentwicklung 5
A Frage zu testdriven developement Softwareentwicklung 1
H Regex Frage Softwareentwicklung 2
D Frage Schichtenarchitektur Softwareentwicklung 3
T Frage bezüglich MVC Softwareentwicklung 1
Shams Frage wegen guava-Eventbus. Softwareentwicklung 0
B Frage zu Schnittstellen (lose Kopplung) Softwareentwicklung 5
H Frage zur Stanford NLP-API Softwareentwicklung 2
E Frage zu Dekorator-Pattern Softwareentwicklung 2
O Frage zu Regulärer Ausdruck Softwareentwicklung 3
H WEKA - Frage zu Methode in Evaluation Softwareentwicklung 2
S Frage zu Zusicherungen: Softwareentwicklung 12
D Frage zu String Algorithmen / String Metric Softwareentwicklung 7
Airwolf89 Theoretische Frage - In Java Java-Programme schreiben Softwareentwicklung 5
D Frage zur Objektorientierung mit Interfaces Softwareentwicklung 9
B Theoretische Informatik Frage zu Formalismus RegExp Softwareentwicklung 12
Wepster LGPL, MPL Frage Softwareentwicklung 3
D Frage zur Benutzeroberflächenprogrammierung Softwareentwicklung 8
D Frage zu Klassendiagramm und Konstruktor (UML) Softwareentwicklung 3
M [OOP] Frage zu Methode-Namen / Funktionsweise Softwareentwicklung 9
S Regex Frage Softwareentwicklung 4
D Frage zu meiner Vorgehensweise in einem Projekt Softwareentwicklung 5
A Frage zu GPL Softwareentwicklung 3
K Frage zu UML Aktivitätsdiagramm Softwareentwicklung 3
J Frage zu Lizenzrechten Softwareentwicklung 5
B bash frage Softwareentwicklung 6
F allgemeine exe frage Softwareentwicklung 10
G Frage zur LGPL? Softwareentwicklung 5
0x7F800000 "Wozu ist denn CSS / CSS2 gut" Dumme Frage? Softwareentwicklung 9
G Frage zur UML Softwareentwicklung 2
B Ajax Frage Softwareentwicklung 2
J Frage zu Relation Softwareentwicklung 2
W Frage zu a)Innere Klassen und b)OO Design Softwareentwicklung 13
G MVC Frage Softwareentwicklung 4
P Frage zu Prolog! Softwareentwicklung 7
E Frage zu Excel und Filtern Softwareentwicklung 4
Y OpenGL/C Frage - externe Funktionen Softwareentwicklung 5
G C# Frage Softwareentwicklung 12
T SQL, Feld mehrmals abfragen, IN Frage Softwareentwicklung 3
C Grundsätzliche Frage zur OOP bzw. zum MVC Softwareentwicklung 5
RaoulDuke Frage zu Datenmodel / Zugriff Softwareentwicklung 5
J Frage zu C Softwareentwicklung 2
H Frage ueber Prototype Pattern? Softwareentwicklung 2
L Noch 'ne Perl-Frage. Kehre dann auch reumütig zu Java zurück Softwareentwicklung 10
S Design-Frage: Wie viele Fassaden? Softwareentwicklung 4
J Frage zu MVC, Swing, Gui Softwareentwicklung 3
L Frage zu Beziehungen zwischen Klassen und UML Softwareentwicklung 10
T Frage zu Mysql Softwareentwicklung 3
C Mysql-Frage(Problem mit nicht durchgeführten Zugriff) Softwareentwicklung 5
M Restart bei Processing. Softwareentwicklung 8

Ähnliche Java Themen

Neue Themen


Oben