Voimistelua piirtokomennoilla

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
Post Reply
AllAh
Newcomer
Posts: 33
Joined: Mon Oct 08, 2007 8:37 am
Location: Muhos

Voimistelua piirtokomennoilla

Post by AllAh » Sun Dec 16, 2007 11:25 am

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:
Last edited by AllAh on Sun Dec 16, 2007 11:33 am, edited 2 times in total.
Valmiita:
Ragdollvoimistelua
Työn alla:
Rägdollitappelu jolle ei vielä nimeä löydy.
Valmiina:
Ei paljon mitään
Tulossa:
Kakkosplayeri, muutama ase,Bullet time,kenttiä

AllAh
Newcomer
Posts: 33
Joined: Mon Oct 08, 2007 8:37 am
Location: Muhos

Re: Voimistelua piirtokomennoilla

Post by AllAh » Sun Dec 16, 2007 11:30 am

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;)
Valmiita:
Ragdollvoimistelua
Työn alla:
Rägdollitappelu jolle ei vielä nimeä löydy.
Valmiina:
Ei paljon mitään
Tulossa:
Kakkosplayeri, muutama ase,Bullet time,kenttiä

Turtle Productions

Re: Voimistelua piirtokomennoilla

Post by Turtle Productions » Sun Dec 16, 2007 11:41 am

Moi

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

AllAh - Guest

Re: Voimistelua piirtokomennoilla

Post by AllAh - Guest » Sun Dec 16, 2007 11:44 am

Heh,kiitti:D
Tuota jatkan,hieman eri pelimuotoja tulee kohta.
Esim: Pyöritä ukkelia tangossa,päästä irti ja yritä osua roskakoriin:D

User avatar
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Voimistelua piirtokomennoilla

Post by Harakka » Sun Dec 16, 2007 11:53 am

Pisteenlasku bugaa aika pahasti. Kun jäin tangon viereen, noin kello yhteen siitä katsottuna, pisteitä ropisi joka frame lisää. Suoritukseen menii 960 millisekuntia..
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)

AllAh - Guest

Re: Voimistelua piirtokomennoilla

Post by AllAh - Guest » Sun Dec 16, 2007 11:57 am

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)

User avatar
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Voimistelua piirtokomennoilla

Post by Harakka » Sun Dec 16, 2007 12:04 pm

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ä.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)

AllAh -Guest

Re: Voimistelua piirtokomennoilla

Post by AllAh -Guest » Sun Dec 16, 2007 12:11 pm

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?

User avatar
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Voimistelua piirtokomennoilla

Post by Harakka » Sun Dec 16, 2007 12:21 pm

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ä..
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)

AllAh
Newcomer
Posts: 33
Joined: Mon Oct 08, 2007 8:37 am
Location: Muhos

Re: Voimistelua piirtokomennoilla

Post by AllAh » Sun Dec 16, 2007 12:59 pm

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;)
Valmiita:
Ragdollvoimistelua
Työn alla:
Rägdollitappelu jolle ei vielä nimeä löydy.
Valmiina:
Ei paljon mitään
Tulossa:
Kakkosplayeri, muutama ase,Bullet time,kenttiä

Post Reply