Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2010)

Post by kaneli2000 »

Öhhhhh, taas mysteerimavi koodissa.

Code: Select all

If FileExists(level$+"\ent.txt") Then f = OpenToRead(level$+"\ent.txt")
While EOF(f) = False
    entname$ = ReadLine(f)
    entx = ReadLine(f)
    enty = ReadLine(f)
    //tästä eteenpäin mavaa
    For eList.ENTLIST = Each ENTLIST
        newEnt.ENTITY = New(ENTITY)
        newEnt\name$ = entname$
        newEnt\x = entx
        newEnt\y = enty
        If eList\name$ = newEnt\name$ Then newEnt\obj = CloneObject(eList\obj)
    Next eList
//jos näiden kahden kommentin välisen alueen ottaa pois, mavi lähtee mukana
Wend
CloseFile f
Mikä vielä oudompaa, mavia ei tule, kun samaa koodinpätkää käytetään toisessa soursefilessä. Mistä saattaa johtua?
I see the rainbow rising
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion »

kaneli2000 wrote:Mikä vielä oudompaa, mavia ei tule, kun samaa koodinpätkää käytetään toisessa soursefilessä. Mistä saattaa johtua?
Oletko varma, että MAV tulee juuri tuosta koodista? Kun tuossa luot noita objekteja lisää, niin siellä missä käsittelet luotuja objekteja saattaa olla ongelmia, eikä tuossa. Se saattaisi selittää ainakin, että miksi kummassa ei MAVia tule toisessa sorsassa.
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
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez »

Jos ENTLIST pitää sisällään useamman kuin yhden jäsenen (joilla on eriävät arvot muuttujissa eLIst\name), eivätkö jotkin luodut newEnt\obj-muuttujat saa arvoksi 0, josta myöhemmin koodissa seuraisi mav?

Kannattaa muuten laittaa koko silmukka ensimmäisen ehtolauseen sisään. Muutoin, jos tiedostoa ei löydy, seuraa "EOF failed" .
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

kaneli2000 wrote:Öhhhhh, taas mysteerimavi koodissa.

Code: Select all

If FileExists(level$+"\ent.txt") Then f = OpenToRead(level$+"\ent.txt")
While EOF(f) = False
    entname$ = ReadLine(f)
    entx = ReadLine(f)
    enty = ReadLine(f)
    //tästä eteenpäin mavaa
    For eList.ENTLIST = Each ENTLIST
        newEnt.ENTITY = New(ENTITY)
        newEnt\name$ = entname$
        newEnt\x = entx
        newEnt\y = enty
        If eList\name$ = newEnt\name$ Then newEnt\obj = CloneObject(eList\obj)
    Next eList
//jos näiden kahden kommentin välisen alueen ottaa pois, mavi lähtee mukana
Wend
CloseFile f
Mikä vielä oudompaa, mavia ei tule, kun samaa koodinpätkää käytetään toisessa soursefilessä. Mistä saattaa johtua?
Toistit juuri virheen, jolle nauroin ja sinä *facepalm* edellisellä sivulla. ;) neropatti kaneli2k.
-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'.
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2010)

Post by kaneli2000 »

JATothrim wrote:
kaneli2000 wrote:Öhhhhh, taas mysteerimavi koodissa.

Code: Select all

If FileExists(level$+"\ent.txt") Then f = OpenToRead(level$+"\ent.txt")
While EOF(f) = False
    entname$ = ReadLine(f)
    entx = ReadLine(f)
    enty = ReadLine(f)
    //tästä eteenpäin mavaa
    For eList.ENTLIST = Each ENTLIST
        newEnt.ENTITY = New(ENTITY)
        newEnt\name$ = entname$
        newEnt\x = entx
        newEnt\y = enty
        If eList\name$ = newEnt\name$ Then newEnt\obj = CloneObject(eList\obj)
    Next eList
//jos näiden kahden kommentin välisen alueen ottaa pois, mavi lähtee mukana
Wend
CloseFile f
Mikä vielä oudompaa, mavia ei tule, kun samaa koodinpätkää käytetään toisessa soursefilessä. Mistä saattaa johtua?
Toistit juuri virheen, jolle nauroin ja sinä *facepalm* edellisellä sivulla. ;) neropatti kaneli2k.
Taas O_O Voiko olla.

