Page 1 of 1

Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 11:25 am
by AllAh
Tein piirtokomennoilla ja valmiilla rägdoll-koodilla pelin,10 minuutia kesti. Ensimmäinen pelini jota täällä esittelen :D.
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 
Heh :lol:

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 11:30 am
by AllAh
Ai niin,jätkä tarttuu kiinni tangosta A-näppäimestä,unohtui se lisätä sinne.



Lisäsin sen tuohon koodiin,nyt siellä on se teksti;)

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 11:41 am
by Turtle Productions
Moi

On tosi hyvä peli ja toimii täydellisesti ja millisekuntit kyllä tulee näkyviin :D

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 11:44 am
by AllAh - Guest
Heh,kiitti:D
Tuota jatkan,hieman eri pelimuotoja tulee kohta.
Esim: Pyöritä ukkelia tangossa,päästä irti ja yritä osua roskakoriin:D

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 11:53 am
by Harakka
Pisteenlasku bugaa aika pahasti. Kun jäin tangon viereen, noin kello yhteen siitä katsottuna, pisteitä ropisi joka frame lisää. Suoritukseen menii 960 millisekuntia..

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 11:57 am
by AllAh - Guest
Harakka wrote:Pisteenlasku bugaa aika pahasti. Kun jäin tangon viereen, noin kello yhteen siitä katsottuna, pisteitä ropisi joka frame lisää. Suoritukseen menii 960 millisekuntia..
Aivan,tiedän tuon itsekin. Yritin ensin saada tuollaista huijausta mahdottomaksi(pistää ne x-arvot mahd. lähelle toisiaan) mutta kun silloin pyöri tarpeeksi nopeaa niin niitä pisteitä ei tullut ollenkaan.
Parantelen tuota kohta sillai että jalkojen pitää olla sen tangon yläpuolella kans että niitä pisteitä tulee, tekee sun huijaukset mahdottomiksi(yritäppä vaan seisoa käsillään tuon tangon päällä sillä räsynukella)

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 12:04 pm
by Harakka
Mikset tekisi esimerkiksi niin, että saa aina yhden pisteen, kun on ensin käynyt alhaalla (jalkojen y < tangon y) ja sitten kun on käynyt ylhäällä (jalkojen y > tangon y). Heti kun ollaan tarpeeksi ylhäällä (ja alhaalla on käyty), saadaan yksi piste ja merkataan että alhaalla ei olla käyty. Kun ollaan alhaalla, merkataan että alhaalla on käyty jne.
Tässäkin voisi tietysti huijata menemällä edestakaisin, mutta veikkaan että se on helpompi estää tällaisella systeemillä.

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 12:11 pm
by AllAh -Guest
Harakka wrote:Mikset tekisi esimerkiksi niin, että saa aina yhden pisteen, kun on ensin käynyt alhaalla (jalkojen y < tangon y) ja sitten kun on käynyt ylhäällä (jalkojen y > tangon y). Heti kun ollaan tarpeeksi ylhäällä (ja alhaalla on käyty), saadaan yksi piste ja merkataan että alhaalla ei olla käyty. Kun ollaan alhaalla, merkataan että alhaalla on käyty jne.
Tässäkin voisi tietysti huijata menemällä edestakaisin, mutta veikkaan että se on helpompi estää tällaisella systeemillä.
Voisihan sen noinkin tehdä mutta vaikutus on ihan sama,tuolla räsynukella on mahdoton seistä käsillään. Kun pääsen taas omalle koneelle (pikkuveljet valloitti sen,piti tehdä taktinen peräytyminen) niin korjaan tuon ja sit se roskisversio. Oisko jollain ideaa mitä sen jälkeen,jos ei itsellä tule mitään inspiraatiota?

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 12:21 pm
by Harakka
Suosittelen kyllä edelleen käyttämään sellaista systeemiä, että on käytävä vuorotellen alhaalla ja ylhäällä. Muuten joka kierros saa vähän eri määrän pisteitä riippuen vauhdista, mikä ei varmaankaan ole tarkoitus. Ehdottamalla systeemilläni voitaisiin tarkkaan määritellä, että tee esim. 10 pyörähdystä..

Re: Voimistelua piirtokomennoilla

Posted: Sun Dec 16, 2007 12:59 pm
by AllAh
Harakka wrote:Suosittelen kyllä edelleen käyttämään sellaista systeemiä, että on käytävä vuorotellen alhaalla ja ylhäällä. Muuten joka kierros saa vähän eri määrän pisteitä riippuen vauhdista, mikä ei varmaankaan ole tarkoitus. Ehdottamalla systeemilläni voitaisiin tarkkaan määritellä, että tee esim. 10 pyörähdystä..
Noh,testataan sitten;)