All pastes #278783 Raw Edit

Something

public text v1 · immutable
·published 2006-12-14 12:11 UTC
rendered paste body
REMSTART

- Connect
-

REMEND

`App Settings
SET WINDOW ON:SET WINDOW LAYOUT 1,Pong,1:SET WINDOW POSITION SCREEN WIDTH()/2,SCREEN HEIGHT()/2
SET CURSOR SCREEN WIDTH()/2,SCREEN HEIGHT()/2:PRINT "pong.":WAIT 5000:CLS
RANDOMIZE TIMER():SET TEXT SIZE 35:INK RGB(255,255,255),RGB(255,255,255):SET TEXT FONT "Verdana":LOAD DLL "Kernel32",3:DISABLE SYSTEMKEYS:SET TEXT TO BOLD
INPUT "Host or Client(h/c): ",status$
INPUT "IP: ",IP$
PRINT "- connecting -"

SYNC ON:SYNC RATE 0

status$ = UPPER$(status$)
IF status$ = "H"
   connected = THost(IP$,2,"Host")
ELSE
   connected = TJoin(IP$,"Client")
ENDIF

IF connected
   PRINT "connection established"
   WAIT 2000
   CLS
ELSE
   PRINT "connection failed"
   PRINT "ending program"
   WAIT 4000
   END
ENDIF

`Player Setup
TYPE playerStat
   paddleY#
   paddleHeight#
   paddleWidth#
   paddleSpeed#
   paddleDist#
   score
   direction
   upKeystate
   downKeystate
ENDTYPE

DIM players(2) AS playerStat

FOR p = 1 TO 2
   players(p).paddleHeight# = 50
   players(p).paddleWidth# = 10
   players(p).paddleSpeed# = .5
   players(p).paddleY# = (SCREEN HEIGHT()/2)-(players(p).paddleHeight#/2)
NEXT x

players(1).paddleDist# = 10
players(1).upKeystate = 17
players(1).downKeystate = 31

players(2).paddleDist# = SCREEN WIDTH()-20
players(2).upKeystate = 200
players(2).downKeystate = 208

`Ball Setup
TYPE ballStat
   hit
   x#,y#
   xSpeed#,ySpeed#
   acceleration#
   wallFreq
   wallDur
   paddleFreq
   paddleDur
ENDTYPE

GLOBAL ball AS ballStat

ball.x# = SCREEN WIDTH()/2
ball.y# = SCREEN HEIGHT()/2
ball.wallFreq = 300
ball.wallDur = 30
ball.paddleFreq = 100
ball.paddleDur = 30
ball.acceleration# = 1.05

spawnBall()

`Line Setup
#CONSTANT lineTotal = 40
#CONSTANT lineGap = 2