EDIT: Enpäs toistanut?
I see the rainbow rising
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

Toistitpas, melkein. siirrä:

Code: Select all

newEnt.ENTITY = New(ENTITY)
        newEnt\name$ = entname$
        newEnt\x = entx
        newEnt\y = enty
ennen "For eList.ENTLIST = Each ENTLIST" looppia. Nyt jos "If eList\name$ = newEnt\name$" ei toteudu ekalla kerralla, listaan tulee taas tavaraa ilman objekteja. ;)
EDIT:

Voitinko toisen facepalmin? no, voitto tuli. :P

Last edited by JATothrim on Sun Jun 13, 2010 7:04 pm, edited 1 time in total.
-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'.
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2010)

Post by kaneli2000 »

JATothrim wrote:Toistitpas, melkein. siirrä:

Code: Select all

newEnt.ENTITY = New(ENTITY)
        newEnt\name$ = entname$
        newEnt\x = entx
        newEnt\y = enty
ennen "For eList.ENTLIST = Each ENTLIST" looppia. Nyt jos "If eList\name$ = newEnt\name$" ei toteudu ekalla kerralla, listaan tulee taas tavaraa ilman objekteja. ;)
EDIT:

Voitinko toisen facepalmin?

Et voittanut, koska a) tätä en olis osannu ilman apua ja b) adminit laittas varotusta trollaamisesta varmaa :D. Mutta kiitokset saat.

EDIT: Mitenkäs se sitten toisessa koodissa toimi o_o
I see the rainbow rising
sankja
Newcomer
Posts: 30
Joined: Thu Jan 29, 2009 10:32 pm

Re: Tyhmät kysymykset (I/2010)

Post by sankja »

Totanuinnii: en oikein tajua ,miten rekursion sais toteutettua funktiossa.Ohjelmointiputkasta löytyi tommonen funktio,koitin sisällyttää sitä kertoman laskentaan, ei onnistu. Siis miten ton sais toimiin.Kiitti jo etuajassa vastauksesta. :|

Code: Select all

Dim b As String:b="anna jokin kokonaisluku: "
Dim a
Global luku
  
    Repeat 
        a=Input(b)
        DrawScreen 
    Until KeyHit(cbkeyreturn)
    CloseInput:ClearKeys
    
    
    luku=a
    taltio=kertoma(luku)
    
    Text 10,20,taltio
    DrawScreen
    
    WaitKey
    End
    
Function kertoma(luku)
 If luku>1
    Return kertoma(luku-1)*luku
 Else
    Return 1
 EndIf 
 
EndFunction  
:|
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Tyhmät kysymykset (I/2010)

Post by MetalRain »

sankja wrote:Totanuinnii: en oikein tajua ,miten rekursion sais toteutettua funktiossa.Ohjelmointiputkasta löytyi tommonen funktio,koitin sisällyttää sitä kertoman laskentaan, ei onnistu. Siis miten ton sais toimiin.Kiitti jo etuajassa vastauksesta. :|

Code: Select all

Dim b As String:b="anna jokin kokonaisluku: "
Dim a
Global luku
  
    Repeat 
        a=Input(b)
        DrawScreen 
    Until KeyHit(cbkeyreturn)
    CloseInput:ClearKeys
    
    
    luku=a
    taltio=kertoma(luku)
    
    Text 10,20,taltio
    DrawScreen
    
    WaitKey
    End
    
Function kertoma(luku)
 If luku>1
    Return kertoma(luku-1)*luku
 Else
    Return 1
 EndIf 
 
EndFunction  
:|
Globaalin muuttujaan luku sijoitetaan kertoma() funktiolle annettu parametri, siksi se palauttaa arvon 1. Oletetaan että käyttäjä painaa numeroa viisi käyttäen koodiasi. 5!=120, mutta kertoma() funktio sijoittaa luvun luku-1 muuttujaan luku (eli luku=luku-1) kunnes muuttuja luku=1 tällöin se kertoo juuri palautetun luvun 1 itsellään eli 1:llä koska 1*1=1 se palauttaa aina luvun 1.

Koodisi saa toimimaan halutusti kun ei määrittele muuttujaa luku globaaliksi

Code: Select all

Dim b As String:b="anna jokin kokonaisluku: "
Dim a
  
    Repeat 
        a=Input(b)
        DrawScreen 
    Until KeyHit(cbkeyreturn)
    CloseInput:ClearKeys
    
    
    luku=a
    taltio=kertoma(luku)
    
    Text 10,20,taltio
    DrawScreen
    
    WaitKey
    End
    
Function kertoma(luku)
 If luku>1
    Return kertoma(luku-1)*luku
 Else
    Return 1
 EndIf 
 
EndFunction  
tai käyttämällä funktion kertoma() parametrina jotain muuta muuttujaa joka ei ole määritelty globaaliksi.

Code: Select all

Dim b As String:b="anna jokin kokonaisluku: "
Dim a
Global luku
  
Repeat 
    a=Input(b)
    DrawScreen 
Until KeyHit(cbkeyreturn)

CloseInput
ClearKeys
    
luku=a
taltio=kertoma(luku)

Text 10,20,taltio
DrawScreen

WaitKey
End
    
Function kertoma(tämä_ei_ole_globaali_muuttuja)
    If tämä_ei_ole_globaali_muuttuja>1
        Return kertoma(tämä_ei_ole_globaali_muuttuja-1)*tämä_ei_ole_globaali_muuttuja
    Else
        Return 1
    EndIf 
EndFunction  
Tässä vielä pieni koodipätkä jotta varmasti ymmärtäisit mistä on kyse.

Code: Select all

Global Sijoitettava

SijoitaSijoitettavaan(500)
Print "Sijoitettavan arvo: "+Sijoitettava
SijoitaSijoitettavaan(-200)
Print "Sijoitettavan arvo: "+Sijoitettava
WaitKey 

Function SijoitaSijoitettavaan(Sijoitettava)
    //tämä funktio ei oikeastaan tee muuta kuin sijoittaa annetun parametrin 
    //globaaliin muuttujaan Sijoitettava
    Return 1
End Function 
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by DJ-Filbe »

Vuoden tyhmin kysymys:
Minulla on epäkuntoinen tulostin-skanneri (tulostuspää rikki). Purin siitä piirejä näkyville ja räpläsin niitä. Skanneriosa toimii mitä mainioimmin ja pystyn skannaamaan mitä tahansa (skanneripää on esillä :D ). Myös tietokoneen kanssa kommunikointi (USB) pelaa skannauksen osalta, ohjausohjelman kanssa (sisäänrakennettu).
Olen itse löytänyt muutamia hauskoja ominaisuuksia skanneripäästä kun olen yhdistellyt piirin eri osia toisiinsa (mm. eriväriset valot, pikaskannaus jne).

Kysymys kuuluu: Voinko tehdä tietokoneella ohjelman jolla hallitsen piiristä enemmän osia kuin ohjausohjelma sallii (löytämäni lisäominaisuudet)? Entä miten? Tarvitseeko minun ostaa / tehdä jotain tarvikkeita?
Image
Image
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Tyhmät kysymykset (I/2010)

Post by KilledWhale »

DJ-Nerd wrote:Vuoden tyhmin kysymys:
Minulla on epäkuntoinen tulostin-skanneri (tulostuspää rikki). Purin siitä piirejä näkyville ja räpläsin niitä. Skanneriosa toimii mitä mainioimmin ja pystyn skannaamaan mitä tahansa (skanneripää on esillä :D ). Myös tietokoneen kanssa kommunikointi (USB) pelaa skannauksen osalta, ohjausohjelman kanssa (sisäänrakennettu).
Olen itse löytänyt muutamia hauskoja ominaisuuksia skanneripäästä kun olen yhdistellyt piirin eri osia toisiinsa (mm. eriväriset valot, pikaskannaus jne).

