Schiebe Puzzle von Rene Mayers Buch?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

bruce185

Betreff: Schiebe Puzzle von Rene Mayers Buch?

BeitragMo, Nov 14, 2005 7:23
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
sry das ich mal wieder fragen habe, aber ich habe gerade von Rene Mayers Buch das Schiebe Puzzle abgetippt, nun ja, ich verstehe fast garnichts von diesem Code, das ist so kompliziert, daher wollte ich fragen ob ihr bei diesem Code ein Paar Kommentare dazu schreiben könnt, was die Codes bewirken, ich würde mich sehr freuen wenn das einer machen könnte, ich poste es mal hier rein:

BlitzBasic: [AUSKLAPPEN]

;PUZZLE
Graphics 1024,768,16,1
SetBuffer BackBuffer()

HidePointer

Dim Feld (5,5)
Dim Mischen(24)

font = LoadFont(\"Arial\",40,1,0,0)
SetFont font

hinter = LoadImage(\"space.bmp\")
tiles = LoadImage(\"blocks1.bmp\")
maus = LoadImage(\"maus.bmp\")
MaskImage maus,255,0,255

;Spielsteine erzeugen
stein = CreateImage(32,32)
SetBuffer ImageBuffer(stein)
DrawImageRect stein,0,0,444,308,32,32
ScaleImage stein,2,2


;aktiven Spielstein erzeugen
aktivstein = CreateImage(32,32)
SetBuffer ImageBuffer(aktivstein)
DrawImageRect tiles,0,0,2,342,32,32
ScaleImage aktivstein,2,2


;Spielsteine verteilen
SeedRnd MilliSecs()

For I=1 To 5
For J=1 To 5
Repeat
A = Rand(0,24)
Until Mischen(A) = 0
Mischen(A) = 1
Feld(J,I) = A
Next
Next

For I=1 To 5
For J=1 To 5
A = Feld(I,J)
B$ = A
If A < 10 Then B$ = \"0\" + B$
Write B$ + \" \"
If J = 5 Then Print
Next
Next

zeit = 0
Minuten = 0
zeitt = MilliSecs()-1000
;Spielfeld zeichnen
Repeat
Cls
TileImage hinter

Color 0,128,255
For I=1 To 5
For J=1 To 5
If Feld(I,J) <> 0 DrawImage tiles,96 + I*64,20+J*64
If (I = X1) And (J = Y1) Then DrawImage aktivstein,96 + I*64, 20 + J*64
If Feld(I,J) > 9 Then Text 96 + 17 + I*64, 20 + 12 + J*64, Feld(I,J)
If (Feld(I,J) < 10) And (Feld(I,J) > 0) Then Text 96 + 25 + I *64, 20 + 12 + J*64, Feld(I,J)
Next
Next

;Mausposition auswerten
X1 = 0
Y1 = 0
X = MouseX()
Y = MouseY()

For I=1 To 6
If X > 95 + I*64 Then X1 = X1+1
Next

For J=1 To 6
If Y > 20 + J*64 Then Y1 = Y1+1
Next

If X1 = 6 Then X1 = 0
If Y1 = 6 Then Y1 = 0
If X1 = 0 Then Y1 = 0
If Y1 = 0 Then X1 = 0

If Feld(X1,Y1) = 0 Then X1=0: Y1=0
DrawImage maus,X,Y

If MouseDown(1) And Feld(X1,Y1) <> 0 Then
X2 = 0
Y2 = 0
If X1 > 1 Then If Feld(X1-1,Y1) = 0 Then X2 = X1-1: Y2=Y1
If X1 < 5 Then If Feld(X1+1,Y1) = 0 Then X2 = X1+1: Y2=Y1
If Y1 > 1 Then If Feld(X1,Y1-1) = 0 Then Y2 = Y1-1: X2=X1
If Y1 < 5 Then If Feld(X1,Y1+1) = 0 Then Y2 = Y1+1: X2=X1

;Stein verschieben
If X2 <> 0 Then
Feld(X2,Y2) = Feld(X1,Y1)
Feld(X1,Y1) = 0

Fertig = 0
For I=1 To 5
For J=0 To 4
If Feld(I,J+1) = I + (J*5) Then Fertig = Fertig + 1
Next
Next
If Fertig = 24 Then End
EndIf
EndIf

If MilliSecs()-zeitt > 1000 Then
sekunden = sekunden + 1

If sekunden > 59 Then sekunden = 0: Minuten = Minuten + 1

zeitt = MilliSecs()
EndIf

If sekunden < 10 Then
Text 20,60, \"Zeit: \" + Minuten + \":0\" + sekunden
EndIf

If sekunden > 9 Then
Text 20,60, \"Zeit: \" + Minuten + \":\" + sekunden
EndIf

Text 20,20, \"Fertig: \" + Fertig
Flip

Until KeyHit(1)
End


ich danke euch vielmals wenn das einer machen könnte, danke schonmal Sad

MFG Andreas

-jc-

BeitragMo, Nov 14, 2005 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Hauptschleife ("Repeat ... Until KeyHit (1)") könntest du etwas deutlicher kennzeichnen, ansonsten aber ist der Code prima lesbar.

Xalon

BeitragMo, Nov 14, 2005 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Um ehrlich zu sein,damals wie ich angefangen hab hab ich desauch net kapiert,war mir aber egal,hab dann einfach ein kleines 2d Spiel geproggt,danach war mir einiges klarer
Was ich damit sagen will:Programmier erst mal selber was,dann verstehste des wohl leichter Wink

Xalon
>>Besucht doch mal meine Seite,mit NEUEN Tutorials<<
User posted image

Ctuchik

BeitragMo, Nov 14, 2005 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde es ist auch relativ schwer sich in anderer Leute Codes ohne ausreichende Kommentare zurechtzufinden! Ein Programm abzutippen bringt dem Anfänger meiner Meinung nach fast nichts zum Verständnis.
Wie Xalon sagt würde ich zuerst mal mit ganz einfachen Programmen anfangen, um die ganzen Befehle kennenzulernen. Dann sollte man sich ein kleines Spiel vornehmen und versuchen das selbstständig umzusetzen. Die meisten fangen mit einem simplen Spaceshooter an, ich hab damals nen Pong-Klon programmiert.
Wenn sich dann die ersten Probleme ergeben, bei denen man nicht weiterkommt kann man sich vorhandene Codes anschauen, um zu sehen wie andere Leute das Problem angehen und lösen. Und wenns dann immernoch nicht geht, gibts ja das Forum hier Smile
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

bruce185

BeitragMo, Nov 14, 2005 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für die Antwort, ich habe ja schon einige Spiele angefangen, aber nicht Fertig Programmiert, weil ich einfach manchmal nicht weiterkomme, und was ich noch Fragen wollte, ob das Buch von Rene Mayer gut oder nicht so gut ist, habe 2 Bücher hier liegen, von Rene Mayer und von Hack'n Play, ich habe gehört dass das Buch gut sein sollte von Rene Mayer!, ich danke euch schonmal für die antwort

Andreas

bruce185

BeitragMo, Nov 14, 2005 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
achso und nochwas, wie kann ich die Steine erneut Mischen?, habe es versucht aber dann hat es voll gehangen, es soll hier rein

If MouseDown(1) Then

EndIf

danke schonmal Smile

Andreas

Ctuchik

BeitragDi, Nov 15, 2005 0:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Dazu musst du lediglich den Teil der fürs Mischen zuständig ist noch einmal ausführen:
Der Array Mischen gibt dabei für jedes der 25 Teile (Index 0-24) an, ob es schon eingesetzt wurde. (1 für schon benutzt und 0 für noch nicht benutzt)
Vorher muss also noch der Array Mischen wieder komplett auf 0 gesetzt werden:
Code: [AUSKLAPPEN]
For c=0 To 24
  Mischen(c) = 0
Next

Und dann dieser Code:
BlitzBasic: [AUSKLAPPEN]
For I=1 To 5    ;Die beiden For-Schleifen gehen die 25 Felder durch
For J=1 To 5
Repeat ;In dieser Schleife wird solange...
A = Rand(0,24) ;...ein zufälliges Teil ausgesucht...
Until Mischen(A) = 0 ;...bis man ein Teil findet, dass noch nicht benutzt wurde
Mischen(A) = 1 ;Dann dieses Teil als benutzt markieren
Feld(J,I) = A ;Und in das entsprechende Feld setzen
Next
Next


Es empfiehlt sich das ganze in eine Funktion zu packen, damit du nur noch TeileMischen() (oder wie auch immer du die Funktionen nennen willst, sollte aber ein sinnvoller Name sein Wink ) schreiben musst, um das ganze jederzeit neu mischen zu können.
Wenn du schon weißt wie man Funktionen benutzt um so besser, ansonsten kannst du es jetzt lernen Very Happy
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

bruce185

BeitragDi, Nov 15, 2005 3:52
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für die hilfen Very Happy

wisst ihr vieleicht warum das Spiel bei mir Flackert, ich habe doch den Befehl Flip gestzt, kann das auch sein wegen ImageBuffer oder so, weil manchmal Flackert es häftig, das muss doch irgendwie weg gehen, oder?
danke schonmal Smile

Andreas

-jc-

BeitragDi, Nov 15, 2005 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Zeile

SetBuffer BackBuffer

solltest du hinter die ImageBuffer-Anweisungen setzen, am besten direkt vor die Hauptschleife.

Xalon

BeitragDi, Nov 15, 2005 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Und die () hinter backbuffer nicht vergesen.


Xalon
>>Besucht doch mal meine Seite,mit NEUEN Tutorials<<
User posted image

bruce185

BeitragDi, Nov 15, 2005 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
es geht trotzdem net, habe alles versucht, so kann ich mein Spiel aufjedenfall nicht lassen, Das Flackert ohne Ende, kann es auch wegen die For schleifen sein?, danke schonmal Sad

Andreas

-jc-

BeitragMi, Nov 16, 2005 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir funktioniert das alles problemlos mit folgendem Code-Anfang:

BlitzBasic: [AUSKLAPPEN]

;PUZZLE
Graphics 1024,768,16,1

HidePointer

Dim Feld (5,5)
Dim Mischen(24)

font = LoadFont(\"Arial\",40,1,0,0)
SetFont font

hinter = LoadImage(\"space.bmp\")
tiles = LoadImage(\"blocks1.bmp\")
maus = LoadImage(\"maus.bmp\")
MaskImage maus,255,0,255

;Spielsteine erzeugen
stein = CreateImage(32,32)
SetBuffer ImageBuffer(stein)
DrawImageRect stein,0,0,444,308,32,32
ScaleImage stein,2,2


;aktiven Spielstein erzeugen
aktivstein = CreateImage(32,32)
SetBuffer ImageBuffer(aktivstein)
DrawImageRect tiles,0,0,2,342,32,32
ScaleImage aktivstein,2,2


;Spielsteine verteilen
SeedRnd MilliSecs()

For I=1 To 5
For J=1 To 5
Repeat
A = Rand(0,24)
Until Mischen(A) = 0
Mischen(A) = 1
Feld(J,I) = A
Next
Next

For I=1 To 5
For J=1 To 5
A = Feld(I,J)
B$ = A
If A < 10 Then B$ = \"0\" + B$
Write B$ + \" \"
If J = 5 Then Print
Next
Next

zeit = 0
Minuten = 0
zeitt = MilliSecs()-1000

SetBuffer BackBuffer()

;Spielfeld zeichnen


Also genau wie bei dir, nur dass der Backbuffer erst nach den Imagebuffern gesetzt wird.

bruce185

BeitragMi, Nov 16, 2005 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
boa vielen dank, jetzt funktioniert das ganze ohen das es Flackert, du hast recht, nur den Befehl SetBuffer BackBuffer(), müsste ich nach ImageBuffer setzen, vielen vielen dank Laughing

Andreas

bruce185

BeitragDo, Nov 17, 2005 1:58
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, aber nur noch eine frage:
habe es versucht das die Steine Neu Gemischt werden, aber dann ist es hängen geblieben, könnte mir das vieleicht einer posten wie man die Steine Neu Mischt, ich bin euch sehr dankbar wenn mir das einer Posten könnt, danke schonmal Smile

Andreas

Ctuchik

BeitragDo, Nov 17, 2005 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich doch schon erklärt wie man das macht, Lesen bildet.
Am besten eine Funktion wie folgt:
BlitzBasic: [AUSKLAPPEN]
Function SteineMischen()
For I=0 To 24
Mischen(I) = 0
Next

For I=1 To 5
For J=1 To 5
Repeat
A = Rand(0,24)
Until Mischen(A) = 0
Mischen(A) = 1
Feld(J,I) = A
Next
Next
End Function


Und dann brauchst du nurnoch zu machen, z.B.:
Code: [AUSKLAPPEN]
If KeyHit(57) Then SteineMischen()


MfG Ctuchik
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

bruce185

BeitragDo, Nov 17, 2005 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
danke dir, es funktioniert, ich weiss man sollte es selber Probieren, damit man auch was lernt, aber habe alles versucht, und das mit Functionen kann ich bereits, ist ja nicht schwer, und danke nochmal Very Happy

Andreas
 

Moses

BeitragDo, Nov 17, 2005 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ich weiss nicht es macht sich event. gut auch mal ein buch über allgemeine grundlagen der imperativen programierung zu besorgen, manchmal versteht man durch ein flussdiagram besser den möglichen einsatz von strukturen die einem über den weg laufen, zb. schleifen mit vorrangesetzter oder nachgestellter prüfung, zählschleifen und if abfragen soilten schon sitzen.

supermann

BeitragMo, Nov 21, 2005 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder schreib einen Teil ab schaue was er bewirkt und schreib dann weiter
User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group