Turhanpäiväinen vekotin, mutta loistavia funktioita.

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Turhanpäiväinen vekotin, mutta loistavia funktioita.

Post by MaGetzUb »

Juu eli tällainen tuli tässä joululoman aikana ohjelmoitua. Välilyönnistä ampuu media soldiereita. Ja nuolista liikuttaa alusta, jossa on Media car:eja. x)

Code: Select all

Type Bullets
    Field Bullet_X As Float 
    Field Bullet_Y As Float 
    Field Bullet_Z As Float 
    Field Bullet_Oldz As Float 
EndType 


SCREEN 800,600
Dim Stars(512,2) As Float 



For i = 0 To 128
    Stars(i,0) = Rand(-ScreenWidth(),ScreenWidth())
    Stars(i,1) = Rand(-ScreenHeight(),ScreenHeight())
    Stars(i,2) = Rand(-500,0)
Next i
bullet = LoadImage("Media\Bullet.BMP")
guy = LoadImage("Media\Soldier.BMP")
auto = LoadImage("Media\Car.BMP")
z# = 5
Repeat

For i = 0 To 128
    oldx# = Stars(i,0)
    oldy# = Stars(i,1)
    oldz# = Stars(i,2)
    Color 255,255,255
    If Stars(i,2) > 0 Then syvyys =  -500 : oldz = syvyys : Stars(i,2) = syvyys 
    Stars(i,2) = Stars(i,2) + z# 
    DrawImageScaled3D(bullet,Stars(i,0),Stars(i,1),Stars(i,2),2,2)
Next i



x = x + RightKey() - LeftKey()
y = y + UpKey() - DownKey()

If KeyDown(57) And reload = 0 Then 
    PlaySound "Media\Blaster.Wav",100
    reload = 5
    shooted = shooted + 1
    Bull.Bullets = New(Bullets)    
    If (shooted Mod 2) = True Then 
        Bull\Bullet_X = x - 10
    Else 
        Bull\Bullet_X = x + 10
    EndIf 
    Bull\Bullet_Y = y
    Bull\Bullet_Z = - 10
    Bull\Bullet_OldZ = - 10
EndIf 

If reload Then reload - 1

For Bull.Bullets = Each Bullets
    Color cbred
    

    tmp# = Bull\Bullet_Z
    'Line3D(Bull\Bullet_X,Bull\Bullet_Y,Bull\Bullet_Oldz ,Bull\Bullet_X,Bull\Bullet_Y,Bull\Bullet_Z)
    DrawImageLine3D(guy,Bull\Bullet_X,Bull\Bullet_Y,Bull\Bullet_Oldz ,Bull\Bullet_X,Bull\Bullet_Y,Bull\Bullet_Z)
    Bull\Bullet_Oldz = tmp
    'DrawImageScaled3D(bullet,Bull\Bullet_X,Bull\Bullet_Y,Bull\Bullet_Z,5,5)
    'Ellipse3D(Bull\Bullet_X,Bull\Bullet_Y,Bull\Bullet_Z,5,5,True)
    Bull\Bullet_Z = Bull\Bullet_Z - 10
    If Bull\Bullet_Z < - 2000 Then 
        Delete Bull
    EndIf 
Next Bull

Color 255,255,255
Remstart
Line3D(x,y,-10,x-10,y,-10)
Line3D(x,y,-10,x+10,y,-10)

Line3D(x,y,-10,x,y-5,-10)
Line3D(x,y,-10,x,y+5,-10)

Line3D(x,y,-10,x,y,-20)

Line3D(x-10,y,-10,x,y,-20)
Line3D(x+10,y,-10,x,y,-20)

Line3D(x,y-5,-10,x,y,-20)
Line3D(x,y+5,-10,x,y,-20)

Line3D(x-10,y,-10,x,y+5,-10)
Line3D(x-10,y,-10,x,y-5,-10)

Line3D(x+10,y,-10,x,y+5,-10)
Line3D(x+10,y,-10,x,y-5,-10)
Remend


DrawImageLine3D(auto,x,y,-10,x-10,y,-10,5)
DrawImageLine3D(auto,x,y,-10,x+10,y,-10,5)

DrawImageLine3D(auto,x,y,-10,x,y-5,-10,5)
DrawImageLine3D(auto,x,y,-10,x,y+5,-10,5)

DrawImageLine3D(auto,x,y,-10,x,y,-20,5)

