Tyhmät kysymykset (I/2010)
Re: Tyhmät kysymykset (I/2010)
Re: Tyhmät kysymykset (I/2010)
Tarkoituksena tehdä peli jossa puolustetaan tiettyä aluetta pelissä (siis pelin alareunaa) jonne botit ovat matkalla.
Eli pähkinän kuoressa peli menee näin: "kourallinen" botteja tulee alapäin pelissä ja pelaaja yrittää ampua (tuhota) ne ennen kuin ne pääsevät alas (koskevat alareunassa olevaa pelaajaan tai menevät sen ohi (jolloin peli loppuu)) kun pelaaja on saanut botit ammuttua, niitä tulee lisää.
Kiitos jo etukäteen!
Re: Tyhmät kysymykset (I/2010)
Näin:Peltsi wrote:Taas näitä jokapaikan (ja jokapojan) bottikysymyksiä... Miten saa tehtyä yksinkertaisia, ylhäältä alas liikkuvan botteja (objekteja)?
Tarkoituksena tehdä peli jossa puolustetaan tiettyä aluetta pelissä (siis pelin alareunaa) jonne botit ovat matkalla.
Eli pähkinän kuoressa peli menee näin: "kourallinen" botteja tulee alapäin pelissä ja pelaaja yrittää ampua (tuhota) ne ennen kuin ne pääsevät alas (koskevat alareunassa olevaa pelaajaan tai menevät sen ohi (jolloin peli loppuu)) kun pelaaja on saanut botit ammuttua, niitä tulee lisää.
Kiitos jo etukäteen!
Code: Select all
Repeat
TranslateObject botti, 0, -1
Forever
Re: Tyhmät kysymykset (I/2010)
Olettekos kokeilleet ajaa CB:tä järjestelmänvalvojana?timpe99 wrote:Mun kaverilla on cb mutta kun yrittää ajaa ohjelman niin tulee "The program could not be run because the previous run is still active. Please close the previous program and try again." vaikka edellinen ohjelma on sammutettu. Sama juttu jos yrittää tehdä exeä. On kokeiltu tehtävienhallinnasta mutta ei sielläkään näy että edellinen ohjelma olisi auki.
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Tyhmät kysymykset (I/2010)
Juu, kiitoksia, koitan sisäistää asian!Chaosworm wrote:Näin:Peltsi wrote:Taas näitä jokapaikan (ja jokapojan) bottikysymyksiä... Miten saa tehtyä yksinkertaisia, ylhäältä alas liikkuvan botteja (objekteja)?
Tarkoituksena tehdä peli jossa puolustetaan tiettyä aluetta pelissä (siis pelin alareunaa) jonne botit ovat matkalla.
Eli pähkinän kuoressa peli menee näin: "kourallinen" botteja tulee alapäin pelissä ja pelaaja yrittää ampua (tuhota) ne ennen kuin ne pääsevät alas (koskevat alareunassa olevaa pelaajaan tai menevät sen ohi (jolloin peli loppuu)) kun pelaaja on saanut botit ammuttua, niitä tulee lisää.
Kiitos jo etukäteen!
Sovella tuota koodia tyyppikokoelmiin niin tulee hyvät botit.Code: Select all
Repeat TranslateObject botti, 0, -1 Forever
Re: Tyhmät kysymykset (I/2010)
Code: Select all
Type AMMO
Field obj
EndType
map = LoadMap("media/testmap.til","media/tileset.bmp")
bot = LoadObject("media/soldier.bmp", 360)
luoti = LoadObject("media/bullet.bmp")
ukko = LoadObject("media/soldier.bmp", 360)
kursori = LoadObject("media/crosshair.bmp")
SetupCollision bot, map, 1, 4, 2
SetupCollision ukko, map, 1, 4, 2
ShowObject luoti, OFF
Repeat
If MouseDown(1) And reload=0 Then
a.AMMO = New(AMMO)
a\obj = CloneObject(luoti)
CloneObjectPosition a\obj, ukko
CloneObjectOrientation a\obj, ukko
reload = 15
EndIf
If reload>0 Then reload-1
For a.AMMO = Each AMMO
SetupCollision a\obj, map, 1, 4, 2
collisioon = CountCollisions(a\obj)
If collisioon Then deleteobject a\obj: Delete a
MoveObject a\obj, 5
Next a
PointObject ukko,kursori
PositionObject kursori, MouseWX(), MouseWY()
MoveObject bot, 3
collision = CountCollisions(bot)
If KeyDown(17) Then TranslateObject ukko, 0, 3
If KeyDown(30) Then TranslateObject ukko, -3, 0
If KeyDown(31) Then TranslateObject ukko, 0, -3
If KeyDown(32) Then TranslateObject ukko, 3, 0
CloneCameraPosition ukko
If collision Then TurnObject bot, Rand(-25,25)
DrawScreen
Forever
- TheDuck
- Devoted Member
- Posts: 632
- Joined: Sun Aug 26, 2007 3:51 pm
- Location: C:\Program Files\Tuusula\
Re: Tyhmät kysymykset (I/2010)
Ongelmakohtasi on tässä:Ilkka wrote:Miksi tulee mav kun luoti osuu seinään ja miten sen voi korjata?Jos ottaa koodin pätkästä pätkän DeleteObject a\obj pois, niin se toimii muuten mutta luodit eivät poistuCode: Select all
koodia
Code: Select all
For a.AMMO = Each AMMO
SetupCollision a\obj, map, 1, 4, 2
collisioon = CountCollisions(a\obj)
If collisioon Then deleteobject a\obj: Delete a
MoveObject a\obj, 5
Next a
Re: Tyhmät kysymykset (I/2010)
Minulla on pelissä kartta, joka on kuva ja nimellä Terrain, ja sitten on objekteja jotka sijaitsevat kaikki ruudulla(kameraa en liikuttele missään vaiheessa). Nyt haluaisin, että tietty objekti (iObj) muuttuisi osaksi karttaa, niin että se piirrettäisiin pysyvästi Terrain kuvaan ja sen jälkeen piilotettaisiin/poistettaisiin. Mikä seuraavassa koodissa on siis vikana?
Code: Select all
DrawToImage Terrain
TranslateCamera ScreenW, ScreenH
TranslateObject iObj, ScreenW, ScreenH
DrawGame
TranslateCamera -ScreenW, -ScreenH
TranslateObject iObj, -ScreenW, -ScreenH
DrawToScreen
ShowObject iObj, OFF
Niin ja ruudun koko siis on ScreenW, ScreenH ja se kuva on ruudun kokoinen
Re: Tyhmät kysymykset (I/2010)
Code: Select all
mappi = MakeImage( ScreenWidth(), ScreenHeight() )
ukko = LoadObject( "media\guy.bmp" )
ShowObject ukko, OFF
Repeat
TranslateCamera ( RightKey() - LeftKey() ) * 3, ( DownKey() - UpKey() ) * 3
If MouseDown( 1 ) Then
PositionObject ukko, MouseX() + CameraX(), -MouseY() - CameraY()
DrawToImage mappi
ShowObject ukko, ON
DrawGame
ShowObject ukko, OFF
DrawToScreen
EndIf
DrawImage mappi, -CameraX(), -CameraY()
Box -CameraX(), -CameraY(), ScreenWidth(), ScreenHeight(), 0
Text 20, 20, "Nuolet liikuttaa kameraa"
Text 20, 40, "Hiiri1 piirtää."
DrawScreen
Forever
Re: Tyhmät kysymykset (I/2010)
Muokkasin esimerkkiäsi vastaamaan enemmän tilannettani:
Code: Select all
mappi = MakeImage( ScreenWidth(), ScreenHeight() )
ukko = LoadObject( "media\guy.bmp" )
PositionCamera 200, -150
Repeat
TranslateCamera (RightKey() - LeftKey()) * 3, (UpKey() - DownKey()) * 3
TranslateObject ukko, KeyDown(cbkeyd) - KeyDown(cbkeyA), KeyDown(cbkeyw) - KeyDown(cbkeys)
If MouseDown( 1 ) Then
DrawToImage mappi
DrawGame
DrawToScreen
EndIf
DrawImage mappi, 0, 0
Box 0, 0, ScreenWidth(), ScreenHeight(), 0
DrawScreen
Forever
Erikoisinta tässä on se, että tuo toimii - kun kamera on oletussijainnissaan niin ukko piirtyy kuvassa siihen missä se on ruudullakin. Sama kun ei vain toimi pelissäni :O
ÄÄÄÄHHHHHHH!!!! Tässä oli kyllä niin suuri moka ettei paremmasta väliä
Huomasin nyt vasta, että minulla on tuon kuvaan piirron hetkellä tuo kuva lukittuna ja sen takia se ei suostunut piirtämään. Alkuperäinen koodini toimii 100% täydellisesti kun otti lukituksen pois. Mutta tuo kameran siirtohomma kyllä on aika erikoinen, tuossa esimerkissä kameran siirtäminen ei tunnu vaikuttavan mitenkään siihen, minne se objekti siinä kuvassa menee, mutta pelissäni se vaikuttaa... kummallista
Kiitos kuitenkin nopeasta vastauksesta
-
- Active Member
- Posts: 106
- Joined: Wed Jul 30, 2008 5:04 pm
Re: Tyhmät kysymykset (I/2010)
Code: Select all
MakeError "Cos(90) = "+Cos(90)+""
Re: Tyhmät kysymykset (I/2010)
Cos 90 = 0, jos lasketaan asteilla.. Radiaaneissa tulos on toki eri, mutta CB laskee asteissa eikä radiaaneissa.Someday coder wrote:En nyt tiedä tyhmästä, mutta sen verran pieni on että tänne:
Cos(90) on eri suuri kuin 0, eikö coolbasicin funktiot ole kunnollisia vai missä vika?Code: Select all
MakeError "Cos(90) = "+Cos(90)+""
http://www.wolframalpha.com/input/?i=co ... degree+%29
-
- Active Member
- Posts: 106
- Joined: Wed Jul 30, 2008 5:04 pm
Re: Tyhmät kysymykset (I/2010)
Siis kun tuon koodin iskee coolbasicciin, niin se ei anna nollaa. Tutkiskelin vähän miten sen saa laskettua ja luulen, että cosinia laskettaessa kun coolbasicin pitää muuntaa asteet radiaaneiksi ja muunnos ei ole täydellinen (koska piistä käytetään aika epätarkkaa arvoa ja muunnoksen lopputulos radiaaneinakin on aika epätarkka), eli cosini funktio palauttaa arvon vain lähellä nollaa.vast wrote:Cos 90 = 0, jos lasketaan asteilla.. Radiaaneissa tulos on toki eri, mutta CB laskee asteissa eikä radiaaneissa.Someday coder wrote:En nyt tiedä tyhmästä, mutta sen verran pieni on että tänne:
Cos(90) on eri suuri kuin 0, eikö coolbasicin funktiot ole kunnollisia vai missä vika?Code: Select all
MakeError "Cos(90) = "+Cos(90)+""
http://www.wolframalpha.com/input/?i=co ... degree+%29
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Tyhmät kysymykset (I/2010)
On myös muistettava, että 10^-8 -kerroin tarkoittaa melkoisen pientä lukua - CB:n mukaanhan Cos(90) on -0,000000043114 mikä on melkein missä tahansa tarkoituksessa riitävä tarkkuus.
Re: Tyhmät kysymykset (I/2010)
En tiedä käytetäänkö sitä, mutta ainakin yksi tekniikka on interpoloida muutamasta tunnetusta arvosta koko funktio.koodaaja wrote:En tiedä miten nykykoneissa trigonometriset funktiot lasketaan, mutta ainakin se onnistuu tiettyä iteratiivista kaavaa käyttäen (toteutin tämän aikanaan laskimella, kaavaa en kyllä muista) ja sen tarkkuus riippuu iteraatioiden määrästä, ja niitähän ei voi liikaa lisätä ettei ohjelman suoritus hidastu.
Re: Tyhmät kysymykset (I/2010)
Code: Select all
Type AMMUS
Field obj
End Type
Type BOTTI
Field lol
End Type
FrameLimit 40
space = MakeObjectFloor ()
avaruus = LoadImage ("Media\avaruus.jpg")
PaintObject space, avaruus
botti = LoadObject("Media\botti.bmp")
ukko = LoadObject("Media\soldier.bmp",72)
pati = LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
Repeat
If LeftKey() Then TurnObject ukko,5
If RightKey() Then TurnObject ukko,-5
PositionObject ukko,0,-130
If KeyDown(cbKeyLControl) And reload=0 Then
bot.BOTTI = New(BOTTI)
bot\lol=CloneObject(botti)
TranslateObject botti, 0, -3
reload=2
EndIf
If reload>0 Then reload=reload-1
For bot.BOTTI = Each BOTTI
MoveObject bot\lol,6
If ObjectX(bot\lol)<-180 Or ObjectX(bot\lol)>180 Or ObjectY(bot\lol)<-130 Or ObjectY(bot\lol)>130 Then
End
Delete bot
EndIf
Next bot
If KeyDown(cbKeyLControl) And reload=0 Then
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukko
CloneObjectOrientation luoti\obj,ukko
reload=5
EndIf
If reload>0 Then reload=reload-1
For luoti.AMMUS = Each AMMUS
MoveObject luoti\obj,6
If ObjectX(luoti\obj)<-180 Or ObjectX(luoti\obj)>180 Or ObjectY(luoti\obj)<-130 Or ObjectY(luoti\obj)>130 Then
DeleteObject luoti\obj 'poista objekti
Delete luoti
EndIf
Next luoti
DrawScreen
Forever
Re: Tyhmät kysymykset (I/2010)
tuossa luultavasti pitäisi lukea bot\lol, jos et sitten ole tarkoittanut että tuon Botti-objectin pitäisi liikkua, ja toiseksi käytät ampumisessa ja bottien spawnaamisessa samaa reload muuttujaa, joka ei ole kovinkaan järkevää jos multa kysytään. (muuten, tämähän on suoraan kopioitu ammukset 2 esimerkistä suurimmaksi osaksi? en suosittele copy-pastaamaan koodia suoraan, opit koodaamaan paremmin jos opettelet kaikkien komentojen merkityksen esimerkeissä.)Peltsi wrote:Code: Select all
TranslateObject botti, 0, -3
Re: Tyhmät kysymykset (I/2010)
Re: Tyhmät kysymykset (I/2010)
Code: Select all
x = ScreenWidth() / 2 - 5
y = ScreenHeight() / 2 - 5
Repeat
If UpKey() Then y - 1
If DownKey() Then y + 1
If LeftKey() Then x - 1
If RightKey() Then x + 1
Circle x,y,20
If KeyHit(31) Then SAVE()
If KeyHit(38) Then LOAD()
Text 10,10,"Tallenna: S"
Text 10,30,"Lataa: L"
Text 300,10,"X:"+x
Text 300,30,"Y:"+y
DrawScreen
Forever
Function SAVE()
savegame = OpenToWrite("SAVE.dat")
WriteInt savegame, x
WriteInt savegame, y
CloseFile savegame
EndFunction
Function LOAD()
loadgame = OpenToRead("SAVE.dat")
x = ReadInt(loadgame)
y = ReadInt(loadgame)
CloseFile loadgame
EndFunction