Offtopic (I/2010)

Muu yhteisön välinen keskustelu.
Locked
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Offtopic (I/2010)

Post by jaahas »

eka functio. kertokaa onko hyvä

Code: Select all

//functio colorbox (y,x,(leveys),(korkeus),(väri numeroina 0,0,0),(onko laatikko täytetty vai ontto off tai on))
Repeat

colorBox (100,100,20,10,255,255,0,OFF)

DrawScreen

Forever

Function colorBox (x,y,t,r,i,p,j,c)

Color i,p,j

Box x,y,t,r,c

End Function
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Offtopic (I/2010)

Post by legend »

jaahas wrote:eka functio. kertokaa onko hyvä

Code: Select all

//functio colorbox (y,x,(leveys),(korkeus),(väri numeroina 0,0,0),(onko laatikko täytetty vai ontto off tai on))
Repeat

colorBox (100,100,20,10,255,255,0,OFF)

DrawScreen

Forever

Function colorBox (x,y,t,r,i,p,j,c)

Color i,p,j

Box x,y,t,r,c

End Function
Hyvä opit tekemään functioita! Se on suuri askel sinulle, mutta ei meille =)
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Offtopic (I/2010)

Post by jaahas »

legend wrote:
jaahas wrote:eka functio. kertokaa onko hyvä

Code: Select all

//functio colorbox (y,x,(leveys),(korkeus),(väri numeroina 0,0,0),(onko laatikko täytetty vai ontto off tai on))
Repeat

colorBox (100,100,20,10,255,255,0,OFF)

DrawScreen

Forever

Function colorBox (x,y,t,r,i,p,j,c)

Color i,p,j

Box x,y,t,r,c

End Function
Hyvä opit tekemään functioita! Se on suuri askel sinulle, mutta ei meille =)
onko hyvä functio ekaks functioks?
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Offtopic (I/2010)

Post by Sly_Jack0 »

jaahas wrote:
legend wrote:
jaahas wrote:
onko hyvä functio ekaks functioks?
Kaikki uusi opittu on aina plussaa. Toisaalta tuo ei siinä mielessä ole hyvä, että siinä ei palauteta mitään arvoa, mikä on funktioiden tärkeimpiä ominaisuuksia.
User avatar
valscion
Moderator
Moderator
Posts: 1597
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Offtopic (I/2010)

Post by valscion »

Sly_Jack0 wrote:
jaahas wrote:onko hyvä functio ekaks functioks?
Kaikki uusi opittu on aina plussaa. Toisaalta tuo ei siinä mielessä ole hyvä, että siinä ei palauteta mitään arvoa, mikä on funktioiden tärkeimpiä ominaisuuksia.
Se on myös aika epäselvä. Voisit koittaa nimetä parametrit (eli ne funktioon laitettavat muuttujat) vähän järkevämmin - t,r,i,p,j,c ei oikein kerro mitään, mutta sen sijaan leveys, korkeus, punainen, vihrea, sininen, taytetty kertoisi jo enemmän. Voisit myös laittaa tuolle viimeiselle parametrille oletusarvoksi 0 tai 1 - eli jos sitä ei annettaisi funktiota kutsuttaessa, piirtyisi laatikko oletuksena onttona tai täytettynä.

P.S.
Suomen kielessä ei ole sellaista sanaa kuin functio, vaan se on funktio kovalla koolla.
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
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Offtopic (I/2010)

Post by MetalRain »

Muutama viikko sitten katselin kun 7DRL pyörähti käyntiin ja ihmettelin CoolBasicilla tehtyjen roguelike pelien vähäisyyttä. Pohdin syitä ja tulin siihen tulokseen että CoolBasicin tekstikomennot ovat liian hitaita. Koitin poistaa/kiertää tuon esteen ja aloitin roguelike grafiikkamoottorin tekemisen. Tässä nyt muutaman viikon satunnaisen koodaamisen tulos.

Code: Select all

// Memscreen 
Dim MemScreenCharset(255,1,1,1) As integer 

Global MemScreenEmptyimg, MemScreenCharW, MemScreenCharH, MemScreenColors, MemScreenInitialized

Const MemScreenImage = 0
Const MemScreenImageWidth = 4
Const MemScreenImageHeight = 8
Const MemScreenWidth = 12
Const MemScreenHeight = 16
Const MemScreenLayers = 20
Const MemScreenBuffer = 24

Const MemScreenChanges = 28
Const MemScreenChangelist = 32
Const MemScreenMemBlockSize = 36

Function MemScreenInitialize(cw,ch,colors)
    If colors>32 Then MakeError "Warning! Please use smaller value (eg. 32) for colordepth. You are now trying to allocate "+(Float(colors^3)*255.0*4.0/1024.0/1024.0)+"MB of memory." 
    
    MemScreenEmptyimg=MakeImage(cw,ch)
    MemScreenColors=colors
    MemScreenCharW=cw
    MemScreenCharH=ch
    ReDim MemScreenCharset(255,Colors,Colors,Colors) As integer 
    MemScreenInitialized=1
End Function 

