Bild wird geladen, jedoch nicht "verwendet"

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Keine64MB

Betreff: Bild wird geladen, jedoch nicht "verwendet"

BeitragDi, Dez 25, 2012 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo, ich arbeite derzeit an einem minesweeper-Klon. Eigentlich habe ich ihn in Grundzügen fertig, doch werden die bilder zwar geladen, jedoch wird ein Fehler zurückgeliefert, solabld es verwendet wird. ("Image does not exist!") ich habe auch überprüft, ob die Bilder geladen werden, indem ich deren Identität imMenü ausgebe, die ungleich 0 ist.
Code: [AUSKLAPPEN]
SeedRnd MilliSecs()
SetBuffer BackBuffer()
AppTitle "Minesweeper Extreme"
Dim feld(31, 23, 1)
Global ende = False 
Global feld_image = LoadImage("gfx\feld.bmp")
Global fahne_image = LoadImage("gfx\fahne.bmp")
Global zeiger = LoadImage("gfx\zeiger.bmp")
Global bombe = LoadImage("gfx\bombe.bmp")
Global zeigerpos_x
Global zeigerpos_y
Graphics 1024, 768, 32, 6
timer = CreateTimer(30)
font = LoadFont(Terminal, 32, 1)
SetFont font
Color 0, 0, $33FF00

Function setup()
   breite_1 = StringWidth("Minesweeper Extreme")
   pos_x_1 = 512 - breite_1/2
   Text pos_x_1, 200, "Minesweeper Extreme"
   breite_2 = StringWidth("[Esc] : Quit")
   pos_x_2 = 512 - breite_2/2
   Text pos_x_2, 240, "[Esc] : Quit"
   breite_3 = StringWidth("[Space] : Start Game")
   pos_x_3 = 512 - breite_3/2
   Text pos_x_3, 280, "[Space] : Start Game"
   Text 400, 400, feld_image
End Function

Function setup_mines()
   For i = 0 To i = 150
      rnd_x = Rnd(0, 31)
      rnd_y = Rnd(0, 23)
      feld(rnd_x, rnd_y, 1) = 9 ; ebene 1 enthält die felsinhalte
   Next
End Function

