Page 18 of 23

Re: Tyhmät kysymykset (I/2012)

Posted: Tue Feb 19, 2013 12:01 pm
by Misthema
JjyKs wrote:
naput telija wrote:Joku estää coolbasicin verkkoliikenteen. Jos käytössäsi on modeemin kautta reititetty internet, avaa käyttämäsi portti (löytyy internetistä hakusanoilla "port forwarding") . Voit kokeilla myös virustorjuntasi kautta kaiken coolbasic-verkkoliikenteen sallimista ja virustorjunnasta käyttämäsi portin avaamista. Kokeilepa myös käyttää omaa ulkoista ip-osoitettasi tai sisäistä (löytyy komentorivikomennolla ipconfig)
Kysymys saattoi olla hiukan epäselvä, mutta ongelmanahan oli juuri tuo Viltzu:n korjaama muuttujan tyyppi, eihän nyt localhostia varten mitään portteja tarvitse avata.
Viltzu wrote:Et ole määritellyt muuttujaa ip merkkijonoksi, jolloin syötetty ip:stä jää jäljelle vain ensimmäinen luku. (Esim. "192.168.0.1" -> "192") tulee 0.
Kiitos paljon. En vielä päässyt tuota testaamaan, mutta eiköhän se ongelma löytynyt :)
Mahdollista on myös tehdä master-server, johon muiden päälle laittamat serverit ottavat yhteyttä ja kertovat sille IP-osoitteensa - mikäli cbNetwork:llä on mahdollista saada tätä jostain poimittua... Master-server voisi esimerkiksi antaa palvelimille ID -järjestysnumeron jonka perään heitetään IP. Nämä tallennetaan sitten esimerkiksi tekstitiedostoon, josta master-server osaa sitten hakea ID:n avulla oikean IP-osoitteen asiakasohjelmalle (clientille).

Mutta tosiaan, ei ole mitään hajua, onko cbNetworkillä mahdollista saada poimittua IP-osoitteita. NetMatch:ssä on käytetty PHP-kikkailuja, joten sillä varmaan on osoitteetkin poimittu.

Re: Tyhmät kysymykset (I/2012)

Posted: Tue Feb 19, 2013 5:34 pm
by Jani
Misthema wrote:
JjyKs wrote:
naput telija wrote:Joku estää coolbasicin verkkoliikenteen. Jos käytössäsi on modeemin kautta reititetty internet, avaa käyttämäsi portti (löytyy internetistä hakusanoilla "port forwarding") . Voit kokeilla myös virustorjuntasi kautta kaiken coolbasic-verkkoliikenteen sallimista ja virustorjunnasta käyttämäsi portin avaamista. Kokeilepa myös käyttää omaa ulkoista ip-osoitettasi tai sisäistä (löytyy komentorivikomennolla ipconfig)
Kysymys saattoi olla hiukan epäselvä, mutta ongelmanahan oli juuri tuo Viltzu:n korjaama muuttujan tyyppi, eihän nyt localhostia varten mitään portteja tarvitse avata.
Viltzu wrote:Et ole määritellyt muuttujaa ip merkkijonoksi, jolloin syötetty ip:stä jää jäljelle vain ensimmäinen luku. (Esim. "192.168.0.1" -> "192") tulee 0.
Kiitos paljon. En vielä päässyt tuota testaamaan, mutta eiköhän se ongelma löytynyt :)
Mahdollista on myös tehdä master-server, johon muiden päälle laittamat serverit ottavat yhteyttä ja kertovat sille IP-osoitteensa - mikäli cbNetwork:llä on mahdollista saada tätä jostain poimittua... Master-server voisi esimerkiksi antaa palvelimille ID -järjestysnumeron jonka perään heitetään IP. Nämä tallennetaan sitten esimerkiksi tekstitiedostoon, josta master-server osaa sitten hakea ID:n avulla oikean IP-osoitteen asiakasohjelmalle (clientille).

Mutta tosiaan, ei ole mitään hajua, onko cbNetworkillä mahdollista saada poimittua IP-osoitteita. NetMatch:ssä on käytetty PHP-kikkailuja, joten sillä varmaan on osoitteetkin poimittu.
Vastaanottaja (serveri) voi lukea lähettäjän IP:n jostain muuttujasta. Oliko NET_ClientId?

Re: Tyhmät kysymykset (I/2012)