Function DeleteMemScreen(mem)
    If mem  Then 
        If MEMBlockSize(mem)=MemScreenMemblockSize Then 
            img=PeekInt(mem,MemScreenImage)
            buffer=PeekInt(mem,MemScreenBuffer)
            changes=PeekInt(mem,MemScreenChangelist)
            If img Then DeleteImage img
            If buffer Then DeleteMEMBlock buffer
            If changes Then DeleteMEMBlock changes
            DeleteMEMBlock mem
        EndIf
    EndIf 
End Function 

Function MakeMemScreen(w,h,layers)
   
    mem = MakeMEMBlock(MemScreenMemblockSize)
    
    w=Max(w,1)
    h=Max(h,1)
    
    PokeInt mem,MemScreenImageWidth,w*MemScreenCharW
    PokeInt mem,MemScreenImageHeight,h*MemScreenCharH
    PokeInt mem,MemScreenImage,MakeImage(w*MemScreenCharW,h*MemScreenCharH)
    
    PokeInt mem,MemScreenWidth,w
    PokeInt mem,MemScreenHeight,h
    PokeInt mem,MemScreenLayers,layers
    
    PokeInt mem,MemScreenBuffer,MakeMEMBlock(w*h*(Layers+1)*4)
    
    PokeInt mem,MemScreenChanges,0
    
    PokeInt mem,MemScreenChangelist,MakeMEMBlock(w*h*12)
    
    Return mem
End Function 

Function MemScreenFlush(mem,x,y,layer=1,all=0,alllayers=0)
    If mem And layer Then 
        If MEMBlockSize(mem)=MemScreenMemblockSize Then 
        
            mswidth=PeekInt(mem,MemScreenWidth)
            msheight=PeekInt(mem,MemScreenHeight)
            msbuffer=PeekInt(mem,MemScreenBuffer)
            mslayers=PeekInt(mem,MemScreenLayers)
            mschangelist=PeekInt(mem,MemScreenChangelist)
            mschanges=PeekInt(mem,MemScreenChanges)
            mschangelistsize=MEMBlockSize(mschangelist)
            
            
            If all=0 And alllayers=0 Then 
                If (x=>0)(x<mswidth)(y=>0)(y<msheight)(layer<=mslayers) Then 
                
                    PokeInt msbuffer,(x+y*mswidth+layer*mswidth*msheight)*4,0
                    oldvalue=PeekInt (msbuffer,(x+y*mswidth)*4)
                    
                    If oldvalue Then 
                        For i=mslayers To 1 Step -1
                            value = PeekInt (msbuffer,(x+y*mswidth+i*mswidth*msheight)*4)
                            If value Then 
                                If oldvalue<>value Then 
                                    If mschangelistsize<(mschanges+1)*12 Then 
                                        ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                        PokeInt mem,MemScreenChangeList,mschangelist
                                        mschangelistsize=(mschanges+20)*12 
                                    EndIf 
                                    PokeInt mschangelist,mschanges*12,value
                                    PokeInt mschangelist,mschanges*12+4,x
                                    PokeInt mschangelist,mschanges*12+8,y
                                    mschanges=mschanges+1
                                    PokeInt mem,MemScreenChanges,mschanges
                                EndIf 
                                Exit 
                            EndIf 
                        Next i
                        If value=0 Then 
                            If mschangelistsize<(mschanges+1)*12 Then 
                                ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                PokeInt mem,MemScreenChangeList,mschangelist
                                mschangelistsize=(mschanges+20)*12 
                            EndIf 
                            PokeInt mschangelist,mschanges*12,value
                            PokeInt mschangelist,mschanges*12+4,x
                            PokeInt mschangelist,mschanges*12+8,y
                            mschanges=mschanges+1
                            PokeInt mem,MemScreenChanges,mschanges
                        EndIf 
                    EndIf 
                    
                EndIf 
            ElseIf all=0 And alllayers=1 Then 
                If (x=>0)(x<mswidth)(y=>0)(y<msheight) Then 
                
                    For i=mslayers To 1 Step -1
                        PokeInt msbuffer,(x+y*mswidth+i*mswidth*msheight)*4,0
                    Next i
                
                    If PeekInt (msbuffer,(x+y*mswidth)*4)<>0 Then 
                        If mschangelistsize<(mschanges+1)*12 Then 
                            ResizeMEMBlock mschangelist,(mschanges+20)*12 
                            PokeInt mem,MemScreenChangeList,mschangelist
                            mschangelistsize=(mschanges+20)*12 
                        EndIf 
                        PokeInt mschangelist,mschanges*12,0
                        PokeInt mschangelist,mschanges*12+4,x
                        PokeInt mschangelist,mschanges*12+8,y
                        mschanges=mschanges+1
                        PokeInt mem,MemScreenChanges,mschanges
                    EndIf 
                    
                EndIf 
            ElseIf all=1 And alllayers=0 Then 
                If layer And (layer<=mslayers) Then 
                    For x=0 To mswidth-1
                        For y=0 To msheight-1
                            
                            oldvalue=PeekInt (msbuffer,(x+y*mswidth)*4)
                            PokeInt msbuffer,(x+y*mswidth+layer*mswidth*msheight)*4,0
                        
                            If oldvalue Then 
                                For i=mslayers To 1 Step -1
                                    value = PeekInt (msbuffer,(x+y*mswidth+i*mswidth*msheight)*4)
                                    If value Then
                                        If oldvalue<>value Then 
                                            If mschangelistsize<(mschanges+1)*12 Then 
                                                ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                                PokeInt mem,MemScreenChangeList,mschangelist
                                                mschangelistsize=(mschanges+20)*12 
                                            EndIf 
                                            PokeInt mschangelist,mschanges*12,value
                                            PokeInt mschangelist,mschanges*12+4,x
                                            PokeInt mschangelist,mschanges*12+8,y
                                            mschanges=mschanges+1
                                        EndIf 
                                        Exit 
                                    EndIf 
                                Next i
                                If value=0 Then 
                                    If mschangelistsize<(mschanges+1)*12 Then 
                                        ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                        PokeInt mem,MemScreenChangeList,mschangelist
                                        mschangelistsize=(mschanges+20)*12 
                                    EndIf 
                                    PokeInt mschangelist,mschanges*12,value
                                    PokeInt mschangelist,mschanges*12+4,x
                                    PokeInt mschangelist,mschanges*12+8,y
                                    mschanges=mschanges+1
                                EndIf 
                            EndIf 
                        
                        Next y
                    Next x
                    PokeInt mem,MemScreenChanges,mschanges
                EndIf 
            ElseIf all=1 And alllayers=1 Then 
                msimage=PeekInt(mem,MemScreenImage) 
                If msimage Then DeleteImage msimage
                PokeInt mem,MemScreenImage,MakeImage(PeekInt(mem,MemScreenImageWidth),PeekInt(mem,MemScreenImageWidth))
                DeleteMEMBlock msbuffer
                PokeInt mem,MemScreenBuffer,MakeMEMBlock(mswidth*msheight*(mslayers+1)*4)
                PokeInt mem,MemScreenChanges,0
            EndIf 
            
        EndIf 
    EndIf 
