Miten tämän voisi toteuttaa?

Voit pyytää apua ohjelmointiongelmiin täältä.
martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Miten tämän voisi toteuttaa?

Post by martti »

Olen tekemässä peliä. Enkä osaa tehdä siihen karttaa
enkä mitään muutakaan joka seuraisi mukana, paitsi inventoryn ja ylävalikon.
En osaa myöskään tehdä ns. ohjusta joka osuu kulman takana olevaan viholliseen osumatta seinään(se on kai joku ihmeellinen muokkaus jostain pathfinderistä).
Joten, osaisiko joku auttaa näissä asioissa
EDIT:

Kirjoitin näköjään vähän hätäsesti. Tarkoitan siis ns. tutkaa(mutta en sellaista jossa pyörii sellane härpäke ympyrää vaan ihan tavallista karttaa).

Last edited by martti on Fri Nov 27, 2009 11:35 pm, edited 5 times in total.
OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Miten tämän voisi toteuttaa?

Post by Jonez »

Cb:llä kaikista helpoin karttatyyppi on tilekartta. Näitä karttoja voi tehdä ohjelmilla, kuten Tilester, joka taitaa tulla cb:n mukana. Muita tile-editoreja ovat A Stigmator, sekä TileGen, jota en tähän hätään löytänyt mistään. Ainakin Tilesterin kanssa tulee jonkinlainen manuaali.

Ennen omien karttojen luontia suosittelen käymään kaikki cb:n oppitunnit läpi.

Nopea yhteenveto tilekartoista:
Tilekartta koostuu erilaisista kerroksista. Jokainen kerros koostuu tileistä, eli suorakulmion muotoisista paloista. Kerroksiin piirretään tile kerrallaan. Yksi tile voi olla esim. 32x32 pikselin kokoinen.
1. Taustakerros, kerros jonka päälle kaikki muu piirretään. Tämä on osa kartan ulkoasua.
2. Päällyskerros. Päällyskerros piirretään kaiken päälle, myös osa kartan ulkoasua. Sillä voi tehdä esim. kattoja jne.
3. Hit-kerros. Tämän on näkymätön kerros. Tämä toimii seinänä tilekartoissa, eli tämän kerroksen läpi ei voi kävellä (jos olet asettanut törmäykset päälle).
4. Data-kerros. Tämä on kaikista hankalin, mutta myös hyödyllisin kerros. Data-kerros säilöö tietoa, kokonaislukuja. Osaava ohjelmoija voi tehdä niin, että kun pelaaja astuu esim. datan nro. 1356 päälle, viereinen seinä räjähtää. Tai ovi aukeaa. Tai pelaaja löytää esineen. Tai lauma vihollisia hyökkää jne.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Miten tämän voisi toteuttaa?

Post by esa94 »

Jonez wrote: 4. Data-kerros. Tämä on kaikista hankalin, mutta myös hyödyllisin kerros. Data-kerros säilöö tietoa, kokonaislukuja. Osaava ohjelmoija voi tehdä niin, että kun pelaaja astuu esim. datan nro. 1356 päälle, viereinen seinä räjähtää. Tai ovi aukeaa. Tai pelaaja löytää esineen. Tai lauma vihollisia hyökkää jne.
Tämän avullahan voi vaikka tehdä niin, että tekee waypoint-listan (Taulukot tai linkitetyt listat=typet ovat varsin näppäriä tähän) johon tallettaa jokaisen tilen keskikohdan, jossa on jokin tietty arvo. Näihin voi sitten soveltaa vaikka a*-algoritmia paljon nopeammin. Kun saadaan näiden waypointtien välille nopeimmat reitit, voidaan alkaa vetää reittejä waypointilta waypointille, jolloin saadaan tulokseksi melko nopea ja mahdollisesti jopa luonnollisen näköinen reitti.

HUOM! Reitti ei välttämättä olisi tällä metodilla nopein mahdollinen, sillä reittiä ei vedetä suoraan lähdöstä maaliin vaan lähdöstä waypointiin ja siitä seuraavaan. Kuitenkin reitti ainakin sivunnee nopeinta mahdollista reittiä.
martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Re: Miten tämän voisi toteuttaa?

Post by martti »

Tarkoitatko jotain tälläistä systeemiä?
Image
OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: Miten tämän voisi toteuttaa?

Post by kaneli2000 »

martti wrote:Tarkoitatko jotain tälläistä systeemiä?
Image
Kuva saa olla isompikin, tuosta ei kyllä saa selvää, ainakaan tekstistä.
I see the rainbow rising
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Miten tämän voisi toteuttaa?

Post by koodaaja »

kaneli2000 wrote:
martti wrote:Tarkoitatko jotain tälläistä systeemiä?
Image
Kuva saa olla isompikin, tuosta ei kyllä saa selvää, ainakaan tekstistä.
Linkki näyttäisi vain olevan johonkin miniversioon, normikokoisena tässä.

Image

Ja kyllä, juuri tuollaista näyttäisi tarkoittavan.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Miten tämän voisi toteuttaa?

Post by SPuntte »

