Deze website maakt gebruik van cookies. Waarom? Klik hier voor ons privacy- en cookiebeleid. Door op akkoord te klikken of door gebruik te blijven maken van deze website geeft u aan akkoord te zijn met het gebruik van cookies.

Akkoord

Vraag & Antwoord

Programmeren

[turbo-pascal] Game-Engine

Lodyx
9 antwoorden
  • Hey (alweer :roll: )

    Ik probeer een kleine game te maken maar het lukt niet helemaal.
    Een lijnte (of blokje of wat dan ook) laten bewegen, dat lukt wel, maar ik kom er maar niet achter hoe ik zorg dat je bij een bepaald punt niet verder kan.
    [code:1:15c7742bbe]
    PROGRAM move_line_101; {programmanaam}
    USES GRAPH, CRT; {geef aan welke 'libraries' moeten worden gebruikt}

    VAR {declareer de benodigde variablen}
    drv,config : integer; {voor InitGraph}
    X1, Y1, X2, Y2: longint; {om de coördinaten te bepalen}
    ch : char; {voor ReadKey}

    PROCEDURE IncDec; {de procedure voor het bepalen/wijzigen van de X en Y coordinaten}
    BEGIN
    IF (X1 > 639) OR (X2 > 639) THEN
    BEGIN
    X1 := 1;
    X2 := 20;
    END;
    IF (X1 < 1) OR (X2 < 0) THEN
    BEGIN
    X1 := 619;
    X2 := 639;
    END;
    IF (Y1 > 479) OR (Y2 > 479) THEN
    BEGIN
    Y1 := 1;
    Y2 := 1;
    END;
    IF (Y1 < 1) OR (Y2 < 1) THEN
    BEGIN
    Y1 := 479;
    Y2 := 479;
    END;
    IF ch = #75 THEN
    BEGIN
    Dec(X1,10);
    Dec(X2,10);
    END;
    IF ch = #72 THEN
    BEGIN
    Dec(Y1,5);
    Dec(Y2,5);
    END;
    IF ch = #77 THEN
    BEGIN
    Inc(X1,10);
    Inc(X2,10);
    END;
    IF ch = #80 THEN
    BEGIN
    Inc(Y1,5);
    Inc(Y2,5);
    END;
    END;

    PROCEDURE MoveLine; {Procedure voor het weergeven van de lijn}
    BEGIN
    Line(X1,Y1,X2,Y2);
    END;

    PROCEDURE Message; {spreekt voor zich lijkt me}
    BEGIN
    SetRGBPalette(5,57,32,22);
    SetColor(5);
    OutTextXY(140,406,'Use The Arrow Keys To Move The Line…');
    END;

    BEGIN {het daadwerkelijke programma}
    drv := VGA;
    config := VGAhi;
    initgraph(drv,config,''); {naar de grapische mode gaan}
    X1 := 100; {X en Y coordinaten waardes geven}
    X2 := 120;
    Y1 := 100;
    Y2 := 100;
    line(X1,Y1,X2,Y2); {geef lijn weer}
    message; {spreekt voor zich}
    REPEAT {herhaal het volgende….}
    ch := readkey; {wacht tot een toest word in gedrukt}
    SetFillStyle(solidfill,0);
    bar(x1,y1,x2,y2); {verwijder de vorige lijn}
    SetFillStyle(hatchfill,1);
    bar(180,120,360,240); {maak een blok}
    message; {geef bericht weer}
    SetColor(15);
    IncDec; {wijzig de X en Y coordinaten aan de hand van de ingedrukte toets}
    MoveLine; {verplaats de lijn}
    UNTIL (ch = #68) OR (ch = #27); {…tot dat F10 of Esc wordt ingedrukt}
    END. {dan afsluiten}
    [/code:1:15c7742bbe]
    Hoe zorg ik nou dat de lijn niet 'door' het blok heen kan?
    (heb ff een lijntje genomen omdat dit het minste code kost)
  • Zoek maar eens met Google op
    '2d collision detection' :

    Google search op 2d collision detection
  • Kan je ff dat programma compilen, dan kunnen we even zien hoe het precies gaat. Ik heb nu geen Turbo Pascal bij de hand.
  • [quote:0ccdb0398c="Johan Stokking"]Kan je ff dat programma compilen, dan kunnen we even zien hoe het precies gaat. Ik heb nu geen Turbo Pascal bij de hand.[/quote:0ccdb0398c]
    Als ji het voor me host wel, mijn host laat geen zip's toe . :cry:
  • [quote:b59fa61c27="turbo-pascal"][quote:b59fa61c27="Johan Stokking"]Kan je ff dat programma compilen, dan kunnen we even zien hoe het precies gaat. Ik heb nu geen Turbo Pascal bij de hand.[/quote:b59fa61c27]
    Als ji het voor me host wel, mijn host laat geen zip's toe . :cry:[/quote:b59fa61c27]
    Mail maar naar reg@johan.stokking.nl (mijn spam adres ;) ), ik ben wel benieuwd.
  • Ik kwam net nog een link tegen van een spel in Turbo Pascal:
    Mario

    wimb
  • Johan Stokking, ik heb hem net ff naar je gemailed.

    En Thanx WimB maar zover ben ik nog niet. (snap de code wel, maar wil eerst mijn eigen beginsel :D )
  • [quote:97f6b9054d="turbo-pascal"]Johan Stokking, ik heb hem net ff naar je gemailed.

    En Thanx WimB maar zover ben ik nog niet. (snap de code wel, maar wil eerst mijn eigen beginsel :D )[/quote:97f6b9054d]

    Ik heb hem ja. Hij werkt hier volgens mij, maar gaat er af en toe weer uit (minimalizeert naar taakbalk), ligt volgens mij aan de resolutie (1280 x 1024) of videokaart. Maarre het werkt wel ja, dat streepje kan ik iig bewegen :)
  • // turbo-pascal

    Aangezien dit DOS-code lijkt te zijn … zou je toch gewoon de kleur van de pixel kunnen opvragen ?
    Volgens mij is er namelijk zoiets als 'getpixel' (desnoods lees je rechtstreeks uit het video-geheugen … als je een standaard vga-resolutie hebt gekozen :))
    Als dat niet mogelijk is dan kun je gewoon de achtergrond als bitmap in het geheugen houden en daar in kijken.

    Dus :
    - bereken de nieuwe locatie
    - kijk of de uiteinde van het lijntje op een geldige locatie terechtkomen

    - als het geen goede locatie is roep je een of andere 'fout'-routine aan en wijzig je de coordinaten van je lijntje niet …

    Andere mogelijkheid :
    - leg de locatie & grootte van de 'vijandige' objecten vast
    - voor iedere beweging kijk je of je op een van die objecten uit je lijst bent terechtgekomen …


    btw :
    Ik zou je aanraden om in ieder geval een aantal record-structuren te gebruiken. Al die losse X & Y variabelen gaan problemen opleveren …

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.