Pelissä tavoitteena on pyöriä tangon ympäri niin kauan että saa yli 1000 pistettä.Sitten näytetään kulunut aika millisekuntaina(kai?).
Siitä kopioit editoriin ja pelaat:
Code: Select all
Setwindow "Voimistelupeli"
FrameLimit 100
SCREEN 800,600,32,cbfullscreen
// ihminen koostuu (tässä tapauksessa) yhdestätoista pisteestä, joilla jokaisella
// on nykyinen ja edellinen sijainti xy - tasolla.
// Ideana on pitää jokainen piste vakioetäisyydellä määritellyistä pisteistä, jolloin ne käyttäytyvät realisisen oloisesti
ajastin=0
Dim xPosition(11) As Float
Dim yPosition(11) As Float
Dim previousXposition(11) As Float
Dim previousYposition(11) As Float
Const PAINOVOIMA = -0.05 // painovoima ( negatiivinen = alaspäin, positiivinen = ylöspäin)
Const ACCURACY = 20 // tarkkuus (mitä suurempi luku, sitä tarkempi, 1=minimi)
resetDoll()
pisteet=0
Repeat
Text 200,20,"T-F-G-H = Liikuta nukkea"
Text 200,40,"A = Tartu tangosta"
Circle +415,+275,10,ON
If KeyDown(cbkeyh) Then
xposition(7)=xposition(7)+1
ElseIf KeyDown(cbkeyf) Then
xposition(7)=xposition(7)-1
If KeyHit(19) Then resetDoll()
EndIf
If KeyDown(cbkeyt) Then
yposition(7)=yposition(7)+1
ElseIf KeyDown(cbkeyg) Then
yposition(7)=yposition(7)-1
EndIf
If KeyDown(cbkeya) Then
xposition(9)=+20
yposition(9)=+20
EndIf
If xposition(7)>15 And xposition(7)<25 And yposition(7)>15 And yposition(7)<100 Then
pisteet=pisteet+10
EndIf
Text 400,20,"Points:"+pisteet
If pisteet<1000 Then ajastin=ajastin+1
If pisteet>1000 Then Text 300,300,"Onnea,käytit suoritukseen "+ajastin
If pisteet>1000 Then Text 300,320,"millisekuntia"
Color cbred
// lasketaan fysiikat
simulate()
// piirretään pää "suunnilleen" oikealle paikalle
kulma = GetAngle(xPosition(6),yPosition(6),xPosition(7),yPosition(7))
Circle ScreenWidth()/2+Cos(kulma)*20+xPosition(7),ScreenHeight()/2-(Sin(kulma+180)*20+yPosition(7)),20,0
DrawScreen
Forever
Function Simulate()
// lasketaan jokaiselle pisteelle uusi sijainti
For i=1 To 11
calculateNewXposition(i)
calculateNewYposition(i)
Next i
// pisteet siirretään ACCURACY:n mukaan joko kerran tai useita kertoja vakioetäisyydelle toisistaan
For i=1 To ACCURACY
// parametrit = ensimmäisen pisteen sijainti taulukossa, toisen pisteen sijainti taulukossa, pidettävä välimatka
sustainDistance(1,2,25)
sustainDistance(2,3,25)
sustainDistance(3,4,25)
sustainDistance(4,5,25)
sustainDistance(3,6,25)
sustainDistance(6,7,25)
sustainDistance(7,8,25)
sustainDistance(8,9,25)
sustainDistance(7,10,25)
sustainDistance(10,11,25)
// pisteet eivät saa ylittää pelikenttää
For j=1 To 11
xPosition(j) = Min(Max(-300,xPosition(j)),300)
yPosition(j) = Min(Max(-300,yPosition(j)),300)
Next j
Next i
//piirretään viivat
drawLine(1,2)
drawLine(2,3)
drawLine(3,4)
drawLine(4,5)
drawLine(3,6)
drawLine(6,7)
drawLine(7,8)
drawLine(8,9)
drawLine(7,10)
drawLine(10,11)
EndFunction
Function calculateNewXposition(pointNumber)
temp# = xPosition(pointNumber)
xPosition(pointNumber) = 2*xPosition(pointNumber) - previousXposition(pointNumber) // + kiihtyvyys X-suunnassa
previousXposition(pointNumber) = temp#
EndFunction
Function calculateNewYposition(pointNumber)
temp# = yPosition(pointNumber)
yPosition(pointNumber) = 2*yPosition(pointNumber) - previousYposition(pointNumber) + PAINOVOIMA // * PAINOVOIMAn tilalle voi sijoittaa minkä tahansa Y-suuntaisen kiihtyvyyden
previousYposition(pointNumber) = temp#
EndFunction
Function sustainDistance(firstPoint, secondPoint, distanceToSustain#)
xDistance# = (xPosition(firstPoint) - xPosition(secondPoint))
yDistance# = (yPosition(firstPoint) - yPosition(secondPoint))
currentDistance# = Sqrt(xDistance#^2+yDistance#^2)
multiplier# = (currentDistance#-distanceToSustain#)/currentDistance#
xPosition(firstPoint) = xPosition(firstPoint) - xDistance#*0.5*multiplier#
yPosition(firstPoint) = yPosition(firstPoint) - yDistance#*0.5*multiplier#
xPosition(secondPoint) = xPosition(secondPoint) + xDistance#*0.5*multiplier#
yPosition(secondPoint) = yPosition(secondPoint) + yDistance#*0.5*multiplier#
EndFunction
Function drawLine(firstPoint, secondPoint)
Line xPosition(firstPoint)+ScreenWidth()/2,ScreenHeight()/2-yPosition(firstPoint),xPosition(secondPoint)+ScreenWidth()/2,ScreenHeight()/2-yPosition(secondPoint)
EndFunction
Function resetDoll()
xPosition(1) = -50
yPosition(1) = -50
previousXposition(1) = -50
previousYposition(1) = -50
xPosition(2) = -25
yPosition(2) = -50
previousXposition(2) = -25
previousYposition(2) = -50
xPosition(3) = 0
yPosition(3) = -50
previousXposition(3) = 0
previousYposition(3) = -50
xPosition(4) = 25
yPosition(4) = -50
previousXposition(4) = 25
previousYposition(4) = -50
xPosition(5) = 50
yPosition(5) = -50
previousXposition(5) = 50
previousYposition(5) = -50
xPosition(6) = 0
yPosition(6) = -25
previousXposition(6) = 0
previousYposition(6) = -25
xPosition(7) = 0
yPosition(7) = 0
previousXposition(7) = 0
previousYposition(7) = 0
xPosition(8) = -25
yPosition(8) = 0
previousXposition(6) = -25
previousYposition(6) = 0
xPosition(9) = -50
yPosition(9) = 0
previousXposition(9) = -50
previousYposition(9) = 0
xPosition(10) = 25
yPosition(10) = 0
previousXposition(10) = 25
previousYposition(10) = 0
xPosition(11) = 50
yPosition(11) = 0
previousXposition(11) = 50
previousYposition(11) = 0
EndFunction