Kysymys kuuluu: Voinko tehdä tietokoneella ohjelman jolla hallitsen piiristä enemmän osia kuin ohjausohjelma sallii (löytämäni lisäominaisuudet)? Entä miten? Tarvitseeko minun ostaa / tehdä jotain tarvikkeita?
Image
Image
Tämä aihe lienee tarkoitettu cb-kysymyksille, mutta vastaanpa nyt kuitenkin. Luultavasti joudut vääntämään omaa ajuria, ellei näitä lisäominaisuuksia ole sinne valmiiksi naitettuna mukaan. Toinen vaihtoehto olisi puhua suoraan usbille tekemällä vaikka c++ ohjelma ja käyttämällä libusb-kirjastoa. Helppoa se ei tule olemaan, joten toivotan onnea yritykseen...
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by DJ-Filbe »

KilledWhale wrote:
DJ-Nerd wrote:Vuoden tyhmin kysymys:
Minulla on epäkuntoinen tulostin-skanneri (tulostuspää rikki). Purin siitä piirejä näkyville ja räpläsin niitä. Skanneriosa toimii mitä mainioimmin ja pystyn skannaamaan mitä tahansa (skanneripää on esillä :D ). Myös tietokoneen kanssa kommunikointi (USB) pelaa skannauksen osalta, ohjausohjelman kanssa (sisäänrakennettu).
Olen itse löytänyt muutamia hauskoja ominaisuuksia skanneripäästä kun olen yhdistellyt piirin eri osia toisiinsa (mm. eriväriset valot, pikaskannaus jne).

Kysymys kuuluu: Voinko tehdä tietokoneella ohjelman jolla hallitsen piiristä enemmän osia kuin ohjausohjelma sallii (löytämäni lisäominaisuudet)? Entä miten? Tarvitseeko minun ostaa / tehdä jotain tarvikkeita?
Image
Image
Tämä aihe lienee tarkoitettu cb-kysymyksille, mutta vastaanpa nyt kuitenkin. Luultavasti joudut vääntämään omaa ajuria, ellei näitä lisäominaisuuksia ole sinne valmiiksi naitettuna mukaan. Toinen vaihtoehto olisi puhua suoraan usbille tekemällä vaikka c++ ohjelma ja käyttämällä libusb-kirjastoa. Helppoa se ei tule olemaan, joten toivotan onnea yritykseen...
Pystynkö C++ :lla myös valvomaan jokaista tavua, joka lähetetään / vastaanotetaan USB -port(e)ista? Jos, niin voisin tutkia mitä informaatiota siellä oikein liikkuu :)
sankja
Newcomer
Posts: 30
Joined: Thu Jan 29, 2009 10:32 pm

Re: Tyhmät kysymykset (I/2010)

Post by sankja »

Tosta funkkarihommasta vielä, voisiko joku selittää,että mihin kohtaan return palauttaa lausekkeen arvon ,kun on kyse rekursiosta, kun yleensähän se tavallisessa funktiossa palautetaan pääohjelman funkkarikutsun kohdalle, ja miks siinä return lausekkeessa näyttäisi olevan myös jonkinlainen funktiokutsu.
Tämöttiset asiat on kyl vaikkee ymmärtä. :o Nii,että kiitos vaan sille joka selittää,näin vaikkeen asian. :P

Code: Select all

Dim b As String:b="anna jokin kokonaisluku: "
Dim a
 
    Repeat
        a=Input(b)
        DrawScreen
    Until KeyHit(cbkeyreturn)
    CloseInput:ClearKeys
   
   'funktioilla on omat muuttujat (vaikka pääohjelmassasi olisi 
   'samanniminen, se on silti eri).
    luku=a
    taltio=kertoma(luku)
   
    Text 10,20,taltio
    DrawScreen
   
    WaitKey
    End
   
Function kertoma(luku)
If luku>1
    Return kertoma(luku-1)*luku
Else
    Return 1
EndIf

EndFunction  
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Tyhmät kysymykset (I/2010)

Post by MetalRain »

sankja wrote:Tosta funkkarihommasta vielä, voisiko joku selittää,että mihin kohtaan return palauttaa lausekkeen arvon ,kun on kyse rekursiosta, kun yleensähän se tavallisessa funktiossa palautetaan pääohjelman funkkarikutsun kohdalle, ja miks siinä return lausekkeessa näyttäisi olevan myös jonkinlainen funktiokutsu.
Tämöttiset asiat on kyl vaikkee ymmärtä. :o Nii,että kiitos vaan sille joka selittää,näin vaikkeen asian. :P
Tässäpä vaihe vaiheelta purettuna tapahtumat kun käyttäjä syöttää koodissasi luvun 3.