End Function 

Function MemScreenUpdate(mem,draw=1,drawx=0,drawy=0)
    If mem Then 
        If MEMBlockSize(mem)=MemScreenMemblockSize Then 
        
            msimage=PeekInt(mem,MemScreenImage)
            mswidth=PeekInt(mem,MemScreenWidth)
            msbuffer=PeekInt(mem,MemScreenBuffer)
            mschangelist=PeekInt(mem,MemScreenChangelist)
            mschanges=PeekInt(mem,MemScreenChanges)
            
            If mschanges Then 
            
                For i=0 To mschanges-1
                    value=PeekInt(mschangelist,i*12)
                    xx=PeekInt(mschangelist,i*12+4)
                    yy=PeekInt(mschangelist,i*12+8)
                    If value Then 
                        PokeInt msbuffer,(xx+yy*mswidth)*4,value
                        CopyBox 0,0,MemScreenCharW,MemScreenCharH,xx*MemScreenCharW,yy*MemScreenCharH,Image(value),Image(msimage)
                    Else
                        PokeInt msbuffer,(xx+yy*mswidth)*4,0
                        CopyBox 0,0,MemScreenCharW,MemScreenCharH,xx*MemScreenCharW,yy*MemScreenCharH,Image(MemScreenEmptyimg),Image(msimage)
                    EndIf 
                Next i
                
                PokeInt mem,MemScreenChanges,0
            EndIf 
                    
            If draw And msimage Then 
                DrawImage msimage,drawx,drawy
            EndIf 
        EndIf 
    EndIf 
    
    
End Function 

Function MemScreenCopy(frommem,tomem,x,y,w,h,dx=0,dy=0,fromlayer=1,tolayer=1,all=0)
    If frommem And tomem Then 
        If MEMBlockSize(frommem)=MemScreenMemblockSize And MEMBlockSize(tomem)=MemScreenMemblockSize  Then 
            
            If fromlayer And tolayer Then 
                              
                fmswidth=PeekInt(frommem,MemScreenWidth)
                fmsheight=PeekInt(frommem,MemScreenHeight)
                fmsbuffer=PeekInt(frommem,MemScreenBuffer)
                fmslayers=PeekInt(frommem,MemScreenLayers)
                
                tmswidth=PeekInt(tomem,MemScreenWidth)
                tmsheight=PeekInt(tomem,MemScreenHeight)
                tmsbuffer=PeekInt(tomem,MemScreenBuffer)
                tmslayers=PeekInt(tomem,MemScreenLayers)
                tmschangelist=PeekInt(tomem,MemScreenChangelist)
                tmschanges=PeekInt(tomem,MemScreenChanges)
                tmschangelistsize=MEMBlockSize(tomschangelist)
                
                If all Then x=0 : y=0 : w=fmswidth : h=fmsheight
                
                
                If (tolayer<=tmslayers)(fromlayer<=fmslayers) Then 
                
                    xm=0
                   
                    For xx=Max(x,0) To Min(x+w,fmswidth)
                        ym=0
                        For yy=Max(y,0) To Min(y+h,fmsheight)
                            tx=dx+xm
                            ty=dy+ym
                        
                            If (tx=>0)(tx<tmswidth)(ty=>0)(ty<tmsheight) Then
                                
                                oldvalue=PeekInt (tmsbuffer,(tx+ty*tmswidth)*4)
                                
                                img=PeekInt (fmsbuffer,(xx+yy*fmswidth+fromlayer*fmswidth*fmsheight)*4)
                                
                                PokeInt tmsbuffer,(tx+ty*tmswidth+tolayer*tmswidth*tmsheight)*4,img
                                
                                If img<>oldvalue Then 
                                    For i=tmslayers To 1 Step -1
                                        value = PeekInt (tmsbuffer,(tx+ty*tmswidth+i*tmswidth*tmsheight)*4)
                                        If value Then 
                                            If oldvalue<>value Then 
                                                If tmschangelistsize<(tmschanges+1)*12 Then 
                                                    ResizeMEMBlock tmschangelist,(tmschanges+20)*12 
                                                    PokeInt tomem,MemScreenChangeList,tmschangelist
                                                    tmschangelistsize=(tmschanges+20)*12 
                                                EndIf 
                                                PokeInt tmschangelist,tmschanges*12,value
                                                PokeInt tmschangelist,tmschanges*12+4,tx
                                                PokeInt tmschangelist,tmschanges*12+8,ty
                                                tmschanges=tmschanges+1
                                            EndIf 
                                            Exit 
                                        EndIf 
                                    Next i
                                    If value=0 Then 
                                        If mschangelistsize<(mschanges+1)*12 Then 
                                            ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                            PokeInt mem,MemScreenChangeList,mschangelist
                                            mschangelistsize=(mschanges+20)*12 
                                        EndIf 
                                        PokeInt mschangelist,mschanges*12,value
                                        PokeInt mschangelist,mschanges*12+4,x
                                        PokeInt mschangelist,mschanges*12+8,y
                                        mschanges=mschanges+1
                                    EndIf     
                                EndIf 
                                
                            EndIf 
                            
                            ym=ym+1
                        Next yy
                        xm=xm+1
                    Next xx
                    
                    PokeInt tomem,MemScreenChanges,tmschanges
                    
                EndIf 

            EndIf 
        EndIf 
    EndIf 
