Kirjautuminen

Haku

Tehtävät

Keskustelu: Projektit: Pong

Jogge [27.04.2003 18:27:01]

#

Pelissä pompotellaan palloa kahden "mailan" välillä, peli on siis kahdelle pelaajalle, koska en jaksanut vääntää siihen tietokonepelaajaa. Pelin grafiikka on mustavalkoista karua ja palikkamaista. Peli ei välttämättä tottele näppäimistöä, mutta eipä sitä näppäimistön lukemista kovinkaan paljoa paremmin voi tehdä QB:lla, muitakin pikku bugeja voi löytyä.

'Jogen pikku peli :)
DECLARE SUB paivitaruutu ()
DECLARE SUB pyyhi ()
DECLARE FUNCTION tarkistapallo! ()
DECLARE SUB paivitainfo ()

RANDOMIZE TIMER
SCREEN 7 'menn??n grafiikkatilaan
DEF SEG = 0
POKE &H417, 1 'numlock pois
TYPE pallo
  x AS SINGLE
  y AS SINGLE
  z AS SINGLE
END TYPE

TYPE maila
  p AS SINGLE
  x AS SINGLE
  y AS SINGLE
END TYPE

DIM SHARED ball AS pallo
DIM SHARED pl(1) AS maila

CONST xkorj = 5 'asetetaan vakiot
CONST ykorj = 5
CONST pi = 3.141593

LINE (5, 5)-(315, 10), 15, BF 'piirret??n pelialue
LINE (5, 160)-(315, 165), 15, BF

DO
  paivitainfo
  ball.z = CINT(RND * 4) * pi / 2 + pi / 4 'pallon alkusuunta
  ball.x = 155 'asetetaan alkuarvot
  ball.y = 75
  pl(0).x = 20
  pl(0).y = 75
  pl(1).x = 290
  pl(1).y = 75
  n72 = 0: n80 = 0: n30 = 0: n16 = 0 'nollataan n?pp?imet
  paivitaruutu
  LOCATE 5, 13: PRINT "Paina speissii"
  DO
    IF INP(&H60) = 1 THEN END 'odotetaan ett? painetaan speissi? tai esci?
  LOOP UNTIL INKEY$ = " "
  LOCATE 5, 13: PRINT STRING$(14, " ")
  DO
    pyyhi
    n = INP(&H60) 'luetaan n?ppist? muuttujaan
    turha$ = INKEY$

    IF INP(&H60) = 1 THEN END   'katotaan onko n?pp?ini? pohjassa
    IF n = 72 THEN n72 = -1
    IF n = 80 THEN n80 = -1
    IF n = 16 THEN n16 = -1
    IF n = 30 THEN n30 = -1
    IF n = 72 + 128 THEN n72 = 0
    IF n = 80 + 128 THEN n80 = 0
    IF n = 16 + 128 THEN n16 = 0
    IF n = 30 + 128 THEN n30 = 0
    IF n72 THEN pl(1).y = pl(1).y - 1 'liikutellaan mailoja
    IF n80 THEN pl(1).y = pl(1).y + 1
    IF n16 THEN pl(0).y = pl(0).y - 1
    IF n30 THEN pl(0).y = pl(0).y + 1

    IF pl(0).y > 144 THEN pl(0).y = 144 'tarkistetaan ett? mailat pysyv?t sallitulla alueella
    IF pl(1).y > 144 THEN pl(1).y = 144
    IF pl(0).y < 16 THEN pl(0).y = 16
    IF pl(1).y < 16 THEN pl(1).y = 16

    IF ball.z > 2 * pi THEN ball.z = ball.z - 2 * pi 'pidet??n pallon kulma sallituissa rajoissa
    IF ball.z < 0 THEN ball.z = ball.z + 2 * pi

    ball.x = ball.x + SIN(ball.z) * 2 'liikutetaan palloa
    ball.y = ball.y + COS(ball.z) * 2

    o = tarkistapallo

    paivitaruutu

    DO: LOOP UNTIL (INP(&H3DA) AND 8) <> 0 'hidastus
    DO: LOOP UNTIL (INP(&H3DA) AND 8) = 0
  LOOP UNTIL o <> 0
  pyyhi
  pl(o - 1).p = pl(o - 1).p + 1 'lis?t??n piseet
LOOP

SUB paivitainfo
  LOCATE 23, 2: PRINT "Pelaaja 1:"; pl(0).p
  LOCATE 23, 20: PRINT "Pelaaja 2:"; pl(1).p
END SUB

SUB paivitaruutu
  LINE (ball.x - 2 + xkorj, ball.y - 2 + ykorj)-(ball.x + 2 + xkorj, ball.y + 2 + ykorj), 15, BF

  LINE (pl(0).x - 2 + xkorj, pl(0).y - 10 + ykorj)-(pl(0).x + 2 + xkorj, pl(0).y + 10 + ykorj), 15, BF
  LINE (pl(1).x - 2 + xkorj, pl(1).y - 10 + ykorj)-(pl(1).x + 2 + xkorj, pl(1).y + 10 + ykorj), 15, BF
END SUB

SUB pyyhi
  LINE (ball.x - 2 + xkorj, ball.y - 2 + ykorj)-(ball.x + 2 + xkorj, ball.y + 2 + ykorj), 0, BF

  LINE (pl(0).x - 2 + xkorj, pl(0).y - 10 + ykorj)-(pl(0).x + 2 + xkorj, pl(0).y + 10 + ykorj), 0, BF
  LINE (pl(1).x - 2 + xkorj, pl(1).y - 10 + ykorj)-(pl(1).x + 2 + xkorj, pl(1).y + 10 + ykorj), 0, BF
END SUB

FUNCTION tarkistapallo
  IF ball.y > 150 THEN 'jos pallo osuu alareunaan...
    ball.y = ball.y - 1
    ball.z = pi - ball.z
  END IF

  IF ball.y < 10 THEN 'jos pallo osuu yl?reunaan...
    ball.y = ball.y + 1
    ball.z = pi - ball.z
  END IF

  'jos pallo osuu mailaan...
  IF ball.x > 285 AND ball.x < 290 AND ball.y > pl(1).y - 10 AND ball.y < pl(1).y + 10 THEN
    ball.x = ball.x - 1
    ball.z = 2 * pi - ball.z + (RND * .5 - .25)
  END IF

  'jos pallo osuu mailaan...
  IF ball.x < 25 AND ball.x > 20 AND ball.y > pl(0).y - 10 AND ball.y < pl(0).y + 10 THEN
    ball.x = ball.x + 1
    ball.z = 2 * pi - ball.z + (RND * .5 - .25)
  END IF

  'jos pallo menee mailan ohi...
  IF ball.x < 5 THEN tarkistapallo = 2
  IF ball.x > 305 THEN tarkistapallo = 1

END FUNCTION

Antti Laaksonen [28.04.2003 18:02:44]

#

Eipä vienyt paljon tilaa. Muutenkin hyvä esimerkki aiheesta.

Sami [28.04.2003 18:23:22]

#

Olin itsekin tehnyt joskus pongin, mutta siitä tuli liian hidas (olisi pitänyt korvata tekemäni pallo jonkinlaisella "asciipallolla")

miiro [30.05.2004 20:27:30]

#

perinteinen pong! cool!

Juhko [01.01.2007 12:50:38]

#

Sikahyvä peli. Itse vähän parantelin koodia omalle koneelleni.

Chaosworm [02.03.2007 10:33:37]

#

Ihan hyvä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta