Page 26 of 154
Re: Tyhmät kysymykset
Posted: Wed Jan 23, 2008 5:02 pm
by jelppiä
Mikä olisi kätevin tapa toteuttaa pelin yksinkertainen "runko", jossa valikosta siirrytään vaikkapa alkuesitykseen, ja siitä itse peliin..?
Kannattaisiko eri osa-alueet laittaa kylmästi funktioihin (tyyliin Valikko(), Peli() ), ja kutsua ne erikseen pääsilmukassa?
Re: Tyhmät kysymykset
Posted: Wed Jan 23, 2008 5:25 pm
by Koodiapina
jelppiä wrote: Mikä olisi kätevin tapa toteuttaa pelin yksinkertainen "runko", jossa valikosta siirrytään vaikkapa alkuesitykseen, ja siitä itse peliin..? Kannattaisiko eri osa-alueet laittaa kylmästi funktioihin (tyyliin Valikko(), Peli() ), ja kutsua ne erikseen pääsilmukassa?
Ehkä jollain muulla kielellä, mutta ei Coolbasicilla, koska siinä on 126:n funktion rajoitus. Eli kannattaa säästellä niiden tekoa, varsinkin jos on iso projekti tulossa. Goto / gosub voisi olla hyvä korvike.
Re: Tyhmät kysymykset
Posted: Wed Jan 23, 2008 5:30 pm
by Marcoder
Grandi wrote:Ehkä jollain muulla kielellä, mutta ei Coolbasicilla, koska siinä on 126:n funktion rajoitus. Eli kannattaa säästellä niiden tekoa, varsinkin jos on iso projekti tulossa. Goto / gosub voisi olla hyvä korvike.
Funktiorajoitus on kyllä kiusallisen pieni mutta eipä pelin runko montakaan funkkaria vaadi. Goto ja Gosubit kannattaa unohtaa heti alkuunsa.
Seuraavassa malli erittäin yksinkertaisesta pelirungosta. Heti voidaan havaita että pelin eri osaset kuten valikko ja itse peli jne ovat selkeästi toisistaan erillään ja siten ylläpito on huomattavasti helpompaa.
Code: Select all
SAFEEXIT OFF
Intro()
Menu()
Function Intro()
ClearKeys()
startTime = Timer()
Repeat
Text 0, 0, "Intro..."
DrawScreen
Until KeyHit(cbKeyEsc) Or startTime + 2000 < Timer()
ClearKeys()
EndFunction
Function Menu()
ClearKeys()
Repeat
Text 0, 0, "Päävalikko"
Text 0, 20, "1 = Pelaa"
Text 0, 35, "2 = Asetukset"
Text 0, 50, "0 = Lopeta"
DrawScreen
If KeyHit(cbKey1) Then Game()
If KeyHit(cbKey2) Then Settings()
Until KeyHit(cbKeyEsc) Or KeyHit(cbKey0)
ClearKeys()
EndFunction
Function Settings()
ClearKeys()
Repeat
Text 0, 0, "--- A S E T U K S E T ---"
Text 0, 20, "Esc = Paluu"
DrawScreen
Until KeyHit(cbKeyEsc)
ClearKeys()
EndFunction
Function Game()
ClearKeys()
Repeat
Text 0, 0, "Tässä pelataan..."
Text 0, 20, "Esc = Lopeta"
DrawScreen
Until KeyHit(cbKeyEsc)
ClearKeys()
EndFunction
Re: Tyhmät kysymykset
Posted: Wed Jan 23, 2008 5:39 pm
by jelppiä
Hienoo!
Kiitos() kummallekin.
Re: Tyhmät kysymykset
Posted: Wed Jan 23, 2008 6:47 pm
by M.R
Minulla tulee mav kun yritän poistaa muistipalan.Ja koodin tarkoitus selviää kun katsot tämän topickin:
viewtopic.php?f=12&t=500
Code: Select all
Type MTM2Map
Field Map
Field DataLayer1
Field DataLayer2
Field DataLayer3
Field DataLayer4
EndType
testi=MakeMTM2Map(100,100,25,25)
SetMTM2MapDataLayer(testi,1,1,1,60)
Print GetMTM2MapDataLayer(testi,1,1,1)
DeleteMTM2Map(testi)
WaitKey
Function LoadMTM2Map(mapf$,tileset$)
Errors OFF
file=OpenToRead(mapf$)
If file=0 Then MakeError "Can't load MTM2 map.Can't open map:"+Chr(13)+Chr(10)+mapf$
Errors ON
w=ReadInt(file)
h=ReadInt(file)
tw=ReadShort(file)
th=ReadShort(file)
map=MakeMap(w,h,tw,th)
For l=0 To 3
For y=1 To h
For x=1 To w
EditMap map,l,x,y,ReadByte(file)
Next x
Next y
Next l
PaintObject map,LoadImage(tileset$)
nmap.MTM2Map=New(MTM2Map)
nmap\Map=map
nmap\DataLayer1=MakeMEMBlock(2*(w*h))
For y=0 To h
For x=0 To w
pos=0
pos=pos+(h*y)
pos+x
pos=pos*2
PokeShort nmap\DataLayer1,pos,ReadShort(file)
Next x
Next y
nmap\DataLayer2=MakeMEMBlock(2*(w*h))
For y=0 To h
For x=0 To w
pos=0
pos=pos+(h*y)
pos+x
pos=pos*2
PokeShort nmap\DataLayer2,pos,ReadShort(file)
Next x
Next y
nmap\DataLayer3=MakeMEMBlock(2*(w*h))
For y=0 To h
For x=0 To w
pos=0
pos=pos+(h*y)
pos+x
pos=pos*2
PokeShort nmap\DataLayer3,pos,ReadShort(file)
Next x
Next y
nmap\DataLayer4=MakeMEMBlock(2*(w*h))
For y=0 To h
For x=0 To w
pos=0
pos=pos+(h*y)
pos+x
pos=pos*2
PokeShort nmap\DataLayer4,pos,ReadShort(file)
Next x
Next y
CloseFile file
Return ConvertToInteger(nmap)
EndFunction
Function GetMTM2TilMap(map)
gmap.MTM2Map=ConvertToType(map)
Return gmap\Map
EndFunction
Function GetMTM2MapDataLayer(map,dlayer,x,y)
gmap.MTM2Map=ConvertToType(map)
pos=0
pos=pos+(y*MapWidth())
pos+x
pos=pos*2
If dlayer=1 Then layer=gmap\DataLayer1
If dlayer=2 Then layer=gmap\DataLayer2
If dlayer=3 Then layer=gmap\DataLayer3
If dlayer=4 Then layer=gmap\DataLayer4
Return PeekShort(layer,pos)
EndFunction
Function SetMTM2MapDataLayer(map,dlayer,x,y,_data)
gmap.MTM2Map=ConvertToType(map)
pos=0
pos=pos+(y*MapWidth())
pos+x
pos=pos*2
If dlayer=1 Then layer=gmap\DataLayer1
If dlayer=2 Then layer=gmap\DataLayer2
If dlayer=3 Then layer=gmap\DataLayer3
If dlayer=4 Then layer=gmap\DataLayer4
PokeShort layer,pos,_data
EndFunction
Function DeleteMTM2Map(map)
dmap.MTM2Map=ConvertToType(map)
DeleteObject dmap\Map
DeleteMEMBlock dmap\DataLayer1
DeleteMEMBlock dmap\DataLayer2
DeleteMEMBlock dmap\DataLayer3
DeleteMEMBlock dmap\DataLayer4
Delete dmap
EndFunction
Function SaveMTM2Map(mapp,mapfile$)
smap.MTM2Map=ConvertToType(mapp)
map=smap\Map
file=OpenToWrite(mapfile$)
WriteInt file,MapWidth()
WriteInt file,MapHeight()
WriteShort file,ObjectSizeX(map)/MapWidth()
WriteShort file,ObjectSizeY(map)/MapHeight()
For l=0 To 3
For y=1 To MapHeight()
For x=1 To MapWidth()
WriteByte file,GetMap2(l,x,y)
Next x
Next y
Next l
For l=1 To 4
For y=0 To MapHeight()
For x=0 To MapWidth()
WriteShort file,GetMTM2MapDataLayer(map,l,x,y)
Next x
Next y
Next l
CloseFile file
EndFunction
Function MakeMTM2Map(w,h,tw,th)
nmap.MTM2Map=New(MTM2Map)
nmap\Map=MakeMap(w,h,tw,th)
nmap\DataLayer1=MakeMEMBlock(2*(w*h))
nmap\DataLayer2=MakeMEMBlock(2*(w*h))
nmap\DataLayer3=MakeMEMBlock(2*(w*h))
nmap\DataLayer4=MakeMEMBlock(2*(w*h))
mappi=ConvertToInteger(nmap)
For l=1 To 4
For y=0 To h
For x=0 To w
SetMTM2MapDataLayer(mappi,l,x,y,0)
Next x
Next y
Next l
Return mappi
EndFunction
Re: Tyhmät kysymykset
Posted: Wed Jan 23, 2008 8:03 pm
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(taas):
miten saa räiskintäpeliin luotua heltit type vihulle? vastaus esimerkin kanssa, kiitos.
Re: Tyhmät kysymykset
Posted: Wed Jan 23, 2008 8:17 pm
by Mysterius Coder
Kehotan opettelemaan itse. Se on ainoa tapa voi saada pelin valmiiksi.
http://www.coolbasic.com/oldforums/inde ... type++tuto
Siinä on ainakin yksi type tuto. Taisi olla muutamia muitakin jossain netin kätköissä...
Re: Tyhmät kysymykset
Posted: Thu Jan 24, 2008 7:43 pm
by BulletStorm
Elikkä. Olen nyt löytänyt juuri sopivan keinon tehdä tekoälyn BulletStormiin, nimittäin SDK:n ObjectVisionin. Ongelmana on se, että koodi ei suostu jostain syystä toimimaan. Tässä pieni koodinpätkä siitä, mistä aloitin:
Code: Select all
If ObjectVision (vihu, pelaaja, 90, 500) Then
MoveObject vihu, 2.5
//Tähän tulee ampuminen
EndIf
Kellään sattuisi olemaan kokemusta kyseisestä funkkarista?
E: Eli vihu ei liiku, vaikka ukko 'pomppisi' sen edessä.
Re: Tyhmät kysymykset
Posted: Fri Jan 25, 2008 9:05 am
by Jonez
BulletStorm: Tossa SDK:n ObjectVisionissa näyttäisi olevan bugi, jonka takia se ei havaitse tietyn kulman yli. Tietenkin voi olla myös mahdollista että toi sun
ongelma johtuu jostain muusta osasta koodia.
Tein kuitenkin oman ObjectVision-funkkarin, jonka pitäisi toimia.
Tämä esimerkkikoodi on hiukan muokattu versio tosta SDK:n ObjectVisionin esimerkkikoodista.
Code: Select all
FrameLimit 40
'Tee pelimaailma
ruoho = MakeObjectFloor ()
nurmikko = LoadImage ("Media\grass.bmp")
PaintObject ruoho, nurmikko
ukko1 = LoadObject ("Media\guy.bmp",72)
vihu = LoadObject ("Media\guy.bmp",72)
'Pyöritä ukot alkuasentoon
RotateObject ukko1,0
RotateObject vihu,180-45
'Aseta ukot alkupaikkoihin
PositionObject ukko1,-150,100
PositionObject vihu,50,-50
Repeat
'Ukon 1 ohjaus
If LeftKey() Then TurnObject ukko1,5
If RightKey() Then TurnObject ukko1,-5
If UpKey() Then MoveObject ukko1,5
If DownKey() Then MoveObject ukko1,-5
DrawGame
If ObjectVision(vihu,ukko1, 90, 500) Then
PointObject vihu, ukko1
MoveObject vihu, 2
Color cbRed: Text 10,10,"NÄKEE!"
EndIf
DrawScreen
Forever
// Tarkastaa onko objekti toisen objektin näkökentässä
Function ObjectVision( _obj, _obj2, _fov = 90, _dist = 1000 )
If Distance2( _obj, _obj2 ) < _dist And ObjectSight( _obj, _obj2 ) Then
_angle = WrapAngle( ( GetAngle2( _obj, _obj2 ) - ObjectAngle( _obj ) ) )
_sight = _fov / 2
If _angle < _sight Or _angle > 360 - _sight Then
Return True
EndIf
EndIf
End Function
Re: Tyhmät kysymykset
Posted: Fri Jan 25, 2008 12:52 pm
by Pate5
simo simpanssi wrote: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(taas):
miten saa räiskintäpeliin luotua heltit type vihulle? vastaus esimerkin kanssa, kiitos.
Kun luot tyypin näin...
...niin lisäät vain yksinkertaisesti uuden fieldin, johon tallennat vastustajan healthin.
Näin:
Code: Select all
Type vihut
Field obj
Field enu
EndType
Kun luot uuden vastustajan, niin muutat heltin:
Jos vastustajaan osuu, helttiä vähennetään. Jos heltti menee nollaan, vastustaja kuolee. Valmista esimerkkiä en nyt anna.
Re: Tyhmät kysymykset
Posted: Fri Jan 25, 2008 3:38 pm
by BulletStorm
Jonez wrote:BulletStorm: Tossa SDK:n ObjectVisionissa näyttäisi olevan bugi, jonka takia se ei havaitse tietyn kulman yli. Tietenkin voi olla myös mahdollista että toi sun
ongelma johtuu jostain muusta osasta koodia.
Tein kuitenkin oman ObjectVision-funkkarin, jonka pitäisi toimia.
Tämä esimerkkikoodi on hiukan muokattu versio tosta SDK:n ObjectVisionin esimerkkikoodista.
Code: Select all
FrameLimit 40
'Tee pelimaailma
ruoho = MakeObjectFloor ()
nurmikko = LoadImage ("Media\grass.bmp")
PaintObject ruoho, nurmikko
ukko1 = LoadObject ("Media\guy.bmp",72)
vihu = LoadObject ("Media\guy.bmp",72)
'Pyöritä ukot alkuasentoon
RotateObject ukko1,0
RotateObject vihu,180-45
'Aseta ukot alkupaikkoihin
PositionObject ukko1,-150,100
PositionObject vihu,50,-50
Repeat
'Ukon 1 ohjaus
If LeftKey() Then TurnObject ukko1,5
If RightKey() Then TurnObject ukko1,-5
If UpKey() Then MoveObject ukko1,5
If DownKey() Then MoveObject ukko1,-5
DrawGame
If ObjectVision(vihu,ukko1, 90, 500) Then
PointObject vihu, ukko1
MoveObject vihu, 2
Color cbRed: Text 10,10,"NÄKEE!"
EndIf
DrawScreen
Forever
// Tarkastaa onko objekti toisen objektin näkökentässä
Function ObjectVision( _obj, _obj2, _fov = 90, _dist = 1000 )
If Distance2( _obj, _obj2 ) < _dist And ObjectSight( _obj, _obj2 ) Then
_angle = WrapAngle( ( GetAngle2( _obj, _obj2 ) - ObjectAngle( _obj ) ) )
_sight = _fov / 2
If _angle < _sight Or _angle > 360 - _sight Then
Return True
EndIf
EndIf
End Function
Kiitos. Tuo sinun funkkarisi toimi vallan mainiosti
Re: Tyhmät kysymykset
Posted: Fri Jan 25, 2008 8:26 pm
by tuhoojabotti
BulletStorm wrote:Elikkä. Olen nyt löytänyt juuri sopivan keinon tehdä tekoälyn BulletStormiin, nimittäin SDK:n ObjectVisionin. Ongelmana on se, että koodi ei suostu jostain syystä toimimaan. Tässä pieni koodinpätkä siitä, mistä aloitin:
Kellään sattuisi olemaan kokemusta kyseisestä funkkarista?
E: Eli vihu ei liiku, vaikka ukko 'pomppisi' sen edessä.
outoa sillä kyllä se minun pelissäni toimii...
Re: Tyhmät kysymykset
Posted: Fri Jan 25, 2008 10:41 pm
by Guest
Miten saan estettyä kameraa menemästä tiettyjen maailmankoordinaattien ulkopuolelle? (Esim niin, että kameran X-koordinaatit olisivat aina väliltä -500,500)
Re: Tyhmät kysymykset
Posted: Fri Jan 25, 2008 10:57 pm
by Harakka
Guest wrote:Miten saan estettyä kameraa menemästä tiettyjen maailmankoordinaattien ulkopuolelle? (Esim niin, että kameran X-koordinaatit olisivat aina väliltä -500,500)
Jos kameran X on suurempi kuin maksimi-x, kameran x on maksimi-x. Jos kameran X on pienempi kuin minimi-x, kameran x on minimi-x. Samat y-akselilla. Jos osaat, voit tehdä saman myös Min()- ja Max()-lausekkeilla yhdellä rivillä.
Re: Tyhmät kysymykset
Posted: Sat Jan 26, 2008 3:35 am
by Myst!c
Olen yrittänyt opetella input komentoa ja sen saa kirjoittamaani nimeä tallentumaan,
eli siinä lukee: What is your name? Ja alemmas voi kirjoittaa, sitten se pitäisi tallentaa.
Vaikka enteristä.
Re: Tyhmät kysymykset
Posted: Sat Jan 26, 2008 3:40 am
by Myst!c
Tuossa on hieman koodia jota olen yrittänyt laittaa, nimi kyllä näkyy,
vilahtaa vain tosin. :S
Code: Select all
Color cbred
SetFont arial
Text 5,0,"What is your name?"
Locate 0,20
command$=Input(" ")
If KeyHit (28) Then
ClearText
text 5,0," Okay your name is " +command$
EndIf
EDIT: Anteeksi tuplaposti en huomannut.. Olen vähän väsynyt ehkä pitäisi mennä nukkumaan. ^^
Re: Tyhmät kysymykset
Posted: Sat Jan 26, 2008 7:58 am
by Harakka
Inputti pitää laittaa looppiin.
Code: Select all
Repeat
Repeat
nimi$ = input("Nimesi?")
DrawScreen
Until Keyhit(cbkeyreturn)
CloseInput : ClearKeys
Text 0,0,"Moi, " + nimi$ + "!"
DrawScreen
Waitkey
Forever
Re: Tyhmät kysymykset
Posted: Sat Jan 26, 2008 10:54 am
by regalis
Onko mahdollista piirtää DrawGhostImagella johonkin kuvaan, niin että se jäisi siihen?
DrawToImage map
DrawGhostImage light, 10, 10, 0, 50
DrawToScreen
Näin tehdessä kuvaan ei piirretä yhtään mitään (tai ainakaan itse ohjelmassa koordinaateissa 10, 10 ei näy mitään)
Re: Tyhmät kysymykset
Posted: Sat Jan 26, 2008 11:00 am
by koodaaja
Tokihan olet muistanut piirtää ruudun ja kuvan map? Lisäksi, jos kyseinen kuva on liian pieni, ei tuo light mahdu siihen.
Re: Tyhmät kysymykset
Posted: Sat Jan 26, 2008 11:07 am
by regalis
Kyllä, ruutu ja map piirretään. Ja light-kuva on paljon mapia pienempi. Vika taitaa sitten olla jossain muualla koodissa, pitää yrittää löytää se itse...