Posted: Thu Feb 21, 2013 12:51 am
by valscion
Jani wrote:Vastaanottaja (serveri) voi lukea lähettäjän IP:n jostain muuttujasta. Oliko NET_ClientId?
Jep, oikeassa olet. NET_ClientId -globaali sisältää aina viimeksi luetun paketin lähettäjän IP:n ja ID:n muodossa "IP:ID". eli siitä-pitää parsia se IP pois ennen kaksoispistettä. Mikäli oikein muistan.

Re: Tyhmät kysymykset (I/2012)

Posted: Fri Feb 22, 2013 6:34 pm
by Konstaduck
Miten saisin Inputiin/Advancedinputtiin merkkijonorajan? Menneillään olevassa projektissa sitä tarvitsisin ja alla oleva kikkailu ei toiminut.. :D

Code: Select all

input1=True
Repeat 
    SetFont f
       
    If Len(_nimi$) <9 And input1=True
        nimi_$ = AdvancedInput(200,ScreenHeight()/2-50,"Nimi: ")
    EndIf
    If Len(_nimi_$) <9 And input2=True
        _nimi_$= Advancedinput(200,ScreenHeight()/2-50,"Nimi: ")
    EndIf
        
    If Len(nimi_) >=9
        If input1=True
            _nimi_ = Left(nimi_,Len(nimi_)-1)
            input2=True
            input1=False
            Goto loppu
        EndIf
             
        If input2=True
            nimi_ = Left(_nimi_,Len(_nimi_)-1)
            input2=False
            input1=True
            Goto loppu
        EndIf
    EndIf
    loppu:
        
    DrawScreen 
Forever



Re: Tyhmät kysymykset (I/2012)

Posted: Sat Feb 23, 2013 11:34 am
by Kumiankka
Konstaduck wrote:Miten saisin Inputiin/Advancedinputtiin merkkijonorajan?
Tämä nyt ei ole suora vastaus mutta tässä olisi nyt ainakin esimerkkinä miten toteutin merkkijonon maksimipituuden Solupelissä

Code: Select all

Global inputBoxActive
Global inputBoxTimer
Global inputBoxBlink
inputBoxActive = False

Repeat

	teksti$ = InputBox(teksti, 10, 10, 10, 100, 20)

	DrawScreen
Forever