`Other junk
GLOBAL width
GLOBAL height
GLOBAL maxScore

width = SCREEN WIDTH()
height = SCREEN HEIGHT()
maxScore = 10

`Main Loop
WHILE NOT ESCAPEKEY()

   CLS

   IF gameStarted
      
      DEC players(1).paddleY#,(KEYSTATE(players(1).upKeystate)-KEYSTATE(players(1).downKeystate))*players(1).paddleSpeed#
   
      IF TConnected()
        TPutFloat (KEYSTATE(players(1).upKeystate)-KEYSTATE(players(1).downKeystate))
        IF status$ = "H"
            TPutFloat SCREEN WIDTH()-ball.x#
            TPutFloat ball.y#
            TPutFloat wallHit
            TPutFloat paddleHit
            TPutFloat players(1).score
            TPutFloat players(2).score
        ENDIF
        TSendAll
        REPEAT
           msg = TGetMessage()
           IF msg
               DEC players(2).paddleY#,TGetFloat()*players(2).paddleSpeed#
               IF status$ = "C"
                  ball.x# = TGetFloat()
                  ball.y# = TGetFloat()
                  wallHit = TGetFloat()
                  paddleHit = TGetFloat()
                  players(1).score = TGetFloat()
                  players(2).score = TGetFloat()
                  IF wallHit THEN CALL DLL 3,"Beep",ball.wallFreq,ball.wallDur
                  IF paddleHit THEN CALL DLL 3,"Beep",ball.paddleFreq,ball.paddleDur
               ENDIF
           ENDIF
        UNTIL NOT msg
      ENDIF
   
      `Cycle through both players, handling movement/paddle display
      FOR p = 1 TO 2
         players(p).direction = KEYSTATE(players(p).upKeystate)-KEYSTATE(players(p).downKeystate)
         IF players(p).paddleY# > HEIGHT-players(p).paddleHeight# THEN players(p).paddleY# = HEIGHT-players(p).paddleHeight#
         IF players(p).paddleY# < 0 THEN players(p).paddleY# = 0
         BOX players(p).paddleDist#,players(p).paddleY#,players(p).paddleDist#+players(p).paddleWidth#,players(p).paddleY#+players(p).paddleHeight#
      NEXT p
   
      IF status$ = "H"
         `Move the ball
         INC ball.x#,ball.xSpeed#
         INC ball.y#,ball.ySpeed#
      
         `Check if the ball is scored
         IF ball.x# < 0 THEN ball.x# = 0:ball.xSpeed# = ABS(ball.xSpeed#):ball.x# = WIDTH/2:ball.y# = WIDTH/2:INC players(2).score,1:spawnBall()
         IF ball.x# > WIDTH THEN ball.x# = WIDTH:ball.xSpeed# = -ball.xSpeed#:ball.x# = WIDTH/2:ball.y# = WIDTH/2:INC players(1).score,1:spawnBall()
      
         `Check if the ball hits a top or bottom wall
         IF ball.y# < 0 THEN ball.y# = 0:ball.ySpeed# = ABS(ball.ySpeed#):CALL DLL 3,"Beep",ball.wallFreq,ball.wallDur
         IF ball.y# > HEIGHT THEN ball.y# = HEIGHT:ball.ySpeed# = -ball.ySpeed#:CALL DLL 3,"Beep",ball.wallFreq,ball.wallDur
      
         `Check if the ball hits a paddle
         FOR p = 1 TO 2
            IF ball.x# > players(p).paddleDist# AND ball.x# < players(p).paddleDist#+players(p).paddleWidth#
               IF ball.y# > players(p).paddleY# AND ball.y# < players(p).paddleY# + players(p).paddleHeight#
                  ball.xSpeed# = (-ball.xSpeed#)* ball.acceleration#
                  ball.ySpeed# = (ball.ySpeed# * ball.acceleration#)
                  IF players(p).direction
                     ball.ySpeed# = players(p).direction*(-(ABS(ball.ySpeed#)))
                  ENDIF
                  IF p = 1
                     ball.x# = players(p).paddleDist#+players(p).paddleWidth#
                  ELSE
                     ball.x# = players(p).paddleDist#-players(p).paddleWidth#
                  ENDIF
                  CALL DLL 3,"Beep",ball.paddleFreq,ball.paddleDur
               ENDIF
            ENDIF
         NEXT p
      ENDIF
      FOR p = 1 TO 2
         `Check if a player wins
         IF players(p).score >= maxScore
            CLS
            PRINT "Player "+STR$(p)+" wins."
            WAIT 3000
            PRINT "...yay."
            WAIT 3000
            END
         ENDIF
      NEXT p
   
      `Display the ball
      BOX ball.x#-5,ball.y#-5,ball.x#+5,ball.y#+5
   
      `Display the grid lines
      FOR x = 1 TO lineTotal STEP lineGap
         lineLength = HEIGHT/lineTotal
         x1# = WIDTH/2
         y1# = lineLength*x
         x2# = x1#
         y2# = y1# + lineLength
         BOX x1#-2,y1#,x2#+2,y2#
      NEXT x
   
      `Display the player scores
      TEXT 100,0,"P1: "+STR$(players(1).score)
      TEXT WIDTH-100,0,"P2: "+STR$(players(2).score)

   ELSE
      
      IF status$ = "H"  
         spawnBall()
         TEXT 0,0,"Press the spacekey to start the game"
         IF SPACEKEY() THEN gameStarted = 1:TPutFloat gameStarted:TSendAll
      ELSE
         TEXT 0,0,"Waiting for the host to start the game"
         msg = TGetMessage()
         IF msg THEN gameStarted = TGetFloat()
      ENDIF
      
   ENDIF
   `Refresh that there screen mkay
   TSYNC
   SYNC

`Repeat until the user presses escape
ENDWHILE

`Wipe everything
END

`Ball spawning function
FUNCTION spawnBall()
   xDir = RND(1)
   IF xDir
      ball.xSpeed# = .3
   ELSE
      ball.xSpeed# = -.3
   ENDIF
   ball.ySpeed# = -.3+(.1*(RND(10)))
   IF ball.xSpeed# = 0 THEN ball.xSpeed# = .1
   IF ball.ySpeed# = 0 THEN ball.ySpeed# = .1
ENDFUNCTION