Suunnittelin joskus 2D-räiskintää ja toteutinkin sitä varten ohjussysteemin, jossa ohjusta voi ohjata itse tähtäimellä tai antaa ensin lukittua maaliin, jolloin se toimii laukaisun jälkeen itsenäisesti. Ohjus on myös siinä mielessä älykäs, että se osaa väistää seiniä, mistä toisaalta seuraa haitta, että ohjaus toimii kehnosti kapeissa käytävissä. Jos maali katoaa ohjuksen näköpiiristä, se lentää paikkaan, jossa maali viimeksi havaittiin ja yrittää sitten paikallistaa sen uudelleen.

Koodiin sisältyy esimerkki, jossa metsästetään botteja. Koodi on reilusti kommentoitu ja selkeästi jaoteltu, mutta ehkä hieman hankalasti sovellettava. Sitä saa käyttää ja levittää vapaasti, kunhan ei väitä tehneensä sitä itse.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Re: Miten tämän voisi toteuttaa?

Post by martti »

Saakos tuota toimimaan ns. stragiapeli tyyliseen kävelyyn, elikkä valitaan mitä joukkoja halutaan siirtää ja valitaan hirellä minne siirtää ne sillä tavalla, että ne osaa väistää seiniä?
OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Miten tämän voisi toteuttaa?

Post by SPuntte »

martti wrote:Saakos tuota toimimaan ns. stragiapeli tyyliseen kävelyyn, elikkä valitaan mitä joukkoja halutaan siirtää ja valitaan hirellä minne siirtää ne sillä tavalla, että ne osaa väistää seiniä?
Ei saa, ainakaan yksistään. Jossain aiemmassa postissa mainittiin A*-algoritmi, jolla homma hoituu.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Miten tämän voisi toteuttaa?

Post by valscion »

martti wrote:Saakos tuota toimimaan ns. stragiapeli tyyliseen kävelyyn, elikkä valitaan mitä joukkoja halutaan siirtää ja valitaan hirellä minne siirtää ne sillä tavalla, että ne osaa väistää seiniä?
Sen saa sillä A*-algoritmilla toimimaan. Käytäppä hakua: viewtopic.php?f=10&t=1139&start=0&hilit=a+algoritmi
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
martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Re: Miten tämän voisi toteuttaa?

Post by martti »

Noniin, kävely systeemi on valmis joten siirrytäämpäs seuraavaan (ja suurimpaan) ongelmaan, elikkä tutkaan.
En itse ainakaan tajua mitään siitä miten sellaisen voisi tehdä.
OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Miten tämän voisi toteuttaa?

Post by Jonez »

Tässä on linkki kuusi päivää sitten tekemääni esimerkkiin kartan teosta. Viesti on aika pitkä, mutta se kannattaa lukea läpi, sillä selitän siinä minikartan toimintaperiaatteen. Viestin lopussa on itse koodi.

Edit. siis oletin että tarkoitat tutkalla karttaa, josta mainitsit ensimmäisessä viestissäsi.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Re: Miten tämän voisi toteuttaa?

Post by martti »

Hetkinen, saako tuon karttasi mahtumaan neliöön laatikkoon elikkä silleen että kartasta näkyy vain se osa jossa ukko kulkee?
EDIT:

Hahaa! Löysinpäs sen vanhan koodinpätkän jota en muistanut tallentaa! Se löytyi täältä!

EDIT:

Osaakos joku poistaa tuon pyörivän härpäkkeen tästä

