Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
zHelmet
Member
Posts: 73
Joined: Mon Nov 10, 2008 3:55 pm

Re: Tyhmät kysymykset

Post by zHelmet »

kuinka tarkastaa onko joku tietyn neliö alueen sisällä kun neliö voi olla eri kulmassa
Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Tyhmät kysymykset

Post by Jonhu »

zHelmet wrote:kuinka tarkastaa onko joku tietyn neliö alueen sisällä kun neliö voi olla eri kulmassa
Myös voit käyttää boxoverlap()-komentoa, mutta se ei toimi noihin kulmien muutoksiin. Jos alue on ympyrä pystys Distance()-komennon avulla selvittämään, onko kappale alueen sisällä.
Jos alue on neliö voit katsoa onko koordinaatit alueen sisällä.. Helpoiten pääsisit muuttamalla tuon imageksi ja käyttämällä imagen komentoja. Tein nopeasti tälläisen function. :)

EDIT: Ääh tuo tarkistaa vain yhdessä kulmassa. Teen toisen, kunhan aikaa on. Oli vähän vaikeampi kysymys sittenkin :)

Code: Select all

AddText "Siirrä hiiri neliön päälle"

Repeat
    If aa(MouseX(),MouseY(),100,100,70,50)>0 Then Color cbred Else Color cbwhite
    Box 100,100,70,50
    DrawScreen
Forever

