Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
Suffer
Newcomer
Posts: 7
Joined: Sun Nov 11, 2007 8:35 pm

Re: Tyhmät kysymykset

Post by Suffer »

Miten inputtiin pistettävää teksii voi rajata?
Siis että siihen ei voi kirjoittaa esim a eli jos vaikka kirjotan auto niin tulee uto
Vai onko tämmönen edes mahdollista?
project coder
Newcomer
Posts: 27
Joined: Mon Aug 27, 2007 9:23 pm
Location: Kajaani

Re: Tyhmät kysymykset

Post by project coder »

Suffer wrote:Miten inputtiin pistettävää teksii voi rajata?
Siis että siihen ei voi kirjoittaa esim a eli jos vaikka kirjotan auto niin tulee uto
Vai onko tämmönen edes mahdollista?
Inputista saatavasta merkkijonosta voi poistaa tietyn merkin korvaamalla sen tyhjällä
nimi=Replace(nimi,"a","")

Code: Select all

Repeat
    nimi$=Input("")
    nimi=Replace(nimi,"a","")
    Text 0,15,nimi
    DrawScreen
Until KeyHit(cbkeyreturn)
Inputissa ei varmaan suoraan voi rajata.
Kotisivut: (Uusitaan)
Secret Unit War (Frozen)
Tilekarttaeditori (Frozen)
Käyttöliittymän osia
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Tyhmät kysymykset

Post by Pate5 »

Suffer wrote:Miten inputtiin pistettävää teksii voi rajata?
Siis että siihen ei voi kirjoittaa esim a eli jos vaikka kirjotan auto niin tulee uto
Vai onko tämmönen edes mahdollista?
Kaikki on mahdollista. Tässä pieni esimerkki:

Code: Select all

locate -100,-100 'laitetaan input pois ruudusta

repeat
    nimi$=input("")'inputti on käytössä, mutta ei näy ruudussa
    nimi$=replace(nimi$,"a","")'poistetaan a - kirjaimet
    text 0,0,nimi$+"|"'kirjoitetaan nimi + "|"- kursori
Toivottavasti auttoi.

-Pate5
CoolBasic henkilökuntaa
Graafikko
Suffer
Newcomer
Posts: 7
Joined: Sun Nov 11, 2007 8:35 pm

Re: Tyhmät kysymykset

Post by Suffer »

Ok.Juuri tuota tarkoitin. Kiitokset.
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: Tyhmät kysymykset

Post by Sami345 »

Mikä tässä on vikana?

Code: Select all

SCREEN 600,400

Type BOTTI
    Field obj
    Field hp
    Field esine$
    Field puoli
EndType

Const OMA = 1
Const VIHU =  2

oma_master = LoadObject("Media\guy.bmp")
vihu_master = LoadObject("Media\car.bmp")

robo.BOTTI = New(BOTTI)
robo\obj = CloneObject(oma_master)
robo\hp = 100
robo\esine$ = "Gun"
robo\puoli = OMA

robo.BOTTI = New(BOTTI)
robo\obj = CloneObject(oma_master)
robo\hp = 100
robo\esine$ = "Gun"
robo\puoli = OMA

robo.BOTTI = New(BOTTI)
robo\obj = CloneObject(oma_master)
robo\hp = 100
robo\esine$ = "Gun"
robo\puoli = OMA

robo.BOTTI = New(BOTTI)
robo\obj = CloneObject(vihu_master)
robo\hp = 100
robo\esine$ = "Gun"
robo\puoli = VIHU

robo.BOTTI = New(BOTTI)
robo\obj = CloneObject(vihu_master)
robo\hp = 100
robo\esine$ = "Gun"
robo\puoli = VIHU

robo.BOTTI = New(BOTTI)
robo\obj = CloneObject(vihu_master)
robo\hp = 100
robo\esine$ = "Gun"
robo\puoli = VIHU

oma_kohta = 0
vihu_kohta = 0

For robo.BOTTI = Each BOTTI
    If robo\puoli = OMA Then
        PositionObject robo\obj,-250,50+oma_kohta*64
        oma_kohta + 1
    EndIf
    If robo\puoli = VIHU Then
        PositionObject robo\obj,250,50+vihu_kohta*64
        vihu_kohta + 1
    EndIf
Next robo

Repeat
    For robo.BOTTI = Each BOTTI
        Select robo\esine$
            Case "Gun"
                lähin = 0
                lähin_matka = 10000
                For vihu.BOTTI  = Each BOTTI
                    If Distance2 (vihu\obj, robo\obj)  < lähin_matka And (Not vihu\puoli = robo\puoli)  Then 
                        lähin_matka = Distance2 (vihu\obj, robo\obj)
                        lähin = vihu\obj 
                    EndIf
                Next vihu
                PointObject robo\obj, lähin
        EndSelect
    Next robo
    DrawScreen 
Forever
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Tyhmät kysymykset

Post by CCE »

Yhden virheen löysin ainakin, riviltä joka näytti tältä

Code: Select all

robo\puoli = VIHU
Tässä siis laitat muuttujan robo/puoli muuttujan arvoksi muuttujan VIHU, jota ei ilmeisesti ole olemassa
Otaksun että tarkoitit tällä tekstimuuttujaa, eli näin

Code: Select all

robo\puoli = "VIHU"
Itse tekisin homman kyllä kokonaisluvulla, jos puoli = 0 se on oma, ja jos 1 niin vihu.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

CCE wrote:Yhden virheen löysin ainakin, riviltä joka näytti tältä

Code: Select all

robo\puoli = VIHU
Tässä siis laitat muuttujan robo/puoli muuttujan arvoksi muuttujan VIHU, jota ei ilmeisesti ole olemassa
Otaksun että tarkoitit tällä tekstimuuttujaa, eli näin

Code: Select all

robo\puoli = "VIHU"
Mutta eihän puoli ole merkkijonomuuttuja :?
User avatar
Ilmuri
Developer
Developer
Posts: 277
Joined: Sun Aug 26, 2007 2:46 pm
Location: \o

Re: Tyhmät kysymykset

Post by Ilmuri »

Code: Select all

Const VIHU =  2
Sami345 voisi toki kertoa, että mikä siinä ei toimi oikein ja mitä sen pitäisi tehdä, jottei meidän tarvitsisi ruveta sitä arvailemaan.
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: Tyhmät kysymykset

Post by Sami345 »

Ilmuri wrote:

Code: Select all

Const VIHU =  2
Sami345 voisi toki kertoa, että mikä siinä ei toimi oikein ja mitä sen pitäisi tehdä, jottei meidän tarvitsisi ruveta sitä arvailemaan.
Heti kun sen käynnistää tulee Memory Access Violation. Ja tuon koodin tarkoitus on kääntää robotti lähimpää vihollista päin.
EDIT:

Ja tuota robojen luontia ei tule lopulliseen peliin. Ne on siellä vain testausta varten. Lopulliseen peliin tulee kauppa josta saa ostaa robotteja ja aseita niille.

iTKEVAnAKKI
Advanced Member
Posts: 335
Joined: Tue Aug 28, 2007 3:55 pm
Location: Siellä jossain

Re: Tyhmät kysymykset

Post by iTKEVAnAKKI »

Ongelma taitaa tulee tuossa Select kohdassa, koska Selectissä ei varmaankaan voi käyttää merkkijonoa(?) en ole sitten tästä varma :D Mutta virhe ainakin tullee rivillä 68, eli "Select robo\esine$"
Projektit:
Joku projekti meneillään... Mitähän siitäkin tulee ;)
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez »

Kyllä select - casella voi verrata myös merkkijonomuuttujia. Jos ei ole jostain asiasta varma, niin ainahan voi tehdä pikaisen testin cb:llä.

Sain toimimaan kun muutin for - each - silmukassa noi muuttujanimet erilaisiksi kun ne muuttujanimet, joilla loit ne. Eli ei enää robo ja vihu, vaan irobo ja ivihu.

Täytyy kyllä myöntää etten tiedä mistä se mavi lopulta tuli :). Kai se jotenkin vertaili niitä siihen viimeksi luotuun bottiin ja sekoili jotenkin.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Tyhmät kysymykset

Post by Marcoder »

Code: Select all

Const VIHU =  2
...
For vihu.BOTTI  = Each BOTTI
Kyllähän tällaisella nimeämiskäytännöllä saa helposti mavit aikaiseksi.
Pabnih
Newcomer
Posts: 34
Joined: Thu Sep 20, 2007 3:15 pm
Location: Hirvas

Re: Tyhmät kysymykset

Post by Pabnih »

project coder wrote:
Suffer wrote:Miten inputtiin pistettävää teksii voi rajata?
Siis että siihen ei voi kirjoittaa esim a eli jos vaikka kirjotan auto niin tulee uto
Vai onko tämmönen edes mahdollista?
Inputista saatavasta merkkijonosta voi poistaa tietyn merkin korvaamalla sen tyhjällä
nimi=Replace(nimi,"a","")

Code: Select all

Repeat
    nimi$=Input("")
    nimi=Replace(nimi,"a","")
    Text 0,15,nimi
    DrawScreen
Until KeyHit(cbkeyreturn)
Inputissa ei varmaan suoraan voi rajata.
Entäs kuinka menetellään kun halutaan esim. kaikki aakkoset pois, ja jätetään vain numerot? :|
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Tyhmät kysymykset

Post by Harakka »

Vaikka näin:

Code: Select all

Repeat
    nimi$=Input("")
    For c = 0 To 255
        If c < 48 Or c > 57 Then
            nimi$ = Replace(nimi$,Chr(c),"")
        EndIf
    Next c
    
    Text 0,15,nimi
    DrawScreen
Forever
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset

Post by valscion »

Harakka wrote:Vaikka näin:

Code: Select all

Repeat
    nimi$=Input("")
    For c = 0 To 255
        If c < 48 Or c > 57 Then
            nimi$ = Replace(nimi$,Chr(c),"")
        EndIf
    Next c
    
    Text 0,15,nimi
    DrawScreen
Forever
Tuo kirjoittaa silti Inputin näkyviin. Jos haluat etteivät kirjaimet näy milloinkaan, niin käytä Locate komentoa ja siirrä Input ruudun ulkopuolelle. Katso esimerkkikoodi:

Code: Select all

Locate 0,-13
Repeat
	If Timer()>record+500 Then blink=Not blink:record=Timer()
    nimi$=Input("")
    For c = 0 To 255
        If c < 48 Or c > 57 Then
            nimi$ = Replace(nimi$,Chr(c),"")
        EndIf
    Next c
   
    Text 0,0,nimi
	If blink Then Box TextWidth(nimi$),TextHeight(nimi$),TextWidth("a"),1
    DrawScreen
Forever
EDIT:

Lisäsin vielä omaan koodiini sen Inputin välkkyvän viivan.

cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
maukka
Newcomer
Posts: 5
Joined: Fri Dec 07, 2007 12:08 pm

Re: Tyhmät kysymykset

Post by maukka »

Mulla ois kolme todella tyhmää kysymystä. Elikkä siis 1.Miten luon alku valikon 2.Miten teen yhteen peliin useamman kentän niin että suraavaan kenttään pääsee tietystä kohtaa edellistä kenttää? ja 3.miten luon vihollisille tekoälyn niin että ne tulee ja koittaa tappaa sut niin ettei ne kuitenkaan tule seinien läpi.
Duuba dei!!
Guest

tekstiä kuvaan

Post by Guest »

eli voiko tekstiä kirjoittaa kuvaan?

Code: Select all

   Color 255,255,255
            DrawToImage img1
            Text MouseX(),MouseY(),texti$
            DrawToScreen
            SaveImage img1,"Text.bmp"
HOX koodi on suoraan leikattu isommasta koodista joten siinä ei esitellä kuvamuuttujaa yms.
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Tyhmät kysymykset

Post by Harakka »

Kyllä voi. Jos kuvaan ei ilmesty mitään, muuta y-kordinaatti negatiivikseksi (-Mousey()).
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Tyhmät kysymykset