End Function 

Function MemScreenPut(mem,img,x,y,layer=1)
    If mem Then 
        If MEMBlockSize(mem)=MemScreenMemblockSize Then 
            
            If img And layer Then
            
                mswidth=PeekInt(mem,MemScreenWidth)
                msheight=PeekInt(mem,MemScreenHeight)
                msbuffer=PeekInt(mem,MemScreenBuffer)
                mslayers=PeekInt(mem,MemScreenLayers)
                mschangelist=PeekInt(mem,MemScreenChangelist)
                mschanges=PeekInt(mem,MemScreenChanges)
                mschangelistsize=MEMBlockSize(mschangelist)
                
                If (x=>0)(x<mswidth)(y=>0)(y<msheight)(layer<=mslayers) Then 
                
                    PokeInt msbuffer,(x+y*mswidth+layer*mswidth*msheight)*4,img
                
                    oldvalue=PeekInt (msbuffer,(x+y*mswidth)*4)
                    
                    If img<>oldvalue Then 
            
                        For i=mslayers To 1 Step -1
                            value = PeekInt (msbuffer,(x+y*mswidth+i*mswidth*msheight)*4)
                            If value Then 
                                If oldvalue<>value Then 
                                    If mschangelistsize<(mschanges+1)*12 Then 
                                        ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                        PokeInt mem,MemScreenChangeList,mschangelist
                                        mschangelistsize=(mschanges+20)*12 
                                    EndIf 
                                    PokeInt mschangelist,mschanges*12,value
                                    PokeInt mschangelist,mschanges*12+4,x
                                    PokeInt mschangelist,mschanges*12+8,y
                                    mschanges=mschanges+1
                                    PokeInt mem,MemScreenChanges,mschanges
                                EndIf 
                                Return 1
                            EndIf 
                        Next i
                        If value=0 Then 
                            If mschangelistsize<(mschanges+1)*12 Then 
                                ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                PokeInt mem,MemScreenChangeList,mschangelist
                                mschangelistsize=(mschanges+20)*12 
                            EndIf 
                            PokeInt mschangelist,mschanges*12,value
                            PokeInt mschangelist,mschanges*12+4,x
                            PokeInt mschangelist,mschanges*12+8,y
                            mschanges=mschanges+1
                            PokeInt mem,MemScreenChanges,mschanges
                        EndIf 
                        
                    EndIf 
                
                EndIf 
                              
            EndIf 
        EndIf 
    EndIf 
End Function 

Function MemScreenPrint(mem,txt$,x=0,y=0,layer=1,r=255,g=255,b=255)
    If mem Then 
        If MEMBlockSize(mem)=MemScreenMemblockSize Then 
            
            If layer Then 
                              
                mswidth=PeekInt(mem,MemScreenWidth)
                msheight=PeekInt(mem,MemScreenHeight)
                msbuffer=PeekInt(mem,MemScreenBuffer)
                mslayers=PeekInt(mem,MemScreenLayers)
                mschangelist=PeekInt(mem,MemScreenChangelist)
                mschanges=PeekInt(mem,MemScreenChanges)
                mschangelistsize=MEMBlockSize(mschangelist)
                
                l=Len(txt$)
                
                For o=1 To l
                
                    xx=x+o-1
                
                    img = MemScreenMakeChar(Mid(txt$,o,1),r,g,b)
                    
                    If (xx=>0)(xx<mswidth)(y=>0)(y<msheight)(layer<=mslayers) Then 
                    
                        PokeInt msbuffer,(xx+y*mswidth+layer*mswidth*msheight)*4,img

                        oldvalue=PeekInt (msbuffer,(xx+y*mswidth)*4)
                        
                        If img<>oldvalue Then 
                
                            For i=mslayers To 1 Step -1
                                value = PeekInt (msbuffer,(xx+y*mswidth+i*mswidth*msheight)*4)
                                If value Then 
                                    If oldvalue<>value Then 
                                        If mschangelistsize<(mschanges+1)*12 Then 
                                            ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                            PokeInt mem,MemScreenChangeList,mschangelist
                                            mschangelistsize=(mschanges+20)*12 
                                        EndIf 
                                        PokeInt mschangelist,mschanges*12,value
                                        PokeInt mschangelist,mschanges*12+4,xx
                                        PokeInt mschangelist,mschanges*12+8,y
                                        mschanges=mschanges+1
                                    EndIf 
                                    Exit
                                EndIf 
                            Next i
                            If value=0 Then 
                                If mschangelistsize<(mschanges+1)*12 Then 
                                    ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                    PokeInt mem,MemScreenChangeList,mschangelist
                                    mschangelistsize=(mschanges+20)*12 
                                EndIf 
                                PokeInt mschangelist,mschanges*12,value
                                PokeInt mschangelist,mschanges*12+4,x
                                PokeInt mschangelist,mschanges*12+8,y
                                mschanges=mschanges+1
                            EndIf 
                            
                        EndIf 
                    Else 
                        PokeInt mem,MemScreenChanges,mschanges
                        Return -1
                    EndIf 
                    
                Next o
                
                PokeInt mem,MemScreenChanges,mschanges

            EndIf 
        EndIf 
    EndIf 
End Function 

Function MemScreenBox(mem,cimg,wimg,himg,fimg,x=0,y=0,w=1,h=1,layer=1)
    MemScreenPut(mem,cimg,x,y,layer)
    MemScreenLine(mem,wimg,x+1,y,layer,0,w-2)
    MemScreenPut(mem,cimg,x+w-1,y,layer)
    
    MemScreenPut(mem,cimg,x,y+h-1,layer)
    MemScreenLine(mem,wimg,x+1,y+h-1,layer,0,w-2)
    MemScreenPut(mem,cimg,x+w-1,y+h-1,layer)
    
    MemScreenLine(mem,himg,x,y+1,layer,1,h-2)
    MemScreenLine(mem,himg,x+w-1,y+1,layer,1,h-2)
    
    If fimg And h>2 Then 
        For i=1 To h-2
            MemScreenLine(mem,fimg,x+1,y+i,layer,0,w-2)
        Next i
    EndIf 
End Function 

Function MemScreenLine(mem,img,x,y,layer,linetype,lenght)
    If mem Then 
        If MEMBlockSize(mem)=MemScreenMemblockSize Then 
            
            If layer And img Then 
                              
                mswidth=PeekInt(mem,MemScreenWidth)
                msheight=PeekInt(mem,MemScreenHeight)
                msbuffer=PeekInt(mem,MemScreenBuffer)
                mslayers=PeekInt(mem,MemScreenLayers)
                mschangelist=PeekInt(mem,MemScreenChangelist)
                mschanges=PeekInt(mem,MemScreenChanges)
                mschangelistsize=MEMBlockSize(mschangelist)
                
                For o=0 To lenght-1
                
                    If linetype=1 Then 
                        yy=y+o
                        xx=x
                    Else 
                        yy=y
                        xx=x+o
                    EndIf 
                    
                    If (xx=>0)(xx<mswidth)(yy=>0)(yy<msheight)(layer<=mslayers) Then 
                    
                        
                        PokeInt msbuffer,(xx+yy*mswidth+layer*mswidth*msheight)*4,img
                    
                        oldvalue=PeekInt (msbuffer,(xx+yy*mswidth)*4)
                        
                        If img<>oldvalue Then 
                
                            For i=mslayers To 1 Step -1
                                value = PeekInt (msbuffer,(xx+yy*mswidth+i*mswidth*msheight)*4)
                                If value Then 
                                    If oldvalue<>value Then 
                                        If mschangelistsize<(mschanges+1)*12 Then 
                                            ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                            PokeInt mem,MemScreenChangeList,mschangelist
                                            mschangelistsize=(mschanges+20)*12 
                                        EndIf 
                                            
                                        PokeInt mschangelist,mschanges*12,value
                                        PokeInt mschangelist,mschanges*12+4,xx
                                        PokeInt mschangelist,mschanges*12+8,yy
                                        mschanges=mschanges+1
                                    EndIf 
                                    Exit
                                EndIf 
                            Next i
                            If value=0 Then 
                                If mschangelistsize<(mschanges+1)*12 Then 
                                    ResizeMEMBlock mschangelist,(mschanges+20)*12 
                                    PokeInt mem,MemScreenChangeList,mschangelist
                                    mschangelistsize=(mschanges+20)*12 
                                EndIf 
                                PokeInt mschangelist,mschanges*12,value
                                PokeInt mschangelist,mschanges*12+4,x
                                PokeInt mschangelist,mschanges*12+8,y
                                mschanges=mschanges+1
                                PokeInt mem,MemScreenChanges,mschanges
                            EndIf 
                            
                        EndIf 
                    Else 
                        PokeInt mem,MemScreenChanges,mschanges
                        Return -1
                    EndIf 
                    
                Next o
                
                PokeInt mem,MemScreenChanges,mschanges
            EndIf 
        EndIf 
    EndIf 
End Function 

Function DeleteMemScreenChars()
    If MemScreenInitialized=0 Then MakeError "You must call MemScreenInitialize() before calling other MemScreen functions!"
    
    d=255/MemScreenColors
    
    For c=32 To 255
        For r=0 To MemScreenColors
            For g=0 To MemScreenColors
                For b=0 To MemScreenColors
                    If MemScreenCharset(c,r,g,b) Then DeleteImage MemScreenCharset(c,r,g,b)
                Next b
            Next g
        Next r
    Next c

End Function 

Function MemScreenLoadChars()
    If MemScreenInitialized=0 Then MakeError "You must call MemScreenInitialize() before calling other MemScreen functions!"
    
    d=255/MemScreenColors
    
    For c=32 To 255
        For r=0 To MemScreenColors
            For g=0 To MemScreenColors
                For b=0 To MemScreenColors
                    If Not MemScreenCharset(c,r,g,b) Then 
                        img=MakeImage(MemScreenCharW,MemScreenCharH)
                        DrawToImage img
                            Color r*d,g*d,b*d
                            Text 0,0,Chr(c)
                        DrawToScreen 
                        MemScreenCharset(c,r,g,b) = img
                    EndIf 
                Next b
            Next g
        Next r
    Next c

End Function 

Function MemScreenMakeChar(txt$,r=255,g=255,b=255)
    c=255/MemScreenColors
    r=RoundDown(r / c)
    g=RoundDown(g / c)
    b=RoundDown(b / c)

    value=Asc(Left(txt$,1))
    
    If MemScreenCharset(value,r,g,b)=0 Then 
        img=MakeImage(MemScreenCharW,MemScreenCharH)
        DrawToImage img
            Color c*r,g*c,b*c
            Text 0,0,Left(txt$,1)
        DrawToScreen 
        MemScreenCharset(value,r,g,b) = img
    EndIf 

    Return MemScreenCharset(value,r,g,b)
End Function 

//---------------------------



SAFEEXIT OFF 

SCREEN 800,600

//luodaan hahmoille tyyppikokoelma
Type npc
    Field x
    Field y
    Field char
    Field playable
End Type

//määritetään merkin leveys ja korkeus, sekä värien määrä
MemScreenInitialize(TextWidth("="),TextHeight("|"),5)

//luodaan 100x45 kokoinen ruutu neljällä kerroksella
//moottori varaa automaattisesti "nollannen kerroksen" puskuriksi
PlayScreen=makememscreen(100,46,4)

//tallennetaan ruudun mitat muuttujiin
sw=PeekInt(PlayScreen,MemScreenwidth)
sh=PeekInt(PlayScreen,MemScreenHeight)

//luodaan kaksi merkkiä
wall=MemScreenMakeChar("#",64,64,64)
floor=MemScreenMakeChar(".",196,196,196)

//piirretään ruudulle laatikko jossa kulmissa ja kyljissä käytetään wall merkkiä ja täytetään floor merkillä
//laatikko alkaa kohdasta 0,0 ja on koko ruudun kokoinen ja piirretään ensimmäiseen kerrokseen
MemScreenBox(PlayScreen,wall,wall,wall,floor,0,0,sw,sh,1)

//luodaan pelaaja
n.npc=New(npc)
n\x=1
n\y=1
n\char=MemScreenMakeChar("@",255,0,0)
n\playable=1
//piirretään pelaaja kolmanteen kerrokseen
MemScreenPut(PlayScreen,n\char,n\x,n\y,3)

//luodaan tuhat ja yksi muuta hahmoa ja piirretään ne toiseen kerrokseen
For i=0 To 1000
    n.npc=New(npc)
    n\x=Rand(1,sw-2)
    n\y=Rand(1,sh-2)
    n\char=MemScreenMakeChar(Chr(Rand(97,122)),Rand(64,255),Rand(64,255),Rand(64,255))
    MemScreenPut(PlayScreen,n\char,n\x,n\y,2)
Next i

info=-1

