Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Tyhmät kysymykset

Post by nevssons »

Ohjelmassa on kaksi silmukkaa ja toisesta silmukasta pitäis päästä takaisin ekaan mitä tehdä?
(olen jo kokeillut gotosavedlocationia)
Koodarina kohtalainen, henkilönä vittumainen
Image
M.R
Active Member
Posts: 102
Joined: Sat Dec 22, 2007 3:05 pm

Re: Tyhmät kysymykset

Post by M.R »

Yksinkertaisesti.Gosubilla.Kirjoita vaikka näin ensinmäisen silmukan alkuun.

Code: Select all

ekasimlmukka:

sitten toisen silmukan alkuun sama mutta vähän erillä taval:

Code: Select all

tokasilmukka: 
ja sitten jos olet toisessa silmukassa ja haluat ensinmäiseen niin kirjoita:

Code: Select all

GoSub ekasilmukka
gotosavedlocation jatkaa ohjelmaa tallennetusta paikasta joka palauttaa muuttujat ja semmoset.
Se olisi voinut sekoittaa vaikka koko homman.
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Tyhmät kysymykset

Post by nevssons »

Sama juttu gotolla ja gotosavedgamella

voisko joku tehä vian määrityksen?

Code: Select all

Kuva=MakeImage (400,300) 
alku:
viivaon=1 
hiiriy=1
hiirix=1
Repeat
DrawToScreen 
DrawImage kuva,0,0
If hiiriy=1 And hiirix=1 Then hiiri=1 Else hiiri=0
If viivaon=1 And MouseHit(1) Then viiva=1 Else viiva=0
If hiiri=1 And viiva=1 Then
 viivax1=MouseX()
 viivay1=MouseY()
 Exit 
 EndIf 

DrawScreen
Forever  

Repeat
DrawImage kuva,0,0
Line viivax1,viivay1,MouseX(),MouseY()
If hiiriy=1 And hiirix=1 Then hiiri=1 Else hiiri=0
If viivaon=1 And MouseHit(1) Then viiva=1 Else viiva=0
If hiiri=1 And viiva=1 Then
 viivax2=MouseX()
 viivay2=MouseY()
 DrawToImage kuva
 Line viivax1,viivay1,viivax2,viivay2
 DrawToScreen
 Goto alku
EndIf  
If MouseHit(2) Then SaveImage kuva,"data/kuva.bmp"
DrawToScreen
DrawScreen
Forever 
Koodarina kohtalainen, henkilönä vittumainen
Image
M.R
Active Member
Posts: 102
Joined: Sat Dec 22, 2007 3:05 pm

Re: Tyhmät kysymykset

Post by M.R »

nevssons wrote:Sama juttu gotolla ja gotosavedgamella

voisko joku tehä vian määrityksen?

Code: Select all

 koodia
Testasin ja se pomppii silmukasta toiseen.Vika taitaa olla muussa koodissa.
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Tyhmät kysymykset

Post by nevssons »

M.R wrote:
nevssons wrote:Sama juttu gotolla ja gotosavedgamella

voisko joku tehä vian määrityksen?

Code: Select all

 koodia
Testasin ja se pomppii silmukasta toiseen.Vika taitaa olla muussa koodissa.
se toimii jos goton poistaa mutta alku pistettä ei voi vaihtaa
Koodarina kohtalainen, henkilönä vittumainen
Image
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Tyhmät kysymykset

Post by Marcoder »

nevssons wrote:se toimii jos goton poistaa mutta alku pistettä ei voi vaihtaa
Rajua purkkaa! Venyy ja paukkuu.

Jos nyt ihan oikein tuon viritelmän ymmärsin niin siinä piirrellään viivoja kuvaan. Jonkinlainen piirto-ohjelma siis?

Jos nyt ihan heti alkuun unohdetaan goto ja tehdään sen käyttö vaikka rangaistavaksi niin tätä voitaisiin lähestyä hieman toisin.

Code: Select all

canvas = MakeImage(ScreenWidth(), ScreenHeight())
drawMode = False
startX = 0
startY = 0
Repeat
    If MouseHit(1) Then
        If drawMode Then
            DrawToImage canvas
            Line startX, startY, MouseX(), MouseY()
            DrawToScreen
        EndIf
        startX = MouseX()
        startY = MouseY()
        drawMode = True
    EndIf
    If MouseHit(2) Then drawMode = False
    DrawImage canvas, 0, 0
    If drawMode Then Line startX, startY, MouseX(), MouseY()
    DrawScreen
