Aikamatkustussysteemi

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
Mickey
Newcomer
Posts: 33
Joined: Sat Feb 09, 2008 10:32 am
Location: Liminka

Aikamatkustussysteemi

Post by Mickey »

Littlegreenin luoman ajankelausesimerkin (ei julkaistu) pohjalta loin tällaisen järjestelmän. Tähän kun lisätään vielä historian kulun muuttaminen (jonka olen jo suunnitellut) pitäisi saada aikaan varsin mielenkiintoisia pelejä. Itse olen ainakin suunnitellut sellaisia vielä tekeväni :mrgreen:

Code: Select all

 FrameLimit 50

players=1
Const x=1 'Sijainti X-akselilla
Const y=2 'Sijainti Y-akselilla
Const t=3 'sijainti kotihetkestä menneisyyteen

//TAULUKOINTI
Dim player(players,3,1500) As Float
in_past = 0 'nykyinen aika, jossa menneisyydessä ollaan
past_travel = 3 'aikamatkustusnopeus

Repeat
    
//LÄPIKÄYNTI
    For i=1 To players
    
//MÄÄRITETÄÄN MENNEISYYTTÄ
    For a=1500 To 1 Step -1
    player(i,x,a)=player(i,x,a-1)
    player(i,y,a)=player(i,y,a-1)
    player(i,t,a)=player(i,t,a-1)
    Next a
    
    
    player(i,x,0)=player(i,x,0)+((RightKey()-LeftKey())*2)
    player(i,y,0)=player(i,y,0)+((DownKey()-UpKey())*2)
    player(i,t,0)=in_past
    
    If KeyDown(cbKeyQ)=1 And KeyDown(cbKeyA)=0 Then past_travel + 1 
    If KeyDown(cbKeyA)=1 And KeyDown(cbKeyQ)=0 Then past_travel - 1
    If KeyDown(cbKeyS)=1 And KeyDown(cbKeyW)=0 Then in_past = in_past + past_travel 
    If KeyDown(cbKeyW)=1 And KeyDown(cbKeyS)=0 Then in_past = in_past - past_travel
    
    in_past - 1
    If KeyDown(cbKeyE) = 1 Then in_past + 2 'Hetkeen pysähtyminen
    If in_past > 1500 Then in_past = 1500
    If in_past < 0 Then in_past = 0
    If past_travel < 3 Then past_travel = 3

//MINÄSI
    Color cbWhite
    Box player(i,x,0)-5,player(i,y,0)-5,10,10
//Entiset minäsi
    For j = 1 To 1500
        If player (i,t,j) = in_past - j Then Box player(i,x,j)-5,player(i,y,j)-5,10,10
    Next j
    Next i
    
    
    
    Text 0,20,FPS() + "     " + in_past + "     " + past_travel
    
    DrawScreen
Forever 
Näppäimet:
Liikkuminen: nuolet
Ajassa liikkuminen: W & S
Aikamatkustusnopeuden säätö: Q & A
Ajassa pysähtyminen: E
EDIT:

Miksikähän kukaan ei kommentoi? :(

EDIT:

Yleisön pyynnöstä hieman lisäselvennystä:
Tässä esimerkissä voit liikuttaa valkoista neliötä tilan lisäksi myös ajassa (aikakone-periaatteella, ei siis kelausta) ja nähdä samassa hetkessä oleskelleet aiemmat minäsi. Historia tallentuu puolen minuutin ajalta.

Last edited by Mickey on Fri Jan 09, 2009 3:15 pm, edited 2 times in total.
4-Dimensional Games:
Kotisivu (Täältä löydät tietoja sekä peliemme latauslinkit.)
Facebook-sivu (Täältä löydät esimerkiksi uutisia peliemme ja sivumme päivityksistä.)
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Aikamatkustussysteemi

Post by axu »

Aika mielenkiintoinen systeemi, pitää vähän syventyä että ymmärtää sen. En näe tästä ainakaan itselleni hyötyä, mutta jatka tämän kehittämistä ja hyvä tulee :D

Mickey wrote:Miksikähän kukaan ei kommentoi? :(
Sen jos keksit kerro mullekkin, sama ongelma :/
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
KankiKalle
Active Member
Posts: 170
Joined: Mon Jun 23, 2008 9:04 pm

Re: Aikamatkustussysteemi

Post by KankiKalle »

Sitten kun älysin miten tämä toimii, älysin että tämähän on hieno systeemi! :lol: Mukavan erilainen idea, täytyy myöntää. Jos olisit selventänyt hieman mitä tässä tapahtuisi jne. niin moni varmasti ymmärtäisi paremmin mitä olet yrittänyt kertoa tällä systeemillä. Minulta kesti aika kauan (10 min :shock: ) ymmärtää mitä tässä piti tehdä.
Ja kärsivällisyydellä pääse pitkälle. Ei kaiken täydy tapahtua heti. Odota. Se ei vie kun hetken aikaa. Ja sinä itse määrät kuinka paljon se hetki on ;) Ja sitten kun joku on kommentoinut, se hetki on ohi. Nuoren, ei niin viisaan ja hieman oudon tyypin opetuksia osa1.
Väsyttää niin ettei jaksa edes mennä lepäämään.
Mickey
Newcomer
Posts: 33
Joined: Sat Feb 09, 2008 10:32 am
Location: Liminka

Re: Aikamatkustussysteemi

Post by Mickey »

Kiitos rohkaisevista kommenteistanne (ne ovat ensimmäisen esimerkkinsä julkaisseelle tärkeitä ;) ). Jatkan toki tämän kehittelyä, sanoinhan aikovani tehdä tähän pohjautuvia pelejä. Saatanpa vielä julkaista jotain esimerkkiä siitä historian kulun muuttamisesta.
axu wrote: En näe tästä ainakaan itselleni hyötyä...
Tjep, tämä ei ole mikään kovin yleishyödyllinen esimerkki... :roll:
4-Dimensional Games:
Kotisivu (Täältä löydät tietoja sekä peliemme latauslinkit.)
Facebook-sivu (Täältä löydät esimerkiksi uutisia peliemme ja sivumme päivityksistä.)
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: Aikamatkustussysteemi

Post by kaneli2000 »

Nyt meni yli hilseen. En tajunnut tosta mitään.

...mutta jos sinä Mickey tajuat, niin saadan nähdä vielä hienoja pelejä.
I see the rainbow rising
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Aikamatkustussysteemi

Post by MaGetzUb »

Helpompihan olisi tehdä typeillä tuollainen systeemi.. (Helpompi ja helpompi -.-) Mutta siitä saisi silti paljon kaistakkaamman, kuin taulukoilla.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Aikamatkustussysteemi

Post by nevssons »

programmer of DSG wrote:Helpompihan olisi tehdä typeillä tuollainen systeemi.. (Helpompi ja helpompi -.-) Mutta siitä saisi silti paljon kaistakkaamman, kuin taulukoilla.
Yhdellä objektilla kyllä, mutta jos olisi useampi object joutuisit määrittämään jokaiselle oman tyypin. Ja kyllä minä oisin tämänkin hoitanut taulukoilla.
Koodarina kohtalainen, henkilönä vittumainen
Image
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Aikamatkustussysteemi

Post by KilledWhale »

Yksi mahdollisuus olisivat myös muistipalat jolloin tyyppimäärityksiä ei tarvittaisi. Muistipalan osoitteen voisi puskea talteen objektiin ojbectintegerin avulla
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
Mickey
Newcomer
Posts: 33
Joined: Sat Feb 09, 2008 10:32 am
Location: Liminka

Re: Aikamatkustussysteemi

Post by Mickey »

Taulukko on tuon edellämainitun Littlegreenin esimerkin peruja. Muistipaloja en tajua ( :oops: ) eikä objectintegeristä olisi hyötyä ainakaan seuraavassa projektissani, koska teen sen piirtokomennoilla.
kaneli2000 wrote:Nyt meni yli hilseen. En tajunnut tosta mitään.

...mutta jos sinä Mickey tajuat, niin saadan nähdä vielä hienoja pelejä.
Jos siis oikein ymmärsin, tajuat kyllä aikamatkustuksen ja kenties tuon ohjelmanikin, muttet sen koodia etkä sen tarjoamaa esimerkkiä. Korjaa jos olen väärässä. :)
4-Dimensional Games:
Kotisivu (Täältä löydät tietoja sekä peliemme latauslinkit.)
Facebook-sivu (Täältä löydät esimerkiksi uutisia peliemme ja sivumme päivityksistä.)
mrZalli
Newcomer
Posts: 1
Joined: Mon Mar 01, 2010 1:40 pm

Re: Aikamatkustussysteemi

Post by mrZalli »

Woo. Hieno systeemi. Voisin kokeilla käyttää tätä jos vain löydän idean ja innostuksen. :)
User avatar
Frozen
Advanced Member
Posts: 282
Joined: Fri Jan 01, 2010 4:46 pm
Location: Suomi