Function setup_numbers()
   For i=0 To i=31
      For j=0 To j=23
         zaehler_minen = 0
         If Not feld(i, j, 1) = 9
            If i<31
               If feld(i+1, j, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If i<31 And j<23
               If feld(i+1, j+1, 1) = 1 Then zaehler_minen = zaehler_minen + 1  ; unbedingt Überprüfung auf array index out of bounds machen!
            EndIf
            If i>0
               If feld(i-1, j, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If i>0 And j>0
               If feld(i-1, j-1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If j<23
               If feld(i, j+1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If j>0
               If feld(i, j-1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If i<31 And j<0
               If feld(i+1, j-1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If i>0 And j<23
               If feld(i-1, j+1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            feld(i, j, 1) = zaehler_minen
         EndIf
      Next
   Next
End Function



Function drawmap()
   For i = 0 To 31
      For j = 0 To 31
         If feld(i, j, 0) = 0 Then DrawImage feld_image, i*32, j*32 ; 1 = unaufgedeckt ;)
         If feld(i, j, 0) = 2 Then DrawImage fahne_image, i*32, j*32
         If feld(i, j, 0) = 1
            If feld(i, j, 1) = 1 Then Text i*32, j*32, "1"
            If feld(i, j, 1) = 2 Then Text i*32, j*32, "2"
            If feld(i, j, 1) = 3 Then Text i*32, j*32, "3"
            If feld(i, j, 1) = 4 Then Text i*32, j*32, "4"
            If feld(i, j, 1) = 5 Then Text i*32, j*32, "5"
            If feld(i, j, 1) = 6 Then Text i*32, j*32, "6"
            If feld(i, j, 1) = 7 Then Text i*32, j*32, "7"
            If feld(i, j, 1) = 8 Then Text i*32, j*32, "8"
         EndIf
      Next
    Next
   update_zeigerpos()
End Function

Function update_zeigerpos()
   zeigerpos_x = MouseX()/32
   zeigerpos_y = MouseY()/32
   DrawImage zeiger, zeigerpos_x*32, zeigerpos_y*32
End Function

Function update_zeigerclick()
   If MouseHit(1)
      If feld(zeigerpos_x, zeigerpos_y, 1) = 9
         ende = True
      Else
         feld(zeigerpos_x, zeigerpos_y, 0) = 1
      EndIf
   ElseIf MouseHit(2)
      feld(zeigerpos_x, zeigerpos_y, 0) = 2
   EndIf
End Function

Function game()
   update_zeigerpos()
   update_zeigerclick()
   drawmap()
End Function

While Not KeyHit(1)
   setup()
   If KeyHit(57)
      setup_mines()
      setup_numbers()
      drawmap()
      While Not ende = True
         game()
      Wend
   EndIf
Wend
End

Über Hilfe würde ich mich sehr freuen,

Frohe weihnacht, Keine64MB
 

Lador

BeitragDi, Dez 25, 2012 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
In welcher Zeile zeigt denn der Debugger die Fehlermeldung an bzw. zu welchem Bild?

Eigentlich heißt "Image does not exist", dass es das Bild nicht gibt und es deswegen nicht verwendet werden kann. In BlitzBasic ist es doch so, dass es schon eine Fehlermeldung bei LoadImage() gibt, wenn es nicht existiert?

MFG Lador
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran"
Screenshot | Worklog
Fortschritt: ca. 70%

Hubsi

BeitragDi, Dez 25, 2012 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Fehler ist das Du nach dem laden der Bilder ein Graphics ausführst. Das räumt den ganzen Grafikspeicher aus. Sprich die Adressen stehen zwar noch in den Variablen, aber die Daten sind futsch.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Keine64MB

BeitragDi, Dez 25, 2012 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, das hat es gelöst Smile
(k)eine Signatur

Keine64MB

Betreff: Problem - the next one

BeitragDi, Dez 25, 2012 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
So das waäre gelöst. Allerdings arbeiten die funktionen setup_mines() und setup_numbers nicht mehr ....
Code: [AUSKLAPPEN]
SeedRnd MilliSecs()
SetBuffer BackBuffer()
AppTitle "Minesweeper Extreme"
Dim feld(31, 23, 1)
Global ende = False
Graphics 1024, 768, 32, 6
Global feld_image = LoadImage("gfx\feld.bmp")
Global fahne_image = LoadImage("gfx\fahne.bmp")
Global zeiger = LoadImage("gfx\zeiger.bmp")
Global bombe = LoadImage("gfx\bombe.bmp")
Global zeigerpos_x
Global zeigerpos_y
timer = CreateTimer(30)
font = LoadFont(Terminal, 32, 1)
SetFont font
Color 0, 0, $33FF00

Function setup()
   breite_1 = StringWidth("Minesweeper Extreme")
   pos_x_1 = 512 - breite_1/2
   Text pos_x_1, 200, "Minesweeper Extreme"
   breite_2 = StringWidth("[Esc] : Quit")
   pos_x_2 = 512 - breite_2/2
   Text pos_x_2, 240, "[Esc] : Quit"
   breite_3 = StringWidth("[Space] : Start Game")
   pos_x_3 = 512 - breite_3/2
   Text pos_x_3, 280, "[Space] : Start Game"
End Function

Function setup_mines()
   For i = 0 To i = 150
      rnd_x = Rnd(0, 31)
      rnd_y = Rnd(0, 23)
      feld(rnd_x, rnd_y, 1) = 9 ; ebene 1 enthält die felsinhalte
   Next
End Function

Function setup_numbers()
   For i=0 To i=31
      For j=0 To j=23
         zaehler_minen = 0
         If Not feld(i, j, 1) = 9
            If i<31
               If feld(i+1, j, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If i<31 And j<23
               If feld(i+1, j+1, 1) = 1 Then zaehler_minen = zaehler_minen + 1  ; unbedingt Überprüfung auf array index out of bounds machen!
            EndIf
            If i>0
               If feld(i-1, j, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If i>0 And j>0
               If feld(i-1, j-1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If j<23
               If feld(i, j+1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If j>0
               If feld(i, j-1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If i<31 And j<0
               If feld(i+1, j-1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            If i>0 And j<23
               If feld(i-1, j+1, 1) = 1 Then zaehler_minen = zaehler_minen + 1
            EndIf
            feld(i, j, 1) = zaehler_minen
         EndIf
      Next
   Next
End Function



Function drawmap()
   Cls
   For i = 0 To 31
      For j = 0 To 23
         If feld(i, j, 0) = 0 Then DrawImage feld_image, i*32, j*32 ; 1 = unaufgedeckt ;)
         If feld(i, j, 0) = 2 Then DrawImage fahne_image, i*32, j*32
         If feld(i, j, 0) = 1
            If feld(i, j, 1) = 1 Then Text i*32, j*32, "1"
            If feld(i, j, 1) = 2 Then Text i*32, j*32, "2"
            If feld(i, j, 1) = 3 Then Text i*32, j*32, "3"
            If feld(i, j, 1) = 4 Then Text i*32, j*32, "4"
            If feld(i, j, 1) = 5 Then Text i*32, j*32, "5"
            If feld(i, j, 1) = 6 Then Text i*32, j*32, "6"
            If feld(i, j, 1) = 7 Then Text i*32, j*32, "7"
            If feld(i, j, 1) = 8 Then Text i*32, j*32, "8"
         EndIf
      Next
    Next
   update_zeigerpos()
   Flip
End Function

Function update_zeigerpos()
   zeigerpos_x = MouseX()/32
   zeigerpos_y = MouseY()/32
   DrawImage zeiger, zeigerpos_x*32, zeigerpos_y*32
End Function

Function update_zeigerclick()
   If MouseHit(1)
      If feld(zeigerpos_x, zeigerpos_y, 1) = 9
         ende = True
      Else
         feld(zeigerpos_x, zeigerpos_y, 0) = 1
      EndIf
   ElseIf MouseHit(2)
      feld(zeigerpos_x, zeigerpos_y, 0) = 2
   EndIf
End Function

Function game()
   update_zeigerpos()
   update_zeigerclick()
   drawmap()
End Function

While Not KeyHit(1)
   setup()
   If KeyHit(57)
      setup_mines()
      setup_numbers()
      drawmap()
      While Not ende = True
         game()
      Wend
   EndIf
Wend
End

über erneute hilfe wäre ich wieder dankbar!
(k)eine Signatur

ZEVS

BeitragDi, Dez 25, 2012 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
BlitzBasic: [AUSKLAPPEN]
For i = 0 To i = 150

korrekt:
BlitzBasic: [AUSKLAPPEN]
For i = 0 To 150


ZEVS
 

PacMani

BeitragDi, Dez 25, 2012 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Else wird dir auch gefallen Wink

Keine64MB

BeitragDi, Dez 25, 2012 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, dumm vo nmir
(k)eine Signatur
 

PacMani

BeitragDi, Dez 25, 2012 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
unwissen != dumm Wink man lernt halt nie aus
 

BBPro2

BeitragDi, Dez 25, 2012 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde mir aber grundsätzlich mal gedanken machen, wenn du so viele zeilen code hast und
1) ein sytax error (i = 150) vorliegt - sprich es gar nicht compilieren kann
2) quasi in zeile 1 (graphics) schon was schief läuft.
das heißt ja quasi zwangsläufig, dass du all die zeilen on the fly geschrieben hast um dann festzustellen,
dass nichts geht.
du solltest - zumindest und gerade am anfang - schritt für schritt vorgehen. 5 zeilen code schreiben -
schauen ob sie machen was du willst, weitere 5 zeilen - gucken, was passiert. etc.

ansonsten habe ich beim überfliegen folgendes konstrukt gesehen:
Code: [AUSKLAPPEN]
            If feld(i, j, 1) = 1 Then Text i*32, j*32, "1"
            If feld(i, j, 1) = 2 Then Text i*32, j*32, "2"
            If feld(i, j, 1) = 3 Then Text i*32, j*32, "3"
            If feld(i, j, 1) = 4 Then Text i*32, j*32, "4"
            If feld(i, j, 1) = 5 Then Text i*32, j*32, "5"
            If feld(i, j, 1) = 6 Then Text i*32, j*32, "6"
            If feld(i, j, 1) = 7 Then Text i*32, j*32, "7"
            If feld(i, j, 1) = 8 Then Text i*32, j*32, "8"


das ist grauselig...
wie wärs mit einer zeile namens

Text i*32, j*32, feld (i, j, 1)

?
Stell dir vor du hast nicht 8 , sondern 2000000000 mögliche werte für das feld.
und dann stell dir vor du willst sie alle um 4 pixel nach rechts verschieben.
bei copy&paste wie du es hier gelöst hast sitzt du da ca 50 jahre am umschreiben - und mit meiner lösung ~2 sekunden Wink

Keine64MB

BeitragFr, Dez 28, 2012 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Der teil fiel mir auc herst später auf - stammte aus einem anderen programm von mir. Dort waren halt Bilder und keine Zahlen da, ich wollte etwas Zeit sparen. Mit meinem schlechten Stil - das ist eben noch in Arbeit Wink Wink Und dass ich zuerst die Funktionen schrieb, und erst dann diese anwendete führte zu diesen 2 fehlern. Mag sein, dass ich jetzt ein bisschen mit meiner Verteidigung übertreibe, aber so sehe ich das nunmal Smile
(k)eine Signatur

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group