Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez »

matti3 wrote:Tämä kävisi varmaan nopeammin kloonaamalla, mutta päätin nyt ensin koittaa niin, että autot ovat kaikki oma objectinsa. (20 tällä hetkellä)

...
Kyseinen systeemi on _lähes_ mahdotonta tehdä niin, että jokainen objekti on oma, erillinen systeeminsä. Tässä tapauksessa sinun täytyy käyttää esimerkiksi tyyppilohkoja hallitaksesi autoja.

Eli: teet yhden koodinpätkän joka liikuttaa autoja ja pitää ne ruudun sisällä tiettyjen sääntöjen mukaan, ja sitten yksinkertaisesti kloonaat autoja ja käsket jokaista (autoa) käyttämään tätä samaa koodinpätkää.

Tein tässä osaksi omaksi ilokseni ja osaksi esimerkkinä sinulle tällaisen pienen koodin, jossa liikkuu tietty määrä autoja. Jos auto tulee kohdallesi, se pysähtyy. Kun painat enteriä, ukko menee autoon ja sitä voi ajaa. Uudelleen enteriä ja ukko poistuu autosta (ja sinne taianomaisesti tulee uusi kuski, koska se jatkaa itsestään matkaansa).

En käyttänyt juuri ollenkaan vakioita, koska en vain jaksanut. En myöskään kommentoinut. Jos et mitenkään saa yhtään selvää koodista, suosittelen opettelemaan tyypit ihan alusta alkaen, ellet et jo ole opetellut. Samoin taulukot.

Tässä oli hiukan tarinaa ja turhaa turinaa. Toivottavasti opit jotain koodista.

Code: Select all

SCREEN 1024, 768
FrameLimit 40

Const WP_AMOUNT = 30

Dim dWaypoints( WP_AMOUNT - 1, 1 )

Type cars
    Field obj
    Field user
    
    Field targetTimer
    Field targetX
    Field targetY
    Field speed As Float
End Type

objCar = LoadObject( "media\car2.bmp", 72 )
ShowObject objCar, OFF

For i = 1 To WP_AMOUNT
    dWaypoints( i, 0 ) = Rand( -ScreenWidth() / 2, ScreenWidth() / 2 ) //x
    dWaypoints( i, 1 ) = Rand( -ScreenHeight() / 2, ScreenHeight() / 2 ) //y
Next i

For i = 1 To 10
    nc.cars = New( cars )
    nc\obj = CloneObject( objCar )
    target = Rand( 0, WP_AMOUNT - 1 )
    nc\targetX = dWaypoints( target, 0 ) 
    nc\targetY = dWaypoints( target, 1 ) 
    PositionObject nc\obj, Rand( -ScreenWidth() / 2, ScreenWidth() / 2 ), Rand( -ScreenHeight() / 2, ScreenHeight() / 2 )
Next i

ClsColor cbWhite
Color cbBlack
Repeat
    
    If bInCar = False Then
        plX = plX + ( RightKey() - LeftKey() ) * 5
        plY = plY + ( UpKey() - DownKey() ) * 5
        DrawToWorld ON, ON, ON
            Box plX - 2, plY - 2, 5, 5
        DrawToWorld OFF
    EndIf
    
    For ic.cars = Each cars

        _angle# = ObjectAngle( ic\obj )    
    
        If ic\user = 0 Then
            
            If Distance( ObjectX( ic\obj ), ObjectY( ic\obj ), plX, plY ) < 30 And bInCar = False Then
                If ic\speed > 0 Then
                    ic\speed - 0.5
                EndIf
                
                If KeyHit( CbKeyReturn ) And bInCar = False Then
                    ic\user = 1
                    bInCar = True
                    ClearKeys()
                EndIf
            Else
                If ic\speed < 5 Then
                    ic\speed + 0.5
                EndIf
            EndIf
            
            ic\targetTimer - 1
            If Distance( ObjectX( ic\obj ), ObjectY( ic\obj ), ic\targetX, ic\targetY ) < 10 Or ic\targetTimer <= 0 Then
                ic\targetTimer = 300
                While True
                    target = Rand( 0, WP_AMOUNT - 1 )
                    If dWaypoints( target, 0 ) <> ic\targetX Or dWaypoints( target, 1 ) <> ic\targetY Then
                        
                        ic\targetX = dWaypoints( target, 0 ) 
                        ic\targetY = dWaypoints( target, 1 ) 
                        Exit
                    EndIf
                Wend
            EndIf
            
            If ic\speed = 5 Then
                _targetAngle# = GetAngle( ObjectX( ic\obj ), -ObjectY( ic\obj ), ic\targetX, -ic\targetY )
                RotateObject ic\obj, CurveAngle( _targetAngle, _angle, 20 )
            EndIf
            
        Else
            If KeyHit( CbKeyReturn ) Then
                bInCar = False
                ic\user = 0
                plX = ObjectX( ic\obj ) - Cos( _angle + 90 ) * 20
                plY = ObjectY( ic\obj ) - Sin( _angle + 90 ) * 20
            EndIf
            If UpKey() Then
                ic\speed + 0.5
            Else
                ic\speed - 0.5
            EndIf
            
            TurnObject ic\obj, ( LeftKey() - RightKey() ) * 5            
        EndIf
        
        If ic\speed < 0 Then ic\speed = 0
        If ic\speed > 5 Then ic\speed = 5
        MoveObject ic\obj, ic\speed

    Next ic

    DrawScreen
Forever
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
matti3 täsä

Re: Tyhmät kysymykset

Post by matti3 täsä »

matti3 wrote:Tämä kävisi varmaan nopeammin kloonaamalla, mutta päätin nyt ensin koittaa niin, että autot ovat kaikki oma objectinsa. (20 tällä hetkellä)

Niin koitin tälläistä koodia:

Code: Select all



If ObjectX(auto)<30+oma_ukko Or ObjectY(auto)<20+oma_ukko Then
if KeyHit(cbkeyreturn) Then
DeleteObject oma_ukko
EndIf
EndIf
Tarkoitus olisi, että jos oma_ukko on lähellä autoa ja painaa entteriä niin se oma ukko menee autoon sisälle. Mutta se ei jonkin syyn takia mene. Ja jos joku on ystävällinen kertoisi miten saan kloonaamalla noin 50 autoa pyörimään pitkin kaupunkia. Ja samallaisella jutulla, että jos jotain näistä autoista menee lähelle ja painaa entter niin auto ryöstetään. <-- kyseessä ei muuten ole GTA klooni vaan osa pelin ominaisuuksista. :o
Osaako kukaan auttaa? :o
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: Tyhmät kysymykset

Post by MAVmaggot »

Kokeileppa tolla.

Code: Select all

If Distance2(auto,oma_ukko)<30 Then
  If KeyHit(cbkeyreturn) Then
    DeleteObject oma_ukko
  EndIf
EndIf
Kloonaukseen tarvitset tyyppejä, opettele käyttämään niitä.
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 3:48 pm
Location: Turku

Re: Tyhmät kysymykset

Post by skorpioni-cb »

Kuinka monta kenttää pitää olla hyvässä pelissä? En kato tiedä :?:
EDIT:

Huhuu.

EDIT:

Minä haluan julkaista pelinini muualla kuin foorumeilla.

Last edited by skorpioni-cb on Mon Apr 06, 2009 4:33 pm, edited 2 times in total.
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.
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Tyhmät kysymykset

Post by Sami The Great »

skorpioni-cb wrote:Kuinka monta kenttää pitää olla hyvässä pelissä? En kato tiedä :?:
Jaa, kun hyvä peli voi olla, joko RPG, jossa on vain yksi kenttä tai sitten tasohypely, jossa on 40 kenttää. Ei se pelin hyvyys kenttien määrän perusteella määräydy.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
shimo

Re: Tyhmät kysymykset

Post by shimo »

KillBurn wrote:
shimo wrote:
MAVmaggot wrote:Läpikäy kaikki tilet, etsi datakerroksien haluttu tile ja luo. Koodina se näyttää jotenkin tällaiselta;

Code: Select all

For y=1 To MapWidth()
For x=1 To MapWidth()
    If GetMap2(3,x,y)=haluttudata Then
        vihu.VIHUT = New(VIHUT)
        ObjectToMap(vihu\obj,x,y) //PositionObject...
    EndIf