Function InputBox(_var$, _x#, _y#, _maxlen, _width, _height)

	// Hiiren ykkösnappi klikattu...
	If MouseHit(1) Then
		//..laatikon sisäpuolelta
		If BoxOverlap(MouseX(), MouseY(), 1, 1, _x, _y, _width, _height) Then
			// Nollataan välkyn ajastin
			inputBoxTimer = Timer()
			// Välkky näkyviin
			inputBoxBlink = 1
			// Inputti aktiiviseksi
			inputBoxActive = True
			// Ettei huomioitaisi inputin kiinniollessa painettuja näppäimiä
			ClearKeys
		//..Laatikon ulkopuolelta
		Else
			// Suljetaan inputti
			inputBoxActive = False
		EndIf
	EndIf
		
	If inputBoxActive Then
	
		//Otetaan näppäimenpainalukset talteen
		_a = GetKey()
		// Jätetään joitain näppäimenpainaluksia huomiotta
		// Ja jos tekstin pituus ei ylitä maksimirajaa
		If _a > 31 And Len(_var) < _maxlen Then
			// Lisätään merkkijonoon
			_var = _var + Chr(_a)
		EndIf
		
		// Päivitetään välkky
		If Timer() > inputBoxTimer + 500 Then
			inputBoxBlink = -inputBoxBlink
			inputBoxTimer = Timer()
		EndIf
		
		// Merkkien pyyhkiminen
		If KeyHit(cbKeyBackspace) And Len(_var) > 0 Then
			_var = Left(_var, Len(_var) - 1)
		EndIf

		// Piirtely
		Color cbSilver
		Box _x, _y, _width, _height, True
		If inputBoxBlink = 1 Then 
			Color cbDark
			Box _x + 7 + TextWidth(_var), _y + TextHeight(_var)/2, 2, TextHeight(_var), True
		EndIf
		Color cbWhite
		CenterText _x + 5, _y + _height/2, _var, 1
		
		// Jos enter tai esc niin suljetaan inputti
		If KeyHit(cbKeyReturn) Or KeyHit(cbKeyEscape) Then
			inputBoxActive = False
		EndIf
		
	Else
	
		// Piirtelyä
		Color cbSilver
		Box _x, _y, _width, _height, False
		Color cbWhite
		CenterText _x + 5, _y + _height/2, _var, 1
		
	EndIf
	
	Return _var
	
EndFunction 

Re: Tyhmät kysymykset (I/2012)

Posted: Sat Feb 23, 2013 6:43 pm
by Konstaduck
Kumiankka wrote: Tämä nyt ei ole suora vastaus mutta tässä olisi nyt ainakin esimerkkinä miten toteutin merkkijonon maksimipituuden Solupelissä

Code: Select all

Global inputBoxActive
Global inputBoxTimer
Global inputBoxBlink
inputBoxActive = False

Repeat

	teksti$ = InputBox(teksti, 10, 10, 10, 100, 20)

	DrawScreen
Forever

Function InputBox(_var$, _x#, _y#, _maxlen, _width, _height)

	// Hiiren ykkösnappi klikattu...
	If MouseHit(1) Then
		//..laatikon sisäpuolelta
		If BoxOverlap(MouseX(), MouseY(), 1, 1, _x, _y, _width, _height) Then
			// Nollataan välkyn ajastin
			inputBoxTimer = Timer()
			// Välkky näkyviin
			inputBoxBlink = 1
			// Inputti aktiiviseksi
			inputBoxActive = True
			// Ettei huomioitaisi inputin kiinniollessa painettuja näppäimiä
			ClearKeys
		//..Laatikon ulkopuolelta
		Else
			// Suljetaan inputti
			inputBoxActive = False
		EndIf
	EndIf
		
	If inputBoxActive Then
	
		//Otetaan näppäimenpainalukset talteen
		_a = GetKey()
		// Jätetään joitain näppäimenpainaluksia huomiotta
		// Ja jos tekstin pituus ei ylitä maksimirajaa
		If _a > 31 And Len(_var) < _maxlen Then
			// Lisätään merkkijonoon
			_var = _var + Chr(_a)
		EndIf
		
		// Päivitetään välkky
		If Timer() > inputBoxTimer + 500 Then
			inputBoxBlink = -inputBoxBlink
			inputBoxTimer = Timer()
		EndIf
		
		// Merkkien pyyhkiminen
		If KeyHit(cbKeyBackspace) And Len(_var) > 0 Then
			_var = Left(_var, Len(_var) - 1)
		EndIf

		// Piirtely
		Color cbSilver
		Box _x, _y, _width, _height, True
		If inputBoxBlink = 1 Then 
			Color cbDark
			Box _x + 7 + TextWidth(_var), _y + TextHeight(_var)/2, 2, TextHeight(_var), True
		EndIf
		Color cbWhite
		CenterText _x + 5, _y + _height/2, _var, 1
		
		// Jos enter tai esc niin suljetaan inputti
		If KeyHit(cbKeyReturn) Or KeyHit(cbKeyEscape) Then
			inputBoxActive = False
		EndIf
		
	Else
	
		// Piirtelyä
		Color cbSilver
		Box _x, _y, _width, _height, False
		Color cbWhite
		CenterText _x + 5, _y + _height/2, _var, 1
		
	EndIf
	
	Return _var
	
EndFunction 

Sehän toimii! Kiitoksia kumiankka. Lähdenpäs tästä tutustumaan koodiin tarkemmin ja sen jälkeen jatkamaan projektia...

Re: Tyhmät kysymykset (I/2012)

Posted: Mon Apr 01, 2013 3:19 am
by Awaclus
Nyt tulee näin kolmelta aamuyöstä erittäin tyhmä kysymys: Millä tavalla erilaiset loogiset operaattorit stäkkäävät ja voinko vaikuttaa siihen jotenkin?

Toisin sanoen, jos koodini on

Code: Select all

If a And b Or c Then
niin tarkoittaako tuo sitä, että ehto on tosi jos sekä a että b ovat tosia tai jos c on tosi, vai sitä, että ehto on tosi jos a on tosi ja lisäksi b tai c on tosi, ja miksi se toimii sillä tavalla, ja miten saan sen toimimaan sillä toisella tavalla?

Re: Tyhmät kysymykset (I/2012)

Posted: Mon Apr 01, 2013 3:36 am
by Latexi95
Awaclus wrote:Nyt tulee näin kolmelta aamuyöstä erittäin tyhmä kysymys: Millä tavalla erilaiset loogiset operaattorit stäkkäävät ja voinko vaikuttaa siihen jotenkin?

Toisin sanoen, jos koodini on

Code: Select all

If a And b Or c Then
niin tarkoittaako tuo sitä, että ehto on tosi jos sekä a että b ovat tosia tai jos c on tosi, vai sitä, että ehto on tosi jos a on tosi ja lisäksi b tai c on tosi, ja miksi se toimii sillä tavalla, ja miten saan sen toimimaan sillä toisella tavalla?
No sulut on aika kova sana jos pitää muuttaa suoritusjärjestystä. Loogiset operaattorit vaikuttaa toimivan ihan vasemmalta oikealle järjestyksessä.

Code: Select all

a | b | c | a And b Or c
________________
0 | 0 | 0 |    0
0 | 0 | 1 |    1
0 | 1 | 0 |    0
0 | 1 | 1 |    1
1 | 0 | 0 |    0
1 | 0 | 1 |    1
1 | 1 | 0 |    1
1 | 1 | 1 |    1

Re: Tyhmät kysymykset (I/2012)

Posted: Mon Apr 01, 2013 1:44 pm
by koodaaja
Näin ehkä CB:llä, mutta ainakin C++:ssa && menee ||:n edelle, siis and aina ennen oria. Sulkuja kannattaa käyttää lähes poikkeuksetta selventämään.

Re: Tyhmät kysymykset (I/2012)

Posted: Thu Apr 04, 2013 3:39 pm
by naputtelija
Tämä ei liity mitenkään coolbasiciin, mutta voiko joku selittää minulle miten tuo moderni GL-vektorigrafiikka toimii? Tai linkata jonkin helpon tutoriaalin, että voisin jotakin koodailla tuolla offtopic-ketjussa mainitulla glsl sandboxilla?

Re: Tyhmät kysymykset (I/2012)

Posted: Thu Apr 11, 2013 7:57 pm
by Character
mitenköhän laskettaisiin semmonen että arvottaisiin satunnainen luku vaikka yhden ja sadan välillä ja mitä pienempi luku sitä todennäköisempää on että se tulee? ei nyt millään saa päähän että miten näin saisi tehtyä. matikka vähän ruosteessa...

Re: Tyhmät kysymykset (I/2012)

Posted: Thu Apr 11, 2013 9:05 pm
by legend
Character wrote:mitenköhän laskettaisiin semmonen että arvottaisiin satunnainen luku vaikka yhden ja sadan välillä ja mitä pienempi luku sitä todennäköisempää on että se tulee? ei nyt millään saa päähän että miten näin saisi tehtyä. matikka vähän ruosteessa...
luku = Rand(1,Rand(1,100))
Tuota olen itse käyttänyt.

Todennäköisyys taitaa nousta exponentiaalisesti.
Saadakseen 100, todennäköisyys on 1/10000.
Saadakseen 1, todennäköisyys on 1/20.
Voisiko joku kertoa, miten voi laskea kuinka suuri todennäköisyys on esimerkiksi saada luku 50?

Re: Tyhmät kysymykset (I/2012)

Posted: Thu Apr 11, 2013 9:25 pm
by Character
jaa olikin noin yksinkertaista :shock: kumma kun en itse tajunnut.. mutta kiitos avusta

Re: Tyhmät kysymykset (I/2012)

Posted: Fri Apr 12, 2013 3:24 pm
by Jonez
Legend: en voi kertoa (kun ei jaksa /osaa yrittää) miten se lasketaan, mutta vastaus on n. 0.7% tämän koodin perusteella:

Code: Select all

etsiluku = 50
lukumaara# = 0
muita# = 0

For i = 1 To 1000000
	luku = Rand(1,Rand(1,100))
	If luku = etsiluku Then 
		lukumaara + 1
	Else
		muita + 1
	EndIf
Next i

Print "todennäköisyys saada luku " + etsiluku + ": " + (lukumaara / muita) * 100 + " %"
Print "done"
WaitKey

Re: Tyhmät kysymykset (I/2012)

Posted: Sat Apr 13, 2013 2:20 am
by koodaaja
Todennäköisyydenhän saa laskemalla, kuinka todennäköinen 50 on milläkin ensimmäisen randin arvolla. Tulos on (1/100)*(0+0+0+...+0+1/50+1/51+...+1/100), eli sata vaihtoehtoa joissa 50:n todennäköisyys vaihtelee. Tästä todennäköisyydeksi tulee 0,708172%, mikä on kovin lähellä jonezin empiiristä koetta.

Itse olen käyttänyt vain rounddown(min+(rnd(1)^a)*(max-min)) -tyylistä kaavaa, jolla kasaantumisen voimakkuutta voi säädellä a:n arvoilla.

Re: Tyhmät kysymykset (I/2012)

Posted: Sun Apr 14, 2013 3:54 pm
by Kyrath
Hei,

toimiiko tuo Tilester enää ollenkaan? Tuntuu, että mikään kartta mitä sillä teen ei toimi. CB lataa kaiken mukisematta, mutta karttaa ei näy, pelkkää mustaa. Kaikki muu toimii koodissa kuten tarkoitettu. Heti kun käytin mukana tulevaa cdm2.tilliä ja tileset.bmptä ni kartta ilmestyi. Pitääkö tilesetti tallentaa jossain tietyssä bittimuodossa vai mitä taikuutta tää vaatii? Olen yrittänyt sijoittaa omatekemät tillit valmiisiin tutorialkoodeihin, mutta aina tulee pelkkää mustaa.

Sitten jos tosiaan on niin, että tuo Tilester on niin buginen, niin mistä näitä Tilegenejä sun muita saa ladattua? Pitääkö tässä vaan siirtyä takas C++:n pariin?

Kiitos.

Re: Tyhmät kysymykset (I/2012)

Posted: Sun Apr 14, 2013 4:05 pm
by Frozen
Kyrath wrote:Hei,

toimiiko tuo Tilester enää ollenkaan? Tuntuu, että mikään kartta mitä sillä teen ei toimi. CB lataa kaiken mukisematta, mutta karttaa ei näy, pelkkää mustaa. Kaikki muu toimii koodissa kuten tarkoitettu. Heti kun käytin mukana tulevaa cdm2.tilliä ja tileset.bmptä ni kartta ilmestyi. Pitääkö tilesetti tallentaa jossain tietyssä bittimuodossa vai mitä taikuutta tää vaatii? Olen yrittänyt sijoittaa omatekemät tillit valmiisiin tutorialkoodeihin, mutta aina tulee pelkkää mustaa.

Sitten jos tosiaan on niin, että tuo Tilester on niin buginen, niin mistä näitä Tilegenejä sun muita saa ladattua? Pitääkö tässä vaan siirtyä takas C++:n pariin?

Kiitos.
Tilegen

Re: Tyhmät kysymykset (I/2012)

Posted: Sat Apr 27, 2013 11:20 am
by Dyyd
Moro, kuinka tehdään sellainen koodi että jos ukkeli kävelee vaikka maailman kohtaan 100,100 niin mappi/taso vaihtuu?

Re: Tyhmät kysymykset (I/2012)

Posted: Sat Apr 27, 2013 1:23 pm
by legend
Dyyd wrote:Moro, kuinka tehdään sellainen koodi että jos ukkeli kävelee vaikka maailman kohtaan 100,100 niin mappi/taso vaihtuu?
Tervetuloa ohjelmoinnin pariin!
Yleensä on hyvä, jos näyttäisit, mitä olet itse yrittänyt. Siitä olisi helppo korjata asia.

Kuitenkin tässä yksinkertainen esimerkki.
Kun liikut ylöspäin ja hiukan sivulle, uusi taso latautuu.

Code: Select all

FrameLimit 40 'rajoita nopeutta

kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1

ukko = LoadObject ("Media\guy.bmp",72)

SetupCollision ukko, kartta, 1, 4, 2

Repeat

    //ukon ohjaus
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2
    
    If ObjectX(ukko) > 150 And ObjectY(ukko) > 150
        //vanha kartta tuhoutuu automaattisesti (huom. objektit eivät)
        kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp") //uusi kartta
        PlayObject kartta,0,0,1
        
        //sijoitetaan pelaaja kentän alkuun
        PositionObject ukko, 0, 0 
        //kartta piirtyy nyt vanhojen objektien päälle, sillä se ladattiin viimeksi
        //siirretään ukko piirtojärjestyksen päälle
        ObjectOrder ukko, 1
    EndIf
    

    UpdateGame

    CloneCameraPosition ukko

    DrawScreen

Forever

Re: Tyhmät kysymykset (I/2012)

Posted: Sat Apr 27, 2013 1:38 pm
by Dyyd
Kiitti. Olin yrittänyt räpeltää End If ja Goto:lla. :lol: