Tyhmät kysymykset (I/2009)
Re: Tyhmät kysymykset
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?
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: Tyhmät kysymykset
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.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?
Re: Tyhmät kysymykset
Funktiorajoitus on kyllä kiusallisen pieni mutta eipä pelin runko montakaan funkkaria vaadi. Goto ja Gosubit kannattaa unohtaa heti alkuunsa.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.
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
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
-
- Newcomer
- Posts: 6
- Joined: Thu Dec 20, 2007 3:49 pm
Re: Tyhmät kysymykset
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.
miten saa räiskintäpeliin luotua heltit type vihulle? vastaus esimerkin kanssa, kiitos.
-
- Active Member
- Posts: 133
- Joined: Mon Aug 27, 2007 8:13 pm
Re: Tyhmät kysymykset
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ä...
http://www.coolbasic.com/oldforums/inde ... type++tuto
Siinä on ainakin yksi type tuto. Taisi olla muutamia muitakin jossain netin kätköissä...
Kyllä minä osaan, mutta kun mieli on tällasen kaaoksen vallassa, niin ei siitä mitään tule.
Re: Tyhmät kysymykset
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ä.
Code: Select all
If ObjectVision (vihu, pelaaja, 90, 500) Then
MoveObject vihu, 2.5
//Tähän tulee ampuminen
EndIf
E: Eli vihu ei liiku, vaikka ukko 'pomppisi' sen edessä.
Re: Tyhmät kysymykset
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.
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
Kun luot tyypin näin...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.
Code: Select all
Type vihut
Field obj
EndType
Näin:
Code: Select all
Type vihut
Field obj
Field enu
EndType
Code: Select all
vihu\enu=5
CoolBasic henkilökuntaa
Graafikko
Graafikko
Re: Tyhmät kysymykset
Kiitos. Tuo sinun funkkarisi toimi vallan mainiostiJonez 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
-
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 3:53 pm
- Location: Suomi, Finland
- Contact:
Re: Tyhmät kysymykset
outoa sillä kyllä se minun pelissäni toimii...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?Code: Select all
koodia...
E: Eli vihu ei liiku, vaikka ukko 'pomppisi' sen edessä.
Re: Tyhmät kysymykset
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
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ä.Guest wrote:Miten saan estettyä kameraa menemästä tiettyjen maailmankoordinaattien ulkopuolelle? (Esim niin, että kameran X-koordinaatit olisivat aina väliltä -500,500)
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Re: Tyhmät kysymykset
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ä.
eli siinä lukee: What is your name? Ja alemmas voi kirjoittaa, sitten se pitäisi tallentaa.
Vaikka enteristä.
Every Legend Has A Start!
Re: Tyhmät kysymykset
Tuossa on hieman koodia jota olen yrittänyt laittaa, nimi kyllä näkyy,
vilahtaa vain tosin. :S
EDIT: Anteeksi tuplaposti en huomannut.. Olen vähän väsynyt ehkä pitäisi mennä nukkumaan. ^^
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
Every Legend Has A Start!
Re: Tyhmät kysymykset
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
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Re: Tyhmät kysymykset
Onko mahdollista piirtää DrawGhostImagella johonkin kuvaan, niin että se jäisi siihen?
Näin tehdessä kuvaan ei piirretä yhtään mitään (tai ainakaan itse ohjelmassa koordinaateissa 10, 10 ei näy mitään)DrawToImage map
DrawGhostImage light, 10, 10, 0, 50
DrawToScreen
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Tyhmät kysymykset
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
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...