Re: Aikamatkustussysteemi

Post by Frozen »

mrZalli wrote:Woo. Hieno systeemi. Voisin kokeilla käyttää tätä jos vain löydän idean ja innostuksen. :)
Ja tuon takia piti nostaa näin vanha topikki?
EDIT:

Mutta kyllä tälläistä systeemiä käyttämällä voisi luoda pienen Braidia muistuttavan pelin.

Image
Työn alla:
Jotakin epäjulkaistua
Mickey
Newcomer
Posts: 33
Joined: Sat Feb 09, 2008 10:32 am
Location: Liminka

Re: Aikamatkustussysteemi

Post by Mickey »

mrZalli wrote:Woo. Hieno systeemi. Voisin kokeilla käyttää tätä jos vain löydän idean ja innostuksen. :)
Kiitos kehuista. On oikeastaan ihan kiva, että nostit tämän topikin ylös, niin muistin itsekin, mitä minun pitäisi ohjelmoida. :D
4-Dimensional Games:
Kotisivu (Täältä löydät tietoja sekä peliemme latauslinkit.)
Facebook-sivu (Täältä löydät esimerkiksi uutisia peliemme ja sivumme päivityksistä.)
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Aikamatkustussysteemi

Post by MrMonday »

Tein itsekkin pienen aikamatkustus-systeemin, mutta postaan sen tänne, kun kerta aiheesta jo ketju on pistetty pystyyn.

Code: Select all

SCREEN 800,600,32,0

Const _TIME = 500

obj = LoadObject("car.bmp",360)

floor = MakeObjectFloor()

floor_img = MakeImage(50,50)

    DrawToImage floor_img

    For x = 0 To ImageWidth(floor_img)
    For y = 0 To ImageHeight(floor_img)
        gray = Rand(100,200)
        Color gray,gray,gray
        Dot x,y
    Next y
    Next x
    
    DrawToScreen

PaintObject floor, floor_img

Type PATH
    Field x
    Field y
    Field ang
    Field mm#
    Field tt#
End Type

        frame.PATH = New(PATH)
        frame\x   = ObjectX(obj) 
        frame\y   = ObjectY(obj)
        frame\ang = ObjectAngle(obj)
        frame\mm# = m#
        frame\tt# = t#
        
        frames = frames + 1

Repeat

    If KeyDown(57) And Before(frame) <> NULL And frames > 0 Then
        
        frame = Before(frame)
        
        RotateObject obj, frame\ang
        PositionObject obj, frame\x, frame\y

        m# = frame\mm#
        t# = frame\tt#

        frames - 1

    ElseIf Not KeyDown(57)
        
        If KeyDown(200) Then m# = m# + 0.05
        If KeyDown(208) Then m# = m# - 0.05
        If KeyDown(205) Then t# = t# - 0.05
        If KeyDown(203) Then t# = t# + 0.05
        
        If m# < -5.00 Then m# = -5.00
        If m# >  5.00 Then m# =  5.00
        
        If t# < -3.00 Then t# = -3.00
        If t# >  3.00 Then t# =  3.00
        
        If Not KeyDown(200) Or KeyDown(208) Then m# = CurveValue(0.00,m#,100)
        If Not KeyDown(205) Or KeyDown(203) Then t# = CurveValue(0.00,t#,10)
        
        If ObjectX(obj) < -400 Then PositionObject obj, 400, ObjectY(obj)
        If ObjectX(obj) > 400 Then PositionObject obj, -400, ObjectY(obj)
    
        If ObjectY(obj) < -300 Then PositionObject obj, ObjectX(obj), 300
        If ObjectY(obj) >  300 Then PositionObject obj, ObjectX(obj), -300

        MoveObject obj, m#
        TurnObject obj, t#

        frame.PATH = New(PATH)
        frame\x   = ObjectX(obj) 
        frame\y   = ObjectY(obj)
        frame\ang = ObjectAngle(obj)
        frame\mm# = m#
        frame\tt# = t#
        
        frames = frames + 1
        
        If frames => _TIME Then 
            Delete First(PATH)
            frames = frames - 1
        EndIf
        
    EndIf
    
    DrawGame
    
    Color 255,0,0
    Text 0,0,"Time: "+frames
    
    DrawScreen
    
Until KeyHit(1)
Mikään täydellinen tämä ei ole, mutta parannuksia tähän olisi tarkoitus tehdäkkin.

Ohjaus - Nuolinäppäimet.
Ajan kelaus - Välilyönti.
EDIT:

Vaihdoin taulukoista tyyppeihin, nyt toimii todella nätisti :D

