Topic G: S6 (botsende ballen)

Jaarvak op 7 studiepunten
Forumregels
Misschien werd je vraag al vorig jaar gesteld? Gebruik dus eerst de zoekoptie!

Er zijn formularia/samenvattingen aanwezig op de volgende link: viewtopic.php?f=19&t=93
Laurens
IRW-FAN!
IRW-FAN!
Berichten: 489
Lid geworden op: 30 sep 2008, 17:41
Locatie: Wemmel
Contacteer:

Re: Topic G: S6 (botsende ballen)

Berichtdoor Laurens » 25 feb 2009, 18:09

Ja Steven, nog even zeggen: die assistent had inderdaad gezegd dat er al een poolspel gemaakt was, en dat ge dus iets speciaals moest doen. (Ik had die dat horen zeggen tegen u - denk ik :D)

Ofwel met een Uber goed poolspel afkomen... :D
Gebruikersavatar
ssneider
Heeft dit forum graag
Heeft dit forum graag
Berichten: 124
Lid geworden op: 01 nov 2008, 14:34
Locatie: Grimbergen
Contacteer:

Re: Topic G: S6 (botsende ballen)

Berichtdoor ssneider » 25 feb 2009, 18:18

Wel dit is de code die ik nu heb, met wat additieven van Egon (wa ne zalige kerel :mrgreen: ). Alleen heb ik gemerkt dat de ballen, als ze botsen, er soms maar 1 van terugkaatst? :shock: Weet iemand waaraan dat zou kunne liggen? Ik heb overigens nog tal van ideeën, dus et zal et beste poolspel ooit worden 8-)
Beerend schreef:Er is al eens een poolspel gemaakt en aangezien al die codes beschikbaar zijn, kan je dus hun code bestuderen als je vast zit.

nog een vraagje, naar welk poolspel refereer jij juist, want het poolspel op parallel heeft geen source beschikbaar alleen een .exe [bs_lame.gif]

Code: Selecteer alles

MODULE Biljartbal2;

    FROM IO IMPORT WrStr, WrLn, KeyPressed;
    FROM RealMath IMPORT sqrt;
    FROM Lib IMPORT Delay; (* wacht n miliseconden *)
    FROM Graph IMPORT Init, Disc, _clrBLACK, _clrBLUE;
    FROM Graph IMPORT SetUpdateMode, Update , _clrWHITE;
    FROM StandardLib IMPORT Arrow, AngleWithXAx, RotatePoint;


TYPE (* type *)
Variabelen = RECORD

             x,y,g,vx,vy: INTEGER;

END; (* TYPE *)

CONST (* constanten *)

 SCREEN_SIZE = 1138;
 SIZE= 10;
 DELAY_TIME = 50;
 PI = 3.141592653589793240;

VAR  (* variabelen *)

     i,j: CARDINAL;
     d,m,n,o,p: REAL;
     VectX,VectY : INTEGER;
     a : ARRAY[1..SIZE] OF Variabelen;

PROCEDURE Distance(c1,c2:Variabelen):REAL; (* PROCEDURE Distance start *)

VAR d1,d2,afstand : REAL;
BEGIN

d1 := sqrt( VAL(REAL, (c1.x-c2.x)*(c1.x-c2.x) + (c1.y-c2.y)*(c1.y-c2.y)) ); (* afstandsformule (afstand tussen de middelpunten) *)
d2 := VAL(REAL, c1.g + c2.g); (* lengte van beide stralen*)

afstand := d1 - d2; (* beiden aftrekken (als afstand <= 0.0 dan botsen ze) *)

RETURN afstand; (* geef variabele terug *)
END Distance; (* PROCEDURE *)


BEGIN  (* MODULE start *)

WrLn;

  IF NOT Init(1, 1 , SCREEN_SIZE+7, 720+33) THEN  (* vensterinstellingen *)
         WrStr("Sorry, graphics doesn't work");
