Grafik ohne externe Dateien aus einer DataSection lesen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Grafik ohne externe Dateien aus einer DataSection lesen

Beitrag von Leo »

Für einen Wettbewerb von der PureBasic-Lounge, wo man keine externen Dateien verwenden darf hab ich mir folgende Procedure geschrieben

Code: Alles auswählen

	

;############################################################################# 
;############################################################################# 
;Procedure!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
;############################################################################# 
;############################################################################# 
Procedure GetSpriteFromData(id,*ptr,Zoom) 
    *a.LONG = *ptr 
    Breite = *a\l 
    *a + 4 
    Hoehe = *a\l 
    *a + 4 
    ; Zoom = *a\l 
    ; *a + 4 
    ret = CreateSprite(id,Breite*Zoom+Zoom,Hoehe*Zoom+Zoom) 
    StartDrawing(SpriteOutput(id)) 
    For Y = 0 To Hoehe 
        For X = 0 To Breite 
            Select *a\l 
                Case 0 : Color = RGB(0,0,0)       ;Schwarz 
                Case 1 : Color = RGB(0,0,255)     ;Blau 
                Case 2 : Color = RGB(0,255,0)     ;Grün 
                Case 3 : Color = RGB(255,0,0)     ;Rot 
                Case 4 : Color = RGB(128,128,128) ;Grau 
                ;Farben müssen noch erweitert werden...
            EndSelect 
            Box(X*Zoom,Y*Zoom,Zoom,Zoom,Color) 
            *a + 4 
        Next 
    Next 
    StopDrawing() 
    ProcedureReturn ret 
EndProcedure 

;############################################################################# 
;############################################################################# 
;Beispiel!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
;############################################################################# 
;############################################################################# 
InitSprite() 
InitKeyboard()
#ScrWidth=1024:#ScrHeight=768 
OpenScreen(#ScrWidth,#ScrHeight,32,"Bild ohne externe Dateien!") 

GetSpriteFromData(0,?Bild1,5) 
GetSpriteFromData(1,?Bild2,30) 

Repeat 
    ExamineKeyboard() 
    ClearScreen(0,0,0) 
    
    If KeyboardPushed(1) 
        Quit = #True 
    EndIf 
    
    For X = 0 To #ScrWidth/SpriteWidth(0) 
        For Y = 0 To #ScrHeight/SpriteHeight(0) 
            DisplaySprite(0,X*SpriteWidth(0),Y*SpriteHeight(0)) 
        Next 
    Next 
    DisplaySprite(1,#ScrWidth/2-SpriteWidth(1)/2,#ScrHeight/2-SpriteHeight(1)/2) 
    
    FlipBuffers() 
Until Quit = #True 

DataSection 
Bild1: 
Data.l 9,8 ;Breite,Hoehe 
Data.l 1,1,1,1,1,1,1,1,1,1 
Data.l 1,1,1,1,0,0,1,1,1,1 
Data.l 1,1,1,0,0,0,0,1,1,1 
Data.l 1,1,0,0,0,0,0,0,1,1 
Data.l 1,0,0,0,2,2,0,0,0,1 
Data.l 1,1,0,0,0,0,0,0,1,1 
Data.l 1,1,1,0,0,0,0,1,1,1 
Data.l 1,1,1,1,0,0,1,1,1,1 
Data.l 1,1,1,1,1,1,1,1,1,1 
Bild2: 
Data.l 9,8 ;Breite,Hoehe 
Data.l 4,4,4,4,4,4,4,4,4,4 
Data.l 4,1,1,1,1,1,1,1,1,4 
Data.l 4,1,1,0,3,3,0,1,1,4 
Data.l 4,1,0,0,3,3,0,0,1,4 
Data.l 4,1,3,3,3,3,3,3,1,4 
Data.l 4,1,0,0,3,3,0,0,1,4 
Data.l 4,1,1,0,3,3,0,1,1,4 
Data.l 4,1,1,1,1,1,1,1,1,4 
Data.l 4,4,4,4,4,4,4,4,4,4 
EndDataSection
Zuletzt geändert von Leo am 08.03.2005 19:25, insgesamt 2-mal geändert.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hi,

bei mir pasiert da nichts :cry:
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Wie? Es öffnet sich nicht mal ein Screen?
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Bei mir läufts, d.h. die Muster und das Logo in der Bildschirmmitte werden angezeigt.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hi,

habs jetzt mal zu Hause getestet:

Fehlermeldung:

"Error at line 54: InitKeyboard() must be called before use keyboard commands."

Kommt die bei euch nicht?
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

läuft problemlos

CNESM hat geschrieben:Hi,

habs jetzt mal zu Hause getestet:

Fehlermeldung:

"Error at line 54: InitKeyboard() must be called before use keyboard commands."

Kommt die bei euch nicht?
in zeile 47 steht InitKeyboard()

vermutlich schlägt das bei dir fehl ;)
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Saubere Arbeit.
Das erinnert mich an die 80ziger. Als sowas mit DATAs Gang und Gebe war.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

SoS hat geschrieben:läuft problemlos

CNESM hat geschrieben:Hi,

habs jetzt mal zu Hause getestet:

Fehlermeldung:

"Error at line 54: InitKeyboard() must be called before use keyboard commands."

Kommt die bei euch nicht?
in zeile 47 steht InitKeyboard()

vermutlich schlägt das bei dir fehl ;)
Hehe nein, ich habs vor einem Tag schnell reineditiert, hab gemerkt, dass es fehlt.. komischerweise gehen bei mir die Keyboard Befehle ohne ein Init.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Sehr gut, habs schon auf 100 Farben erweitert. :D Für was sind die #BLA #BLU undsoweiter Konstanten?

Mfg,
AndyX
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

AndyX hat geschrieben:Sehr gut, habs schon auf 100 Farben erweitert. :D Für was sind die #BLA #BLU undsoweiter Konstanten?

Mfg,
AndyX
Thx, Die Konstanten hab ich gemacht, damit man nich 0 sondern #BLA schreiben kann, manchmal vergisst man ja welche Zahl für was steht .. ich fands halt einfach übersichtlicher^^
Antworten