Next x
Next y
vihut spawnaa keskelle karttaa, onko pakko kayttää ObjectToMap;ia?
Ei. Se on funktion kutsu, voit tehdä tuollaisen funktion, joka luo vihollisen. Mutta jos et osaa niin näinkin pitäisi onnistua.

Code: Select all

For y=1 To MapWidth()
For x=1 To MapWidth()
    If GetMap2(3,x,y)=haluttudata Then
        vihu.VIHUT = New(VIHUT)
        newvihu\obj=cloneobject(Objektin nimi)
        PositionObject newvihu\obj,x*32-(ObjectSizeX(map)/2),-y*32+(ObjectSizeY(map)/2)'Asetetaan vihu kartalle. tilekoko on 32 pikseliä
    EndIf
Next x
Next y
Tuo kannattaa laittaa ennen pääsilmukkaa. Tile kartan koon on oltava 32 pikseliä
eivät mene vieläkään kohdilleen...kaikki menevät vasempaan yläkulmaan...

Code: Select all

    If uus=0 Then
        v.VIHU = New (VIHU)
        v\obj = CloneObject (mvihu)

For mapY=1 To MapWidth()
For mapX=1 To MapWidth()
    If GetMap2(3,mapx,mapy)=1 Then
        PositionObject v\obj,x*32-(ObjectSizeX(kartta)/2),-y*32+(ObjectSizeY(kartta)/2)//mitä kettua...?!?
    EndIf
Next mapX
Next mapY
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

Ethän ole edes ladannut karttaa!
Katso funktio LoadMap().
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
User avatar
KillBurn
Advanced Member
Posts: 339
Joined: Wed Aug 29, 2007 5:02 pm

Re: Tyhmät kysymykset

Post by KillBurn »

Jani ei tuossa koko koodia ole. Shimo jos laittaisit sen koko koodin, niin ongelma ratkeaisi helpommin.
Sumu Games: Sam, Ur eye!
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Tyhmät kysymykset

Post by Character »

Toimisiko tämä? En ole kokeillut mutta..

Code: Select all

If uus=0 Then
v.VIHU = New (VIHU)
v\obj = CloneObject (mvihu)
For mapX = -MapWidth()/2 To MapWidth()/2
	For mapY = -MapHeight()/2 to MapHeight()/2
		If GetMap2(3, mapX, mapY) = 1 Then
			PositionObject v\obj, mapX * 32, mapY * 32
		EndIf
	Next mapY
Next mapX
shimo

Re: Tyhmät kysymykset

Post by shimo »

KillBurn wrote:Jani ei tuossa koko koodia ole. Shimo jos laittaisit sen koko koodin, niin ongelma ratkeaisi helpommin.
Se koodi kun on kokonaisuudessaan 1200-1400 riviä+includet, joten pakkohan sitä on rajata.

Code: Select all

//kenttien lataus...(tilemap-valinta tehdään aikaisemmin..)
If tilemap = 1 Then 
   kartta = LoadMap("data\Map0.til","data\tileset.bmp")
    ukkox=0
    ukkoy=540
  EndIf

If tilemap = 2 Then 
kartta = LoadMap("data\2way_pipe.til","data\tileset.bmp")
    ukkox=0
    ukkoy=0
  EndIf
  
If tilemap = 3 Then 
kartta = LoadMap("data\Cross.til","data\tileset.bmp")
    ukkox=0
    ukkoy=0
  EndIf
Character wrote:Toimisiko tämä? En ole kokeillut mutta..

Code: Select all

If uus=0 Then
v.VIHU = New (VIHU)
v\obj = CloneObject (mvihu)
For mapX = -MapWidth()/2 To MapWidth()/2
	For mapY = -MapHeight()/2 to MapHeight()/2
		If GetMap2(3, mapX, mapY) = 1 Then
			PositionObject v\obj, mapX * 32, mapY * 32
		EndIf
	Next mapY
Next mapX
tämä laittoi vihut vain toiseen paikkaan kuin edellinen...-.-'
User avatar
KillBurn
Advanced Member
Posts: 339
Joined: Wed Aug 29, 2007 5:02 pm

Re: Tyhmät kysymykset