WrLn;

  RETURN;
  END; (*IF NOT*)

SetUpdateMode(FALSE); (* vlotter beeld *)


(* gegevens *)

a[1].x := 200;  a[1].y := 300; a[1].g := 10; a[1].vx := 5 ; a[1].vy := 4 ;
a[2].x := 123;  a[2].y := 456; a[2].g := 20; a[2].vx := 2 ; a[2].vy := -2;
a[3].x := 512;  a[3].y := 500; a[3].g := 30; a[3].vx := -3; a[3].vy := -1;
a[4].x := 123;  a[4].y := 50 ; a[4].g := 25; a[4].vx := 3 ; a[4].vy := 0 ;
a[5].x := 432;  a[5].y := 300; a[5].g := 15; a[5].vx := -3; a[5].vy := 1 ;
a[6].x := 234;  a[6].y := 670; a[6].g := 12; a[6].vx := 2 ; a[6].vy := -3;

(* gegevens *)


REPEAT (* REPEAT start *)

FOR i := 1 TO 6 DO (* verplaatsen van bollen *)
Disc(a[i].x,a[i].y,a[i].g,_clrWHITE);
Arrow(a[i].x,a[i].y,(a[i].x+a[i].vx*5),(a[i].y+a[i].vy*5),10,_clrBLUE);
END; (* FOR*)

Update();  (* vlotter beeld *)
Delay(DELAY_TIME);  (* tijd tussen het tekenen in miliseconden *)

FOR i := 1 TO 6 DO
Disc(a[i].x,a[i].y,a[i].g,_clrBLACK);
Arrow(a[i].x,a[i].y,(a[i].x+a[i].vx*5),(a[i].y+a[i].vy*5),10,_clrBLACK);
END; (* FOR*)


FOR i := 1 TO 6 DO (* veranderen richtingsvector botsing kant (indien nodig) *)

IF (a[i].x + a[i].g <= 70) OR (a[i].x + a[i].g >= SCREEN_SIZE - 20) (* botsing links-rechts *)

THEN
a[i].x := a[i].x - a[i].vx;   (* verander richtingsvector (x) *)
a[i].y := a[i].y + a[i].vy;
a[i].vx := -a[i].vx;

ELSIF  (a[i].y + a[i].g <= 70) OR (a[i].y + a[i].g >= 720 - 20)  (* botsing boven-onder *)

THEN
a[i].x := a[i].x + a[i].vx;   (* verander richtingsvector (y) *)
a[i].y := a[i].y - a[i].vy;
a[i].vy := -a[i].vy;

ELSE
a[i].x := a[i].x + a[i].vx;   (* laat zelfde richting *)
a[i].y := a[i].y + a[i].vy;

END; (* IF i *)


FOR j:= 1 TO 6 DO
IF  i # j THEN (* de cirkel mag niet gelijk zijn aan zichzelf *)

d := Distance(a[i],a[j]); (* berekenen afstand middelpunten *)

IF d <= 0.0 THEN (* indien gelijk of kleiner ==> botsing *)

m := AngleWithXAx(a[i].x, a[i].y, a[i].x + a[i].vx, a[i].y + a[i].vy);   (* hoek tussen b, || x-as, en de vector tussen de 2 middelpunten *)
n := AngleWithXAx(a[i].x, a[i].y, a[j].x, a[j].y);                      (* hoek tussen a, evenwijdig met de x-as, en de snelheidsvector *)
o := m - n; (* c=b-a *)
p := PI - 2.0*o; (* v = 180 - 2*C *)
   
VectX := a[i].x + a[i].vx; (* x-coördinaat snelheidsvector *)
VectY := a[i].y + a[i].vy; (* y-coördinaat snelheidsvector *)
RotatePoint(VectX, VectY, a[i].x,a[i].y, p); (* coördinaten snelheidsvector draaien rond middelpunt cirkel over p (op tekening v) *)
                  
