Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja » Sun Jan 31, 2010 8:13 pm

Ukkeli törmäsi juuri yhteen visvaisimmista CB:n ongelmista, eli kääntäjä ei valita olemattomista muuttujista jolloin typoaminen on helppoa.

Reloadia tarkistaessa if reload>0, ei if reroad>0 :>

Disturbed: Haluatko siis muokata painovoimaa vai jonkun hyppypadin siihen? Mikäli jälkimmäistä niin käännä if-lauseet (tilen kohdalla olo ja z:n painaminen) toisin päin tai vaikka näin:

Code: Select all

If KeyHit(cbKeyZ) and maassa Then
    If GetMap(0,ObjectX(pelihahmo),ObjectY(pelihahmo)) = 137 Then
        yPlus# = 10.0
    Else
        yPlus# = 4.5
    EndIf
EndIf
Jos haluat tosiaan muokata painovoimaa niin yPlus# = yPlus# + PAINOVOIMA -kohtaa muokkaamaan hieman vastaavanlaiseksi.

DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 8:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK » Sun Jan 31, 2010 8:25 pm

En minä mitään hyppypadia vaan uimista kehittelin ._.

User avatar
buke44
Active Member
Posts: 169
Joined: Sat May 23, 2009 8:10 pm
Location: Tampere

Re: Tyhmät kysymykset (I/2010)

Post by buke44 » Sun Jan 31, 2010 10:06 pm

Mulla peli hyppää jotenki

Code: Select all

For i=1 To i=30
Next i
ton^ for to rakenteisen silmukan yli kokonaan. Testasin että vaikka kirjoitan: lolmuuttuja=54 ton silmukan alkuun, ja seuraavassa repeat silmukassa textaan sen nii se pysyy nollana, eli ohjelma hyppää kokonaan sen silmukan yli. Onko muilla ollut joskus tällaisia ongelmia??

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

Re: Tyhmät kysymykset (I/2010)

Post by Viltzu » Sun Jan 31, 2010 10:16 pm

buke44 wrote:Mulla peli hyppää jotenki

Code: Select all

For i=1 To i=30
Next i
ton^ for to rakenteisen silmukan yli kokonaan. Testasin että vaikka kirjoitan: lolmuuttuja=54 ton silmukan alkuun, ja seuraavassa repeat silmukassa textaan sen nii se pysyy nollana, eli ohjelma hyppää kokonaan sen silmukan yli. Onko muilla ollut joskus tällaisia ongelmia??
kai "lolmuuttuja" on merkkijono(string)? Eli $ loppuun.
Ilmeisesti ei ole kun nollasta puhuit, jos se olisi merkkijono, nollaa ei tulisi. Et näkisi mitään. Eli uskon että et ollut määrittänyt muuttujaa merkkijonoksi. :)
EDIT:

(@phons:) Ah, ajatusvirhe. :/ Mutta vika on todellakin siinä, mistä phons puhui.
Ja kyllä se muuttuja muuttuu, nimittäin nollasta luvuksi 54 :P Mutta kuitenkin.

Last edited by Viltzu on Sun Jan 31, 2010 10:21 pm, edited 7 times in total.

User avatar
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset (I/2010)

Post by phons » Sun Jan 31, 2010 10:17 pm

Nyt olet ymmärtänyt silmukan käytön ihan väärin...
1. Se muodostetaan näin:

Code: Select all

For i = 1 To 30 //ei i = 30
Next i
2. Muuttuja lolmuutuja ei muutu mihinkään koska sitä ei muuteta, se määritellään vain 30 kertaa numeroksi 54, miksi se silloin muuttuisi..

Hmm.. Viltzu mistä ihmeestä mahdat puhua? Itse ainakin ymmärsin jutun jotenkin toisin...
Image

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja » Sun Jan 31, 2010 10:38 pm

DisturbedTK wrote:En minä mitään hyppypadia vaan uimista kehittelin ._.
Aa, siinä tapauksessa jokin tämänkaltainen voisi toimia. Ei ole vielä CB:tä uuden käyttiksen puolella niin en voi taata toimivuutta, suunta on kuitenkin oikea.

Code: Select all

Const PAINOVOIMA = -0.1 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


'Asetetaan ruutu hieman zoomattuun tilaan
SCREEN 320,240,0,cbsizable 
SetWindow "Painovoimaesimerkki",3 'suurenna ruudulle

'JOS PELI TÖKKII TAI PÄTKII TAI NYKII, MUUTA:
' 1) cbSizable -> cbFullScreen
' 2) poista rivi 23

FrameLimit 40 'rajoita nopeutta
'-------------------------------------------------
'lataa kartta, siirrä sitä ylöspäin ja animoi se.
kenttä=LoadMap("Media\cdm2.til","Media\tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5

'lataa animaatiosarja oikealle, maskaa ja piilota se
oikea=LoadAnimObject("Media\zerorun1.bmp",47,51,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,30,51 'tämä pitää asettaa kaikkiin

'sama vasemmalle
vasen=LoadAnimObject("Media\zerorun2.bmp",47,51,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,30,51 'tämä pitää asettaa kaikkiin

'Tämä on varsinainen pelihahmo, joka piirretään ja
'jota hallitaan. Sille asetetaan törmäys->kartta
'Tätä EI PIILOTETA.
pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,30,51 'tämä pitää asettaa kaikkiin
'-------------------------------------------------
'Pääsilmukka
Repeat

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        'juokse oikealle
        PaintObject pelihahmo,oikea 'vaihda kuvaa...
        If maassa Then PlayObject pelihahmo,2,11,0.25
        vauhti=2 'vauhtia oikealle
    ElseIf LeftKey() Then
        'juokse vasemmalle
        PaintObject pelihahmo,vasen 'vaihda kuvaa...
        If maassa Then PlayObject pelihahmo,2,11,0.25
        vauhti=-2 'vauhtia vasemmalle
    Else 
        'pysäytä animaatio, jos ei liikuta
        PlayObject pelihahmo,0
    EndIf
    
    'liikuta pelihahmoa
    TranslateObject pelihahmo,vauhti,yPlus#
    
    UpdateGame 'päivitä törmäys
    CloneCameraPosition pelihahmo 'liimaa kamera
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(pelihahmo)
    'katsotaan tärmätäänkö kattoon tai lattiaan
    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            'lattia
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 'jalat on maassa
            EndIf
            'katto
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
    
    If GetMap(0,ObjectX(pelihahmo),ObjectY(pelihahmo)) = 137 Then
        If KeyDown(cbKeyZ) Then 
            yPlus#=1.5
         EndIf
    Else
        If KeyHit(cbKeyZ) And maassa Then 
            yPlus#=4.5 'voimaa ylös päin
        EndIf
        yPlus=yPlus+PAINOVOIMA 'päivitä painovoima
    EndIf
       
    'jos ollaan ilmassa, näytä toisenlainen kuva
    If törmäykset=0 Then PlayObject pelihahmo,12,0

    DrawScreen 'piirrä näyttö

Until EscapeKey()

Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Tyhmät kysymykset (I/2010)

Post by Nassi_Setä » Mon Feb 01, 2010 1:13 am

Kuinka voin antaa tiedoston polun OpenTo**** käskyille, jotka ovat funktiossa?
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....

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

Re: Tyhmät kysymykset (I/2010)

Post by Jonez » Mon Feb 01, 2010 1:28 am

Syöttämällä polku argumenttina funktiolle. Tai vaihtoehtoisesti käyttämällä globaalia merkkijonomuuttujaa joka säilöö halutun tiedostopolun. Tässä liiankin turha ja monimutkainen esimerkki:

Code: Select all

Function AvaaLuettavaksi( _polku As String )
    Return OpenToRead( _polku ) 
EndFunction

Function AvaaKirjoitettavaksi( _polku As String )
    Return OpenToWrite( _polku )
EndFunction

Function SuljeTiedosto( _tiedosto )
    CloseFile _tiedosto
EndFunction



f = AvaaKirjoitettavaksi( "jeetiedosto.txt" )

WriteLine f, "Hello World!"

SuljeTiedosto( f )


f = AvaaLuettavaksi( "jeetiedosto.txt" )

Print ReadLine( f )

SuljeTiedosto( f )

WaitKey

DeleteFile "jeetiedosto.txt"
Edit. Onpas näitä typoja...
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
Kille
Active Member
Posts: 249
Joined: Wed Aug 26, 2009 3:50 pm
Location: Juankoski

Re: Tyhmät kysymykset (I/2010)

Post by Kille » Mon Feb 01, 2010 9:57 am

koodaaja wrote:Ukkeli törmäsi juuri yhteen visvaisimmista CB:n ongelmista, eli kääntäjä ei valita olemattomista muuttujista jolloin typoaminen on helppoa.
Valittaa jos project-välilehden ForceVariableDeclaration on päällä.

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja » Mon Feb 01, 2010 1:06 pm

Se on puhdasta masokismia, ainakin itselläni se valitti puolet ajasta vääränlaisesta määritelmästä kun joskus kokeilin.

User avatar
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by SPuntte » Tue Feb 02, 2010 1:38 am

koodaaja wrote:Se on puhdasta masokismia, ainakin itselläni se valitti puolet ajasta vääränlaisesta määritelmästä kun joskus kokeilin.
Itse asiassa puhdasta masokismia on olla käyttämättä sitä! Et ehkä vain osaa määrittelyiden syntaksia oikein. Itse olen pitänyt tuota vakiona päällä mitä tahansa koodaillessani nyt ainakin vuoden-pari, eikä paluuta ole. Saa tapettua suurimman osan typo-bugeista alkuunsa, mikä säästää hermoja vähintään 1337%. Tosin tilalle on sitten tullut seuraava riesa: copypaste-bugit.

Force Variable Declaration-asetus päällä koodia kirjoitetaan yksinkertaisesti niin, että aina kun jossain käytetään uutta muuttujaa (sisälsipä se minkälaista dataa tahansa) lisätään edeltävälle riville sopiva määrittely:

Code: Select all

//Tämän koodin pitäisi mennä kääntäjästä läpi myös, kun Force Variable Declaration on päällä, mikäli en ole kauheasti typoillut.
Type MUN_TYYPPI
    Field jokuKuva As Integer
EndType

Dim jokuKokonaisluku As Integer
Dim pii As Float
Dim polku As String

jokuKokonaisluku = 5
pii = 3.1415926535897932 //Ja pilkunviilaajat älkööt vaivautuko - tiedän että CB:ssä on sisäänrakennettu vakio pii. Loppui vain mielikuvitus kesken.
polku = "\Media\guy.bmp"

Dim mun.MUN_TYYPPI

mun = New(MUN_TYYPPI)
mun\jokuKuva = Loadimage(polku)
Rotateimage(mun\jokuKuva, jokuKokonaisluku * pii)
Erikoisin lienee TYPE-instanssien määrittely. Itsekin yritin käyttää sitä pitkään väärin ja ihmettelin, miksei homma toimi.

Perudatatyyppien kohdalla voidaan valinnaisesti käyttää myös tyyppisymboleita %,# ja $. Ne voivat olla joko pelkästään määrittelylausekkeissa tai sitten ihan kaikkialla muuttujanimen perässä. Globaaleissa muuttujissa tyyppisymboleita EI saa käyttää, tai ainakaan itse en ole saanut niitä toimimaan kunnolla.

Kuten näkyy, kuva-kahvat ovat kokonaislukuja, kuten kaikki muutkin eksoottisemmat datatyypit (objektit, muistipalat, äänet, jne.)

Toki määrittelyjä voi kerätä yhteen konteksteittain esimerkiksi ohjelman alkuun, loopin alkua edeltävälle riville tai funktion alkuun, jolloin koodin luettavuus paranee ja määrittelyistä näkee kootusti ja kätevästi, missä mitäkin muuttujaa käytetään JA minkä tyyppistä dataa se sisältää.

Force Variable Declarationilla siis ehkäisee paljon ohjelman outoa käyttäytymistä, mm. MAVeja, joita on erityisen ikävä jäljittää.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja » Tue Feb 02, 2010 1:49 am

Kas, typejen instanssien ja globaalien kanssa noita ongelmia on lähinnä ilmennyt. Kovasti kiitos, nyt on nekin sitten selvillä.

User avatar
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 9:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend » Tue Feb 02, 2010 10:49 am

Miten saan tämän(gousb\goto) toimimaan Forcevariable päällä.

'Ohjelma ei toimi forcevariable päällä

Gosub Alku
Goto Loppu

Alku:
Print "Eipä toimi"
Return
Loppu:
WaitKey

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

Re: Tyhmät kysymykset (I/2010)

Post by Jonez » Tue Feb 02, 2010 1:11 pm

Tietääkseni Gotoa ja Gosubia ei voi käyttää FVD:n kanssa, koska kääntäjä ei erota kirjanmerkkejä ja muuttujia toisistaan, eikä muuttujassa voi olla kaksoispistettä.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by SPuntte » Tue Feb 02, 2010 1:30 pm

Joo, en ole itekään saanu noita toimimaan.

Yksi keino on tietysti kirjoittaa koodi FVD:n mukaan ja kommentoida labelit ja niiden kutsut syntaksitarkistuksen (F4) ajaksi ja sitten käännettäessä ottaa FVD pois päältä.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX

Panzur
Newcomer
Posts: 32
Joined: Sat Jun 06, 2009 6:26 pm

Re: Tyhmät kysymykset (I/2010)

Post by Panzur » Tue Feb 02, 2010 5:30 pm

Elikä haluaisin tehdä musiikki soittimeeni semmotteen äänen valinta jutun. Se voi olla semmonen vedettävä tai aina kun painaa niin tulee esim 25% enemmän ääntä. Kiitos jo etukäteen!

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by temu92 » Tue Feb 02, 2010 6:11 pm

Code: Select all

SCREEN 200, 100

// Äänenvoimakkuus
voimakkuus	= 0

// Päälooppi
Repeat
	painettu	= Nappula("Lisää volumea", 10, 40)
	
	// Jos ON painettu niin lisätään voluumia
	If painettu Then
		voimakkuus = voimakkuus + 25
		
		// Ei anneta mennä yli 100
		If voimakkuus > 100 Then
			voimakkuus = 0
		EndIf
	EndIf
	
	Text 10, 10, "Voluumi: "+voimakkuus
	
	DrawScreen
Forever

Function Nappula(teksti$, x, y)
	// Nappulaa ei ole painettu (vielä)
	painettu	= False
	
	// Tekstin leveys ja korkeus
	leveys	= TextWidth(teksti$)+10
	korkeus	= TextHeight(teksti$)+10
	
	// Onko hiiri laatikon päällä?
	If MouseX() >= x And MouseX() <= x+leveys And MouseY() >= y And MouseY() <= y+korkeus Then
		// Tarkistetaan onko hiirennappulaa painettu laatikon päällä
		If MouseUp(1) Then
			painettu	= True
		EndIf
		
		// Laatikon taustan väri (vaalea)
		Color 150, 150, 150
	Else
		// Laatikon taustan väri (tumma)
		Color 70, 70, 70
	EndIf
	
	// Laatikon tausta
	Box x, y, leveys, korkeus, True
	
	// Piirretään reunukset laatikolle
	Color 255, 255, 255
	Box x, y, leveys, korkeus, False
	
	// Tulostetaan nappulan teksti
	Text x+5, y+5, teksti$
	
	Return painettu
EndFunction
Siinä pätkä. Ei ole kuin nappula tosin, raahauspalkin teko on vähän monimutkasempaa. Tosin sellaisen tein silloin peliini, jos uskaltaa niin voi tutkia lähdekoodeja: http://foo.bluefoxgames.org/unforbidden/orbsources.rar

User avatar
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 9:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend » Tue Feb 02, 2010 9:24 pm

Panzur wrote:Elikä haluaisin tehdä musiikki soittimeeni semmotteen äänen valinta jutun. Se voi olla semmonen vedettävä tai aina kun painaa niin tulee esim 25% enemmän ääntä. Kiitos jo etukäteen!
Tässä tälläinen nopeasti tehty Raahauspalkki.

Code: Select all

    Repeat
        Voimakkuus = Raahauspalkki(10, 50, 100, voimakkuus)
        Text 0, 0, Voimakkuus
        DrawScreen
    Forever 

    Function Raahauspalkki(x,y,pituus,voimakkuus)
    
        Color cbwhite
        Box  x, y, pituus+10,10, 0
        
        If MouseDown(1) And MouseX() >= x And MouseX() <= x+pituus And MouseY() >= y-15 And MouseY() <= y+15
            voimakkuus = Min(Max((MouseX()-x) * 100 /pituus,0),100)
            Color cbblue
        Else
            Color cbwhite
        EndIf
       
        Box x + pituus * voimakkuus / 100, y, 10, 10
    
        Return voimakkuus
    EndFunction

BlueDeath
Newcomer
Posts: 18
Joined: Tue Feb 02, 2010 3:02 pm

Re: Tyhmät kysymykset (I/2010)

Post by BlueDeath » Tue Feb 02, 2010 9:38 pm

Voiko Colorin arvoksi asettaa jonkun kuvan? Jos voi, niin miten? Itse en ainakaan saanut onnistumaan.

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja » Tue Feb 02, 2010 9:59 pm

Ei voi, Color vaikuttaa vain piirtokomentojen väreihin ja piirtokomennot piirtävät vain yhtä väriä kerrallaan.

Locked