Repeat

    //välilyönti piilottaa/näyttää infotekstin
    If KeyHit(cbkeyspace) Or info=-1 Then 
        If info=1 Then 
            info=0
            MemScreenFlush(PlayScreen,0,0,4,1)
        Else
            status$=status$+"info"
            MemScreenPrint(PlayScreen,"Tervetuloa testaamaan grafiikkamoottoria, jonka pyrkimyksenä on tuottaa nopeaa merkkigrafiikkaa.",1,1,4)
            MemScreenPrint(PlayScreen,"Kaikki merkit ON tallennettu ennalta kuviin joita piirretään tarvittaessa CopyBoxilla pääkuvaan",1,2,4)
            MemScreenPrint(PlayScreen,"Tämä on huomattavasti nopeampaa kuin Text, Print tai mikään muukaan keino.",1,3,4)
            MemScreenPrint(PlayScreen,"Koska kyse ON vain kuvista voi myös ladattavia kuvia piirtää merkkigrafiikan sekaan.",1,4,4)
            MemScreenPrint(PlayScreen,"Ruutuja ON myös luoda useita, näin vältytään muuttamasta samaa ruutua liian usein",1,5,4)
            MemScreenPrint(PlayScreen,"Ruudussa voi myös olla useita kerroksia, joiden mukaan piirtojärjestys määräytyy.",1,6,4)
            MemScreenPrint(PlayScreen,"Ruudusta voi poistaa merkkejä sijainnin ja kerroksen mukaan.",1,7,4)
            MemScreenPrint(PlayScreen,"Koska ruutu ON tallennettu kuvaan voi sen sijaintia, kokoa tai väritystä muuttaa helposti.",1,8,4)
            MemScreenPrint(PlayScreen,"Ruudulla vipeltää tällä hetkellä tuhat ja yksi hahmoa sekä pelaaja.",1,9,4)
            MemScreenPrint(PlayScreen,"Paina välilyöntiä piilottaaksesi tämän tekstin.",1,12,4)
            MemScreenPrint(PlayScreen,"Paina enteriä heiluttaaksesi ruutua.",1,13,4)
            info=1
        EndIf 
    EndIf 

    If KeyDown(cbkeyreturn) Then 
        bx=Rand(-10,10)
        by=Rand(-10,10)
    Else
        bx=0
        by=0
    EndIf 
    
    If KeyHit(cbkeybackspace) Then small=Not small
    

    For n.npc=Each npc
        
        //pelaajan ohjastus
        
        mx=0
        my=0
        If n\playable Then
            mx=KeyDown(cbkeyright)*(n\x<sw-2)-KeyDown(cbkeyleft)*(n\x>1)
            my=KeyDown(cbkeydown)*(n\y<sh-2)-KeyDown(cbkeyup)*(n\y>1)
        Else
            If Rand(50)=1 Then 
                mx=Rand(-1*(n\x>1),1*(n\x<sw-2))
                my=Rand(-1*(n\y>1),1*(n\y<sh-2))
            EndIf 
        EndIf 
            
        If mx Or my Then 
            MemScreenFlush(PlayScreen,n\x,n\y,2+n\playable)
            n\x=n\x+mx
            n\y=n\y+my
            MemScreenPut(PlayScreen,n\char,n\x,n\y,2+n\playable)
        EndIf 
    
    Next n

    //päivitetään ruutu
    MemScreenUpdate(PlayScreen,1,bx,by)

    //tämä on hyvä laittaa esille
    SetWindow "FPS: "+Str(FPS())
    DrawScreen
    
   ' Wait 5
Until EscapeKey()

//tyhjennetään muisti turhasta tauhkasta
DeleteMemScreen(PlayScreen)
DeleteMemScreenChars()

End 
mikeful
Moderator
Moderator
Posts: 523
Joined: Mon Aug 27, 2007 8:36 pm
Location: Vaasa, Finalnd
Contact:

Re: Offtopic (I/2010)

Post by mikeful »

Uutta avataria peliin. Kuvasin noppia huonolla kännykameralla, parilla LED-avaimenperävalolla ja läjällä keittiöstä löytyviä tavaroita.
Pelejä: Pelasta puhe, Grinder
Muuta: Blogi, Twitter
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Offtopic (I/2010)

Post by legend »

Tietääkö kukaan miten\voiko Playstation 3 Dualshock ohjainta liittää tietokoneeseen, itse olen yrittänyt mutta en onnistu :)
MikkoK
Devoted Member
Posts: 813
Joined: Thu Jun 05, 2008 2:13 pm
Location: City 17

Re: Offtopic (I/2010)

Post by MikkoK »

legend wrote:Tietääkö kukaan miten\voiko Playstation 3 Dualshock ohjainta liittää tietokoneeseen, itse olen yrittänyt mutta en onnistu :)
DS3_Tool nimisellä ohjelmalla saa ainakin liitettyä. Googlettele siitä.

Code: Select all

#aha. @ IRCNet
<Grandi> Voit laittaa jo valmiiks hailaittiin "Amis-Mikko", koska alan kutsua sua sillä nimellä.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: Offtopic (I/2010)

Post by Koodiapina »

http://www.kuvalauta.fi/b/res/2202837.html

Mitä mieltä olette tästä?
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Offtopic (I/2010)

Post by Nassi_Setä »

Näyttää Microsoftin yhtä suosituimmista peleistä eli 404:sta :|
fäästedit: siis eihän se ole kivaa että sivusto on suljettu lopullisesti tai vain vähäksi aikaa
Last edited by Nassi_Setä on Mon Mar 22, 2010 9:15 pm, edited 1 time in total.
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
Requiem for Anthrax
Active Member
Posts: 155
Joined: Wed Dec 03, 2008 8:17 pm
Location: Haukipudas

Re: Offtopic (I/2010)

Post by Requiem for Anthrax »

eeeeeh, jotenkin tuntui tyhmältä tuo mitä ne teki. Mutta minkähän ihmeen takia niiden piti mennä sulkemaan koko sivusto sadan idiootin takia.
Turmankylä
huonoja pelejä, purkkaisia viritelmiä, tylsiä tarinoita.
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Offtopic (I/2010)

Post by temu92 »

http://www.iltalehti.fi/uutiset/2010032 ... 6_uu.shtml