a[i].vx := VectX - a[i].x; (* nieuwe waardes invullen van de snelheidsector,( dit is de grootte niet de plaats meer) *)
a[i].vy := VectY - a[i].y;

END; (* IF d <=0.0 *)
END; (* IF i # j *)
END; (* FOR j *)

a[i].x := a[i].vx + a[i].x;
a[i].y := a[i].vy + a[i].y;

END; (* FOR i *)


UNTIL (KeyPressed()); (* REPEAT *)

END Biljartbal2. (* MODULE *)
Laatst gewijzigd door ssneider op 26 feb 2009, 13:05, 2 keer totaal gewijzigd.
"If practice makes perfect, and nobody is perfect, why practice?"
Beerend
IRW-FAN!
IRW-FAN!
Berichten: 313
Lid geworden op: 30 sep 2008, 18:15
Locatie: Mechelen
Contacteer:

Re: Topic G: S6 (botsende ballen)

Berichtdoor Beerend » 25 feb 2009, 18:27

ssneider schreef:Wel dit is de code die ik nu heb, met wat additieven van Egon (wa ne zalige kerel :mrgreen: ). Alleen heb ik gemerkt dat de ballen, als ze botsen, er soms maar 1 van terugkaatst? :shock: Weet iemand waaraan dat zou kunne liggen? Ik heb overigens nog tal van ideeën, dus et zal et beste poolspel ooit worden 8-)
Beerend schreef:Er is al eens een poolspel gemaakt en aangezien al die codes beschikbaar zijn, kan je dus hun code bestuderen als je vast zit.

nog een vraagje, naar welk poolspel refereer jij juist, want het poolspel op parallel heeft geen source beschikbaar alleen een .exe [bs_lame.gif]

Site: http://student.vub.ac.be/%7Erloos/modula2.htm
Code: http://parallel.vub.ac.be/education/mod ... omCode.zip

Code: Selecteer alles

PS: gebruik code tags voor codes, das cooler ;)
Gebruikersavatar
ssneider
Heeft dit forum graag
Heeft dit forum graag
Berichten: 124
Lid geworden op: 01 nov 2008, 14:34
Locatie: Grimbergen
Contacteer:

Re: Topic G: S6 (botsende ballen)

Berichtdoor ssneider » 25 feb 2009, 18:38

Kijk nog is goed naar de file, das die van het spel er naast, Panic Room :) en tis mss een stomme vraag, hoe maar hoe doe je code tags :?
"If practice makes perfect, and nobody is perfect, why practice?"
Beerend
IRW-FAN!
IRW-FAN!
Berichten: 313
Lid geworden op: 30 sep 2008, 18:15
Locatie: Mechelen
Contacteer:

Re: Topic G: S6 (botsende ballen)

Berichtdoor Beerend » 25 feb 2009, 19:00

ssneider schreef:Kijk nog is goed naar de file, das die van het spel er naast, Panic Room :) en tis mss een stomme vraag, hoe maar hoe doe je code tags :?


Ah, foutje op de parallel site dan. Ik had de url gekopieerd die onder het poolspel stond.

Om een tekst een bepaalde tag te geven zet je er [naam] [/naam] rond. Code is een van de beschikbare tags, je hebt ook b, i, u, quote, ...

Je kan ook je stuk tekst selecteren en dan op het knopje Code klikken dat boven het tekstvenster staat waar je in typt.
Gebruikersavatar
ssneider
Heeft dit forum graag
Heeft dit forum graag
Berichten: 124
Lid geworden op: 01 nov 2008, 14:34
Locatie: Grimbergen
Contacteer:

Re: Topic G: S6 (botsende ballen)

Berichtdoor ssneider » 25 feb 2009, 19:17

Thx, had ik ni eens gezien 8-)
"If practice makes perfect, and nobody is perfect, why practice?"

Terug naar “Informatica”

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 1 gast

cron