Post by KillBurn »

Code: Select all

SCREEN 800,600
FrameLimit 40
Type vihu
Field obj
EndType 
ukko=LoadObject("media\soldier.bmp")
map=LoadMap("media\map.til","media\tileset.bmp")
ShowObject ukko,OFF

newvihu.vihu= New(vihu)
newvihu\obj=CloneObject(ukko)

For x=1 To MapWidth()
For y=1 To MapWidth()
    If GetMap2(3,x,y)=1 Then PositionObject newvihu\obj,x*32-(ObjectSizeX(map)/2),-y*32+(ObjectSizeY(map)/2)
Next y
Next x

Repeat

TranslateCamera (RightKey() - LeftKey()) * 3, (UpKey() - DownKey()) * 3

DrawScreen

Forever 
Noin. Vihollinen pistetään datanumero ykköseen.
200 viesti ;)
Sumu Games: Sam, Ur eye!
GGMadMan
Newcomer
Posts: 9
Joined: Sat Apr 11, 2009 7:47 pm

Re: Tyhmät kysymykset

Post by GGMadMan »

Hommasin tänään Coolbasicin. Learn senterin 7 "tehtävässä" Tuli ongelma. Käskettiin laittaa liikkumanäppäimet kuvalle ja tein niin ja mielestäni ne on oikein, mutta pukkaa "Memory access violation" erroria, kun painaa jotain nuolinäppäintä. Kertokaa pian mikä väärin :|

Code: Select all


Koodi:
FrameLimit 40

SCREEN 640,480

kuva = LoadImage (" Sensuuri :D ")

Repeat

If LeftKey() Then TurnObject kuva, 5
    If RightKey() Then TurnObject kuva, -5    
    
    If UpKey() Then MoveObject kuva, 2
    If DownKey() Then MoveObject kuva, -2
    
    DrawImage kuva,40,20
    
    DrawScreen

Forever
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset

Post by Viltzu »

TurnObject on nimenomaan tarkoitettu objekteille, samoin kuin MoveObject. Joten ajattele siitä mikä meni vikaan. Katsele eri komentoja manuaalista.
EDIT:

Ja tehtävässä kai käsketään liikuttaa sitä kuvaa niin, että se ei käänny. Vinkkiä: X, Y, DrawImage

Last edited by Viltzu on Sat Apr 11, 2009 9:16 pm, edited 2 times in total.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

Latasit kuvan "kuva", ja pyörität objektia "kuva". Ei toimi koska kuva "kuva" on kuva eikä objekti. Kts funktio LoadObject tai RoateImage.
P.S. RotateImage on aika huono...
GGMadMan
Newcomer
Posts: 9
Joined: Sat Apr 11, 2009 7:47 pm

Re: Tyhmät kysymykset

Post by GGMadMan »

No kiitti neuvoista kummiskin. Opiskelu jatkuu :lol: -->
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

Miten saan samall typellä tehdyille objecteille törmäyksen keskenään?

Esim : setupcollision iSotilas1\obj,iSotilas1\obj,2,2,2
EDIT:

Kiitos!

Last edited by rami123 on Sun Apr 12, 2009 2:26 pm, edited 2 times in total.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

Image
Eur0-5isu
Active Member
Posts: 106
Joined: Mon Sep 01, 2008 5:12 pm

Re: Tyhmät kysymykset

Post by Eur0-5isu »

Miten toteuttaa nuolen fysiikat? Olen kyllä ihan pusikossa tämän kanssa, kun pitäisi tavalliselle nuolelle toteuttaa lentorata ja sen pitäisi vielä kääntyä oikeassa kulmassa. Nuolet on tehty ihan tavallisilla tyyppiobjekteilla. Haluaisiko joku heittää jotain vinkkiä miten kannattaisi asiaa lähteä totuttamaan?


EDIT: Kiitoksia
Last edited by Eur0-5isu on Mon Apr 13, 2009 12:15 pm, edited 1 time in total.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

Image
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

Tipahtaako fps jos setupcollision on silmukassa?
EDIT:

kiitos! epäilinkin jo sitä..

Last edited by rami123 on Mon Apr 13, 2009 11:17 am, edited 1 time in total.
Locked