Post by Pate5 »

maukka wrote:Mulla ois kolme todella tyhmää kysymystä. Elikkä siis 1.Miten luon alku valikon 2.Miten teen yhteen peliin useamman kentän niin että suraavaan kenttään pääsee tietystä kohtaa edellistä kenttää? ja 3.miten luon vihollisille tekoälyn niin että ne tulee ja koittaa tappaa sut niin ettei ne kuitenkaan tule seinien läpi.
Eivät nämä nyt niin tyhmiä kysymyksiä ole.

Tässä vähän apua:

1. Helpoiten voit tehdä vaikka näin:

Lataa haluamasi nappulat vaikka objekteina. Piilota hiiri ShowMouse-komennolla. Lataa myös hiiri objektina ja aseta se oikealle paikalle PositionObject-komennon ja MouseWX()- ja MouseWY()-funktioiden avulla. Tarkista hiiren ja nappuloiden päällekkyys ObjectsOverlap()-funktiolla. Tarkista klikkaukset MouseHit()-funktiolla. Jos hiiri on nappulan päällä ja hiirtä klikataan, siirrytään peliin GoTo-komennolla.

Esimerkki:

Code: Select all

showmouse off
nappula1=loadobject("media/uusipeli.png")
nappula2=loadobject("media/lopeta.png")

hiiri=loadobject("media/hiiri.png")

positionobject napppula2,0,-100

repeat
    positonobject hiiri,mousewx(),mousewy()

    if objectsoverlap(hiiri,nappula1)and mousehit(1) then goto peli
    if objectsoverlap(hiiri,nappula2)and mousehit(1) then end

    drawscreen

forever
Tuo oli toki vain yksinkertainen malli. Valikon voi tehdä myös kuvilla, mutta näin on kaikista helpoin aloittelijoille, ainakin omasta mielestäni.

2.Kannattaa asettaa ensimmäisen maan maaliin tile-editorilla datakerrokseen jokin numero, esimerkiksi 1. Tarkistet sitten GetMap()-funktiolla onko oma datakerroksen numero yhden kohdalla. Jos on mennään toiseen maahan. Kannattaa myös poistaa kaikki media ClearObjects-komennolla. Huomaa, että jos olet käyttänyt tyyppi-objekteja, poista ne DeleteObject-komennolla ennen ClearObjects:ia.

Esimerkki:

Code: Select all

Repeat
    'tähän kaikki maan jutut
    if getmap(3,objectx(oma),objecty(oma),maa)=1 then goto maa2
forever

maa2:
'poista kaikki objektit tyypeistä
clearobjects

'tähän maa2
3. Tekoäly on vaikea. Katso manuaalista PointObject. Jos haluat, että vastustajat eivä näy seinien takaa, katso ObjectSight()-funktio.


Toivottavasti tästä selostuksesta oli apua.

-Pate5
CoolBasic henkilökuntaa
Graafikko
Zrazy_Coder
Member
Posts: 60
Joined: Sun Sep 09, 2007 8:46 pm

Re: Tyhmät kysymykset

Post by Zrazy_Coder »

Nyt tulee tyhmin kysymys mitä täällä ollaan kysytty.En muista miten sai sellasen animoidun valikon. Tarkotan siis että kun hiiri on play nappulan päällä niin play nappula muuttuu erillaiseks animaatiossa on kaks framea sähläsin tällästä, mut ei toimi.

Code: Select all

If ObjectsOverlap(hiiri,multinappi) Then
päällä="MultiPlay"
ElseIf ObjectsOverlap(hiiri,playnappi) Then
päällä="Play"
Else
päällä=""
EndIf 

If päällä="MultiPlay" Then
PlayObject multinappi,2
ElseIf päällä="Play" Then
PlayObject playnappi,2
Else
EndIf

If päällä="" Then
PlayObject multinappi,0
PlayObject playnappi,0
EndIf 
Ja jos jotain kiinnostaa millanen se peli on niin täs ois yks Screenshot : http://img232.imageshack.us/img232/340/kuvaty1.png
Locked