Tyhmät kysymykset (I/2010)
Re: Tyhmät kysymykset (I/2010)
Nopealla vilkaisulla et ainakaan palauta mitään tuolta funktiosta.vieras wrote:ei se toimi vaikka vaihoin sen
Re: Tyhmät kysymykset (I/2010)
Ks. Return manuaalista.vieras wrote:eli mitä pitäs tehä?
EDIT: Ohoh, mitä ihmettä. Missasin kokonaan tuon Global-rivin
Last edited by Awaclus on Fri Jun 11, 2010 12:54 pm, edited 1 time in total.
Re: Tyhmät kysymykset (I/2010)
Ei sun pidäkään palauttaa mitään, koska olet aivan oikeaoppisesti tehnyt halutuista muuttujista globaaleja.
Olet tainnut käsittää funktioiden parametrien käytön hieman väärin. Parametreillä voi ainoastaan välittää tietoa funktion sisään, mutta tämä linkki ei ole kaksisuuntainen. Tarkoitan sitä, että jos välität muuttujan "muuttuja" funktioon, ja tulostat muuttujan, saat sen arvon. Näin:
Mutta jos funktion sisällä muutat parametrin arvoa, alkuperäinen muuttuja ei muutu. Sinä siis näytit yrittävän tätä koodissasi. Jos logiikkasi toimisi, ruudulle tulostuisi seuraavassa esimerkissä 100. Mutta koska muuttujan a ja parametrin välinen "linkki on yksisuuntainen", a ei muutu.
Voit aina palauttaa funktiosta arvon käskyllä Return. Tällöin muuttuja myös pitää ottaa talteen. Seuraavassa esimerkissä välitetään annetaan muuttujalle a uusi arvo funktion sisällä. Uusi arvo annetaan parametrinä.
Lopulta päästään sinun ongelmaasi, ellet jo tähän mennessä sitä ratkaissut itse. Koska muuttujat joita haluat muuttaa ovat globaaleja, riittää että annat niille uuden arvon funktion sisällä:
Toinen tapa tehdä sama asia ilman globaaleja muuttujia:
Lisäksi, ei kannata käyttää Print-komentoa silmukan sisällä. Käytä mieluummin vaikka Text-komentoa.
Olet tainnut käsittää funktioiden parametrien käytön hieman väärin. Parametreillä voi ainoastaan välittää tietoa funktion sisään, mutta tämä linkki ei ole kaksisuuntainen. Tarkoitan sitä, että jos välität muuttujan "muuttuja" funktioon, ja tulostat muuttujan, saat sen arvon. Näin:
Code: Select all
Funkkari( "Hello World!" )
WaitKey
Function Funkkari( parametri As String )
Print parametri
EndFunction
Code: Select all
a = 5
MuutaArvo( a )
Function MuutaArvo( parametri )
parametri = 100
EndFunction
Print a
WaitKey
Code: Select all
a = 5
a = MuutaArvo( 100 )
Function MuutaArvo( parametri )
Return parametri
EndFunction
Print a
WaitKey
Code: Select all
Global a, b
Hae()
Function Hae()
a = Rand( 1, 10 )
b = Rand( 1, 10 )
EndFunction
Repeat
Text 20, 20, a
Text 20, 40, b
DrawScreen
Forever
Code: Select all
a = Hae()
b = Hae()
Function Hae()
Return Rand( 1, 10 )
EndFunction
Repeat
Text 20, 20, a
Text 20, 40, b
DrawScreen
Forever
- kaneli2000
- Guru
- Posts: 1059
- Joined: Mon Mar 17, 2008 2:40 pm
- Location: Lempäälä
Re: Tyhmät kysymykset (I/2010)
Jaaha. Eli siis ideana on, että ENTLIST-typessä on kaikki mahdolliset objektit aka. entityt, joita voidaan luoda. Nämä sitten luodaan ENTLITS:tistä konkreettisiksi entityiksi seuraavalla koodilla:
Se ei kuitenkaan toimi, vaan mavittaa. Tosin, jos ENTILIST:issä on vain yhden entityn tiedot, homma toimii. Täh.
Code: Select all
If MouseHit(1) And MouseX()>200 Then
For eList.ENTLIST = Each ENTLIST
newEnt.ENTITY = New(ENTITY)
If eList\name$ = "Stonecre" Then
newEnt\obj = CloneObject(eList\obj)
newEnt\name$ = eList\name$
newEnt\x = MouseWX()
newEnt\y = MouseWY()
EndIf
Next eList
EndIf
I see the rainbow rising
Re: Tyhmät kysymykset (I/2010)
Riittäisikö jos siirtäisit "newEnt.ENTITY = New(ENTITY)" iffien sisään? Jos iffi ei toteudu ENITY listaan tulee tavaraa ilman valideja objekteja.kaneli2000 wrote:Jaaha. Eli siis ideana on, että ENTLIST-typessä on kaikki mahdolliset objektit aka. entityt, joita voidaan luoda. Nämä sitten luodaan ENTLITS:tistä konkreettisiksi entityiksi seuraavalla koodilla:Se ei kuitenkaan toimi, vaan mavittaa. Tosin, jos ENTILIST:issä on vain yhden entityn tiedot, homma toimii. Täh.Code: Select all
If MouseHit(1) And MouseX()>200 Then For eList.ENTLIST = Each ENTLIST newEnt.ENTITY = New(ENTITY) If eList\name$ = "Stonecre" Then newEnt\obj = CloneObject(eList\obj) newEnt\name$ = eList\name$ newEnt\x = MouseWX() newEnt\y = MouseWY() EndIf Next eList EndIf
-On selkeästi impulsiivinen koodaaja joka...
- kaneli2000
- Guru
- Posts: 1059
- Joined: Mon Mar 17, 2008 2:40 pm
- Location: Lempäälä
Re: Tyhmät kysymykset (I/2010)
JATothrim wrote:Riittäisikö jos siirtäisit "newEnt.ENTITY = New(ENTITY)" iffien sisään? ;) Jos iffi ei toteudu ENITY listaan tulee tavaraa ilman valideja objekteja.kaneli2000 wrote:Jaaha. Eli siis ideana on, että ENTLIST-typessä on kaikki mahdolliset objektit aka. entityt, joita voidaan luoda. Nämä sitten luodaan ENTLITS:tistä konkreettisiksi entityiksi seuraavalla koodilla:Se ei kuitenkaan toimi, vaan mavittaa. Tosin, jos ENTILIST:issä on vain yhden entityn tiedot, homma toimii. Täh.Code: Select all
If MouseHit(1) And MouseX()>200 Then For eList.ENTLIST = Each ENTLIST newEnt.ENTITY = New(ENTITY) If eList\name$ = "Stonecre" Then newEnt\obj = CloneObject(eList\obj) newEnt\name$ = eList\name$ newEnt\x = MouseWX() newEnt\y = MouseWY() EndIf Next eList EndIf
Missähän ajatukset kulki mulla. Thanks man.
I see the rainbow rising
Re: Tyhmät kysymykset (I/2010)
kaneli2000:lle kiitokset illan nauruista, oot 1337pro.
-On selkeästi impulsiivinen koodaaja joka...
Re: Tyhmät kysymykset (I/2010)
Koitin tehdä isoa ristinollapeliä, ruudukko on 30*30. Peli toimii muuten normaalisti, mutta välillä viistoon voi tulla yli viisi merkkiä, viidestä se loppuu.
Ja tekoäly samalla tilee, eli voisiko joku yrittää korjata ongelman, ja tässä koodi:
Ja tekoäly samalla tilee, eli voisiko joku yrittää korjata ongelman, ja tässä koodi:
Code: Select all
SCREEN 600,600
Dim Ruutu(30,30) As Byte //Unohdin nollat =)
Dim pois As Byte
Dim x As Integer //väliaikaiset...
Dim y As Integer
Dim x2 As Integer //väliaikaiset...
Dim y2 As Integer
Dim i As Integer
///////////Tekoälyyn////////////
Dim SuurinSarja(2) As Byte
Dim Sarja As Byte
Dim SarjanSijaintiX(2) As Byte
Dim SarjanSijaintiY(2) As Byte
Dim SarjanVäliSijaintiX As Byte
Dim SarjanVäliSijaintiY As Byte
Dim SarjanMaa As Byte
/////////////////////////////////
Dim Määrä As Byte
Määrä = 4 //+ 1
Repeat
pois = 0
For x=20 To 600 Step 20
For y=20 To 600 Step 20
Color cbwhite
Line x,0,x,600 //Ylhäältä alas
Line 0,y,600,y//Vasemmalta oikealle
If pois = 0 And MouseHit(1) And MouseX() <= x And MouseY() <= y
If Ruutu(x/20,y/20) = 0
Ruutu(x/20,y/20) = 1
pois = 1
Else
pois = 2
EndIf
EndIf
If Ruutu(x/20,y/20) = 1
Color cbgreen
Box x-19,y-19,19,19
ElseIf Ruutu(x/20,y/20) = 2
Color cbred
Box x-19,y-19,19,19
EndIf
Next y
Next x
If KeyDown(57)
If SuurinSarja(1) = 0 And SuurinSarja(2) = 0
Color cborange
Box SarjanSijaintiX(1)*20-19,SarjanSijaintiY(1)*20-19,19,19
ElseIf SuurinSarja(1) > 2 Or SuurinSarja(2) = 0
Color cborange
Box SarjanSijaintiX(1)*20-19,SarjanSijaintiY(1)*20-19,19,19
Else
Color cborange //Piiretään tekoset =)
Box SarjanSijaintiX(2)*20-19,SarjanSijaintiY(2)*20-19,19,19
EndIf
EndIf
If pois =1
pois = 0
Sarja = 0
SarjanSijaintiX(1) = 0
SarjanSijaintiY(1) = 0
SarjanSijaintiX(2) = 0
SarjanSijaintiY(2) = 0
SuurinSarja(1) = 0
SuurinSarja(2) = 0
SarjanVäliSijaintiX = 0
SarjanVäliSijaintiY = 0
//Tarkistus....
Gosub Tarkistus
//....Tarkistus
//Tekoäly.....
If SuurinSarja(1) = 0 And SuurinSarja(2) = 0
Ruutu(Rand(1,30),Rand(1,30)) = 2
Color cbred
Box SarjanSijaintiX(1)*20-19,SarjanSijaintiY(1)*20-19,19,19
ElseIf (SuurinSarja(1) > 2 Or SuurinSarja(2) = 0) And SuurinSarja(2) >< 4
Ruutu(SarjanSijaintiX(1),SarjanSijaintiY(1)) = 2
Color cbred
Box SarjanSijaintiX(1)*20-19,SarjanSijaintiY(1)*20-19,19,19
Else
Ruutu(SarjanSijaintiX(2),SarjanSijaintiY(2)) = 2
Color cbred //Piiretään tekoset =)
Box SarjanSijaintiX(2)*20-19,SarjanSijaintiY(2)*20-19,19,19
EndIf
//....Tekoäly
Sarja = 0
SarjanSijaintiX(1) = 0
SarjanSijaintiY(1) = 0
SarjanSijaintiX(2) = 0
SarjanSijaintiY(2) = 0
SuurinSarja(1) = 0
SuurinSarja(2) = 0
SarjanVäliSijaintiX = 0
SarjanVäliSijaintiY = 0
//Tarkistus....
Gosub Tarkistus
//....Tarkistus
EndIf
DrawScreen
Forever
Tarkistus:
For x=1 To 30 //Ylhäältä alas
For y=1 To 30
SarjanMaa = Ruutu(x,y)
If Ruutu(x,y) >< 0
For i=1 To Määrä
Sarja + 1
If SarjanMaa >< Ruutu(x,y+i)
If SarjanMaa >< Ruutu(x,y+i+1) Or Ruutu(x,y+i) > 0
If SuurinSarja(SarjanMaa) < Sarja
If SarjanVäliSijaintiX > 0 //Välisijainti
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = SarjanVäliSijaintiX
SarjanSijaintiY(SarjanMaa) = SarjanVäliSijaintiY
ElseIf Ruutu(x,y+i) = 0 And y+1 <= 30 And Ruutu(x,y-1) = 0 And y-1 >= 1 And Sarja >= 3 And SarjanMaa = 1 //Pakkovoiton eston
SuurinSarja(SarjanMaa) = Sarja+2
SarjanSijaintiX(SarjanMaa) = x
SarjanSijaintiY(SarjanMaa) = Y+i
ElseIf Ruutu(x,y+i) = 0 And y+1 <= 30 //Alas
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = x
SarjanSijaintiY(SarjanMaa) = Y+i
ElseIf Ruutu(x,y-1) = 0 And y-1 >= 1 //Ylös
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = x
SarjanSijaintiY(SarjanMaa) = Y-1
EndIf
EndIf
Sarja = 0
SarjanVäliSijaintiX = 0
SarjanVäliSijaintiY = 0
y = y + i
i = 0
Exit
ElseIf i < Määrä //Löydettiin väli!
y = y + i
i = 0
SarjanVäliSijaintiX = x //Väli talteen
SarjanVäliSijaintiY = y
EndIf
EndIf
If i = Määrä
Sarja = 0
Voitto(SarjanMaa)
EndIf
Next i
EndIf
Next y
Next x
For y=1 To 30 //Vasemmalta oikealle
For x=1 To 30
If Ruutu(x,y) >< 0
SarjanMaa = Ruutu(x,y)
For i=1 To Määrä
Sarja + 1
If SarjanMaa >< Ruutu(x+i,y)
If SarjanMaa >< Ruutu(x+i+1,y) Or Ruutu(x+i,y) > 0
If SuurinSarja(SarjanMaa) < Sarja
If SarjanVäliSijaintiX > 0 //Välisijainti
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = SarjanVäliSijaintiX
SarjanSijaintiY(SarjanMaa) = SarjanVäliSijaintiY
ElseIf Ruutu(x+i,y) = 0 And x+i <= 30 And Ruutu(x-1,y) = 0 And x-1 >= 1 And Sarja >= 3 And SarjanMaa = 1 //Pakkovoiton eston
SuurinSarja(SarjanMaa) = Sarja+2
SarjanSijaintiX(SarjanMaa) = x+i
SarjanSijaintiY(SarjanMaa) = Y
ElseIf Ruutu(x+i,y) = 0 And x+i <= 30 //Oikea
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = x+i
SarjanSijaintiY(SarjanMaa) = Y
ElseIf Ruutu(x-1,y) = 0 And x-1 >= 1 //Vasen
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = x-1
SarjanSijaintiY(SarjanMaa) = Y
EndIf
EndIf
Sarja = 0
SarjanVäliSijaintiX = 0
SarjanVäliSijaintiY = 0
x = x + i
i = 0
Exit
ElseIf i < Määrä //Löydettiin väli!
x = x + i
i = 0
SarjanVäliSijaintiX = x //Väli talteen
SarjanVäliSijaintiY = y
EndIf
EndIf
If i = Määrä
Sarja = 0
Voitto(SarjanMaa)
EndIf
Next i
EndIf
Next x
Next y
For x=1 To 30 //Viistorivi (Ylhäältä vasemmalta)
For y=1 To 30
If Ruutu(x,y) >< 0
SarjanMaa = Ruutu(x,y)
For i=1 To Määrä
Sarja + 1
If SarjanMaa >< Ruutu(x+i,y+i)
If SarjanMaa >< Ruutu(x+i+1,y+i+1) Or Ruutu(x+i,y+i) > 0
If SuurinSarja(SarjanMaa) < Sarja
If SarjanVäliSijaintiX > 0 //Välisijainti
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = SarjanVäliSijaintiX
SarjanSijaintiY(SarjanMaa) = SarjanVäliSijaintiY
ElseIf Ruutu(x+i,y+i) = 0 And x + i <= 30 And y + i <= 30 And Ruutu(x-1,y-1) = 0 And x - 1 >= 1 And y - 1 >= 1 And Sarja >= 3 And SarjanMaa = 1 //Pakkovoiton eston
SuurinSarja(SarjanMaa) = Sarja+2
SarjanSijaintiX(SarjanMaa) = x+i
SarjanSijaintiY(SarjanMaa) = Y+i
ElseIf Ruutu(x+i,y+i) = 0 And x + i <= 30 And y + i <= 30 //Oikea
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = x+i
SarjanSijaintiY(SarjanMaa) = y+i
ElseIf Ruutu(x-1,y-1) = 0 And x - 1 >= 1 And y - 1 >= 1 //Vasen
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = x-1
SarjanSijaintiY(SarjanMaa) = y-1
EndIf
EndIf
Sarja = 0
SarjanVäliSijaintiX = 0
SarjanVäliSijaintiY = 0
y = y + 1
x = x + 1
i = 0
Exit
ElseIf i < Määrä //Löydettiin väli!
y = y + 1
x = x + 1
i = 0
SarjanVäliSijaintiX = x+i //Väli talteen
SarjanVäliSijaintiY = y
EndIf
EndIf
If i = Määrä
Sarja = 0
Voitto(SarjanMaa)
EndIf
Next i
EndIf
Next y
Next x
For y=30 To 1 Step -1 //Viistorivi (Alhaalta vasemmalta)
For x=1 To 30
If Ruutu(x,y) >< 0
SarjanMaa = Ruutu(x,y)
For i=1 To Määrä
Sarja + 1
If SarjanMaa >< Ruutu(x+i,y-i)
If SarjanMaa >< Ruutu(x+i+1,y-i-1) Or Ruutu(x+i,y-i) > 0
If SuurinSarja(SarjanMaa) < Sarja
If SarjanVäliSijaintiX > 0 //Välisijainti
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = SarjanVäliSijaintiX
SarjanSijaintiY(SarjanMaa) = SarjanVäliSijaintiY
ElseIf Ruutu(x+i,y-i) = 0 And x + i <= 30 And y - i >= 1 And Ruutu(x-1,y+1) = 0 And x - 1 >= 1 And y + 1 <= 30 And Sarja >= 3 And SarjanMaa = 1 //Pakkovoiton eston
SuurinSarja(SarjanMaa) = Sarja+2
SarjanSijaintiX(SarjanMaa) = x+i
SarjanSijaintiY(SarjanMaa) = Y-i
ElseIf Ruutu(x+i,y-i) = 0 And x + i <= 30 And y - i >= 1 //Oikea
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = x+i
SarjanSijaintiY(SarjanMaa) = y-i
ElseIf Ruutu(x-1,y+1) = 0 And x - 1 >= 1 And y + 1 <= 30 //Vasen
SuurinSarja(SarjanMaa) = Sarja
SarjanSijaintiX(SarjanMaa) = x-1
SarjanSijaintiY(SarjanMaa) = y+1
EndIf
EndIf
Sarja = 0
SarjanVäliSijaintiX = 0
SarjanVäliSijaintiY = 0
y = y - 1
x = x + 1
i = 0
Exit
ElseIf i < Määrä //Löydettiin väli!
y = y - 1
x = x + 1
i = 0
SarjanVäliSijaintiX = x //Väli talteen
SarjanVäliSijaintiY = y-i
EndIf
EndIf
If i = Määrä
Sarja = 0
Voitto(SarjanMaa)
EndIf
Next i
EndIf
Next x
Next y
For x=1 To 30 //Tasapeli
For y=1 To 30
If Ruutu(x,y) = 0
Exit
ElseIf x=30 And y=30
Voitto(0)
EndIf
Next y
Next x
Return
Function Voitto(maa)
Color cbwhite
If maa = 0
Text 10,5, "Tasapeli"
ElseIf maa = 1
Text 10,5, "Pelaaja voitti"
Else
Text 10,5, "Tekoäly voitti"
EndIf
DrawScreen
ClearMouse()
WaitMouse
ClearMouse()
For x=1 To 30
For y=1 To 30
Ruutu(x,y) = 0 //Nollaus
Next y
Next x
EndFunction
Re: Tyhmät kysymykset (I/2010)
Tyylikkäästi olet kyllä saanut tekoälyn kasaan if-lauseilla, mutta älykästä tekoälyä on vaikea näin toteuttaa.. Suosittelen perehtymään minmax-algoritmiin, jos järkevämpien tekoälyjen teko kiinnostaa.. Minmaxia voi sitten parannella erilaisilla tunnistuksilla hieman pelikohtaisesti.. Itse en ole vielä löytänyt tekoälyä, joka voittaisi minut aloituksessa, mutta ohjelmointiputkan tekoäly ville pääsi jo lähelle (ja ehkä suuremman miettimisajan kanssa voittaisi, pitääkin testata)..jokunen wrote:Koitin tehdä isoa ristinollapeliä, ruudukko on 30*30. Peli toimii muuten normaalisti, mutta välillä viistoon voi tulla yli viisi merkkiä, viidestä se loppuu.
Ja tekoäly samalla tilee, eli voisiko joku yrittää korjata ongelman, ja tässä koodi:Code: Select all
SCREEN 600,600 Dim Ruutu(30,30) As Byte //Unohdin nollat =) Dim pois As Byte Dim x As Integer //väliaikaiset... Dim y As Integer Dim x2 As Integer //väliaikaiset... Dim y2 As Integer Dim i As Integer ///////////Tekoälyyn//////////// Dim SuurinSarja(2) As Byte Dim Sarja As Byte Dim SarjanSijaintiX(2) As Byte Dim SarjanSijaintiY(2) As Byte Dim SarjanVäliSijaintiX As Byte Dim SarjanVäliSijaintiY As Byte Dim SarjanMaa As Byte ///////////////////////////////// Dim Määrä As Byte Määrä = 4 //+ 1 Repeat pois = 0 For x=20 To 600 Step 20 For y=20 To 600 Step 20 Color cbwhite Line x,0,x,600 //Ylhäältä alas Line 0,y,600,y//Vasemmalta oikealle If pois = 0 And MouseHit(1) And MouseX() <= x And MouseY() <= y If Ruutu(x/20,y/20) = 0 Ruutu(x/20,y/20) = 1 pois = 1 Else pois = 2 EndIf EndIf If Ruutu(x/20,y/20) = 1 Color cbgreen Box x-19,y-19,19,19 ElseIf Ruutu(x/20,y/20) = 2 Color cbred Box x-19,y-19,19,19 EndIf Next y Next x If KeyDown(57) If SuurinSarja(1) = 0 And SuurinSarja(2) = 0 Color cborange Box SarjanSijaintiX(1)*20-19,SarjanSijaintiY(1)*20-19,19,19 ElseIf SuurinSarja(1) > 2 Or SuurinSarja(2) = 0 Color cborange Box SarjanSijaintiX(1)*20-19,SarjanSijaintiY(1)*20-19,19,19 Else Color cborange //Piiretään tekoset =) Box SarjanSijaintiX(2)*20-19,SarjanSijaintiY(2)*20-19,19,19 EndIf EndIf If pois =1 pois = 0 Sarja = 0 SarjanSijaintiX(1) = 0 SarjanSijaintiY(1) = 0 SarjanSijaintiX(2) = 0 SarjanSijaintiY(2) = 0 SuurinSarja(1) = 0 SuurinSarja(2) = 0 SarjanVäliSijaintiX = 0 SarjanVäliSijaintiY = 0 //Tarkistus.... Gosub Tarkistus //....Tarkistus //Tekoäly..... If SuurinSarja(1) = 0 And SuurinSarja(2) = 0 Ruutu(Rand(1,30),Rand(1,30)) = 2 Color cbred Box SarjanSijaintiX(1)*20-19,SarjanSijaintiY(1)*20-19,19,19 ElseIf (SuurinSarja(1) > 2 Or SuurinSarja(2) = 0) And SuurinSarja(2) >< 4 Ruutu(SarjanSijaintiX(1),SarjanSijaintiY(1)) = 2 Color cbred Box SarjanSijaintiX(1)*20-19,SarjanSijaintiY(1)*20-19,19,19 Else Ruutu(SarjanSijaintiX(2),SarjanSijaintiY(2)) = 2 Color cbred //Piiretään tekoset =) Box SarjanSijaintiX(2)*20-19,SarjanSijaintiY(2)*20-19,19,19 EndIf //....Tekoäly Sarja = 0 SarjanSijaintiX(1) = 0 SarjanSijaintiY(1) = 0 SarjanSijaintiX(2) = 0 SarjanSijaintiY(2) = 0 SuurinSarja(1) = 0 SuurinSarja(2) = 0 SarjanVäliSijaintiX = 0 SarjanVäliSijaintiY = 0 //Tarkistus.... Gosub Tarkistus //....Tarkistus EndIf DrawScreen Forever Tarkistus: For x=1 To 30 //Ylhäältä alas For y=1 To 30 SarjanMaa = Ruutu(x,y) If Ruutu(x,y) >< 0 For i=1 To Määrä Sarja + 1 If SarjanMaa >< Ruutu(x,y+i) If SarjanMaa >< Ruutu(x,y+i+1) Or Ruutu(x,y+i) > 0 If SuurinSarja(SarjanMaa) < Sarja If SarjanVäliSijaintiX > 0 //Välisijainti SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = SarjanVäliSijaintiX SarjanSijaintiY(SarjanMaa) = SarjanVäliSijaintiY ElseIf Ruutu(x,y+i) = 0 And y+1 <= 30 And Ruutu(x,y-1) = 0 And y-1 >= 1 And Sarja >= 3 And SarjanMaa = 1 //Pakkovoiton eston SuurinSarja(SarjanMaa) = Sarja+2 SarjanSijaintiX(SarjanMaa) = x SarjanSijaintiY(SarjanMaa) = Y+i ElseIf Ruutu(x,y+i) = 0 And y+1 <= 30 //Alas SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = x SarjanSijaintiY(SarjanMaa) = Y+i ElseIf Ruutu(x,y-1) = 0 And y-1 >= 1 //Ylös SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = x SarjanSijaintiY(SarjanMaa) = Y-1 EndIf EndIf Sarja = 0 SarjanVäliSijaintiX = 0 SarjanVäliSijaintiY = 0 y = y + i i = 0 Exit ElseIf i < Määrä //Löydettiin väli! y = y + i i = 0 SarjanVäliSijaintiX = x //Väli talteen SarjanVäliSijaintiY = y EndIf EndIf If i = Määrä Sarja = 0 Voitto(SarjanMaa) EndIf Next i EndIf Next y Next x For y=1 To 30 //Vasemmalta oikealle For x=1 To 30 If Ruutu(x,y) >< 0 SarjanMaa = Ruutu(x,y) For i=1 To Määrä Sarja + 1 If SarjanMaa >< Ruutu(x+i,y) If SarjanMaa >< Ruutu(x+i+1,y) Or Ruutu(x+i,y) > 0 If SuurinSarja(SarjanMaa) < Sarja If SarjanVäliSijaintiX > 0 //Välisijainti SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = SarjanVäliSijaintiX SarjanSijaintiY(SarjanMaa) = SarjanVäliSijaintiY ElseIf Ruutu(x+i,y) = 0 And x+i <= 30 And Ruutu(x-1,y) = 0 And x-1 >= 1 And Sarja >= 3 And SarjanMaa = 1 //Pakkovoiton eston SuurinSarja(SarjanMaa) = Sarja+2 SarjanSijaintiX(SarjanMaa) = x+i SarjanSijaintiY(SarjanMaa) = Y ElseIf Ruutu(x+i,y) = 0 And x+i <= 30 //Oikea SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = x+i SarjanSijaintiY(SarjanMaa) = Y ElseIf Ruutu(x-1,y) = 0 And x-1 >= 1 //Vasen SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = x-1 SarjanSijaintiY(SarjanMaa) = Y EndIf EndIf Sarja = 0 SarjanVäliSijaintiX = 0 SarjanVäliSijaintiY = 0 x = x + i i = 0 Exit ElseIf i < Määrä //Löydettiin väli! x = x + i i = 0 SarjanVäliSijaintiX = x //Väli talteen SarjanVäliSijaintiY = y EndIf EndIf If i = Määrä Sarja = 0 Voitto(SarjanMaa) EndIf Next i EndIf Next x Next y For x=1 To 30 //Viistorivi (Ylhäältä vasemmalta) For y=1 To 30 If Ruutu(x,y) >< 0 SarjanMaa = Ruutu(x,y) For i=1 To Määrä Sarja + 1 If SarjanMaa >< Ruutu(x+i,y+i) If SarjanMaa >< Ruutu(x+i+1,y+i+1) Or Ruutu(x+i,y+i) > 0 If SuurinSarja(SarjanMaa) < Sarja If SarjanVäliSijaintiX > 0 //Välisijainti SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = SarjanVäliSijaintiX SarjanSijaintiY(SarjanMaa) = SarjanVäliSijaintiY ElseIf Ruutu(x+i,y+i) = 0 And x + i <= 30 And y + i <= 30 And Ruutu(x-1,y-1) = 0 And x - 1 >= 1 And y - 1 >= 1 And Sarja >= 3 And SarjanMaa = 1 //Pakkovoiton eston SuurinSarja(SarjanMaa) = Sarja+2 SarjanSijaintiX(SarjanMaa) = x+i SarjanSijaintiY(SarjanMaa) = Y+i ElseIf Ruutu(x+i,y+i) = 0 And x + i <= 30 And y + i <= 30 //Oikea SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = x+i SarjanSijaintiY(SarjanMaa) = y+i ElseIf Ruutu(x-1,y-1) = 0 And x - 1 >= 1 And y - 1 >= 1 //Vasen SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = x-1 SarjanSijaintiY(SarjanMaa) = y-1 EndIf EndIf Sarja = 0 SarjanVäliSijaintiX = 0 SarjanVäliSijaintiY = 0 y = y + 1 x = x + 1 i = 0 Exit ElseIf i < Määrä //Löydettiin väli! y = y + 1 x = x + 1 i = 0 SarjanVäliSijaintiX = x+i //Väli talteen SarjanVäliSijaintiY = y EndIf EndIf If i = Määrä Sarja = 0 Voitto(SarjanMaa) EndIf Next i EndIf Next y Next x For y=30 To 1 Step -1 //Viistorivi (Alhaalta vasemmalta) For x=1 To 30 If Ruutu(x,y) >< 0 SarjanMaa = Ruutu(x,y) For i=1 To Määrä Sarja + 1 If SarjanMaa >< Ruutu(x+i,y-i) If SarjanMaa >< Ruutu(x+i+1,y-i-1) Or Ruutu(x+i,y-i) > 0 If SuurinSarja(SarjanMaa) < Sarja If SarjanVäliSijaintiX > 0 //Välisijainti SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = SarjanVäliSijaintiX SarjanSijaintiY(SarjanMaa) = SarjanVäliSijaintiY ElseIf Ruutu(x+i,y-i) = 0 And x + i <= 30 And y - i >= 1 And Ruutu(x-1,y+1) = 0 And x - 1 >= 1 And y + 1 <= 30 And Sarja >= 3 And SarjanMaa = 1 //Pakkovoiton eston SuurinSarja(SarjanMaa) = Sarja+2 SarjanSijaintiX(SarjanMaa) = x+i SarjanSijaintiY(SarjanMaa) = Y-i ElseIf Ruutu(x+i,y-i) = 0 And x + i <= 30 And y - i >= 1 //Oikea SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = x+i SarjanSijaintiY(SarjanMaa) = y-i ElseIf Ruutu(x-1,y+1) = 0 And x - 1 >= 1 And y + 1 <= 30 //Vasen SuurinSarja(SarjanMaa) = Sarja SarjanSijaintiX(SarjanMaa) = x-1 SarjanSijaintiY(SarjanMaa) = y+1 EndIf EndIf Sarja = 0 SarjanVäliSijaintiX = 0 SarjanVäliSijaintiY = 0 y = y - 1 x = x + 1 i = 0 Exit ElseIf i < Määrä //Löydettiin väli! y = y - 1 x = x + 1 i = 0 SarjanVäliSijaintiX = x //Väli talteen SarjanVäliSijaintiY = y-i EndIf EndIf If i = Määrä Sarja = 0 Voitto(SarjanMaa) EndIf Next i EndIf Next x Next y For x=1 To 30 //Tasapeli For y=1 To 30 If Ruutu(x,y) = 0 Exit ElseIf x=30 And y=30 Voitto(0) EndIf Next y Next x Return Function Voitto(maa) Color cbwhite If maa = 0 Text 10,5, "Tasapeli" ElseIf maa = 1 Text 10,5, "Pelaaja voitti" Else Text 10,5, "Tekoäly voitti" EndIf DrawScreen ClearMouse() WaitMouse ClearMouse() For x=1 To 30 For y=1 To 30 Ruutu(x,y) = 0 //Nollaus Next y Next x EndFunction
Itse tekemäni ristinollan runko (jonkun vuoden vanha), jos siitä on jotain apua..
Code: Select all
// Ristinolla
SCREEN 640,480
Const RuutujaX = 25
Const RuutujaY = 22
Const Ruutusize = 18
Merkkeja_voittoon = 5
ristikkoX = 20
ristikkoY = 40
vuoro = 1
Dim ruutu( RuutujaX, RuutujaY )
Ristikko = MakeImage( RuutujaX*Ruutusize+1 , RuutujaY*Ruutusize+1 )
Ristikko = MakeRistikko( ristikko )
oldvuoro = vuoro
ClsColor cbwhite
Repeat'Pääsilmukka
DrawImage ristikko, ristikkoX,ristikkoY
If MouseDown(1) And Timer()> tim+300 Then
If BoxOverlap(MouseX(),MouseY(),1,1,ristikkoX,ristikkoY,RuutujaX*Ruutusize , RuutujaY*Ruutusize) Then
px = ( MouseX() - ristikkoX ) / (Ruutusize)
py = ( MouseY() - ristikkoY ) / (Ruutusize)
If ruutu(px,py) = 0 Then
DrawToImage ristikko
If vuoro=-1 Then Color cbblue Else Color cbred
Box px*Ruutusize+1,py*Ruutusize+1,Ruutusize-1,Ruutusize-1
ruutu(px,py) = vuoro
vuoro=-vuoro
tim = Timer()
DrawToScreen
EndIf
EndIf
EndIf
If oldvuoro=-vuoro Then
oldvuoro=vuoro
For x=0 To ruutujaX-1
For y=0 To RuutujaY-1
If ruutu(x,y)=-1 Or ruutu(x,y)=1 Then
arvo = ruutu(x,y)
luku = 0 : paikka1 = 0 : paikka2 = 0 : paikka3 = 0 : paikka4 = 0 : paikka5 = 0
For a=1 To Merkkeja_voittoon-1
If ruutu(x+a,y+a)=arvo Then paikka1 + 1
If ruutu(x+a,y)=arvo Then paikka2 + 1
If ruutu(x,y+a)=arvo Then paikka3 + 1
If y=>Merkkeja_voittoon Then
If ruutu(x+a,y-a)=arvo Then paikka4 + 1
If x=>Merkkeja_voittoon Then
If ruutu(x-a,y-a)=arvo Then paikka5 + 1
EndIf
EndIf
luku = Max( paikka1, Max( paikka2, Max( paikka3, Max( paikka4, paikka5))))
If luku < a Then // ketju jo katkennut..
Exit
ElseIf luku = Merkkeja_voittoon-1 Then // voitto
If arvo = -1 Then s_voitot+1 Else p_voitot+1
ClearDim()
Ristikko = MakeRistikko( ristikko )
EndIf
Next a
EndIf
Next y
Next x
EndIf
Color cbblack
Text 500,200,"FPS:"+FPS()
Color cbred
Text 500,100,"Red wins:"+p_voitot
Color cbblue
Text 500,130,"Blue wins:"+s_voitot
DrawScreen
Forever
Function ClearDim()
For x=0 To ruutujaX-1
For y=0 To RuutujaY-1
ruutu(x,y) = 0
Next y
Next x
EndFunction
Function MakeRistikko( img )
MaskImage img, cbwhite
DrawToImage img
Color cbwhite
Box 0,0,ImageWidth(img),ImageHeight(img)
Color cbblack
For x=0 To RuutujaX-1
For y=0 To RuutujaY-1
Box x * Ruutusize, y* Ruutusize, Ruutusize+1, Ruutusize+1, 0
Next y
Next x
DrawToScreen
Return img
EndFunction
Tekeillä pikkupelejä ja ohjelmia
Re: Tyhmät kysymykset (I/2010)
Koitin soveltaa MinMax-algorytmiä, onnistuin jotenkin siinä, voitte yrittää pelata, mutta vaikka kuinka yritän tehdä voiton viidestä kohdasta (noin rivi 123), se ei onnisu? Voisiko joku nyt auttaa taas minua
Ja se ei sitten johdu siitä että olen laittanut riville => määrä (määrä = 5), jos koitan vaihtaa määrää, niin silti voitto tulee kuudesta.
Ja se ei sitten johdu siitä että olen laittanut riville => määrä (määrä = 5), jos koitan vaihtaa määrää, niin silti voitto tulee kuudesta.
Code: Select all
SCREEN 600,600
Dim Ruutu(30,30) As Byte //Unohdin nollat =)
Dim pois As Byte //Milloin löydettiin oikea kohta
Dim x As Integer //väliaikaiset...
Dim y As Integer
Dim i As Integer
///////////Tekoälyyn////////////
Dim Arvo As Byte//Suurin väliaikainen arvo
Dim Arvo1 As Byte //Polun arvo, Vaaka
Dim Arvo2 As Byte //Pysty
Dim Arvo3 As Byte //Viisto(Ylhäältä oikealta)
Dim Arvo4 As Byte //Viisto(alhaalta oikealta)
Dim Maa1 As Byte //Polun Maa, Vaaka
Dim Maa2 As Byte //Pysty
Dim Maa3 As Byte //Viisto(Ylhäältä oikealta)
Dim Maa4 As Byte //Viisto(alhaalta oikealta)
//Suurimmat
Dim RuudunArvot As Byte //Arvot
Dim RuudunArvotX As Byte //Sijainti
Dim RuudunArvotY As Byte
Dim RuudunArvo As Byte //Suurin (ratkaiseva)
//Pisteytys
Const Tyhjä = 3
Const Pelaaja = 7
Const Tietokone = 8
/////////////////////////////////
Dim Määrä As Byte
Määrä = 5
Puhdista()
Repeat
pois = 0
For x=20 To 600 Step 20
For y=20 To 600 Step 20
Color cbwhite
Line x,0,x,600 //Ylhäältä alas
Line 0,y,600,y//Vasemmalta oikealle
If pois = 0 And MouseHit(1) And MouseX() <= x And MouseY() <= y
If Ruutu(x/20,y/20) = Tyhjä
Ruutu(x/20,y/20) = Pelaaja
pois = 1
Else
pois = 2
EndIf
EndIf
If Ruutu(x/20,y/20) = Pelaaja
Color cbgreen
Box x-19,y-19,19,19
ElseIf Ruutu(x/20,y/20) = Tietokone
Color cbred
Box x-19,y-19,19,19
EndIf
Next y
Next x
If pois =1
Gosub Tarkistus
Gosub Tietokone
Ruutu(RuudunArvotX, RuudunArvotY) = Tietokone
Color cbred
Box RuudunArvotX*20-19,RuudunArvotY*20-19,19,19
RuudunArvot = 0
RuudunArvo = 0
RuudunArvotX = 0
RuudunArvotY = 0
Gosub Tarkistus
EndIf
DrawScreen
Forever
Tarkistus:
For x=1 To 30
For y=1 To 30
If Ruutu(x,y) > Tyhjä
For i=-Määrä To Määrä
pois = 1
If Ruutu(x,y) = Ruutu(x+i,y)
Arvo1 = Arvo1 + 1
pois = 0
EndIf
If Ruutu(x,y) = Ruutu(x,y+i)
Arvo2 = Arvo2 + 1
pois = 0
EndIf
If Ruutu(x,y) = Ruutu(x+i,y+i)
Arvo3 = Arvo3 + 1
pois = 0
EndIf
If Ruutu(x,y) = Ruutu(x+i,y-i)
Arvo4 = Arvo4 + 1
pois = 0
EndIf
If pois = 1
Exit
EndIf
Next i
If Max(Arvo1,Max(Arvo2,Max(Arvo3,Arvo4))) >= Määrä
Voitto(Ruutu(x,y))
EndIf
Arvo = 0
Arvo1 = 0
Arvo2 = 0
Arvo3 = 0
Arvo4 = 0
EndIf
Next y
Next x
Return
Tietokone:
ClearText
For x=1 To 30
For y=1 To 30
If Ruutu(x,y) = Tyhjä
For i=-Määrä+2 To Määrä-3
If x+i >= 1 And x+i <= 30
If Maa1 = Ruutu(x+i,y) Or Ruutu(x+i,y) = Tyhjä
Arvo1 = Arvo1 + Ruutu(x+i,y)
ElseIf Maa1 = 0
Arvo1 = Arvo1 + Ruutu(x+i,y)
Maa1 = Ruutu(x+i,y)
Else
Arvo1 = 0
Maa1 = Ruutu(x+i,y)
Arvo1 = Arvo1 + Ruutu(x+i,y)
EndIf
EndIf
If y+i >= 1 And y+i <= 30
If Maa2 = Ruutu(x,y+i) Or Ruutu(x,y+i) = Tyhjä
Arvo2 = Arvo2 + Ruutu(x,y+i)
ElseIf Maa2 = 0
Arvo2 = Arvo2 + Ruutu(x,y+i)
Maa2 = Ruutu(x,y+i)
Else
Arvo2 = 0
Maa2 = Ruutu(x,y+i)
Arvo2 = Arvo2 + Ruutu(x,y+i)
EndIf
EndIf
If x+i >= 1 And x+i <= 30 And y+i >= 1 And y+i <= 30
If Maa3 = Ruutu(x+i,y+i) Or Ruutu(x+i,y+i) = Tyhjä
Arvo3 = Arvo3 + Ruutu(x+i,y+i)
ElseIf Maa3 = 0
Arvo3 = Arvo3 + Ruutu(x+i,y+i)
Maa3 = Ruutu(x+i,y+i)
Else
Arvo3 = 0
Maa3 = Ruutu(x+i,y+i)
Arvo3 = Arvo3 + Ruutu(x+i,y+i)
EndIf
EndIf
If x+i >= 1 And x+i <= 30 And y-i >= 1 And y-i <= 30
If Maa4 = Ruutu(x+i,y-i) Or Ruutu(x+i,y-i) = Tyhjä
Arvo4 = Arvo4 + Ruutu(x+i,y-i)
ElseIf Maa4 = 0
Arvo4 = Arvo4 + Ruutu(x+i,y-i)
Maa4 = Ruutu(x+i,y-i)
Else
Arvo4 = 0
Maa4 = Ruutu(x+i,y-i)
Arvo4 = Arvo4 + Ruutu(x+i,y-i)
EndIf
EndIf
Next i
Arvo = Max(Arvo1,Max(Arvo2,Max(Arvo3,Arvo4)))
Locate (x-1)*20, (y-1)*20
AddText arvo +""
If RuudunArvo < Arvo//Jos oli tähän mennessä paras niin muistiin vaan!
RuudunArvot = Arvo1 + Arvo2 + Arvo3 + Arvo4
RuudunArvotX = x
RuudunArvotY = y
RuudunArvo = Arvo
ElseIf RuudunArvot < Arvo1 + Arvo2 + Arvo3 + Arvo4 And RuudunArvo = Arvo
RuudunArvot = Arvo1 + Arvo2 + Arvo3 + Arvo4
RuudunArvotX = x
RuudunArvotY = y
RuudunArvo = Arvo
EndIf
EndIf
Arvo = 0
Arvo1 = 0
Arvo2 = 0
Arvo3 = 0
Arvo4 = 0
Maa1 = 0
Maa2 = 0
Maa3 = 0
Maa4 = 0
Next y
Next x
Return
Function Voitto(maa)
Color cbwhite
If maa = Tyhjä
Text 10,5, "Tasapeli"
ElseIf maa = Pelaaja
Text 10,5, "Pelaaja voitti"
Else
Text 10,5, "Tekoäly voitti"
EndIf
DrawScreen
ClearMouse()
WaitMouse
ClearMouse()
Puhdista()
EndFunction
Function Puhdista()
For x=1 To 30
For y=1 To 30
Ruutu(x,y) = Tyhjä
Next y
Next x
EndFunction
Re: Tyhmät kysymykset (I/2010)
joo siis miten saan sen toimimaan näin:Jonez wrote: ...Lopulta päästään sinun ongelmaasi, ellet jo tähän mennessä sitä ratkaissut itse. Koska muuttujat joita haluat muuttaa ovat globaaleja, riittää että annat niille uuden arvon funktion sisällä:...Code: Select all
Global a, b Hae() Function Hae() a = Rand( 1, 10 ) b = Rand( 1, 10 ) EndFunction Repeat Text 20, 20, a Text 20, 40, b DrawScreen Forever
Code: Select all
Global a, b
Hae(a)
Hae(b)
Function Hae(randaus)
randaus = Rand( 1, 10 )
EndFunction
Repeat
Text 20, 20, a
Text 20, 40, b
DrawScreen
Forever
-
- Devoted Member
- Posts: 594
- Joined: Tue Sep 30, 2008 4:30 pm
- Location: Ruudun toisella puolella
Re: Tyhmät kysymykset (I/2010)
vieras wrote:joo siis miten saan sen toimimaan näin:Jonez wrote: ...Lopulta päästään sinun ongelmaasi, ellet jo tähän mennessä sitä ratkaissut itse. Koska muuttujat joita haluat muuttaa ovat globaaleja, riittää että annat niille uuden arvon funktion sisällä:...Code: Select all
Global a, b Hae() Function Hae() a = Rand( 1, 10 ) b = Rand( 1, 10 ) EndFunction Repeat Text 20, 20, a Text 20, 40, b DrawScreen Forever
Code: Select all
Global a, b Hae(a) Hae(b) Function Hae(randaus) randaus = Rand( 1, 10 ) EndFunction Repeat Text 20, 20, a Text 20, 40, b DrawScreen Forever
miksi sinun pitäisi? samalla tavalla varmaan haluat sen toimivan (tulostaa näytölle kaksi lukua 1-10 välillä)
Re: Tyhmät kysymykset (I/2010)
Yhä hakoteillä. (Suosittelen rekisteröitymistä foorumeille, alkaa olla jo paljon juttua. ) Kun kutsut funktiota parametrit kopioidaan funktioon eli funktiolle annetun parametrin (luku arvo tai muuttuja) ja funktion sisällä oleva muuttuja ovat aivan eri asia. Havainnolistan asiaa GoSub kutsulla:vieras wrote:joo siis miten saan sen toimimaan näin:Jonez wrote: ...Lopulta päästään sinun ongelmaasi, ellet jo tähän mennessä sitä ratkaissut itse. Koska muuttujat joita haluat muuttaa ovat globaaleja, riittää että annat niille uuden arvon funktion sisällä:...Code: Select all
Global a, b Hae() Function Hae() a = Rand( 1, 10 ) b = Rand( 1, 10 ) EndFunction Repeat Text 20, 20, a Text 20, 40, b DrawScreen Forever
Code: Select all
Global a, b Hae(a) Hae(b) Function Hae(randaus) randaus = Rand( 1, 10 ) EndFunction Repeat Text 20, 20, a Text 20, 40, b DrawScreen Forever
Code: Select all
Goto start
// "kuvitteellinen funktio"
funktio1:
Dim parametri_a
Dim parametri_b
Dim palautus_arvo
// vaikka miten yrittäisit muuttaa muuttujaa "muuttuja" parametri_a:n kautta täällä, ei sen arvo vaihdu.
palautus_arvo = parametri_a + parametri_b
Return
// Oikea funktio.
Function funktio2(parametri_a, parametri_b)
Return parametri_a + parametri_b
EndFunction
start: //ohjelman käynnistys kohta..
Dim muuttuja
muuttuja = 13
//Kutsutan kuvitteellista funktiota
//>>>>>funktio kutsu alkaa>>>>>>>
parametri_b = 25 // arvot KOPIOIDAAN
parametri_a = muuttuja // arvot KOPIOIDAAN
Gosub funktio1 // hypätään "funktioon"
muuttuja = palautus_arvo // funktion palauttama arvo KOPIOIDAAN
//<<<<<funktio kutsu päättyy<<<<<
Print muuttuja
//kutsutaan oikeaa funktiota
muuttuja = 13
muuttuja = funktio2(muuttuja, 25)
Print muuttuja
WaitKey
-On selkeästi impulsiivinen koodaaja joka...
Re: Tyhmät kysymykset (I/2010)
miten teen IF-lauseeseen sopivan funktion?
esim.
esim.
Code: Select all
Repeat
If iffi() Then i=100
Text 10,10,i
DrawScreen
Forever
Function iffi()
End Function
Re: Tyhmät kysymykset (I/2010)
Ei siinä ole mitään ihmeellistä. If lauseke toteutuu jos ehdon vastaus on eri kuin nolla.jaahas wrote:miten teen IF-lauseeseen sopivan funktion?
esim.Code: Select all
Repeat If iffi() Then i=100 Text 10,10,i DrawScreen Forever Function iffi() End Function
Joten laita funktio palauttaamaan vaikka 1, niin ehto toteutuu.
-
- Advanced Member
- Posts: 281
- Joined: Sat Jun 28, 2008 5:19 pm
- Location: Hämeessä miä
Re: Tyhmät kysymykset (I/2010)
Laiskuus iski enkä jaksanut etsi tai käyttää hakua: kuinka saan kuvan ja objektin päällekkäin liikkuessa kun koordinaatit luetaan objektilta eli maailman koordinaateissa,
kuten jokainen tietää kuvat piirretään näytön koordinaateissa. Tässä on ongelman ydin: saan kuvan ja objektin päällekkäin kun ne eivät ole liikkeessä, mutta kun objektia liikuttaa
kuva liikkuu noin 2x nopeudella, miten ne saa liikkumaan samalla nopeudella?
kuten jokainen tietää kuvat piirretään näytön koordinaateissa. Tässä on ongelman ydin: saan kuvan ja objektin päällekkäin kun ne eivät ole liikkeessä, mutta kun objektia liikuttaa
kuva liikkuu noin 2x nopeudella, miten ne saa liikkumaan samalla nopeudella?
Re: Tyhmät kysymykset (I/2010)
En ihan ymmärtänyt, mutta eikö kannattaisi piirtään kuvat maailmakoordinaatteihin DrawToWorld:llä.Nassi_Setä wrote:Laiskuus iski enkä jaksanut etsi tai käyttää hakua: kuinka saan kuvan ja objektin päällekkäin liikkuessa kun koordinaatit luetaan objektilta eli maailman koordinaateissa,
kuten jokainen tietää kuvat piirretään näytön koordinaateissa. Tässä on ongelman ydin: saan kuvan ja objektin päällekkäin kun ne eivät ole liikkeessä, mutta kun objektia liikuttaa
kuva liikkuu noin 2x nopeudella, miten ne saa liikkumaan samalla nopeudella?