Sinänsä naurettavaa, tuskin kenelläkään on ollut varsinaisesti yrittää "kostaa" mitään puheita. Kuhan vaan joku pelle sattumalta löytänyt keinon tunkeutua sivulle ja sitten päättänyt lähteä muuttelemaan asioita/jakamaan tunnustiedot.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: Offtopic (I/2010)

Post by Koodiapina »

temu92 wrote:joku pelle sattumalta löytänyt keinon tunkeutua sivulle
Vähän kunniootusta poika, kun puhut anonyymeistä leguaaneista.

http://www.iltasanomat.fi/uutiset/kotim ... id=2053801
Iltasanomat wrote:Älypää.com:in etusivu sen sijaan toimi. ...
Vääriin käsiin päätyi ainakin tietovisailusivusto Älypää.com:in ja kuvafoorumi Kuvalauta.fi:n käyttäjien salasanoja.
Iltasanomien asiantuntemus on aina yhtä mieltä ylentävää.

Kuvalauta muuten avattiin taas. Spudro spärde.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Offtopic (I/2010)

Post by Feuer »

Hyi hitto, voisi varoa vähän... Tikku kiinni koneessa ja pyörähdän tuolilla neljänneskierroksen, jotta saan näytön näkökenttääni. Tunnen polvessani jotain, kuulen erittäin pahan kuuloisen äänen, ja tajuan että viime aikoina pahaa onnea omannut tikkunihan se siellä vääntyi polven voimasta.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Offtopic (I/2010)

Post by Jonez »

Sen siitä saa kun tuotekehittäjillä on pelkät fallokset mielessä. Elektroniikkateollisuus tarvitsee enemmän naisia.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Offtopic (I/2010)

Post by Awaclus »

Grandi wrote:
temu92 wrote:joku pelle sattumalta löytänyt keinon tunkeutua sivulle
Vähän kunniootusta poika, kun puhut anonyymeistä leguaaneista.

http://www.iltasanomat.fi/uutiset/kotim ... id=2053801
Iltasanomat wrote:Älypää.com:in etusivu sen sijaan toimi. ...
Vääriin käsiin päätyi ainakin tietovisailusivusto Älypää.com:in ja kuvafoorumi Kuvalauta.fi:n käyttäjien salasanoja.
Iltasanomien asiantuntemus on aina yhtä mieltä ylentävää.

Kuvalauta muuten avattiin taas. Spudro spärde.
Älypäältä aikamoinen fail pistää ne salasanat palvelimelle kryptaamattomina.
Pettis
The Evil Admin
The Evil Admin
Posts: 1042
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: Offtopic (I/2010)

Post by Pettis »

Väitän kuitenkin, että vaikka aika moni nuori ohjelmoija (ja miksei vanhempikin) väittää osaavansa ohjelmoida esimerkiksi PHP:llä sivustoja hyvin, on tuo tietoturvapuoli silti aika heikolla pohjalla yleensä. Aika harva jaksaa ottaa selvää mahdollisista uhkista ja toteuttaa ne pienet toiminnot joiden avulla sitä tietoturvaa voi parantaa.

Suosittelen tutustumaan esimerkiksi OWASP-listaan jossa on listattu pahimpia uhkia. Uusi versio (2010) on työn alla, mutta tässä on 2007-vuoden versio joka ei hirveästi ole vanhentunut: http://www.owasp.org/index.php/Top_10_2007
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
User avatar
buke44
Active Member
Posts: 169
Joined: Sat May 23, 2009 8:10 pm
Location: Tampere

Re: Offtopic (I/2010)

Post by buke44 »

Tuli mahtava idea että kehitettäis uusi kieli, minkä sanat ois vaan numeroarvoja. Kielessä ei olisi taivutuksia, vaan kaikki myös monikon tunnus olisi prepositio tai postpositio. Jokainen pre- tai postpositio olisi 1 tavuisessa muuttujassa ja muille sanoille oma arvo 4 tavuisesta muuttujasta. Tämä säästäis paljon tilaa esim monikielisiltä nettisivuilta, kun itse sivustojen tekstit olis palvelimella tällä kielellä, selain vaan kääntäis sen selaimen oletuskielelle. Jos tämmösestä tulisi maailmanlaajuinen standarti, niin se säästäisi paljon levytilaa ja tiedonsiirtoa nettisivuilla joilla on paljon tekstiä, koska sanat olisivat paljon pienempiä. Esimerkiksi "Tietokone" voidaan lyhyimmillään merkitä 9 tavulla. Tossa kielessä joka sanaan menisi vain 4 tavua.
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Offtopic (I/2010)

Post by temu92 »

Pettis wrote:Väitän kuitenkin, että vaikka aika moni nuori ohjelmoija (ja miksei vanhempikin) väittää osaavansa ohjelmoida esimerkiksi PHP:llä sivustoja hyvin, on tuo tietoturvapuoli silti aika heikolla pohjalla yleensä. Aika harva jaksaa ottaa selvää mahdollisista uhkista ja toteuttaa ne pienet toiminnot joiden avulla sitä tietoturvaa voi parantaa.
On aika tosi. En kehtaa linkata http://vpenis.bluefoxgames.org:ia koska siellä on ties mitä tietoturva-aukkoja mm. SQL-injektiot jne.
Locked