Tyhmät kysymykset (II/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
Trim

Re: Tyhmät kysymykset (II/2009)

Post by Trim » Tue Sep 29, 2009 7:17 pm

kuvatus wrote: Itse asiassa ei näytä toimivan.
Näin sitten (ainakin itselläni):

Code: Select all

tiedosto$=Replace(CommandLine(), Chr(34), "")
Print tiedosto$
WaitKey
kuva=LoadImage (""+tiedosto)
Repeat
DrawImage kuva,0,0
Text 0, 0, tiedosto$
DrawScreen
Until EscapeKey()

Guest

Re: Tyhmät kysymykset (II/2009)

Post by Guest » Tue Sep 29, 2009 7:18 pm

Trim wrote:
kuvatus wrote: Itse asiassa ei näytä toimivan.
Näin sitten (ainakin itselläni):

Code: Select all

tiedosto$=Replace(CommandLine(), Chr(34), "")
Print tiedosto$
WaitKey
kuva=LoadImage (""+tiedosto)
Repeat
DrawImage kuva,0,0
Text 0, 0, tiedosto$
DrawScreen
Until EscapeKey()
Oho jäi toi Print hommeli tohon...

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (II/2009)

Post by JATothrim » Tue Sep 29, 2009 7:20 pm

(myöhässä : ( )
Tulostappa Commandline():n antama merkkijono. Se luultavimmin näyttää tältä (lainaus merkit mukaan lueittuina): "kuva.bmp" TAI tältä: kuva.bmp riippuen siitä onko ohjelmalle annetussa merkkijonossa välilyöntejä. Replace(cmd$, chr(34), "") ja trim(cmd$) yhdistelmä selkeyttää komentorivin takuuvarmasti.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

kuvatus

Re: Tyhmät kysymykset (II/2009)

Post by kuvatus » Tue Sep 29, 2009 8:12 pm

Kiitoksia neuvoista, auttoivat mukavasti.

Hirmu-Hemuli

Re: Tyhmät kysymykset (II/2009)

Post by Hirmu-Hemuli » Wed Sep 30, 2009 10:09 am

Kun käyttää komentoa input ja ohjelma ottaa syötteen float:tina niin kumpaa käytetään desimaalin merkitsemiseen, pilkkua vai pistettä?

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (II/2009)

Post by Jonez » Wed Sep 30, 2009 11:17 am

Hirmu-Hemuli wrote:Kun käyttää komentoa input ja ohjelma ottaa syötteen float:tina niin kumpaa käytetään desimaalin merkitsemiseen, pilkkua vai pistettä?
Ellet ole jo ratkaissut ongelmaa, on sinulla mennyt siihen tätä viestiä kirjoittaessani jo yli tunti. Jos olisit kokeillut editorilla itse, olisi ongelmaan mennyt muutama minuutti.
Kokeile seuraavassa koodissa sekä pistettä että pilkkua.

Code: Select all

Repeat
    a# = Input( ": " ) 
    Text 20, 20, a# 
    DrawScreen
Forever
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset (II/2009)

Post by TheFish » Wed Sep 30, 2009 11:23 am

Hirmu-Hemuli wrote:Kun käyttää komentoa input ja ohjelma ottaa syötteen float:tina niin kumpaa käytetään desimaalin merkitsemiseen, pilkkua vai pistettä?
Itselläni ei ole mahdollisuutta kokeilla tuota, joten en tiedä alkuperäiseen kysymykseen vastausta (veikkaisin pistettä), mutta suosittelisin, että koodaat oman funktion, joka osaa ottaa syötteen kummalla vain. Jos ohjelmalla on (/tulee olemaan) muitakin käyttäjiä kuin sinä itse, et voi olettaa, että kaikki sattumalta käyttävät oikeaa erotinta. Näin ollen on siis käyttöliittymän kannalta parempi sallia molemmat.
CoolBasic henkilökuntaa
Kehittäjä

User avatar
Jare
Devoted Member
Posts: 865
Joined: Mon Aug 27, 2007 10:18 pm
Location: Helsinki
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Jare » Wed Sep 30, 2009 5:41 pm

Taatero wrote:Onko mitään valmista funktiota joka palautaa taulukon jonkun ulottuvuuden koon, vai joudunko tekemään sen itse muuttujilla ja tuhlaamaan 54 sekuntia kalliista elämästäni?
1. Taulukkoa ei voi välittää funktioille parametrina. 2. Johtopäätös: tuollainen funktio ei CB:ssä ole mahdollinen.

Eli kannattaa laittaa ulottuvuuksien koot vaikk vakioihin. Tai muuttujiin, jos tarvitset ReDimmiä.

User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 3:40 pm
Location: Lempäälä

Re: Tyhmät kysymykset (II/2009)

Post by kaneli2000 » Wed Sep 30, 2009 7:55 pm

Tulipa mieleeni, että voiko tyyppimuuttuja olla taulukko? Olisi aika kätevä :D.
I see the rainbow rising

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Tyhmät kysymykset (II/2009)

Post by MaGetzUb » Wed Sep 30, 2009 9:14 pm

kaneli2000 wrote:Tulipa mieleeni, että voiko tyyppimuuttuja olla taulukko? Olisi aika kätevä :D.
Ei suoranaisesti, mutta Instansseihin voi säilöä Muistipaloja! Kätevää! ;)

Ideasi näyttäisi suurinpiirtein tältä:

Code: Select all

Type Hahmot
Field Dim Inventory(32)
EndType
EDIT:

Off: Muokkailin paljonkin viestiäni, ftw.

Last edited by MaGetzUb on Wed Sep 30, 2009 9:21 pm, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
Jare
Devoted Member
Posts: 865
Joined: Mon Aug 27, 2007 10:18 pm
Location: Helsinki
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Jare » Wed Sep 30, 2009 9:17 pm

MaGetzUb wrote:
kaneli2000 wrote:Tulipa mieleeni, että voiko tyyppimuuttuja olla taulukko? Olisi aika kätevä :D.
Ei, mutta Instansseihin voi säilöä Muistipaloja! Kätevää! ;)
Ja tyyppimuuttuja voi olla indeksi, jota kätetään jossain moniulotteisessa taulukossa.

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Feuer » Thu Oct 01, 2009 12:21 pm

Aloin opettelemaan tyyppien käyttöä, ja aloin väsäämään pienimuotoista RTS:ää. Miten viestiin uppaamassani sorsassa saisi kaikki ukot liikkumaan reaaliajassa hiiren oikealla napilla osoitettuun pisteeseen? Nyt ne odottavat että edellinen on päässyt sinne, ja seuraava lähtee sitten.
Attachments
tragediapeli.zip
(2.26 KiB) Downloaded 98 times
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (II/2009)

Post by Jonez » Thu Oct 01, 2009 2:55 pm

Tekoäly on totta puhuen tehty aika kusisella tavalla. Ongelmasi johtuu turhasta: Repeat - Until Distance() - silmukasta, jonka sisällä ukkoja liikutellaan. Eli ukkoa liikutetaan, kunnes ollaan tarpeeksi lähellä, jonka jälkeen liikutetaan seuraavaa ukkoa jne. Vaihda tämä yksinkertaiseen ehtolauseeseen:

Code: Select all

If Distance2(bottisotilas\obj,sijaintihuijari) > 100 Then
Ongelmat eivät kuitenkaan tähän lopu. Jos teemme äskeisen korjauksen koodiin, ja kokeilemme sitä, huomaamme että ukot nytkähtävät vähän hiirtä kohti ja lopettavat. Tämä johtuu siitä, että ukkoja itse asiassa liikutetaan vain, jos MouseUp( 2 ) = True. Poista itse ukkojen silmukka (for bottisotilaat ...) tästä ehtolauseesta.

Lisäksi suosittelen tekemään sotilaat-lohkoon kaksi ylimääräistä kenttää: targetX ja targetY. Nämä ovat sotilaiden yksilölliset kohteet. Näin voit laittaa esim. kaksi sotilasta liikkumaan pisteeseen (100, 100), ja loput muualle. Pitkällä tähtäimellä tuo "sijaintihuijari"-systeemi ei tule toimimaan:

Code: Select all

Type sotilaat //tämä pidetään objekteille
    Field obj
    Field targetX
    Field targetY
EndType
Uudistettu pääsilmukka. Jos korvaat tämän koodisi omalla, ja lisäät nuo targetX- ja targetY-kentät, pitäisi koodin toimia.

Code: Select all

Repeat
    Text 0,10,"X"+MouseWX()
    Text 0,30,"Y"+MouseWY()
    If MouseUp( 2 ) Then
        For is.sotilaat = Each sotilaat
            //otetaan ukkojen ja hiiren kulma ylös
            kulma = GetAngle(  ObjectX( is\obj ), ObjectY( is\obj ), MouseWX(), MouseWY() )
            
            //TargetX- ja Y = hiiren koordinaatit + 100 pikseliä satunnaiseen suuntaan.
            is\targetX = MouseWX() - Cos( kulma ) * 100 * Rand( -1, 1 )
            is\targetY = MouseWY() + Sin( kulma ) * 100 * Rand( -1, 1 )
        Next is
    EndIf   
    
    nopeus = 5  //nopeus = 5
    For is.sotilaat = Each sotilaat
        //JOS is\targetX ja -Y ovat eri kuin 0, TAI ukko on tarpeeksi lähellä targettia ...
        If is\targetX <> 0 And is\targetY <> 0 And Distance(  ObjectX( is\obj ), ObjectY( is\obj ), is\targetX, is\targetY ) >= nopeus Then
            
            //ukon ja kohteen kulma
            kulma = GetAngle( ObjectX( is\obj ), ObjectY( is\obj ), is\targetX, is\targetY )
            
            //liikutetaan kohdetta kohti nopeudella "nopeus"
            TranslateObject is\obj, Cos( kulma ) * nopeus, -Sin( kulma ) * nopeus
        EndIf
    Next is
    DrawScreen
Forever
Tässä vielä koneeni uumenista kaivettu strategiapeli-esimerkki:

Code: Select all

SCREEN 1024, 768
FrameLimit 40

Type tUkot
    Field cX
    Field cY
    Field cTX
    Field cTY
    Field cValittu
    Field cNopeus
End Type

//luodaan ukot
For i = 1 To 10
    iu.tUkot = New( tUkot )
    iu\cX = Rand( 0, ScreenWidth() )
    iu\cY = Rand( 0, ScreenHeight() )
    iu\cTX = iu\cX
    iu\cTY = iu\cY
    iu\cNopeus = 6
Next i

