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?
näin
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
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
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?
näin
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
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.
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:
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ä
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ä
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ä.