User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Aikamatkustussysteemi

Post by valscion »

MrMonday wrote:Tein itsekkin pienen aikamatkustus-systeemin, mutta postaan sen tänne, kun kerta aiheesta jo ketju on pistetty pystyyn.
Muuten hyvä mutta bugailee vähän jos ei kelaa täysin alkuun ja jatkaa liikkumista. Liikkumisen jälkeen kun kelaa taaksepäin niin siinä kohtaa jossa jäi kelaus kesken, niin tapahtuu jänniä bugeja ja auto hyppää väärään paikkaan.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Combatti
Active Member
Posts: 101
Joined: Fri Jun 29, 2012 6:23 pm
Location: Kuhmo

Re: Aikamatkustussysteemi

Post by Combatti »

Hieno systeemi. Itse en huomannut bugia? Tällä voisi pienellä muokkauksella tehdä replaysysteeminkin. Tiedä häntä, tuleeko itselläni koskaan käyttöön(Toden näköisesti, koska en täällä ole tähän asti muuta tehnyt, kuin testannut pelejä ja funktioita jajoistakin tehdä oman versioni tai muokkaukseni :lol: )
~Yhteiskuntaan kyllästynyt koodari.
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Aikamatkustussysteemi

Post by MrMonday »

Oli näköjään pieni virhe tosiaan päässyt sekaan, mutta tässä siis korjattuna ;) Enää puuttuisi, että saisi nuo systeemit tungettua funktioon, ja kelaus monelle (= kaikille) kuvalle/objektille kerrallaan, mutta oma mielenkiinto ei riitä tällä hetkellä moiseen :P

Code: Select all

SCREEN 800,600,32,0

Const _TIME = 500

obj = LoadObject("media/car.bmp",360)

floor = MakeObjectFloor()

floor_img = MakeImage(50,50)

    DrawToImage floor_img

    For x = 0 To ImageWidth(floor_img)
    For y = 0 To ImageHeight(floor_img)
        gray = Rand(100,200)
        Color gray,gray,gray
        Dot x,y
    Next y
    Next x
    
    DrawToScreen

PaintObject floor, floor_img

Type PATH
    Field x
    Field y
    Field ang
    Field mm#
    Field tt#
End Type

        frame.PATH = New(PATH)
        frame\x   = ObjectX(obj) 
        frame\y   = ObjectY(obj)
        frame\ang = ObjectAngle(obj)
        frame\mm# = m#
        frame\tt# = t#
        
        frames = frames + 1

Repeat

    If KeyDown(57) And Before(frame) <> NULL And frames > 0 Then
        
        frame = Last(PATH)
        
        RotateObject obj, frame\ang
        PositionObject obj, frame\x, frame\y

        m# = frame\mm#
        t# = frame\tt#

        frames - 1
        
        Delete frame

    ElseIf Not KeyDown(57)
        
        If KeyDown(200) Then m# = m# + 0.05
        If KeyDown(208) Then m# = m# - 0.05
        If KeyDown(205) Then t# = t# - 0.05
        If KeyDown(203) Then t# = t# + 0.05
        
        If m# < -5.00 Then m# = -5.00
        If m# >  5.00 Then m# =  5.00
        
        If t# < -3.00 Then t# = -3.00
        If t# >  3.00 Then t# =  3.00
        
        If Not KeyDown(200) Or KeyDown(208) Then m# = CurveValue(0.00,m#,100)
        If Not KeyDown(205) Or KeyDown(203) Then t# = CurveValue(0.00,t#,10)
        
        If ObjectX(obj) < -400 Then PositionObject obj, 400, ObjectY(obj)
        If ObjectX(obj) > 400 Then PositionObject obj, -400, ObjectY(obj)
    
        If ObjectY(obj) < -300 Then PositionObject obj, ObjectX(obj), 300
        If ObjectY(obj) >  300 Then PositionObject obj, ObjectX(obj), -300

        MoveObject obj, m#
        TurnObject obj, t#

        frame.PATH = New(PATH)
        frame\x   = ObjectX(obj) 
        frame\y   = ObjectY(obj)
        frame\ang = ObjectAngle(obj)
        frame\mm# = m#
        frame\tt# = t#
        
        frames = frames + 1
        
        If frames => _TIME Then 
            Delete First(PATH)
            frames = frames - 1
        EndIf
        
    EndIf
    
    DrawGame
    
    Color 255,0,0
    Text 0,0,"Time: "+frames
    
    DrawScreen
    
Until KeyHit(1)
Post Reply