Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Voisko joku heittää yksinkertaisen esimerkin LOS algorithmistä? Googletin, mutta matikkani ei riitä ihan tuollaiseen.

PS. 1000. vastaus Tyhmissä kysymyksissä ^^
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Tyhmät kysymykset

Post 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 
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Tyhmät kysymykset

Post 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
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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ö.
Maamyyrä
Newcomer
Posts: 27
Joined: Thu Jun 05, 2008 10:59 am

RE: Tyhmät kysymykset

Post 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ä
One object to rule them all

Just don't kill the Master
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: RE: Tyhmät kysymykset

Post 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.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Tyhmät kysymykset

Post 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?
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Tyhmät kysymykset

Post 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)
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
Error syntax

Re: Tyhmät kysymykset

Post 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ä.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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.
Olwi
Devoted Member
Posts: 557
Joined: Sun Dec 30, 2007 4:15 pm
Location: Muhos

Re: Tyhmät kysymykset

Post 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
Huuda mun ip:tä!
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Tyhmät kysymykset

Post 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.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post 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?
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post 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
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Tyhmät kysymykset

Post 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
Last edited by Murskaaja on Tue Jul 08, 2008 11:23 pm, edited 1 time in total.
ASCII star wars Xtreme | Cool Bombers | Combat (kehitteillä)

RedShadow productions
Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post 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?
Nemesis
Member
Posts: 51
Joined: Sat May 17, 2008 1:54 pm

Re: Tyhmät kysymykset

Post 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$)
Asian tuntian oikein kirjoitus ohjeet:
-Älä tee yhdys sana virheitä.
-Vältä lyhenteitä mahd. muk.
-Yksi sanaiset lauseet? Unohda.
Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post 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?
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Tyhmät kysymykset

Post 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
    
ASCII star wars Xtreme | Cool Bombers | Combat (kehitteillä)

RedShadow productions
Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post 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ä.
Locked