Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

Windows Vista? Aja CB tai pelin .exe järjestelmänvalvojana.
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

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! :)
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

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! :)
Näin:

Code: Select all

Repeat
    TranslateObject botti, 0, -1
Forever
Sovella tuota koodia tyyppikokoelmiin niin tulee hyvät botit.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion »

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. :?:
Olettekos kokeilleet ajaa CB:tä järjestelmänvalvojana?
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

Chaosworm wrote:
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! :)
Näin:

Code: Select all

Repeat
    TranslateObject botti, 0, -1
Forever
Sovella tuota koodia tyyppikokoelmiin niin tulee hyvät botit.
Juu, kiitoksia, koitan sisäistää asian! :D
Last edited by Peltsi on Sun Oct 03, 2010 7:30 pm, edited 1 time in total.
User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Tyhmät kysymykset (I/2010)

Post by Ilkka »

Miksi tulee mav kun luoti osuu seinään ja miten sen voi korjata?

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 
Jos ottaa koodin pätkästä pätkän DeleteObject a\obj pois, niin se toimii muuten mutta luodit eivät poistu :lol:
Image
User avatar
TheDuck
Devoted Member
Posts: 632
Joined: Sun Aug 26, 2007 3:51 pm
Location: C:\Program Files\Tuusula\

Re: Tyhmät kysymykset (I/2010)

Post by TheDuck »

Ilkka wrote:Miksi tulee mav kun luoti osuu seinään ja miten sen voi korjata?

Code: Select all

koodia 
Jos ottaa koodin pätkästä pätkän DeleteObject a\obj pois, niin se toimii muuten mutta luodit eivät poistu :lol:
Ongelmakohtasi on tässä:

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
Poistat eka luodin ja sen jälkeen yrität liikuttaa sitä, joka aiheuttaa mavin. Kokeile vaikka siirtää moveobject ennen collisionia, ja tämän jälkee jos vielä mavaa, tarkista loopin alussa onko luoti enää elossa ja jos ei ole, älä käsittele sitä.
^^
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by axu »

Tulipas outo ongelma :?
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
Eikös sen noin pitäisi onnistua, ainakin muistelisin jonkun käyttäneen DrawGamea objektien piirtämiseksi kuvaan...
Niin ja ruudun koko siis on ScreenW, ScreenH ja se kuva on ruudun kokoinen :)
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez »

No periaate on oikea, mutta koordinaatit menevät jotenkin väärin. Koska en jaksanut miettiä miten ne sinulla ovat väärin, muuten kuin että pelimaailman koordinaattien ja ruutukoordinaattien välisessä säädössä täytyy aina muistaa flipata y-akseli, väsäsin esimerkin aiheesta. Nyt kun on peruslauantai, niin ei ole oikein energiaa selitellä koodia enempää.

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
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by axu »

Enpäs oikeastaan saanut paljon esimerkistäsi irti (miksi muuten piirrät esimerkissäsi tuon kuvan noin erikoiseen paikkaan?) :( . Ainoa havainto, jonka tein oli se, että kameran koordinaatit eivät vaikuta mitenkään tuohon piirtoon(ks. esimerkki).
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
Eli siis omassa pelissäni kameran sijainti on ScreenW/2, -ScreenH/2 eli tässä tapauksessa 200, -150 (jotta ruutu- ja maailmakoordinaatit ovat helposti vaihdettavissa - vain y-arvon peilauksen päässä!) ja kuva piirretään aina ruudun keskelle.
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
EDIT:

ÄÄÄÄHHHHHHH!!!! Tässä oli kyllä niin suuri moka ettei paremmasta väliä :D
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 :mrgreen:
Kiitos kuitenkin nopeasta vastauksesta ;)

Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Someday coder
Active Member
Posts: 106
Joined: Wed Jul 30, 2008 5:04 pm

Re: Tyhmät kysymykset (I/2010)

Post by Someday coder »

En nyt tiedä tyhmästä, mutta sen verran pieni on että tänne:

Code: Select all

MakeError "Cos(90) = "+Cos(90)+""
Cos(90) on eri suuri kuin 0, eikö coolbasicin funktiot ole kunnollisia vai missä vika?
vast

Re: Tyhmät kysymykset (I/2010)

Post by vast »

Someday coder wrote:En nyt tiedä tyhmästä, mutta sen verran pieni on että tänne:

Code: Select all

MakeError "Cos(90) = "+Cos(90)+""
Cos(90) on eri suuri kuin 0, eikö coolbasicin funktiot ole kunnollisia vai missä vika?
Cos 90 = 0, jos lasketaan asteilla.. Radiaaneissa tulos on toki eri, mutta CB laskee asteissa eikä radiaaneissa.

http://www.wolframalpha.com/input/?i=co ... degree+%29
Someday coder
Active Member
Posts: 106
Joined: Wed Jul 30, 2008 5:04 pm

Re: Tyhmät kysymykset (I/2010)

Post by Someday coder »

vast wrote:
Someday coder wrote:En nyt tiedä tyhmästä, mutta sen verran pieni on että tänne:

Code: Select all

MakeError "Cos(90) = "+Cos(90)+""
Cos(90) on eri suuri kuin 0, eikö coolbasicin funktiot ole kunnollisia vai missä vika?
Cos 90 = 0, jos lasketaan asteilla.. Radiaaneissa tulos on toki eri, mutta CB laskee asteissa eikä radiaaneissa.

http://www.wolframalpha.com/input/?i=co ... degree+%29
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.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja »

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.

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.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset (I/2010)

Post by esa94 »

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.
En tiedä käytetäänkö sitä, mutta ainakin yksi tekniikka on interpoloida muutamasta tunnetusta arvosta koko funktio.
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

Kokeilin tehdä botteja ohjeen avulla mutta sähläsin jotain... Näkyykö virheitä (siis tottakai niitä on) ? Jos virheitä näkyy, niin voitteko ehdottaa ratkaisua? :) Kiitos

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
User avatar
Frozen
Advanced Member
Posts: 282
Joined: Fri Jan 01, 2010 4:46 pm
Location: Suomi

Re: Tyhmät kysymykset (I/2010)

Post by Frozen »

Hiukan vaikea sanoa onko tuossa mikä vialla, kun et sano mitä tuossa pitäisi olla, mutta
Peltsi wrote:

Code: Select all

TranslateObject botti, 0, -3
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ä.)
Image
Työn alla:
Jotakin epäjulkaistua
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

Ongelmaa on myös siinä, että spawnaat botteja ainoastaan silloin kun painat vasempaa controllia ja siinä, että vähennät reload-muuttujaa kahdesti loopissa, jolloin on mahdollista ettei se olekaan 0 vaan -1.
User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Tyhmät kysymykset (I/2010)

Post by Ilkka »

Koitin tehdä yksinkertaista tallennusjärjestelmää ja tuli pieni ongelma. Kun painaa S ohjelman pitäisi tallentaa tiedostoon SAVE.dat muuttujat x ja y. Miksi ohjelma tekee tiedoston, mutta ei tallenna tiedostoon yhtään mitään? Miten tämän voisi korjata?

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 
Image
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

Et ole asettanut muuttujia x ja y globaaleiksi etkä anna niitä funktiolle parametreinä.
Locked