// pisteen paikka (2#,y2#)
// neliön alkupaikka (x1#,y1#) ja koko (KokoX,KokoY)
Function aa(x2#,y2#,x1#,y1#,KokoX,KokoY)
    If x2#<=x1#+kokoX And x2#>=x1# Then
        If y2#<=y1#+kokoY And y2#>=y1# Then
            Return 1
        EndIf
    EndIf
EndFunction
EDIT2: Tässä koodi, joka katsoo eri kulmissa.
Tein function joka laskee onko piste viivan oikealla vai vasemmalla puolella.

Code: Select all

SCREEN 800,600

AddText "Siirrä hiiri neliön päälle"

Type LINET
    Field x1# 'viivan alku
    Field y1# 
    Field y2# 'viivan loppu
    Field x2# 
    Field kx# ' neliön kekikohta
    Field ky#
    Field size
EndType

AddSquake(200,200,100,10)
AddSquake(500,300,10,10)

Repeat

    col=0
    
    // hiiren tarkistus
    For an.LINET=Each LINET
        dis=Distance(MouseX(),MouseY(),an\kx,an\ky)
        
        If dis>=(an\size*Sqrt(2))/2 Then ' on aina sisällä, jos on pienempi kuin (an\size*sqrt(2))/2 --(todistettu pythagoralla)
            If MouseX()<=Max(an\x1,an\x2) And  MouseX()>=Min(an\x1,an\x2)
                If MouseY()<=Max(an\y1,an\y2) And  MouseY()>=Min(an\y1,an\y2)
                    If InOrOut(MouseX(),MouseY(), an\x1, an\y1, an\x2, an\y2) Then
                        col=1
                    EndIf
                EndIf
            EndIf
        Else
            col=1
        EndIf
        
    Next an   
    
    // liike
    If Timer()>=aika+10 'And KeyDown(cbkeyspace) Then
        kulma#=kulma#+1
        For aa.LINET=Each LINET
            i+1
            aa\x1 = aa\kx + Sin(kulma#+i*90)*aa\size
            aa\y1 = aa\ky - Cos(kulma#+i*90)*aa\size
            aa\x2 = aa\kx + Sin(kulma#+(i+1)*90)*aa\size
            aa\y2 = aa\ky - Cos(kulma#+(i+1)*90)*aa\size
        Next aa
        aika=Timer()
    EndIf
    
    //värjäys
    If col=1 Then Color cbred Else Color cbwhite
    
    // piirto 
    For an.LINET=Each LINET
        Line an\x1, an\y1, an\x2, an\y2
    Next an

    Color cbwhite
    Text 600,10,"FPS: "+FPS()
    
    DrawScreen 
    
Forever



Function InOrOut(px#, py#, l1x#, l1y#, l2x#, l2y#)
 
    ang1#=GetAngle(l1x#, l1y#, l2x#, l2y#) 

    If ang1#<=90 And ang1#>=0   
        suunta=1
    ElseIf ang1#<=180 And ang1#>=90 
        suunta=2
    ElseIf ang1#<=270 And ang1#>=180
        suunta=3
    Else
        suunta=4
    EndIf
    
    ang1#=-ang1#+90 

    For a=1 To Distance(l1x#, l1y#, l2x#, l2y#)
    
        xn2# = l1x# + Sin(ang1#)*(a)
        yn2# = l1y# - Cos(ang1#)*(a)
        
        Select suunta
            Case 1 : If px#>=xn2# And py#>=yn2# Then Return 1 ' pienempi, suurempi vasen ylä                
            Case 2 : If px#>=xn2# And py#<=yn2# Then Return 1 ' suurempi, pienempi vasen ala
            Case 3 : If px#<=xn2# And py#<=yn2# Then Return 1 ' pienempi, pienempi oikea ala
            Case 4 : If px#<=xn2# And py#>=yn2# Then Return 1 ' pienempi, suurempi oikea ylä
        EndSelect
        
    Next a   
    
EndFunction


Function AddSquake(xx1#,yy1#,koko,ang#) 
    ang1#=-ang1#+90 
    For i=1 To 4
        aa.LINET=New(LINET)
        aa\kx=xx1#
        aa\ky=yy1#
        aa\size=koko
        aa\x1 = aa\kx + Sin(ang#+i*90)*koko
        aa\y1 = aa\ky - Cos(ang#+i*90)*koko
        aa\x2 = aa\kx + Sin(ang#+(i+1)*90)*koko
        aa\y2 = aa\ky - Cos(ang#+(i+1)*90)*koko
    Next i
EndFunction
Last edited by Jonhu on Thu Dec 18, 2008 5:16 pm, edited 3 times in total.
Eräs Vierailija

Re: Tyhmät kysymykset

Post by Eräs Vierailija »

Terve, minä täällä taas.

Ylhäältä kuvattuun räiskintääni pitäisi saada ominaisuus, että nurkan taakse ei näe vaan siellä on mustaa. Miten tämän voisi toteuttaa? Peli käyttää tilekarttoja.
odezzz
Newcomer
Posts: 6
Joined: Tue Dec 16, 2008 6:59 pm

Re: Luultavasti aika tyhmiä kysymyksiä...

Post by odezzz »

Joo,siis suurin osa on vaa liitetty jostai :oops: ...Mä vasta harjottelen :lol: ... Kiitti avusta!! :D :D


Viel se bottien ampuminen jäi vaivaamaa.... En oikein saa selkoo hyödyllisellä tasolla siit ampuminen2 tutoriaalist...
Voisko joku auttaa???? THX :D
Ozcar
Advanced Member
Posts: 439
Joined: Mon Aug 27, 2007 8:43 pm
Location: Helsinki

Re: Luultavasti aika tyhmiä kysymyksiä...

Post by Ozcar »

Ei bottien tarvitse kuin osoittaa hahmoon PointObject-komennolla ja ampua tietyin intervallein. Liikkumisen voi hoitaa TranslateObjectilla.
Ratkaisit juuri universaaliongelman! Hienoa, ota keksi.

Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.
sillie
Newcomer
Posts: 19
Joined: Sun Dec 14, 2008 8:56 pm

Re: Tyhmät kysymykset

Post by sillie »

Jeps, eli olis tällainen kysymys:

Hidastuuko funktion nopeus jos siihen lisää parametreja, jotka ovat valinnaisia?

Olen tekemässä funktiota, joka luo pinnan, mutta pinnassahan tunnetusti voi olla loputon määrä kulmia.

Olisiko parempi tehdä erikseen funktio, joka sitten luo niitä isoja pintoja kuin tunkea yhteen funktioon hirveästi valinnaisia parametrejä?

Funktiota kutsutaan suht usein.
Untsk1
Newcomer
Posts: 6
Joined: Thu Dec 04, 2008 3:57 pm

Re: Tyhmät kysymykset

Post by Untsk1 »

Mikä vika kun tulee "error memory acces violation"

Code: Select all

'''Tekstiseikkailun alku'''

mem=MakeMEMBlock(32)
SCREEN 640,480 

Logo=LoadFont ("Snap ITC", 30)
Ohjeet=LoadFont ("Lucida Calligraphy" ,25)
Anykey=LoadFont ("Tahoma", 15)
Times=LoadFont ("Times New Roman", 17)

Alkusivu:
         Repeat
    
         Include "vilkku.cb"
               
         Until WaitKey()


'Sivu joka kysyy nimeä'
Nimi:
ClearText 
    Color cbMagenta 
    Repeat
        name$=input(">>")
        DrawScreen
    If KeyHit (28) Then Goto Alkusanat
    Forever 
    CloseInput
    
    
     
Alkusanat:
Repeat 

    Color cbsilver
    SetFont Times
    Text 0,0,name$+"Haluatko olla"
    Text 0,19,"1)Astronautti"
    Text 0,38,"2)Kosmonautti"
    Text 0,56,"3)Sergei Gorbatsov"
    DrawScreen 

    If KeyHit(2) Then 
        Goto Astronauttialku

    ElseIf KeyHit(3) Then 
        Goto Kosmonauttialku

    ElseIf KeyHit(4) Then
        Goto Sergeialku
        
    Else 
        Goto ohje 
    EndIf 


Until EscapeKey()


ohje:
Repeat 

    Text 50,50,"Paina osoitettua näppäintä"
    
Until EscapeKey ()

Astronauttialku:
Repeat 

    Text 50,50,"Paina osoitettua näppäintä"
    
Until EscapeKey ()

Kosmonauttialku:
Repeat 

    Text 50,50,"Paina osoitettua näppäintä"
    
Until EscapeKey ()

Sergeialku:
Repeat 

    Text 50,50,"Paina osoitettua näppäintä"
    
Until EscapeKey ()

DeleteMEMBlock mem 
mikeful
Moderator
Moderator
Posts: 523
Joined: Mon Aug 27, 2007 8:36 pm
Location: Vaasa, Finalnd
Contact:

Re: Tyhmät kysymykset

Post by mikeful »

"Luultavasti tyhmä kysymys" liitetty tänne.
Pelejä: Pelasta puhe, Grinder
Muuta: Blogi, Twitter
sillie
Newcomer
Posts: 19
Joined: Sun Dec 14, 2008 8:56 pm

Re: Tyhmät kysymykset

Post by sillie »

Untsk1 wrote:Mikä vika kun tulee "error memory acces violation"

Code: Select all

'''Tekstiseikkailun alku'''

mem=MakeMEMBlock(32)
SCREEN 640,480 

Logo=LoadFont ("Snap ITC", 30)
Ohjeet=LoadFont ("Lucida Calligraphy" ,25)
Anykey=LoadFont ("Tahoma", 15)
Times=LoadFont ("Times New Roman", 17)

Alkusivu:
         Repeat
    
         Include "vilkku.cb"
               
         Until WaitKey()


'Sivu joka kysyy nimeä'
Nimi:
ClearText 
    Color cbMagenta 
    Repeat
        name$=input(">>")
        DrawScreen
    If KeyHit (28) Then Goto Alkusanat
    Forever 
    CloseInput
    
    
     
Alkusanat:
Repeat 

    Color cbsilver
    SetFont Times
    Text 0,0,name$+"Haluatko olla"
    Text 0,19,"1)Astronautti"
    Text 0,38,"2)Kosmonautti"
    Text 0,56,"3)Sergei Gorbatsov"
    DrawScreen 

    If KeyHit(2) Then 
        Goto Astronauttialku

    ElseIf KeyHit(3) Then 
        Goto Kosmonauttialku

    ElseIf KeyHit(4) Then
        Goto Sergeialku
        
    Else 
        Goto ohje 
    EndIf 


Until EscapeKey()


ohje:
Repeat 

    Text 50,50,"Paina osoitettua näppäintä"
    
Until EscapeKey ()

Astronauttialku:
Repeat 

    Text 50,50,"Paina osoitettua näppäintä"
    
Until EscapeKey ()

Kosmonauttialku:
Repeat 

    Text 50,50,"Paina osoitettua näppäintä"
    
Until EscapeKey ()

Sergeialku:
Repeat 

    Text 50,50,"Paina osoitettua näppäintä"
    
Until EscapeKey ()

DeleteMEMBlock mem 
Lähinnä tulisi mieleen, että joko fontit eivät olisi saatavilla tai sitten vilkku.cb ei löydy. Muistaakseni kannattaa olla tarkkana, että se on vilkku.cb eikä esim vilkku.CB eli katsoppas onko pääte pienin kirjaimin. En muuta nyt keksi.
alker
Newcomer
Posts: 49
Joined: Thu Dec 18, 2008 3:32 pm

Re: Tyhmät kysymykset

Post by alker »

Miten saisin että jos luoti osuu enemyyn niin exp =exp+10 ja enemy häviäisi?
Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post by Sepi »

Code: Select all

for luoti.luodit = each luodit

if objectsoverlap(luoti\obj,vihu) then

exp=exp+10
deleteobject vihu

endif


next luoti




Tuossa siis vihu on tehty objektilla ja luodit ovat typeillä tehtyjä.
Last edited by Sepi on Fri Dec 19, 2008 6:52 pm, edited 1 time in total.
Untsk1
Newcomer
Posts: 6
Joined: Thu Dec 04, 2008 3:57 pm

Re: Tyhmät kysymykset

Post by Untsk1 »

Joo eli sain sen memory violationin pois mutta nyt kun toi printtaa ton alkusanat ni se näyttää !]$£€$€$£€{[$€]}]}{
alker
Newcomer
Posts: 49
Joined: Thu Dec 18, 2008 3:32 pm

Re: Tyhmät kysymykset

Post by alker »

Sepi wrote:

Code: Select all

for luoti.luodit = each luodit

if objectsoverlap(luoti\obj,vihu) then

exp=exp+10
deleteobject vihu

endif


next luoti

Tuossa siis vihu on tehty objektilla ja luodit ovat typeillä tehtyjä.

Ei toimi ja olen tehnyt luodin objektina :(
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: Tyhmät kysymykset

Post by MAVmaggot »

Mikä siinä ei toimi? Mavittaako se? Antaako se jotain muuta erroria? Vai jotain muuta?

Code: Select all

    For luoti.LUODIT = Each LUODIT
        If ObjectsOverlap(luoti\obj,vihu) Then
            exp=exp+10
            DeleteObject vihu
        EndIf
    next luoti
Koodisi sisennettynä ja tyyppien nimet isolla kirjoitettuna.
Roni L
Newcomer
Posts: 4
Joined: Fri Dec 12, 2008 4:07 pm

Re: Tyhmät kysymykset

Post by Roni L »

Taas kyselen täällä... :oops:
Eli nyt en saa else:ä toimimaan. Alla on pätkä koodia joka ei toimi. En millään ymmärrä mikä siinä muka on vikana. Tulee virhekoodi 87, eli ilmeisesti else on väärässä paikassa. Minne se siis kuuluisi laittaa?
Jos ja ilmeisesti kun joku osaa auttaa olisin hyvin kiitollinen hänelle.

Code: Select all

ensimmäinen$  = 2

If ensimmäinen$= 2 Then Print "Toimii"
Else Print "Ei toimi"
End If
User avatar
TheDuck
Devoted Member
Posts: 632
Joined: Sun Aug 26, 2007 3:51 pm
Location: C:\Program Files\Tuusula\

Re: Tyhmät kysymykset

Post by TheDuck »

Code: Select all

ensimmäinen$  = "2"

If ensimmäinen$= "2" Then 
Print "Toimii"
Else 
Print "Ei toimi"
EndIf
^^
sillie
Newcomer
Posts: 19
Joined: Sun Dec 14, 2008 8:56 pm

Re: Tyhmät kysymykset

Post by sillie »

Untsk1 wrote:Joo eli sain sen memory violationin pois mutta nyt kun toi printtaa ton alkusanat ni se näyttää !]$£€$€$£€{[$€]}]}{
Kummallista. Fonttihan tuossa bugaa luultavasti mutta luulisi times new romanin toimivan. :/
Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Tyhmät kysymykset

Post by Jonhu »

Tyhmä kysymys omaan lähettäämi ratkaisuun :)

Onko järkevämpää kirjoittaa 4 muuttujaa fieldiin, vai laskea ne uudestaan joka kierros sininin ja cosinin avulla?
Pääsisin eroon näistä, jos lasken joka kierros uudestaan paikat..

Field x1# 'viivan alku
Field y1#
Field y2# 'viivan loppu
Field x2#

Myös hienompia ratkaisuja samaan tehtävään saa esittää minulle ;)

Code: Select all

SCREEN 800,600

AddText "Siirrä hiiri neliön päälle"

Type LINET
    Field x1# 'viivan alku
    Field y1#
    Field y2# 'viivan loppu
    Field x2#
    Field kx# ' neliön kekikohta
    Field ky#
    Field size
EndType

    AddSquake(200,250,100,10)


Repeat

    col=0
   
    // hiiren tarkistus
    For an.LINET=Each LINET
        dis=Distance(MouseX(),MouseY(),an\kx,an\ky)
        
        If dis>an\size 'liian kaukana ollakseen sisällä
        ElseIf dis>=(an\size*Sqrt(2))/2 ' on aina sisällä, jos on pienempi kuin (an\size*sqrt(2))/2 --(todistettu pythagoralla)
            If MouseX()<=Max(an\x1,an\x2) And  MouseX()>=Min(an\x1,an\x2)
                If MouseY()<=Max(an\y1,an\y2) And  MouseY()>=Min(an\y1,an\y2)
                    If InOrOut(MouseX(),MouseY(), an\x1, an\y1, an\x2, an\y2) Then
                        col=1
                    EndIf
                EndIf
            EndIf
        Else ' pakosti sisällä
            col=1
        EndIf
       
    Next an   
   
    // liike
    If Timer()>=aika+10 'And KeyDown(cbkeyspace) Then
        kulma#=kulma#+1
        For aa.LINET=Each LINET
            i+1
            aa\x1 = aa\kx + Sin(kulma#+i*90)*aa\size
            aa\y1 = aa\ky - Cos(kulma#+i*90)*aa\size
            aa\x2 = aa\kx + Sin(kulma#+(i+1)*90)*aa\size
            aa\y2 = aa\ky - Cos(kulma#+(i+1)*90)*aa\size
        Next aa
        aika=Timer()
    EndIf
   
    //värjäys
    If col=1 Then Color cbred Else Color cbwhite
   
    // piirto
    For an.LINET=Each LINET
        Line an\x1, an\y1, an\x2, an\y2
    Next an

    Color cbwhite
    Text 600,10,"FPS: "+FPS()
   
    DrawScreen 
   
Forever



Function InOrOut(px#, py#, l1x#, l1y#, l2x#, l2y#)

    ang1#=GetAngle(l1x#, l1y#, l2x#, l2y#)

    If ang1#<=90 And ang1#>=0   
        suunta=1
    ElseIf ang1#<=180 And ang1#>=90
        suunta=2
    ElseIf ang1#<=270 And ang1#>=180
        suunta=3
    Else
        suunta=4
    EndIf
   
    ang1#=-ang1#+90

    For a=1 To Distance(l1x#, l1y#, l2x#, l2y#)
   
        xn2# = l1x# + Sin(ang1#)*(a)
        yn2# = l1y# - Cos(ang1#)*(a)
       
        Select suunta
            Case 1 : If px#>=xn2# And py#>=yn2# Then Return 1 ' pienempi, suurempi vasen ylä               
            Case 2 : If px#>=xn2# And py#<=yn2# Then Return 1 ' suurempi, pienempi vasen ala
            Case 3 : If px#<=xn2# And py#<=yn2# Then Return 1 ' pienempi, pienempi oikea ala
            Case 4 : If px#<=xn2# And py#>=yn2# Then Return 1 ' pienempi, suurempi oikea ylä
        EndSelect
       
    Next a   
   
EndFunction


Function AddSquake(xx1#,yy1#,koko,ang#)
    For i=1 To 4
        aa.LINET=New(LINET)
        aa\kx=xx1#
        aa\ky=yy1#
        aa\size=koko
        aa\x1 = aa\kx + Sin(ang#+i*90)*koko
        aa\y1 = aa\ky - Cos(ang#+i*90)*koko
        aa\x2 = aa\kx + Sin(ang#+(i+1)*90)*koko
        aa\y2 = aa\ky - Cos(ang#+(i+1)*90)*koko
    Next i
EndFunction
EDIT: Jos tulee error ammuksen osuessa, niin toden näköisesti ongelma on ammuksen poistamisen puolella. Esim. Olet poistanut typen ja tarkkailet sitä vielä sen jälkeen. Sinun pitää poistaa se vasta viimeiseksi...
Last edited by Jonhu on Thu Dec 18, 2008 7:03 pm, edited 1 time in total.
alker
Newcomer
Posts: 49
Joined: Thu Dec 18, 2008 3:32 pm

Re: Tyhmät kysymykset

Post by alker »

MAVmaggot wrote:Mikä siinä ei toimi? Mavittaako se? Antaako se jotain muuta erroria? Vai jotain muuta?

Code: Select all

    For luoti.LUODIT = Each LUODIT
        If ObjectsOverlap(luoti\obj,vihu) Then
            exp=exp+10
            DeleteObject vihu
        EndIf
    next luoti
Koodisi sisennettynä ja tyyppien nimet isolla kirjoitettuna.
Tein tuon koodisi mutta mavittaa kun ammun enemyä
sillie
Newcomer
Posts: 19
Joined: Sun Dec 14, 2008 8:56 pm

Re: Tyhmät kysymykset

Post by sillie »

Voiskos joku ystävällinen sielu tehdä mulle esimerkkiä miten saan kolmion kääntymään (rotation?) ? Ilmeisesti siihen siniä ja kosiniä tarvitaan mutta mulle ei uppoo kaaliin., vaikka oon pari tuntia ollu koneella ja matikankirjanki aihetta käsittelevät sivut lukenu. Alkaa hermostua tässä pikkuhiljaa :|

Tuossa olis tuota pohjaa.

Code: Select all

SCREEN 1024,768

x1 = 500
x2 = 400
x3 = 600
y1 = 400
y2 = 300
y3 = 300

Color 255,0,0

Repeat

Line x1,y1,x2,y2
Line x1,y1,x3,y3
Line x3,y3,x2,y2

DrawScreen

Forever
Locked