Code: Select all

    FrameLimit 50

    tilemap = LoadMap("Media\cdm2.til","Media\tileset.bmp")
    PlayObject tilemap,0,0,1
    ObjectPickable tilemap,1
    guy = LoadObject ("Media\guy.bmp",72)
    guy2 = LoadObject ("Media\guy.bmp",72)
    ObjectPickable guy2,2
    MoveObject guy2,0,200
    SetupCollision guy, tilemap, 1, 4, 2

    //VARIABLES NEEDED
    Const ACCURACY=1 //radar accuracy
    Global ang#,fade,speed
    ang=0.0 //angle of the pointer
    fade=100 //fading speed of the result
    speed=7 //speed of the pointer


    Repeat
       
        'Ukon ohjaus
        If LeftKey() Then TurnObject guy,5
        If RightKey() Then TurnObject guy,-5
        If UpKey() Then MoveObject guy,2
        If DownKey() Then MoveObject guy,-2


        CloneCameraPosition guy
        DrawGame
        Color cbwhite
        Text 0,0,FPS()
       
        Radar(50,50,100,guy,tilemap,300)
       
        DrawScreen
    Forever

    //x = radar drawing position (center)
    //y = --||--
    //r = radius of the radar circle
    //obj = object we get the radar from
    //map = tilemap used
    //range# = range of the radarbeam
    Function Radar(x,y,r,obj,map,range#)
        //draw base
        Color 0,40,0
        Circle x-r/2,y-r/2,r,1
        Color 0,80,0
        Circle x-r/2,y-r/2,r,0
        oldangle=ObjectAngle(obj) //save the old angle of the guy
        For i=ang-fade To ang Step ACCURACY //loop trought a loop
            RotateObject obj,i
            ObjectPick obj
            Dist#=Distance(PickedX(),PickedY(),ObjectX(obj),ObjectY(obj))
            If Dist<range Then // if the picked object is in the range of the beam
                rdist#=dist/range //make the distance good for the scale of the radar
                If pickedobject()=map Then
                    Color 0,150+Max(i-ang,-110),0
                Else //this ain't no wall, shoot it!
                    Color 200+Max(i-ang,-160),0,0
                EndIf
                Dot x+Cos(i)*r/2*rDist,y-Sin(i)*r/2*rDist
            EndIf
        Next i
        RotateObject obj,oldangle //restore the old angle of the object
        //update and draw teh pointer
        ang+speed
        Color 0,80,0
        Line x,y,x+Cos(ang)*r/2,y-Sin(ang)*r/2
    EndFunction
koodista?[/edit]
Last edited by martti on Sat Dec 19, 2009 9:15 pm, edited 3 times in total.
OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Miten tämän voisi toteuttaa?

Post by Jonez »

Yritän selostaa kattavasti, että pääset itsekin koodaamaan, sen sijaan että ohjelmoisin puolestasi.

- Tuossa edellisessä koodissa ideana oli, että kopioimme pienennetyn kuvan kartasta ja piirrämme sen kuvaksi. Pääsilmukassa liikutamme ukkoa suhteessa pikkukartan kokoon.
- Jos haluamme piirtää vain osan kartasta, on paras keino tehdä se näin: kartalla sijaitsevan ukon sijasta liikutamme karttaa suhteessa kokoon, ja piirrämme vain osan kartasta.
- Liike on suhteellista: jos siirrän ukkoa ylöspäin kartalla, tarkoittaa se oikestaan samaa, että pidän ukkoa paikallaan ja siirrän karttaa alaspäin saman matkan; ukko päätyy samaan pisteeseen.
- Edellisessä esimerkissä siirsin ukkoa. Nyt haluamme siirtää karttaa. Tähän liikutukseen käy sama matematiikka mitä edellisessä käytimme ukon siirtämiseen, mutta koordinaatit ovat vastakkaiset. Kun ukko siirtyy ylös, kartta siirtyy alas.

Nyt kun olemme saaneet kartan liikkumaan, haluamme näyttää siitä vain osan (se osa jossa ukko sattuu sijaitsemaan). Piirrämme liikutetun kartan yksinkertaisesti toiseen kuvaan komennolla DrawToImage. Tämän uuden kuvan, joka pysyy paikallaan piirrämme ruudulle siihen kohtaan missä haluamme kartan sijaitsevan. Ukkelin piirrämme keskelle tätä ruutua (ukko siis ei liiku tässä versiossa).
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Re: Miten tämän voisi toteuttaa?

Post by martti »

Uusi ongelma ilmeni: Voiko Objectpickable komennolla poimia esim. Typeillä tehtyjä zombeja tjsp. Jos voi, niin miten?
OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 3:48 pm
Location: Turku

Re: Miten tämän voisi toteuttaa?

Post by skorpioni-cb »

Code: Select all

...
täällä ne uuden jäsenen teko ja kloonaus.
Objectpickable esim.vihu\obj,1
...
Tunnistuksen vuoro
select p
  case vihu\obj
jotain
endselect
jotain tuollaista.
En tiedä, mitä tiedän, mutta tiedän ettei se ole mitään kaunista.

I know not what I know, but I do know that it's not beautiful.
martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Re: Miten tämän voisi toteuttaa?

Post by martti »

Siis tässä tapauksessa yrittäisin saada ne zombit(tai jotkut sellaset) näkymään radarissa.
EDIT:

Siis hetkine. Kyllä ne sittenki näkyy siinä radarissa mutta ne on niin tolkuttoman pieniä, joten saisiko niitä jotenkin ns. kasvatettua.

OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Miten tämän voisi toteuttaa?

Post by Awaclus »

martti wrote:Siis tässä tapauksessa yrittäisin saada ne zombit(tai jotkut sellaset) näkymään radarissa.
EDIT:

Siis hetkine. Kyllä ne sittenki näkyy siinä radarissa mutta ne on niin tolkuttoman pieniä, joten saisiko niitä jotenkin ns. kasvatettua.

Häh? Pistät vaan isomman kuvan siihen.
martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Re: Miten tämän voisi toteuttaa?

Post by martti »

siiskun se objekti on tehty typeillä ja se kuva siinä on tehty paintobjectilla.
OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Miten tämän voisi toteuttaa?

Post by Awaclus »

martti wrote:siiskun se objekti on tehty typeillä ja se kuva siinä on tehty paintobjectilla.
Niin? Pistät vain isomman kuvan siihen, simple as that.

Code: Select all

object_master = Loadobject ("Media\3*3.png")

paallyste1 = LoadObject ("Media\1*1.png")
paallyste2 = LoadObject ("Media\50*2346.png")

Paintobject object_master, //hmm, jos haluan tähän 50*2346 -kokoisen kuvan, mikähän noista päällysteistä tähän kannattaisi laittaa?
Post Reply