DrawImageLine3D(auto,x-10,y,-10,x,y,-20,5)
DrawImageLine3D(auto,x+10,y,-10,x,y,-20,5)

DrawImageLine3D(auto,x,y-5,-10,x,y,-20,5)
DrawImageLine3D(auto,x,y+5,-10,x,y,-20,5)

DrawImageLine3D(auto,x-10,y,-10,x,y+5,-10,5)
DrawImageLine3D(auto,x-10,y,-10,x,y-5,-10,5)

DrawImageLine3D(auto,x+10,y,-10,x,y+5,-10,5)
DrawImageLine3D(auto,x+10,y,-10,x,y-5,-10,5)

Text 0,0,FPS()

DrawScreen Not KeyDown(28),True
Forever



Function Ellipse3D(x#,y#,z#,w#,h#,filled=0)
    If z# => 0 Then Return 0
    xz# = X3D(x#,z#)
    yz# = Y3D(y#,z#)
    xz2# = X3D(x#+w#,z#)
    yz2# = Y3D(y#+h#,z#)
    Ellipse xz - Distance(xz#,0,xz2#,0) / 2, yz - Distance(0,yz#,0,yz2) / 2, Distance(xz#,0,xz2#,0), Distance(0,yz#,0,yz2),filled
EndFunction 

Function Box3D(x#,y#,z#,w#,h#,filled=0)
    If z# => 0 Then Return 0
    xz# = X3D(x#,z#)
    yz# = Y3D(y#,z#)
    xz2# = X3D(x#+w#,z#)
    yz2# = Y3D(y#+h#,z#)
    Box xz - Distance(xz#,0,xz2#,0) / 2, yz - Distance(0,yz#,0,yz2) / 2, Distance(xz#,0,xz2#,0), Distance(0,yz#,0,yz2),filled
EndFunction 

Function Line3D(x#,y#,z#,x2#,y2#,z2#)
    Line X3D(x#,z#),Y3D(y#,z#),X3D(x2#,z2#),Y3D(y2#,z2#)
EndFunction 

Function X3D(x#,z#)
    sz# = 1 / z#
    Return ScreenWidth() / 2 - x# * sz * 100
EndFunction 

Function Y3D(y#,z#)
    sz# = 1 / z#
    Return ScreenHeight() / 2 + y# * sz * 100
EndFunction 

Function DrawImageLine3D(img,x#,y#,z#,x2#,y2#,z2#,h=0)
    DrawImageLine(img,X3D(x#,z#),Y3D(y#,z#),X3D(x2#,z2#),Y3D(y2#,z2#),h)
EndFunction 

Function DrawImageScaled3D(img,x#,y#,z#,w#,h#)
    If z# => 0 Then Return 0
    xz# = X3D(x#,z#)
    yz# = Y3D(y#,z#)
    xz2# = X3D(x#+w#,z#)
    yz2# = Y3D(y#+h#,z#)
    DrawImageScaled(img,xz - Distance(xz#,0,xz2#,0) / 2, yz - Distance(0,yz#,0,yz2) / 2, Distance(xz#,0,xz2#,0), Distance(0,yz#,0,yz2))
EndFunction 

Function DrawImageLine(img,x,y,x2,y2,h=0)
    a# = GetAngle(x,y,x2,y2)
    d# = Distance(x,y,x2,y2)
    If h = 0 Then
        tmp = DSG_ScaleImage(img,Int(d),ImageHeight(img))
    Else
        tmp = DSG_ScaleImage(img,Int(d),h)    
    EndIf 
    If tmp<>0 Then 
        RotateImage tmp,-Int(a#)
        DrawImage tmp,x+Cos(a)*d/2,y-Sin(a)*d/2
        DeleteImage tmp    
    EndIf
    Return 0
EndFunction 

Function DrawImageScaled(img,x,y,w,h)
    tmp = DSG_ScaleImage(img,w,h)
    If tmp <> 0 Then 
        DrawImage tmp,x,y
        DeleteImage tmp
    EndIf 
    Return 0
EndFunction 


Function DSG_ScaleImage(img,w,h) ' Made by DSG, alkuperäinen toteutus idea Marcoderilta
    iw = ImageWidth(img)
    ih = ImageHeight(img)
    If w =< 0 Or h =< 0 Then Return 0
    newimg = MakeImage(w,ih)
    newimg2 = MakeImage(w,h)
    DrawToImage newimg
    For i = 0 To w
        DrawImageBox img,i,0,Int(Float(iw)/Float(w)*Float(i)),0,1,ih
    Next i
    DrawToScreen
    DrawToImage newimg2
    For i = 0 To h
        DrawImageBox newimg,0,i,0,Int(Float(ih)/Float(h)*Float(i)),w,1
    Next i
    DrawToScreen
    DeleteImage newimg
    Return newimg2
EndFunction 
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
MikkoK
Devoted Member
Posts: 813
Joined: Thu Jun 05, 2008 2:13 pm
Location: City 17

Re: Turhanpäiväinen vekotin, mutta loistavia funktioita.

Post by MikkoK »

Tästähän saisi shoot em upin lisäämällä viholliset ja muuntelemalla vähän. :D

Code: Select all

#aha. @ IRCNet
<Grandi> Voit laittaa jo valmiiks hailaittiin "Amis-Mikko", koska alan kutsua sua sillä nimellä.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Turhanpäiväinen vekotin, mutta loistavia funktioita.

Post by JATothrim »

Vou. aikas hieno. Rotateimage ei tosin tee hyvää pelille. kuvat pitäis esilaskea taulukkoon... tässä tapauksessa se on vähän vaikeaa, sillä kuvia on paljon.
EDIT:

Jaa näyttää siltä zoomauksia tarvitaan vain 16 - 20 ja kulmia riittäisi 72. eli vaivaiset 1152 kuvaa pitäisi esilaskea. au. Tosiaankin loistavia funktioita. ;) Koetan tehdä tuon esilaskennan, edittaan lisää sitten.

-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 8:06 pm
Contact:

Re: Turhanpäiväinen vekotin, mutta loistavia funktioita.

Post by Herra Siili »

Hieno kun mikä. FPS vaan pyöri alle kymmenen paikkeilla.
a.k.a. Gehock
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Turhanpäiväinen vekotin, mutta loistavia funktioita.

Post by MaGetzUb »

JATothrim wrote:Vou. aikas hieno. Rotateimage ei tosin tee hyvää pelille. kuvat pitäis esilaskea taulukkoon... tässä tapauksessa se on vähän vaikeaa, sillä kuvia on paljon.
EDIT:

Jaa näyttää siltä zoomauksia tarvitaan vain 16 - 20 ja kulmia riittäisi 72. eli vaivaiset 1152 kuvaa pitäisi esilaskea. au. Tosiaankin loistavia funktioita. ;) Koetan tehdä tuon esilaskennan, edittaan lisää sitten.

Ei se kuvien laskeminen mikään ongelma ole, vaan se että jos ne pyöritellään valmiiksi taulukkoon, niitä on hankala venytellä linjamaisesti.
EDIT:

Herra Siili wrote:Hieno kun mikä. FPS vaan pyöri alle kymmenen paikkeilla.
Minulla taas koko värkki pyörii siinä 18-30 välillä. Kone on jo vanha 2005 ostettu HP:n Media Center, Prosessorin kellotaajuus on se 2.18Ghz :) Ja ohjelmia on keskiverto vanhalle koneelle sopivamäärä pyörimäs päällä yhtäaikaa taustalla.[/edit]
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Noviisi
Newcomer
Posts: 11
Joined: Thu Sep 10, 2009 11:51 pm

Re: Turhanpäiväinen vekotin, mutta loistavia funktioita.

Post by Noviisi »

Herra Siili wrote:Hieno kun mikä. FPS vaan pyöri alle kymmenen paikkeilla.
MaGetzUb wrote:Minulla taas koko värkki pyörii siinä 18-30 välillä.
Outoa, minullakin tuo näyttäisi pyörivän siinä 9-13 FPS tuntumassa. Oma koneeni lienee 2009-malliston alempaa keskitasoa (~2,8GHz ja Win XP). Mitenkäs tuo on muilla pyörinyt? Voisiko tässä olla kyse jostain CoolBasiciin liittyvästä konekohtaisesta "erityispiirteestä" vai joko meikäläiselläkin vaan hirttää kone kiinni?
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Turhanpäiväinen vekotin, mutta loistavia funktioita.

Post by Koodiapina »

Minulla pyörii 3 FPS. Ja masiinani on huikea 1,6 GHz:n tehohirmu, jos se johonkin liittyy.
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Turhanpäiväinen vekotin, mutta loistavia funktioita.

Post by Ruuttu »

Minulla ainakin FPS tuplaantui pelkästään poistamalla tähdet. Ja tähtien laskeminen etukäteen ei liene mitenkään mahdotonta.
Post Reply