Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
Ilmuri
Developer
Developer
Posts: 277
Joined: Sun Aug 26, 2007 2:46 pm
Location: \o

Re: Tyhmät kysymykset (I/2011)

Post by Ilmuri »

Ihminen wrote:Miten olisi mahdollista tehdä "fps" peli cb:llä niinkuin mitä esim. Wolfenstein 3d(2.5d) oli?
Ja miten siis pääsisin alkuun jos haluaisin alkaa sellaista peliä tekemään?
Raycastingilla. Tätä on jo kokeiltu CB:llä, pelin nimi oli muistaakseni Shadow Squad. Tutoriaaleja aiheeseen on internet täynnä.
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

Ihminen wrote:Miten olisi mahdollista tehdä "fps" peli cb:llä niinkuin mitä esim. Wolfenstein 3d(2.5d) oli?
Ja miten siis pääsisin alkuun jos haluaisin alkaa sellaista peliä tekemään?
Suosittelen kuitenkin, että toistaiseksi pysyttelet vielä vähän hillitymmissä projekteissa. Sille on ihan hyä syykin olemassa, miksei Projektit-alue ole kolmiulotteisia pelejä pullollaan, vaikka esimerkiksi koodaaja on Efektit-ketjussa osoittanut, että kolmiulotteisuus onnistuu CoolBasicilla joten kuten.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset (I/2011)

Post by esa94 »

Onhan cbSDK:ssa ollut jo iät ja ajat monikulmioiden renderöintituki. Se vaan sattuu olemaan helvetin hidasta touhua.

Aavesoturin(ko) raycaster-moottori sen sijaan pyörii vallan mainiosti.
User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 9:01 pm

Re: Tyhmät kysymykset (I/2011)

Post by ukkeli »

Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:

Code: Select all

Type monster
Field obj
End Type 

Type enemy
Field obj
End Type 


A=LoadObject("media\cow.bmp", 320)
B=LoadObject("media\cow.bmp", 320)

Tyyppi=1
Tyyppi2=2

Repeat 

If KeyDown(cbkeya) Then 
tyyppi2=Rand(1,2)
hir2.enemy = New(enemy)

If tyyppi2=1 Then hir2\obj=CloneObject(A)
If tyyppi2=2 Then hir2\obj=CloneObject(B)
PositionObject hir2\obj,Rand(0,-250),Rand(0,-250)
End If

If KeyDown(cbkeys) Then 
hir.monster = New(monster)

If tyyppi=1 Then hir\obj=CloneObject(A)
If tyyppi=2 Then hir\obj=CloneObject(B)


PositionObject hir\obj,Rand(0,250),Rand(0,250)

End If 



For hir2.enemy = Each enemy
For hir.monster = Each monster
PointObject hir2\obj,hir\obj
MoveObject hir2\obj,5

Next hir
Next hir2

DrawScreen 
Forever 
Eli a ja s spawnaa objecteja.
...
Kumiankka
Member
Posts: 65
Joined: Wed May 18, 2011 5:17 pm
Location: Artjärvi

Re: Tyhmät kysymykset (I/2011)

Post by Kumiankka »

ukkeli wrote:Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:

Code: Select all

Koodia...[/quote]
Mitä tuossa olisi tarkoitus tapahtua? Olisi nimittäin helpompi auttaa jos tietäisi mitä koodin pitäisi tehdä...
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

ukkeli wrote:Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:
Et esittänyt mitään ongelmaa. Mutta tässä mahdolliset virheet:
1. Aina kun painat "s", luodaan samanlainen ukkeli kuin viimeksi "a":lla luotu.
2. Jos hir\obj-objekteja on enemmän kuin 1, kaikki hir2-objektit yrittävät päästä jokaisen luo, ja päätyvät näiden keskipisteeseen.

Lisäksi, jos tyypit enemy ja monster ovat vihollisille tarkoitettuja tyyppikokoelmia, voi saman asian hoitaa vain yhellä kokoelmalla, jossa on ylimääräinen kenttä joka kertoo minkälaisesta ukkelista on kyse.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Guest

Re: Tyhmät kysymykset (I/2011)

Post by Guest »

Code: Select all

FrameLimit 60
pongiskartta=LoadMap("CBProjektit\Media\pongiskartta.til","CBProjektit\Media\pongistausta.bmp")
PlayObject pongiskartta,0,0,1
pongauttajavasen =LoadObject("CBProjektit\Media\pongauttajavasen.png")
pongauttajaoikea =LoadObject("CBProjektit\Media\pongauttajaoikea.png")
PositionObject pongauttajavasen, -170,10
PositionObject pongauttajaoikea,170,10
MaskObject pongauttajaoikea,cbWhite
MaskObject pongauttajavasen,cbWhite
Repeat
If KeyDown(cbkeyW) Then MoveObject pongauttajavasen,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajavasen,0,3
If KeyDown(cbkeyW) Then MoveObject pongauttajaoikea,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajaoikea,0,3
DrawScreen
Forever
muutin asiat mitä mulle neuvottiin ja tarkistin että kaikki tarvittavat tiedostot ovat antamallani polulla mutta silti se ei viitsi avata karttaa. :?:
Ihminen
Newcomer
Posts: 34
Joined: Tue Jun 14, 2011 9:13 pm

Re: Tyhmät kysymykset (I/2011)

Post by Ihminen »

Jos teen laatikon piirto komennoilla, kuinka saisin "päällystettyä" laatikon kuvalla?
Saikohan tästä mitään selvää... :roll:
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Yksinkertainen vastaus on, että piirrä laatikkoon käyttäen apuna DrawImageBoxia.

Monimutkaisempi vastaus, jolla saat myös erimuotoisia kuvia päällystettyä:

Code: Select all

//Ladataan tausta
map = LoadImage( "media\map.bmp" )

//Tehdään template johon tausta maalataan
imgYmpyra = MakeImage( ImageWidth( map ), ImageHeight( map ) )
MaskImage imgYmpyra, cbMagenta //asetetaan maskiväri. Tärkeä!

//Piirretään templateen ympyrä maskivärillä.
DrawToImage imgYmpyra
    Color cbMagenta
    Circle 0, 0, ImageWidth( imgYmpyra )
DrawToScreen

//Luodaan lopullinen kuva
lopullinenKuva = MakeImage( ImageWidth( imgYmpyra ), ImageHeight( imgYmpyra ) )
DrawToImage lopullinenKuva
    DrawImage map, 0, 0 'ensin piirretään haluttu tausta
    //Sitten template. Kaikki templatessa ollut väri, joka on sama templaten
    //maskivärin kanssa (tässä magenta) on läpinäkyvää.
    DrawImage imgYmpyra, 0, 0 
DrawToScreen

DeleteImage imgYmpyra
DeleteImage map

Repeat
    //Lopputulos on neliön muotonen kuva, jossa on ympyrä-kartta keskellä.
    //Koska tämän kuvan maskiväri on musta, on kuva tavallaan ympyrän muotoinen.
    DrawImage lopullinenKuva, 0, 0
    DrawScreen
Forever
Edit.
Vai tarkoitatko tällaista päällystystä:

Code: Select all

kuva = MakeImage( ScreenWidth(), ScreenHeight() )
maalausKuva = LoadImage( "media\cow.bmp" )

cWidth = RoundUp( ImageWidth( kuva ) / ImageWidth( maalausKuva ) )
cHeight = RoundUp( ImageHeight( kuva ) / ImageHeight( maalausKuva ) ) 
DrawToImage kuva
    For x = 0 To cWidth
        For y = 0 To cHeight
            DrawImage maalausKuva, x * ImageWidth( maalausKuva ), y * ImageHeight( maalausKuva )
        Next y
    Next x
DrawToScreen


Repeat
    DrawImage kuva, 0, 0


    DrawScreen
Forever
Last edited by Jonez on Mon Aug 15, 2011 8:12 pm, edited 1 time in total.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

Jonez wrote:Monimutkaisempi vastaus, jolla saat myös erimuotoisia kuvia päällystettyä:
Ideahan on ihan oikein mutta jostain syystä minulla ei ainakaan näy kartasta palastakaan... vain pinkkiä ympyrää näkyy ja mustaa sen ympärillä
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
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 9:01 pm

Re: Tyhmät kysymykset (I/2011)

Post by ukkeli »

Jonez wrote:
ukkeli wrote:Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:
Et esittänyt mitään ongelmaa. Mutta tässä mahdolliset virheet:
1. Aina kun painat "s", luodaan samanlainen ukkeli kuin viimeksi "a":lla luotu.
2. Jos hir\obj-objekteja on enemmän kuin 1, kaikki hir2-objektit yrittävät päästä jokaisen luo, ja päätyvät näiden keskipisteeseen.

Lisäksi, jos tyypit enemy ja monster ovat vihollisille tarkoitettuja tyyppikokoelmia, voi saman asian hoitaa vain yhellä kokoelmalla, jossa on ylimääräinen kenttä joka kertoo minkälaisesta ukkelista on kyse.
Ei, vaan teen strategiapeliä. Monster tyypit olisi sinun vallassa, sekä ne muut vihollisia :D Ongelmana juuri tuo kakkonen.. Miten voisi tehdä koodinpätkän, jolla vihut hyökkää ensimmäisen näössä olevan sinun sotilaan luo? Tässä tarvittaisi tietysti myös näkö hahmoille, mutta en ehtinyt tehdä...
...
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Tee vastustajille kenttä "target", joka säilöö kohteen jäsenen muistiosoittajan (ConvertToInteger()). Kun käyt kaikki objektit läpi sisäkkäisissä silmukoissa, tarkasta onko kyseinen oma hahmo vihollisen kohde. Jos on, vihollinen kohdistaa (PointObject()) ja ampuu. Jos vihollisella ei ole kohdetta, se ottaa sellaisen kun pääsee tarpeeksi lähelle tai saa näköyhteyden.

Tässä koodi joka ei yksinään toimi:

Code: Select all

Type omat
    Field obj
EndType 

Type vastustajat
    Field obj
    Field target
EndType

For ienemy.vastustajat = Each vastustajat
    For iomat.omat = Each omat
        If Distance2( ienemy\obj, ioma\obj ) < haluttu_hyokkaysetaisyys And ienemy\target = 0 Then
            ienemy\target = ConvertToInteger( ioma )
        EndIf
        
        enemTarget.omat = ConvertToType( ienemy\target )
        If ioma = enemTarget Then
            PointObject ienemy\obj, iomat\obj
            Ammu()
        EndIf
        
    Next iomat
Next ivastustajat
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 9:01 pm

Re: Tyhmät kysymykset (I/2011)

Post by ukkeli »

Kiitos :D
...
User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku

Re: Tyhmät kysymykset (I/2011)

Post by Akuji »

Latasin etusivulta Wanhan CoolBasicin ja kun yritin suorittaa sen oppitunteja niin mitään ei tapahtunut. Siis ohjelma ei heitä ilmoitusta että edellinen ajo olisi käynnissä, vaan ainoastaan näyttää sekunnin ajan lataavan jotain, jonka jälkeen mitään ei tapahdu. Olen kokeillut suorittaa järjestelmänvalvojana ja erilaisilla yhteensopivuustiloissa mutta mikään ei auta. Mistä tämä voisi johtua? (Käyttis Win7)
User avatar
Laurenzo
Member
Posts: 85
Joined: Mon Apr 25, 2011 8:28 am
Location: Tampere
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Laurenzo »

Teen jääkiekkopeliä tosin vain rangaistuslaukauskilpailu.
Kuinka vuoronvaihdon pystyy tekemään järkevästi???????
tein paintobjectilla sen että pelaajan paita jne. muuttuu mutta ongelma onkin:
Kun kiekko osuu maaliin niin b=b+1 ja paintobject RUOTSIPELAAJA,SUOMIPELAAJA
ja nyt kun on suomalaisen vuoro ja kiekko menee maaliin niin tapahtuu:b=b+1
mutta koska nyt on suomen vuoro ja suomi saa maalin niin saa ruotsi pisteen.??
(kukakohan tajusi)
Aloittelija koodari joka
osaa jo jotain (ehkä) :)
KOTISIVU
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Code: Select all

if Maali() Then
    if ruotsipelaa then
        ruotsinpisteet + 1
    elseif suomipelaa then
        suomenpisteet + 1
    endif
Endif
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

Akuji wrote:Latasin etusivulta Wanhan CoolBasicin ja kun yritin suorittaa sen oppitunteja niin mitään ei tapahtunut. Siis ohjelma ei heitä ilmoitusta että edellinen ajo olisi käynnissä, vaan ainoastaan näyttää sekunnin ajan lataavan jotain, jonka jälkeen mitään ei tapahdu. Olen kokeillut suorittaa järjestelmänvalvojana ja erilaisilla yhteensopivuustiloissa mutta mikään ei auta. Mistä tämä voisi johtua? (Käyttis Win7)
Oletko koittanut asentaa CB:tä vaikkapa johonkin toiseen kansioon kuin Program Files? Oletko varma, ettei virustorjuntaohjelmistosi äksyile liikaa ja estä hiljaisesti CB:tä? F-Secure ainakin tuppasi jossain vaiheessa murahtelemaan CB:n kyvylle tehdä .exe-tiedostoja, mutta ei enää uusimmassa versiossa tuota tee.
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
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku

Re: Tyhmät kysymykset (I/2011)

Post by Akuji »

VesQ wrote:
Akuji wrote:Latasin etusivulta Wanhan CoolBasicin ja kun yritin suorittaa sen oppitunteja niin mitään ei tapahtunut. Siis ohjelma ei heitä ilmoitusta että edellinen ajo olisi käynnissä, vaan ainoastaan näyttää sekunnin ajan lataavan jotain, jonka jälkeen mitään ei tapahdu. Olen kokeillut suorittaa järjestelmänvalvojana ja erilaisilla yhteensopivuustiloissa mutta mikään ei auta. Mistä tämä voisi johtua? (Käyttis Win7)
Oletko koittanut asentaa CB:tä vaikkapa johonkin toiseen kansioon kuin Program Files? Oletko varma, ettei virustorjuntaohjelmistosi äksyile liikaa ja estä hiljaisesti CB:tä? F-Secure ainakin tuppasi jossain vaiheessa murahtelemaan CB:n kyvylle tehdä .exe-tiedostoja, mutta ei enää uusimmassa versiossa tuota tee.
Olen tehnyt CB:lle oman kansion ja virustorjuntaohjelmankaan ei pitäisi haitata CB:n toimintaa. Toinen CB-versio toimii minulla moitteettomasti, mutta tämä ladattu Wanha CB ei vain toimi. :|
Guest

Re: Tyhmät kysymykset (I/2011)

Post by Guest »

Code: Select all

FrameLimit 60
SCREEN 1200,1000,32,cbfullscreen
pongiskartta=LoadMap("pongiskartta.til","pongistausta.png")
PlayObject pongiskartta,0,0,1
pongauttajavasen =LoadObject("pongauttajavasen.png")
pongauttajaoikea =LoadObject("pongauttajaoikea.png")
PositionObject pongauttajavasen, -220,10
PositionObject pongauttajaoikea,220,10
MaskObject pongauttajaoikea,cbWhite
MaskObject pongauttajavasen,cbWhite
SetupCollision pongauttajavasen,pongiskartta,1,4,2
SetupCollision pongauttajaoikea,pongiskartta,1,4,2
Repeat
If KeyDown(cbkeyW) Then MoveObject pongauttajavasen,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajavasen,0,3
If KeyDown(cbkeyW) Then MoveObject pongauttajaoikea,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajaoikea,0,3
DrawScreen
Forever
viime kysymyksestä olen saanut kartan toimimaan mutta nyt kun alan laittaa peliä fullscreenille niin cb heittää ilmoituksen "unable to set graphics mode". tietääkö kukaan miksi?
User avatar
skinkken
Advanced Member
Posts: 453
Joined: Sat Sep 01, 2007 4:00 pm
Location: Helsinki

Re: Tyhmät kysymykset (I/2011)

Post by skinkken »

Guest wrote:

Code: Select all

FrameLimit 60
SCREEN 1200,1000,32,cbfullscreen
pongiskartta=LoadMap("pongiskartta.til","pongistausta.png")
PlayObject pongiskartta,0,0,1
pongauttajavasen =LoadObject("pongauttajavasen.png")
pongauttajaoikea =LoadObject("pongauttajaoikea.png")
PositionObject pongauttajavasen, -220,10
PositionObject pongauttajaoikea,220,10
MaskObject pongauttajaoikea,cbWhite
MaskObject pongauttajavasen,cbWhite
SetupCollision pongauttajavasen,pongiskartta,1,4,2
SetupCollision pongauttajaoikea,pongiskartta,1,4,2
Repeat
If KeyDown(cbkeyW) Then MoveObject pongauttajavasen,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajavasen,0,3
If KeyDown(cbkeyW) Then MoveObject pongauttajaoikea,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajaoikea,0,3
DrawScreen
Forever
viime kysymyksestä olen saanut kartan toimimaan mutta nyt kun alan laittaa peliä fullscreenille niin cb heittää ilmoituksen "unable to set graphics mode". tietääkö kukaan miksi?
Windowediin voi laittaa minkä tahansa näyttökoon mutta fullscreenissa toimii vain ne tietyt, (joita näytönohjain/näyttö supporttaa tai jotain sinne päin) eli 640x480, 800x600, 1280x960, 1600x1200 jne. Wikipediassa tais lukea ne kaikki.
Valmiit pelit: House of Horrors , Battle Zone , Über Ball , Itdoti , Space Chaos , Bloxxplosives
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013
Locked