Repeat
    
    //mousehit tallentaa valinta-boksin aloituskoordinaatit. Mouseup: kaikki boksin sisällä olevat joukot valitaan.
    If MouseHit( 1 ) Then
        _startX = MouseX()
        _startY = MouseY()
    ElseIf MouseUp( 1 ) Then
        
        For iu.tUkot = Each tUkot
            If iu\cX > _pieninX And iu\cX < _suurinX And iu\cY > _pieninY And iu\cY < _suurinY Then
                If iu\cValittu = False Then
                    valittuja + 1
                EndIf
                iu\cValittu = True
            Else
                If iu\cValittu = True Then
                    valittuja - 1
                EndIf
                iu\cValittu = False
                
            EndIf
        Next iu
        
        _startX = 0
        _startY = 0
    EndIf
    
    //piirretään valintaboksi.
    If _startX <> 0 Or _startY <> 0 Then
        _pieninX = Min( _startX, MouseX() )
        _pieninY = Min( _startY, MouseY() )
        _suurinX = Max( _startX, MouseX() )
        _suurinY = Max( _startY, MouseY() )
        Box _pieninX, _pieninY, _suurinX - _pieninX, _suurinY - _pieninY, 0
    EndIf    
    
    //Mouse2 liikuttaa joukkoja.
    If MouseHit( 2 ) Then
        _posX = -13 * valittuja / 2
        _posY = -13 * valittuja / 2
        row = 0
        For iu.tUkot = Each tUkot
            If iu\cValittu = True Then
                
                If row = valittuja / 2 Then
                    _posY + 13
                    _posX = -13 * valittuja / 2
                EndIf
                    
                row + 1
                _posX + 13 * row
                iu\cTX = MouseX() + _posX
                iu\cTY = MouseY() + _posY
            EndIf
        Next iu
    EndIf

    //piirretään ja liikutetaan joukkoja.
    For iu.tUkot = Each tUkot
        If iu\cValittu = True Then
            Color cbGreen
            Text iu\cTX, iu\cTY, "A"
            Color cbRed
        Else
            Color cbWhite
        EndIf
        
        //liikutetaan ukkoja jotka eivät ole päämäärässään.
        If Distance( iu\cX, iu\cY, iu\cTX, iu\cTY ) > iu\cNopeus Then 
            kulma# = GetAngle( iu\cX, iu\cY, iu\cTX, iu\cTY )
            iu\cX = iu\cX + Cos( kulma# ) * iu\cNopeus
            iu\cY = iu\cY - Sin( kulma# ) * iu\cNopeus
        EndIf
        
        Text iu\cX, iu\cY, "A"
    Next iu

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

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Feuer » Thu Oct 01, 2009 7:15 pm

Kiitän vaivannäöstä. Tuossa on opeteltavaa pariksi päiväksi :o
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Tyhmät kysymykset (II/2009)

Post by MaGetzUb » Thu Oct 01, 2009 9:59 pm

Ja yleensä kannattaa käyttää reitinetsintä algoritmia, eikä suoraan ukko sojottamaan kohdepaikkaa kohdin, koska ei näytä kovinkaan mahtavalta se, että äijä jää kiinni, jos esim ukon ja toisen pisteen välillä on seinä.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

cool-driver
Active Member
Posts: 116
Joined: Sat Feb 14, 2009 8:47 am

Re: Tyhmät kysymykset (II/2009)

Post by cool-driver » Wed Oct 07, 2009 8:29 pm

Voisiko joku kertoa miten saisi tehtyä peliin sanomalehden, joka ottaisi teitoja pelistä ja johon voisi tehdä myös valmiita eventtejä?
Ja samoin kokousenginen, eli, että kun pidetään hallituksen kokous ja äänestetään, niin tulokset jakaantuisivat.
Projektit:
Ships Income Liikenne Suomesta Beta 2: valmis. Lataa tästä Projekti keskeytetty. Tehdään loppuun uuden CoolBasicin tulon jälkeen.
Diktaattori Beta 2: valmis. Lataa Tästä Projekti keskeytetty. Tehdään loppuun uuden CoolBasicin tulon jälkeen.

Ujo piimä

Re: Tyhmät kysymykset (II/2009)

Post by Ujo piimä » Fri Oct 09, 2009 12:31 am

Tuommosta tekstin vieritystä mietiskelin, vaan MouseMoveZ() ei oikein taivu toiveistani huolimatta. Tarkoitus olisi siis vain saada muutettua tekstin y-komponenttia rullaa pyörittämällä ylös ja alas.

Code: Select all

y=100

Repeat

If MouseMoveZ()=1 
    y+10
EndIf

If MouseMoveZ()=-1
    y-10
EndIf

Text 10,y,"JEAH"
DrawScreen 
Until EscapeKey()

User avatar
zHelmet
Member
Posts: 73
Joined: Mon Nov 10, 2008 4:55 pm

Re: Tyhmät kysymykset (II/2009)

Post by zHelmet » Fri Oct 09, 2009 8:16 am

Ujo piimä wrote:Tuommosta tekstin vieritystä mietiskelin, vaan MouseMoveZ() ei oikein taivu toiveistani huolimatta. Tarkoitus olisi siis vain saada muutettua tekstin y-komponenttia rullaa pyörittämällä ylös ja alas.

Code: Select all

...Koodia...
Joka kerta kun tuota MouseMoveZ() funktiota kutsutaan nollataanhiiren tapahtmat eli sitä ei tiedetä toista kertaa saman luupinn aikana joten viisaamapaa elisi ottaa se talteen tai lisätä suoraan esim:

Code: Select all

y=100
Repeat

    y = y + ( MouseMoveZ() * 10 )
    Text 10,y,"JEAH"

    DrawScreen
Until EscapeKey()

User avatar
zHelmet
Member
Posts: 73
Joined: Mon Nov 10, 2008 4:55 pm

Re: Tyhmät kysymykset (II/2009)

Post by zHelmet » Fri Oct 09, 2009 8:17 am

zHelmet wrote:
Ujo piimä wrote:Tuommosta tekstin vieritystä mietiskelin, vaan MouseMoveZ() ei oikein taivu toiveistani huolimatta. Tarkoitus olisi siis vain saada muutettua tekstin y-komponenttia rullaa pyörittämällä ylös ja alas.

Code: Select all

...Koodia...
Joka kerta kun tuota MouseMoveZ() funktiota kutsutaan nollataan hiiren tapahtmat eli sitä ei tiedetä toista kertaa saman luupin aikana joten viisaamapaa olisi ottaa se talteen tai lisätä suoraan esim:

Code: Select all

y=100
Repeat

    y = y + ( MouseMoveZ() * 10 )
    Text 10,y,"JEAH"

    DrawScreen
Until EscapeKey()

User avatar
skinkken
Advanced Member
Posts: 453
Joined: Sat Sep 01, 2007 4:00 pm
Location: Helsinki

Re: Tyhmät kysymykset (II/2009)

Post by skinkken » Tue Oct 13, 2009 1:58 pm

TietäISKö joku miten voi tallentaa ohjelmassa auki olevan kartan til-tiedostoon? siis vähän kuin jossain stigmatorissa, tai tilesterissä
Valmiit pelit: House of Horrors , Battle Zone , Über Ball , Itdoti , Space Chaos , Bloxxplosives
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013

Locked