Forever
Tuossa siis kun vasurilla klikataan niin viivan piirtäminen alkaa ja kun uudestaan klikataan niin uuden viivan piirto aloitetaan edellisen loppukohdasta. Hiiren oikea lopettaa piirtomoodin.
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Tyhmät kysymykset

Post by nevssons »

jepulis. sitten vaan sovellan ton muihin toimintoihin
Koodarina kohtalainen, henkilönä vittumainen
Image
iTKEVAnAKKI
Advanced Member
Posts: 335
Joined: Tue Aug 28, 2007 3:55 pm
Location: Siellä jossain

Re: Tyhmät kysymykset

Post by iTKEVAnAKKI »

Miten saan tällä funktiolla rivitetyn lauseen rivien määrän selville?

Code: Select all

Function RowText(st$,x,y,x2,center=0)
    If x + TextWidth(st$) < x2 Then
        If center = ON Then Text (x+x2)/2-TextWidth(st$)/2,y,st$ Else Text x,y,st$
    Else
        For i = 1 To CountWords(st$)
            word$ = GetWord(st$,i)
            If x + TextWidth(sentence$) + TextWidth(word$) > x2 Then
                If center = ON Then
                    Text (x + x2)/2 - TextWidth(sentence$)/2, y, sentence$
                Else
                    Text x, y, sentence$
                EndIf
                sentence$ = ""
                y = y + TextHeight("I")
            EndIf
            sentence$ = sentence$ + word$ + " "
        Next i
        If sentence$ <> "" Then
            If center = ON Then Text (x+x2)/2-TextWidth(sentence$)/2,y,sentence$ Else Text x,y,sentence$
        EndIf
    EndIf
End Function
Projektit:
Joku projekti meneillään... Mitähän siitäkin tulee ;)
regalis
Advanced Member
Posts: 268
Joined: Mon Aug 27, 2007 9:44 pm

Re: Tyhmät kysymykset

Post by regalis »

Miten saan järjestettyä tyypin jäsenet oikeaan järjestykseen esim. energian perusteella? Insertillä ilmeisesti hoituisi, mutta en saanut itse sitä onnistumaan.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

iTKEVAnAKKI wrote:Miten saan tällä funktiolla rivitetyn lauseen rivien määrän selville?
Näin:

Code: Select all

lause$ = "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum"
Repeat
    Text 0,0,"Rivejä: "+ReturnRows(lause,5,30,200)
    rowtext(lause,5,30,200)
    DrawScreen
Forever

Function ReturnRows(st$,x,y,x2)
    If x + TextWidth(st$) < x2 Then
        y = 1
    Else
        For i = 1 To CountWords(st$)
            word$ = GetWord(st$,i)
            If x + TextWidth(sentence$) + TextWidth(word$) > x2 Then
                sentence$ = ""
                y = y + TextHeight("I")
            EndIf
            sentence$ = sentence$ + word$ + " "
        Next i
    EndIf
    Return (y / TextHeight("I"))-1
EndFunction

Function RowText(st$,x,y,x2,center=0)
    If x + TextWidth(st$) < x2 Then
        If center = ON Then Text (x+x2)/2-TextWidth(st$)/2,y,st$ Else Text x,y,st$
    Else
        For i = 1 To CountWords(st$)
            word$ = GetWord(st$,i)
            If x + TextWidth(sentence$) + TextWidth(word$) > x2 Then
                If center = ON Then
                    Text (x + x2)/2 - TextWidth(sentence$)/2, y, sentence$
                Else
                    Text x, y, sentence$
                EndIf
                sentence$ = ""
                y = y + TextHeight("I")
            EndIf
            sentence$ = sentence$ + word$ + " "
        Next i
        If sentence$ <> "" Then
            If center = ON Then Text (x+x2)/2-TextWidth(sentence$)/2,y,sentence$ Else Text x,y,sentence$
        EndIf
    EndIf
End Function
Tai no jos et halua tuhlata funktioita, niin saahan tuon itse RowText funktionkin palauttamaan rivin määrän. Tuo on kuitenkin selvempää, kun ei sama funktio tee monia erillaisia toimintoja.
beg
Newcomer
Posts: 19
Joined: Fri Dec 14, 2007 2:08 pm

Re: Tyhmät kysymykset

Post by beg »

Mitä tekisinkään ilman tätä topikkia. Tällä kertaa 2 kysymystä:

1. Miksi tulee mav kun yritän päästä peliin alkuvalikosta?

2. Miksi tulee mav kun pelaaja yrittää lyödä? :(

Koodi:

Code: Select all

SCREEN 200,100
aloitapeli=LoadObject("media\aloitapeli.bmp")
lopetapeli=LoadObject("media\lopetapeli.bmp")
hiiri=LoadObject ("media\cursor.bmp")
ShowMouse OFF

PositionObject aloitapeli,0,30
PositionObject lopetapeli,0,-20

Repeat 
PositionObject hiiri,MouseWX(),MouseWY()

If ObjectsOverlap (hiiri,aloitapeli) And MouseHit(1) Then Goto peli
If ObjectsOverlap (hiiri,lopetapeli) And MouseHit(1) Then End 


DrawScreen 
Forever 
peli:

SCREEN 0,0,0,cbfullscreen 
FrameLimit 40

heppu=LoadObject("media\kamu.bmp",72)
tähtäys=LoadObject("media\hiiri.bmp")

huitaisu=LoadAnimObject("Media\huitaisu.bmp",38,50,0,10)
ShowObject huitaisu,OFF
ObjectRange huitaisu,30,51

PositionObject heppu,500,-400

Repeat
PositionObject tähtäys,MouseWX(),MouseWY()

If KeyDown (17) Then TranslateObject heppu,0,2
If KeyDown (30) Then TranslateObject heppu,-2,0
If KeyDown (31) Then TranslateObject heppu,0,-2
If KeyDown (32) Then TranslateObject heppu,2,0


If MouseHit(1) Then 
        
         PaintObject heppu,huitaisu 
         PlayObject pelihahmo,0,10,0.25
         EndIf
    
    
PointObject heppu,tähtäys 

    
    DrawScreen

Until EscapeKey()
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez »

Kumpikin mav tulee samasta syystä: Kun menet peliin, paint hiiren 1-nappulaa. Kun lyöt, painat hiiren 1-nappulaa. Kun hiiren 1-nappulaa painaa, ajetaan koodi:

Code: Select all

PlayObject pelihahmo,0,10,0.25
Objektia pelihahmo ei ole olemassakaan.

Edit.
Suosittelen tekemään ton huitaisun tähän malliin:

Code: Select all

oikea=LoadAnimObject("Media\zerorun1.bmp",47,51,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF

vasen=LoadAnimObject("Media\zerorun2.bmp",47,51,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF

pelaaja = MakeObject()
PaintObject pelaaja, oikea

Repeat

    If LeftKey() Then
        PaintObject pelaaja, vasen
        PlayObject pelaaja, 2, 11
    ElseIf RightKey() Then
        PaintObject pelaaja, oikea
        PlayObject pelaaja, 2, 11
    Else
        PlayObject pelaaja, 0
    EndIf

    DrawScreen
Forever
Eli sulla on yks objekti jolle annetaan kaikki komennot: Tätä objektia (tässä objektin nimi on "pelaaja") liikutetaa, animoidaan jne. Kun halutaan vaihtaa objektin ulkonäköä (esim. tässä seisomisesta juoksuksi), se objekti maalataan uudella ulkonäöllä (paintobject pelaaja, vasen, tai esim. paintobject pelaaja, huitaisu). Kun objekti tekee jotain, käytetään komentoa PlayObject pelaaja.

Eli tarvitset:
objektin jolle tehdään kaikki mitä halutaan: Liikutus, animointi jne.
Muut objektit joilla ainoastaan maalataan tämä eka objekti.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
simo simpanssi
Newcomer
Posts: 6
Joined: Thu Dec 20, 2007 3:49 pm

Re: Tyhmät kysymykset

Post by simo simpanssi »

Tätä on varmaan kysytty tässä ketjussa varmaan miljoona kertaa, mutta en jaksanu käydä kun yheksän sivullista läpi,(eikä vastausta löytynyt) joten kysyn nyt:
miten saa räiskintäpeliin luotua heltit, ja miten vihuja saa "spawnaamaan" tiettyyn paikkaan??(vastaus molempiin esimerkin kanssa(satun olemaan hiukan vähäjärkinen)jos mahdollista)
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Tyhmät kysymykset

Post by nevssons »

Miks elipsi ei seuraa hiirtä?

Code: Select all

kuva = MakeImage(400, 300)
eliON = False 
elix = 0
eliy = 0
hiirix=True 
hiiriy=True 
elipsi=True 
Repeat
ristix1=MouseX() -5
ristiy1=MouseY() -5
ristix2=MouseX() +5
ristiy2=MouseY() +5
   If hiirix And hiiriy Then hiiri=True Else hiiri=False 
   If elipsi And MouseHit(1) Then eli=True Else eli=False 
   If hiiri Then 
   ShowMouse OFF
   Line ristix1,MouseY(),ristix2,MouseY()
   Line MouseX(),ristiy1,MouseX(),ristiy2
   Else
   ShowMouse ON
   EndIf 
   
      If  hiiri And eli Then
        If elion Then 
            DrawToImage kuva
            Ellipse elix, eliy, Distance (elix, eliy, MouseX(),MouseX()),Distance (elix, eliy, MouseY(),MouseY()),0 
            DrawToScreen
            elinon=True 
        EndIf 
        eliX = MouseX()
        eliY = MouseY()
        elion = True   
    EndIf
     If elinon Then 
     elion=False 
     elinon=False 
     EndIf 
    DrawImage kuva, 0, 0
    If elion Then Ellipse elix, eliy, Distance (elix, elix, MouseX(),MouseX()),Distance (eliy, eliy, MouseY(),MouseY()),0
    If MouseHit(3) Then SaveImage kuva,"images/kuva.bmp"
    DrawScreen
Forever 
Koodarina kohtalainen, henkilönä vittumainen
Image
beg
Newcomer
Posts: 19
Joined: Fri Dec 14, 2007 2:08 pm

Re: Tyhmät kysymykset

Post by beg »

Jonez wrote:Kumpikin mav tulee samasta syystä: Kun menet peliin, paint hiiren 1-nappulaa. Kun lyöt, painat hiiren 1-nappulaa. Kun hiiren 1-nappulaa painaa, ajetaan koodi:

Code: Select all

PlayObject pelihahmo,0,10,0.25
Objektia pelihahmo ei ole olemassakaan.

Edit.
Suosittelen tekemään ton huitaisun tähän malliin:

Code: Select all

oikea=LoadAnimObject("Media\zerorun1.bmp",47,51,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF

vasen=LoadAnimObject("Media\zerorun2.bmp",47,51,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF

pelaaja = MakeObject()
PaintObject pelaaja, oikea

Repeat

    If LeftKey() Then
        PaintObject pelaaja, vasen
        PlayObject pelaaja, 2, 11
    ElseIf RightKey() Then
        PaintObject pelaaja, oikea
        PlayObject pelaaja, 2, 11
    Else
        PlayObject pelaaja, 0
    EndIf

    DrawScreen
Forever
Eli sulla on yks objekti jolle annetaan kaikki komennot: Tätä objektia (tässä objektin nimi on "pelaaja") liikutetaa, animoidaan jne. Kun halutaan vaihtaa objektin ulkonäköä (esim. tässä seisomisesta juoksuksi), se objekti maalataan uudella ulkonäöllä (paintobject pelaaja, vasen, tai esim. paintobject pelaaja, huitaisu). Kun objekti tekee jotain, käytetään komentoa PlayObject pelaaja.

Eli tarvitset:
objektin jolle tehdään kaikki mitä halutaan: Liikutus, animointi jne.
Muut objektit joilla ainoastaan maalataan tämä eka objekti.
Olipas nolo virhe. :oops: Kiitos kuitenkin!
Last edited by beg on Sun Jan 20, 2008 1:48 pm, edited 2 times in total.
BulletStorm

Re: Tyhmät kysymykset

Post by BulletStorm »

Nyt tuli mulle vastaan ihan uus juttu, nimittäin animaatiot. Ajattelinpa kysästä, että miten saisin aikaan suuliekin pelaajan / vihun ampuessa?
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Tyhmät kysymykset

Post by Harakka »

Tyylikkäintä olisi varmaan tehdä kaksi kuvaa: kuva, jossa pelaaja on ase kädessä ja kuva jossa pelaaja ampuu. Ampumiskuvaan voi sitten piirtää suuliekin ja lisätä valaistukseen välähdyksen ja mahdollisesti tehdä pieniä muutoksia hahmon asentoon niin asella näyttää olevan rekyyliäkin.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
M.R
Active Member
Posts: 102
Joined: Sat Dec 22, 2007 3:05 pm

Re: Tyhmät kysymykset

Post by M.R »

Kuinka voi järjestää tyypin jäsenet kolmen tyyppi muttujan perusteella?Eli missä ne kolme muuttujaa on samaa niin ne ois peräkkäin.
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Tyhmät kysymykset

Post by tuhoojabotti »

Minä toteutan suuliekin erillisellä objectilla joka vain siirretään oikeaa kohtaan siten saa dynaamisuutta kun on monta liekkikuvaa eikä aina se sama :P
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
User avatar
-Z-
Devoted Member
Posts: 682
Joined: Tue Aug 28, 2007 3:33 pm
Location: In ur danmaku, grazin ur bullets

Re: Tyhmät kysymykset

Post by -Z- »

Ensimmäinen ongelmani liittyen GTA-klooniini. "Auto"(eli ukko) Tekee ohjelman käynnistyessä pyöreän käännöksen, ja lähtee kulkemaan suoraan alaspäin. Piste, jonne sen pitäisi mennä, on valitettavasti vasemmalla eikä alhaalla. Kuseeko CurvePointObjecista muokkaamani funktio, vai mikä?

Code: Select all

SCREEN 600,400
Type AMMUS
    Field obj
End Type 

FrameLimit 40

ukkoei=LoadAnimObject("Media\plrun_unarmed.png",16,16,0,7,32)
ShowObject ukkoei,OFF 
pati=LoadObject("Media\bullet.png",16)
ShowObject pati,OFF
ShowMouse OFF
map=LoadMap("media\gtatest.til","media\tilesetgta.png")
car=LoadObject("media\guy.bmp",72)
MaskObject map, 255,0,255

ClsColor cbwhite

ukko = MakeObject(32)
PaintObject ukko,ukkoei
selection=1
point=1

Repeat
    
    CloneCameraPosition ukko

    RotateObject ukko, GetAngle(ObjectX(ukko),-ObjectY(ukko),MouseWX(),-MouseWY())
    TranslateObject ukko, KeyDown(cbkeyd)*3-KeyDown(cbkeya)*3,KeyDown(cbkeyw)*3-KeyDown(cbkeys)*3
    If KeyDown(cbkeyw) Or KeyDown(cbkeys) Or KeyDown(cbkeya) Or KeyDown(cbkeyd) Then PlayObject ukko, 0,8,0.3
    If Not KeyDown(cbkeyw) Then
        If Not KeyDown(cbkeys) Then
            If Not KeyDown(cbkeya) Then
                If Not KeyDown(cbkeyd) Then PlayObject ukko, OFF
            EndIf
        EndIf
    EndIf
    
    MoveObject car,3
    
    For y=1 To MapHeight()
    For x=1 To MapWidth()
        If GetMap2(3,x,y)=point Then curvepointobject2(car,x,y,10)
        If GetMap(3,ObjectX(ukko),ObjectY(ukko))=point Then point+1
    Next x
    Next y

    If point>4 Then point=1

    If MouseDown(1) And reload=0 Then
        luoti.AMMUS = New(AMMUS)
        luoti\obj=CloneObject(pati)
        CloneObjectPosition luoti\obj,ukko           
        CloneObjectOrientation luoti\obj,ukko
        MoveObject luoti\obj,movef,mover        
        reload=gunreload
        If dual=1 Then
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,ukko               
            CloneObjectOrientation luoti\obj,ukko
            MoveObject luoti\obj,movef,mover*-1
            reload=gunreload
        EndIf
    EndIf

    If reload>0 Then reload=reload-1

    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,12    
    Next luoti
    
    If selection=1 Then
        PaintObject ukko,ukkoei
        dmg=1
        dual=1
        movef=8
        mover=10
        gunreload=5
    EndIf
    
    DrawGame
    
    Color cbred
    Line MouseX()-5,MouseY(),MouseX()+5,MouseY()
    Line MouseX(),MouseY()+5,MouseX(),MouseY()-5
   

    DrawScreen

Until EscapeKey()

Function CurvePointObject2(_obj, x, y, _smoothness = 5)
    angle#      = ObjectAngle(_obj)
    newangle#   = GetAngle(ObjectX(_obj),ObjectY(_obj),x,y )
    angle#      = CurveAngle(newangle, angle, _smoothness)
    RotateObject _obj, angle
EndFunction 
"Fallout 3 (#10) marked a shift in the industry, a move that saw the western RPG begin to surpass its Japanese counterparts." -IGN top 100 RPGs of all time
Locked