Code: Select all

Käyttäjä syöttää arvon 3 se tallentuu muuttujaan a.
Muuttuja a sijoitetaan muuttujaan luku.
Kutsutaan funktiota kertoma parametrinä luku eli 3.
Koska 3>1 kertoma(3)  kutsuu itseään ja välittää arvon 3-1 eli 2.
Koska 2>1 Kertoma(2) kutsuu itseään ja välittää arvon 2-1 eli 1.
Koska 1=1 Kertoma(1) palauttaa luvun 1 kertoma(2):lle.
Kertoma(2) saa luvun 1 ja kertoo sen muuttujalla luku eli 2:lla ja palauttaa (1*2=2) kertoma(3):lle
Kertoma(3) saa luvun 2 ja kertoo sen muuttujalla luku eli 3:lla ja palauttaa (2*3=6)
Muuttujaan taltio sijoitetaan kertoma(3):lta saatu arvo. 
Taltio muuttujan sisältämä arvo tulostetaan ruudulle.
Eli funktion palautusarvo selvitetään (eli funktio suoritetaan) ennenkuin se voidaan sijoittaa muuttujaan, käyttää laskutoimituksissa tai käyttää ehtolausekkeissa.
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by DJ-Filbe »

USB-asiaan vielä:
onko olemassa sellaista ohjelmaa jo valmiiksi, jolla voisi hallita USB-portteja ja kulkevaa dataa? Linkkiä?
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset (I/2010)

Post by esa94 »

DJ-Nerd wrote:USB-asiaan vielä:
onko olemassa sellaista ohjelmaa jo valmiiksi, jolla voisi hallita USB-portteja ja kulkevaa dataa? Linkkiä?
En muista pystyykö WireShark paketti-injektioon, mutta ainakin sillä pystyy tutkimaan USB-porttien liikennettä.
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

olen tekemässä ping pong peliä mutta tässä pelissä on 4 lautaa kummallakin pelaajalla ja en osaa tehä tuota viistoon liikkumista voisko joku auttaa laitan pätkän koodista miten olen näitten muitten liikkumisen toteuttanu

Code: Select all

If MouseWX()<-120 Then moose=-120 
If MouseWX()>120 Then moose=120
If MouseWX()>-120 And MouseWX()<120 Then moose=MouseWX()

If MouseWY()<-120 Then moose3=-120 
If MouseWY()>120 Then moose3=120
If MouseWY()>-120 And MouseWY()<120 Then moose3=MouseWY()

PositionObject lauta,moose,-390
PositionObject lauta2,390,moose3
ja täs viel kuva:
Attachments
peli.png
peli.png (24.17 KiB) Viewed 10142 times
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion »

jaahas wrote:olen tekemässä ping pong peliä mutta tässä pelissä on 4 lautaa kummallakin pelaajalla ja en osaa tehä tuota viistoon liikkumista voisko joku auttaa
Sen, minkä kuvastasi ymmärsin, niin näyttäisi molemmilla pelaajilla olevan kolme lautaa, eikä neljä. Tuleeko peli olemaan sellainen, että toinen pelaaja on aina tietokone? Jos ei, niin en suosittele käyttämään hiirtä ohjaamiseen sillä se tekee pelistä tyhmän kun toisella on näppäimet ja toisella hiiri.

Lähtisin ehkä itse toteuttamaan tuota niin, että tekisin perusliikkumiset vasemmalle/alas ja oikealle/ylös. Sitten jotain tiettyä nappia painamalla voisi vaihtaa kontrolloitavaa lautaa, joka värjäytyisi vaikka jollain tietyllä tavalla. Kaikki laudat siis liikkuisivat samoilla näppäimillä, mutta joku näppäin vain vaihtaisi aina kontrolloitavaa lautaa.
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
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

