Page 51 of 154

Re: Tyhmät kysymykset

Posted: Wed Jul 02, 2008 3:07 pm
by Koodiapina
Voisko joku heittää yksinkertaisen esimerkin LOS algorithmistä? Googletin, mutta matikkani ei riitä ihan tuollaiseen.

PS. 1000. vastaus Tyhmissä kysymyksissä ^^

Re: Tyhmät kysymykset

Posted: Thu Jul 03, 2008 7:21 pm
by Nassi_Setä
pystyykö täl samalla koodi pätkäl luoda vihut paikkoihin jossa kartan DATA-kerrokseen on merkitty esim. 2?

Code: Select all

Type pallo
    Field x
    Field y
End Type

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

pallokuva = LoadImage("media/cow.bmp")

tilew = 32
tileh = 32

For x = 1 to MapWidth()
    For y = 1 to MapHeight()
       
        If GetMap2(2, x, y) = 0 Then
            p.pallo = New(pallo)
            p\x = x*tilew + tilew/2 - ImageWidth(pallokuva)/2 - (MapWidth()*tilew/2+tilew)
            p\y = y*tileh + tileh/2 - ImageHeight(pallokuva)/2 - (MapHeight()*tileh/2+tileh)
        EndIf
       
    Next y
Next x

Repeat

    MoveCamera 0, (UpKey() - DownKey()) * 3
    MoveCamera (RightKey() - LeftKey()) * 3

    DrawGame

    DrawToWorld OFF, ON, OFF
    For p.pallo = Each pallo
        DrawImage pallokuva, p\x, p\y
    Next p

    Text 10, 10, "FPS: " + FPS()
   
    DrawScreen

Forever 

Re: Tyhmät kysymykset

Posted: Thu Jul 03, 2008 7:30 pm
by tuhoojabotti
Nassi_Setä wrote:pystyykö täl samalla koodi pätkäl luoda vihut paikkoihin jossa kartan DATA-kerrokseen on merkitty esim. 2?

Code: Select all

koodia... 
näin :D

Code: Select all

If GetMap2(3, x, y) = 2 Then

Re: Tyhmät kysymykset

Posted: Thu Jul 03, 2008 7:57 pm
by koodaaja
Jos toteutat viholliset kuvilla, niin noinhan se menee. Kun vaan muutat oikean layerin ja arvon, tuhoojabotti sen demonstroikin.

Voisit kyllä edes muuttaa tyypin nimeä ettei olisi täysin ilmiselvä copypaste-hirviö.

RE: Tyhmät kysymykset

Posted: Fri Jul 04, 2008 10:59 am
by Maamyyrä
Olisi pari kysymystä...
(1.) Niin että ei jollain sattuisi olemaan jotain pudotusvalikon tapaista, kun resurssien haalinta projektini tarvitsisi semmoisen?
(2.) Miten saa semmoisen kuvan päälle tulevan ikkuna systeemin millainen on tuossa kuvassa toi ruskee levy vai pitääkö se minun piirtää paintilla :?:

Image
kuva on age of empirestä

Re: RE: Tyhmät kysymykset

Posted: Fri Jul 04, 2008 12:04 pm
by Harakka
Maamyyrä wrote:Olisi pari kysymystä...
(1.) Niin että ei jollain sattuisi olemaan jotain pudotusvalikon tapaista, kun resurssien haalinta projektini tarvitsisi semmoisen?
(2.) Miten saa semmoisen kuvan päälle tulevan ikkuna systeemin millainen on tuossa kuvassa toi ruskee levy vai pitääkö se minun piirtää paintilla :?:

Image
kuva on age of empirestä
Pudotusvalikkoja on ainakin vanhoilla foorumeilla näkynyt (http://coolbasic.com/oldforums), sieltä kannattaa etsiä. Ja jälkimmäinen homma on hyvin helppo: piirrä kehykset ja jätä läpinäkyvä osa mustaksi. Kuvan tulee olla pelin ikkunan kokoinen. Lataa se koodissa ihan kuvana ja piirrä se DrawGamen jälkeen ruudun vasempaan yläkulmaan (0,0 kun DrawToWorld on OFF). Tämän jälkeen voit vielä piirtää sen päälle tekstejä ja kuvia normaalisti.

Re: Tyhmät kysymykset

Posted: Sat Jul 05, 2008 9:59 am
by Nassi_Setä
tuhoojabotti wrote:
Nassi_Setä wrote:pystyykö täl samalla koodi pätkäl luoda vihut paikkoihin jossa kartan DATA-kerrokseen on merkitty esim. 2?

Code: Select all

koodia... 
näin :D

Code: Select all

If GetMap2(3, x, y) = 2 Then
mutta miten sen koodipätkän voi vaihtaa objekteja "asettelevaks",kun nyt se käyttää kuvia?

Re: Tyhmät kysymykset

Posted: Sat Jul 05, 2008 11:05 am
by tuhoojabotti
näin :D

Code: Select all

 positionobject objekti, x*tilew + tilew/2 - ImageWidth(pallokuva)/2 - (MapWidth()*tilew/2+tilew), y*tileh + tileh/2 - ImageHeight(pallokuva)/2 - (MapHeight()*tileh/2+tileh)

Re: Tyhmät kysymykset

Posted: Sat Jul 05, 2008 5:33 pm
by Error syntax

Code: Select all

padit=200
pateja=ON
If pateja=ON Then +MouseDown(1) padit=padit-1
If padit=<0 and mousedown(1) Then pateja=OFF
EndIf

Tällä rivillä tulee: syntax error, cant understand the statemend
If pateja=ON Then +MouseDown(1) padit=padit-1

Jokin komento on väärä, mutta en osaa arvella mikä.

Re: Tyhmät kysymykset

Posted: Sat Jul 05, 2008 6:41 pm
by koodaaja
+Mousedown(1) padit=padit-1.

Ei ole toimiva koodinpätkä, ei tarkoita CB:llä mitään. Varmaan tarkoitit tätä:

Kun painetaan hiirtä, padeista vähennetään 1.

Code: Select all

padit = padit - MouseDown(1)
Ja kiinnostaisi kuulla, ihan vain uteliaisuuttani, että miten ajattelit tuon toimivan? Mistä päättelit, että tuo plussa tuossa edessä tekisi, ja että mitä tekisi?

Ja huomaa: koska asetat padit joka kerta 200:n, ne eivät ikinä lopu, vaan ammuttaessa niistä vähennetään yksi ja seuraavan kerran tuohon looppiin mennessä asetat määrän taas 200:n.

Re: Tyhmät kysymykset

Posted: Tue Jul 08, 2008 2:50 pm
by Olwi
Pitäskö tämän toimia teoriassa?
Tietäisin onko vika tässä vai jossain muualla.
Tarkoitan sisäkkäisiä jossitteluja

Code: Select all

If cursorp=4 And KeyHit(cbkeyreturn) Then
    cursory=200
    cursorp=1
    actionp=actionp-1
        If actionp<1 Then
            Cls
            Goto NextTurn
        EndIf
    Cls
    Goto start
EndIf

Re: Tyhmät kysymykset

Posted: Tue Jul 08, 2008 4:18 pm
by Harakka
Kyllä ihan sallitun näköistä koodia on. Goto:n käyttöä ei tosin yleensä suositella, koska sen kanssa koodin rakenne leviää nopeasti aika sekaiseksi ja vaikeasti hallittavaksi.

Re: Tyhmät kysymykset

Posted: Tue Jul 08, 2008 10:22 pm
by Sepi
Jos minulla on type nimeltä esimerkiksi "Sotilaat", jonka fieldit ovat esimerkiksi def ja att, niin kuinka voin luodessani sotilaan, määrätä sille tietyn verran attackia ja defenseä? Ja kun olen luonut esimerkiksi 10 sotilasta, niin kuinka voin saada selville tietyn sotilaan attakin ja defensen?

Re: Tyhmät kysymykset

Posted: Tue Jul 08, 2008 10:47 pm
by Koodiapina
Sepi: Tässä jokin viritelmä. En kokeillut koodia, mutta kaipa se toimii...

Code: Select all

for i = 1 to 10
     sol.soldier = new(soldier)
     sol\soldier_name = "sotamies "+i
     sol\soldier_defence = rand(4,6)
     sol\soldier_attack = rand(2,5)
next i

Code: Select all

function GetSoldierAttack(name$)
     for sol.soldier = each soldier
          if sol\soldier_name = name then return sol\soldier_attack
     next sol
endfunction

Re: Tyhmät kysymykset

Posted: Tue Jul 08, 2008 11:06 pm
by Murskaaja
Tässä on vähän erilainen esimerkki tuota varten.

Code: Select all

Type SOLDIERS
    Field name As String
    Field att
    Field def
    Field x
    Field y
EndType

soldierimage = LoadImage("media\cow.bmp") 'sotilaan kuva
ghostcursor = MakeImage(1,1) 'haamukuva kursorille (tätä ei tarvitse piirtää missään vaiheessa)


// Luodaan muutama pelaaja. Eli kutsutaan NewSoldier-funktiota. Parametreiksi annetaan sotilaan nimi,att,def sekä sotilaan x ja y-koordinaatit
NewSoldier("Mikko",10,10,60,150)
NewSoldier("Matti",5,15,120,150)
NewSoldier("Pate",12,23,180,150)
NewSoldier("Lehmä",2,13,240,150)

// "Pelin" pääsilmukka
Repeat
    For soldier.SOLDIERS = Each SOLDIERS 'Käydään läpi kaikki sotilaat
        DrawImage soldierimage,soldier\x,soldier\y
        
        // Jos kursori on sotilaan päällä, tulostetaan sen tiedot
        If ImagesOverlap(soldierimage,soldier\x,soldier\y,ghostcursor,MouseX(),MouseY()) Then
            Text 10,10,"name:    "+soldier\name
            Text 10,30,"attack:  "+soldier\att
            Text 10,50,"defence: "+soldier\def
        EndIf
    Next soldier
    DrawScreen
Until EscapeKey()


// Funktio, joka luo uuden sotilaan (kun sitä kutsutaan)
Function NewSoldier(name$,att,def,x,y)
    soldier.SOLDIERS = New(SOLDIERS)
    soldier\name = name$
    soldier\att = att
    soldier\def = def
    soldier\x = x
    soldier\y = y
EndFunction
EDIT: lisäsin muutaman kommentin koodiin

Re: Tyhmät kysymykset

Posted: Tue Jul 08, 2008 11:18 pm
by Sepi

Code: Select all

Type soldier
Field name
Field defence
Field attack
End type


For i = 1 to 1
     sol.soldier = new(soldier)
     sol\name = "sotamies"+i 
     sol\defence = rand(4,6)
     sol\attack = rand(2,5)
Next i



Repeat



Text 10,10,FPS()




GetSoldierAttack(sotamies1$)


Function GetSoldierAttack(name$)
     for sol.soldier = each soldier
          If sol\name = name Then Return sol\attack
          Text 10,20, sol\attack
     Next sol



EndFunction

DrawScreen

Forever

Tuossa on tuo koodi jonkalaisen sain väsättyä tuosta Grandin esimerkin pohjalta, mutta se ei oikein toimi. Se vörkkii kyllä ihan hyvin, jos on vain yksi noita sotilaita. Mutta jos laittaa että 1 to 10, niin se tulostaa niiden kaikkien Attackin päällekkäin, vaikka yrittäisin saada vain sotilas1:n attackia selville. Osaisiko joku auttaa?

Re: Tyhmät kysymykset

Posted: Tue Jul 08, 2008 11:49 pm
by Nemesis
Sepi wrote:

Code: Select all

...koodia
Tuossa on tuo koodi jonkalaisen sain väsättyä tuosta Grandin esimerkin pohjalta, mutta se ei oikein toimi. Se vörkkii kyllä ihan hyvin, jos on vain yksi noita sotilaita. Mutta jos laittaa että 1 to 10, niin se tulostaa niiden kaikkien Attackin päällekkäin, vaikka yrittäisin saada vain sotilas1:n attackia selville. Osaisiko joku auttaa?
GetSoldier-funktio:

Code: Select all

Function GetSoldierAttack(name$)
    For sol.soldier = each soldier
        If sol\name = name Then 
			Text 10,20, sol\attack
			Return sol\attack
		EndIf
    Next sol
EndFunction
Kätevämpää varmaan olisi, ettet laittaisi tuota text-komentoa funktion sisälle lainkaan, koska tuo funktio palauttaa muutenkin sen attackin, eli kun kutsut funktiota, kirjoitat Text 10, 20, GetSoldierAttack(sotamies1$)

Re: Tyhmät kysymykset

Posted: Wed Jul 09, 2008 12:06 am
by Sepi
Suuret kiitokset, voisiko joku vielä neuvoa oikein kädestä pitäen, mitä tuo "palauttaa arvon" tai vain "palauttaa" tarkoittaa, sillä en millään hoksaa sitä :oops:

EDIT: ja vielä (ainakin) yksi kysymys: Kuinka voin tuossa nostaa vaikka sotamies2:n attakkia yhdellä? Eli kuinka saan kutsuttua juuri tiettyä sotilasta?

Re: Tyhmät kysymykset

Posted: Wed Jul 09, 2008 12:48 am
by Murskaaja
Sepi wrote:Suuret kiitokset, voisiko joku vielä neuvoa oikein kädestä pitäen, mitä tuo "palauttaa arvon" tai vain "palauttaa" tarkoittaa, sillä en millään hoksaa sitä :oops:
Eli, funktiot ovat eräänlaisia aliohjelmia ja return-komennon avulla on mahdollista palauttaa varsinaiseen ohjelmaan esim. funktiossa tehdyn laskutoimituksen tulos. En tähän aikaan osaa selittää asioita selvästi, mutta toivottavasti tämä esimerkki selventää sinulle return-komennon toimintaa:

Code: Select all

tulo = kertolasku(13,5)
Print tulo
WaitKey


// funktio joka palauttaa sen parametreiksi annetuiden lukujen tulon
Function kertolasku(luku1,luku2)
    vastaus = luku1*luku2
    Return vastaus
EndFunction
Sepi wrote:EDIT: ja vielä (ainakin) yksi kysymys: Kuinka voin tuossa nostaa vaikka sotamies2:n attakkia yhdellä? Eli kuinka saan kutsuttua juuri tiettyä sotilasta?
tein vielä yhden esimerkin, jossa pitäisi tulla käytyä kaikki kysymäsi asiat läpi:

Code: Select all

    Type SOLDIERS
        Field ID
        Field name As String
        Field defence
        Field attack
    End type


    max_players = 10
    For i = 1 to max_players
         soldier.SOLDIERS = new(SOLDIERS)
         soldier\ID = i
         soldier\name = "sotamies"+i
         soldier\defence = rand(4,6)
         soldier\attack = rand(2,5)
    Next i

    
    soldierID = 0
    
    Locate 10,10
    AddText "Paina nuolia sivuille vaihtaaksesi pelaajaa."
    AddText "Paina nuolia ylös ja alas muuttaaksesi valitun"
    AddText "pelaajan attack-arvoa."
    
    
    Repeat       
        soldierID = soldierID+(KeyHit(cbkeyright)-KeyHit(cbkeyleft))
        soldierID = Max(1,Min(10,soldierID))
        
        PrintSoldierInfo(soldierID)
        
        EditSoldierAttack(soldierID, KeyHit(cbkeyup)-KeyHit(cbkeydown))
        DrawScreen
    Forever


    Function PrintSoldierInfo(ID)
         For soldier.SOLDIERS = Each SOLDIERS
            If soldier\ID = ID Then
                Text 10,100,"Name:    "+soldier\name
                Text 10,120,"Attack:  "+soldier\attack
                Text 10,140,"Defence: "+soldier\defence
                Exit
            EndIf
         Next soldier
    EndFunction
    
    
    Function EditSoldierAttack(ID,amount)
         For soldier.SOLDIERS = Each SOLDIERS
            If soldier\ID = ID Then
                soldier\attack = soldier\attack+amount
                Exit
            EndIf
         Next soldier
    EndFunction
    

Re: Tyhmät kysymykset

Posted: Wed Jul 09, 2008 1:04 pm
by Sepi
Kiitokset Murskaaja, nyt luulen ymmärtäneeni tuon returnin :) Mutta taas tuli ongelmia, ymmärsin tuon koodisi kyllä, mutta siinä luodaan valmiiksi 10 sotilasta, joiden ID määräytyy sen i:n mukaan. Mutta kun yritän laittaa niin että nappia painaessa se luo uuden, niin en millään onnistu saamaan sille sitä ID:tä.