[JAVA] Kaatsende Bal

Pagina: 1
Acties:

  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
De bedoeling:
Ik probeer in Java een bal te laten kaatsen tegen alle wanden. Het moet een
zo simpel mogelijke code worden. De vorm en kleur van de bal maken niet uit.
De richtingen die de bal volgt ook niet zo, als hij maar kaatst.

Werkwijze:
Ik gebruik BlueJ om in te programmeren.

Tot nu toe:
Het is me wel gelukt om de bal tegen de zijkanten te laten kaatsen.
Ik heb een aparte classe voor de bal zelf, genaamd sun.

code:
1
2
3
4
5
6
7
public void stuiterHorizontaal() {
int n;
for ( n = 1; n<= 200; n++ ) {
if (sun.yPosition < 245) { sun.slowMoveVertical(245);}
if (sun.xPosition > 1) { sun.slowMoveHorizontal(245);}
}
}


Ik weet nog erg weinig van Java af, maar doe mijn best om het allemaal te
begrijpen. Met google heb ik na lang zoeken wel een Applet gevonden die ballen liet kaatsen, maar dat was al veel te ingewikkeld!

Kan iemand mij meer hier meer over vertellen?

"We do not first see, then define, we define first and then see" (Lippmann)


  • kmf
  • Registratie: November 2000
  • Niet online

kmf

Je geeft de bal een snelheid en laat in een testje de snelheid negatief worden worden indien de positie tegen een wand aanknalt.

One thing's certain: the iPad seriously increases toilet time.. tibber uitnodigingscode: bqufpqmp


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Je zult op de een of andere manier de richting waarin de bal zich beweegt moeten bijhouden. Als je merkt dat de bal ergens tegen botst, zal je hem -afhankelijk van z'n huidige bewegingsrichting- een nieuwe richting moeten meegeven.

pseudo-code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void  BalBotst()
{
   switch( this.HorizBewegingsRichting )
   {
        case HorRichting.Links : this.HorizBewegingsRichting = HorRichting.Rechts;
                                 break;
        case HorRichting.Rechts : this.HorizBewegingsRichting = HorRichting.Links;
                                  break;
   }

    switch( this.VertBewegingsRichting )
    {
         case VertRichting.Boven : this.VertBewegingsRichting = VerRichting.Onder;
                                   break;
          case VertRichting.Onder : this.VertBewegingsRichting = VerRichting.Boven;
                                    break;
    }
}


Dan zal je nog een method 'Verplaats' of 'Beweeg' oid nodig hebben, waarin je gaat gaan bepalen wat de nieuwe positie van de bal is. Dat zal je dus moeten doen adhv de bewegingsrichtingen, en de snelheid waarmee je de bal wilt laten bewegen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Verplaats()
{
    switch ( this.HorizBewegingsRichting )
    {
          case HorRichting.Links : xCo -= snelheid;
                                    break;
           case HorRichting.Rechts : xCo += snelheid;
                                     break;
    }

     // En dan nog eens hetzelfde voor de VertRichting, maar dan met de yCo.
     // Dan heb je de nieuwe positie waarop je de bal moet tekenen, dus teken je hem
     // op die positie.
}

[ Voor 5% gewijzigd door whoami op 07-12-2003 13:07 ]

https://fgheysels.github.io/


  • Johnny
  • Registratie: December 2001
  • Laatst online: 15:50

Johnny

ondergewaardeerde internetguru

hier heb ik een oud stuiterbal applet, dat was een schoolopdracht waarbij een bal enigsinds random tegen de muren moest stuiteren.

De vertraging, die voorkomt dat de bal te snel gaat is wat ranzig, maar we hadden toe nog niet geleerd hoe je dat beter kunt doen.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Apache
  • Registratie: Juli 2000
  • Laatst online: 27-05 13:41

Apache

amateur software devver

Als je enkel hoeken van 45° nodig hebt is het genoeg om een xRichting en yRichting te hebben.

Als je weet dat linksboven 0, 0 hebt, en er steeds bij beide 1 bijkomt gaat hij rechtsonder, zo hebt je 4 mogelijkheden.

code:
1
2
3
4
5
x  | y
1  | 1 -> rechtsonder
1  | -1 -> rechtsboven
-1 | -1 -> linksboven
-1 | 1 -> linksonder


Raakt hij de bovenkant of onderkant doe je yRichting * -1 zodat het omdraait
Raakt hij de linkerkant of rechterkant doe je xRichting * -1 zodat hij ook daar kaatst.

Je kan dan nog steeds een snelheids variable bijhouden waarmee je de verplaatsing van je bal sneller laat gebeuren.

code:
1
2
3
4
5
6
public void move(){

    x += xRichting * snelheid;
    y += yRichting * snelheid;

}

If it ain't broken it doesn't have enough features


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Professionele website nodig?


  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
Bedankt voor jullie reacties maar het was niet echt wat ik zocht!
Het antwoord was een heel stuk simpeler dan ik (we) dacht(en).
Daarom nog even de code met het antwoord, misschien dat iemand er nog ooit
wat aan heeft:

code:
1
2
3
4
5
6
7
8
9
10
11
public void stuiter() {
int n; 
int delta = 1;
int hori = 1;
for ( n = 1; n <= 800; n++ ) {
if( sun.yPosition > 245 || sun.yPosition < 1)delta = -delta;  
sun.slowMoveVertical(delta);
if( sun.xPosition > 240 || sun.xPosition < 1)hori = -hori;  
sun.slowMoveHorizontal(hori);
}
}

"We do not first see, then define, we define first and then see" (Lippmann)

Pagina: 1