VesQ wrote:
jaahas wrote:olen tekemässä ping pong peliä mutta tässä pelissä on 4 lautaa kummallakin pelaajalla ja en osaa tehä tuota viistoon liikkumista voisko joku auttaa
Sen, minkä kuvastasi ymmärsin, niin näyttäisi molemmilla pelaajilla olevan kolme lautaa, eikä neljä. Tuleeko peli olemaan sellainen, että toinen pelaaja on aina tietokone? Jos ei, niin en suosittele käyttämään hiirtä ohjaamiseen sillä se tekee pelistä tyhmän kun toisella on näppäimet ja toisella hiiri.

Lähtisin ehkä itse toteuttamaan tuota niin, että tekisin perusliikkumiset vasemmalle/alas ja oikealle/ylös. Sitten jotain tiettyä nappia painamalla voisi vaihtaa kontrolloitavaa lautaa, joka värjäytyisi vaikka jollain tietyllä tavalla. Kaikki laudat siis liikkuisivat samoilla näppäimillä, mutta joku näppäin vain vaihtaisi aina kontrolloitavaa lautaa.
se on kaheksan kulmainen eli siihen tulee 8 lautaa siihen on laitettu vain 3 ja vastustaja on aina tietokone kaikkia lautoja liikutetaan samaan aikaan ne seuraa hiirtä
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by axu »

jaahas wrote:olen tekemässä ping pong peliä mutta tässä pelissä on 4 lautaa kummallakin pelaajalla ja en osaa tehä tuota viistoon liikkumista voisko joku auttaa laitan pätkän koodista miten olen näitten muitten liikkumisen toteuttanu

Code: Select all

...
Jos nyt oikein ymmärsin, tarkoitit ilmeisesti tällaista:

Code: Select all

//Nämä muuttujat tarvitaan!!
Global _PTL_X#, _PTL_Y#


DrawToWorld ON
Random:
l1x=Rand(-200,200)
l1y=Rand(-150,150)
l2x=Rand(-200,200)
l2y=Rand(-150,150)

Repeat
    px=MouseWX()
    py=MouseWY()
    PointToLine(px,py,l1x,l1y,l2x,l2y)
    px=_PTL_X
    py=_PTL_Y
    Color 128, 128, 128
    Line px,py,MouseWX(),MouseWY()
    
    Color 255, 255, 255
    Line l1x,l1y,l2x,l2y
    Circle px-5,py+5,10
    
    Text 1,1,FPS()
    DrawScreen
    If KeyHit(cbKeySpace) Then Goto Random
Forever

//Funktio siirtää pisteen suoralle.
//px, py = Lähtöpisteen koordinaatit(esim. hiiri).
//l1x, l1y, l2x, l2y = viivan koordinaatit.
//Funktio sijoittaa uudet koordinaatit.
Function PointToLine (px#, py#, l1x#, l1y#, l2x#, l2y#)
    LineA = -GetAngle(l1x, l1y, l2x, l2y) + 90
    
    lastdist# = PointToLineDist(px, py, l1x, l1y, l2x, l2y)
    py = py + Sin(LineA) * lastdist#
    px = px + Cos(LineA) * lastdist#

    lastdist#=PointToLineDist(px, py, l1x, l1y, l2x, l2y)
    py = py - Sin(LineA) * lastdist#
    px = px - Cos(LineA) * lastdist#
    
    _PTL_X = px
    _PTL_Y = pY
End Function

//px, py = Lähtöpisteen koordinaatit(esim. hiiri).
//l1x, l1y, l2x, l2y = viivan koordinaatit.
//Funktio palauttaa pisteen etäisyyden suorasta
Function PointToLineDist (px#, py#, l1x#, l1y#, l2x#, l2y#)
    //Suoran yhtälö
    a# =  (l2y - l1y) / (l2x - l1x)
    b# = -1
    c# = -(l2y - l1y) / (l2x - l1x) * l1x + l1y
   
    //Etäisyys
    d# = Abs(a * px + b * py + c) / Sqrt(a * a + b * b)
   
    Return d
EndFunction
Tuohon vain neljä lautaa tuon yhden pallon sijaan? Tuossa siis se olennainen osa on tuo PointToLine funktio, ja se sitten tarvitsee nuo globaalit muuttujat sekä tuon toisen funktion.
En muista, kuka on tehnyt tuon PointToLineDist-funktion, tais löytyä cbkk:sta, mutta PointToLine on ihan omaa käsialaa ;)
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Locked