%Sun Fighters! V1.5
%"Last updated ", (theDayYouReadThis - theDatelastEdited), " days ago by Drew Martell"
%VARIABLES
var var1, var2, c1, c2, sun, back, ground, face, cnt, sx, sy, line, sunx, suny, file, score1, score2, size, x : int
score1 := 0
score2 := 0
cnt := 0
var timeElapsed, scoreS1, scoreS2, speedS, msg, bestTime : string
var ch : char
var timer := Font.New ("@Terminal:10")
var rec := "Sun Fighter's Best Time.rec"
var ballx1, bally1, ballx2, bally2, vx1, vy1, vx2, vy2, gravity, speed, subSpeed : real
var keys : array char of boolean
open : file, rec, put, mod
close : file
File.Status (rec, size, x, x)
if (size = 0) then
open : file, rec, put, mod
put : file, "0"
close : file
end if
process Sound
Music.Sound (100, 70)
Music.SoundOff
end Sound
procedure Reset
open : file, rec, get
get : file, msg
close : file
bestTime := msg
cnt := 0
c1 := yellow
c2 := 11
sun := brightred
back := black
ground := back + 1
face := black
line := 50
ballx1 := line + maxx - 100
bally1 := line
ballx2 := line + maxx - 150
bally2 := line
vx1 := 5
vy1 := 10
vx2 := 5
vy2 := 10
gravity := .25
sunx := 100
suny := 100
sx := 1
sy := 1
speed := 15
subSpeed := .01
end Reset
procedure Pause
View.Update
Input.Flush
delay (500)
Input.Flush
Input.Pause
end Pause
procedure Intro
Reset
View.Set ("title:Sun Fighters, nocursor")
var title := Font.New ("@Terminal:40")
drawfillbox (0, 0, maxx, maxy, blue)
Font.Draw ("Sun Fighters!!!", 160, 280, title, brightred)
colourback (blue)
colour (white)
locate (12, 14)
put "This is a 1 or 2 player game in which you must dodge the"
locate (13, 20)
put "red hot sun from melting your ass. Have fun!"
locate (14, 33)
colour (56)
put "Press 'Q' to quit"
colour (white)
locate (16, 35)
put "--------------"
locate (17, 35)
put "// CONTROLS //"
locate (18, 35)
put "--------------"
locate (21, 10)
colour (yellow)
put "1P: Left arrow key moves left Right arrow key moves right"
locate (22, 10)
colour (11)
put "2P: 'a' moves left 'd' moves right"
drawbox (50, 30, maxx - 50, maxy - 30, white)
locate (maxrow, 22)
colour (brightgreen)
put "Press 1 or 2 for the ammount of players"
View.Update
Input.Flush
delay (500)
Input.Flush
ch := getchar
if ~ ((ch = '1') or (ch = '2') or (ch = 'q')) then
Intro
end if
if (ch = 'q') then
quit %%%%%%%%%%%%%%%%%%need program to finish without errors%%%%%%%%%%%%%%%%%%%%%%%
end if
end Intro
procedure Save
bestTime := msg
open : file, rec, get
get : file, msg
close : file
if (strint (timeElapsed)) > (strint (msg)) then
open : file, rec, put, mod
put : file, timeElapsed
close : file
end if
end Save
procedure Player1
drawfilloval (round (ballx1), round (bally1), 10, 10, c1) %body
drawoval (round (ballx1), round (bally1), 10, 10, face) %body outline
drawfilloval (round (ballx1) - 3, round (bally1) + 2, 1, 1, face) %left eye
drawfilloval (round (ballx1) + 3, round (bally1) + 2, 1, 1, face) %right eye
drawfillarc (round (ballx1), round (bally1) - 2, 2, 4, 180, 360, face) %smile
end Player1
procedure Player2
drawfilloval (round (ballx2), round (bally2), 10, 10, c2) %body
drawoval (round (ballx2), round (bally2), 10, 10, face) %body outline
drawfilloval (round (ballx2) - 3, round (bally2) + 2, 1, 1, face) %left eye
drawfilloval (round (ballx2) + 3, round (bally2) + 2, 1, 1, face) %right eye
drawfillarc (round (ballx2), round (bally2) - 2, 2, 4, 180, 360, face) %smile
end Player2
procedure Sun
drawfilloval (round (sunx), round (suny), 100, 100, sun) %sun body
drawfilloval (round (sunx) - 40, round (suny) + 30, 10, 10, face) %left eye
drawfilloval (round (sunx) + 40, round (suny) + 30, 10, 10, face) %right eye
drawfillarc (round (sunx), round (suny) - 2, 80, 80, 180, 360, face) %smile
drawoval (round (sunx), round (suny), 100, 100, face) %sun outline
end Sun
proc Main
View.Set ("offscreenonly")
Reset
loop
scoreS1 := intstr (score1)
scoreS2 := intstr (score2)
timeElapsed := intstr (cnt div 50)
speedS := realstr (speed, 0)
cnt += 1
%Painting
drawfillbox (0, 0, maxx, maxy, back) %background
drawfillbox (0, 0, maxx, line, ground) %floor
Font.Draw ("Player 1: " + scoreS1, 10, 20, timer, c1)
Font.Draw ("Player 2: " + scoreS2, 110, 20, timer, c2)
Font.Draw ("TIME:" + timeElapsed, maxx - 170, 20, timer, sun)
Font.Draw ("BEST:" + bestTime, maxx - 100, 20, timer, black)
Font.Draw ("SPEED:" + speedS, (maxx div 2) - 50, 20, timer, back)
Player1
Player2
Sun
%Variables changing
ballx1 += vx1
bally1 += vy1
ballx2 += vx2
bally2 += vy2
sunx += sx
suny += sy
vy1 -= gravity
vy2 -= gravity
%Boundaries
if vy1 = -10 then
vy1 := 10 - gravity
fork Sound
end if
if vy2 = -10 then
vy2 := 10 - gravity
end if
if ballx1 + 15 >= maxx then
fork Sound
ballx1 -= 1
vx1 *= -1
end if
if ballx2 + 15 >= maxx then
fork Sound
ballx2 -= 1
vx2 *= -1
end if
if ballx1 <= 0 then
fork Sound
ballx1 += 1
vx1 *= -1
end if
if ballx2 <= 0 then
fork Sound
ballx2 += 1
vx2 *= -1
end if
if suny = 100 or suny = maxy - 100 then
sy := -sy
elsif (sunx = 100) or (sunx = maxx - 100) then
sx := -sx
end if
%Controlls
Input.KeyDown (keys)
if keys (KEY_RIGHT_ARROW) then
vx1 += 1
speed -= subSpeed
end if
if keys (KEY_LEFT_ARROW) then
vx1 -= 1
speed -= subSpeed
end if
if (ch = '2') then
if keys ('d') then
vx2 += 1
speed -= subSpeed
end if
if keys ('a') then
vx2 -= 1
speed -= subSpeed
end if
end if
%Player/Player collision
if (whatdotcolour (round (ballx1), round (bally1)) = c2) then
end if
if (whatdotcolour (round (ballx2), round (bally2)) = c1) then
end if
%Sun collision detection
colourback (back)
colour (white)
locate (3, 23)
if (ch = '2') then
if (whatdotcolour (round (ballx2), round (bally2)) = sun) then
put "Player 1 Wins! Press any key to continue..."
score1 += 1
Save
Pause
Intro
end if
end if
if (whatdotcolour (round (ballx1), round (bally1)) = sun) then
put "Player 2 Wins! Press any key to continue..."
score2 += 1
Save
Pause
Intro
end if
View.Update
delay (round (speed))
speed -= .0025
end loop
end Main
Intro
Main
|