BPS #17: Schachbrett - Auswertung

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Xeres

Moderator

Betreff: BPS #17: Schachbrett - Auswertung

BeitragSo, Feb 19, 2012 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr könnt mir übrigens danken, in dem ihr mir für das erste Schachfeld 1 Cent, für das zweite 2 Cent, für das dritte 4 Cent usw. schickt. Danke!
Und nun weiter im Programm:

Das war die Aufgabe

Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern.

Diskussion
Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen.

Nächste Aufgabe
In einer Woche wird die Musterlösung nach editiert und in 2 die nächste Aufgabe eingestellt.

Viel Spaß & viel Erfolg!

Musterlösung:

Teil 1
BlitzMax: [AUSKLAPPEN]
'Teilaufgabe 1
'Zunaechst brauchen wir ein Grafikfenster
SuperStrict
Graphics 400,300
Const SqSz:Byte = 40 'Squaresize die Größe eines Quadrates in Pixeln

SetClsColor 125,125,125 'Hierdurch wird der Fensterhintergrund grau

While Not KeyHit(KEY_ESCAPE) Or AppTerminate() 'Eine Schleife, die nur durch Esc oder den Schließenbutton beendet wird
Cls 'Löscht den Bildschirminhalt
DrawBoard(4) 'Funktionsaufruf, Parameter zeigt der Funktion wieviele Felder wir haben möchten
Flip 'Wechselt den Buffer, so dass das fertig gezeichnete Bild auf den Bildschirm übertragen wird.

Wend 'springt zum Schleifenanfang

End

Function DrawBoard(sq:Byte)
Local height:Byte 'die Koordinate für die Y-Achse
Local width:Byte 'die Koordinate für die X-Achse
Local counter:Byte 'mit diesem Zähler, der in beiden Schleifen hochzählt, wird dafür gesorgt, dass trotz der geraden Zahlen die Felderfarben abwechseln
For height = 0 To sq - 1
counter = counter + 1
For width = 0 To sq - 1 'Die verschachtelte For-Schleife eignet sich hervorragend um 2dimensionale Felder anzuzeigen

counter = counter + 1
If counter Mod 2 <> 0 Then 'Mit Mod (Kurzform von "Modulus") kann geprüft werden, ob eine Zahl durch die zweite teilbar ist. Mod gibt dabei den "Rest" aus.
SetColor 255,255,255
Else
SetColor 0,0,0
EndIf
DrawRect width * SqSz, height * SqSz, SqSz, SqSz 'Zeichnet die gefüllten Quadrate ein
Next
Next
EndFunction



Teil 2
BlitzMax: [AUSKLAPPEN]
'Teilaufgabe 2
'Zunächst wird die Fenstergröße zwischengespeichert, der Wert könnte fürs zentrieren nützlich sein
SuperStrict
Const WINDOW_WIDTH:Short = 800
Const WINDOW_HEIGHT:Short = 600

'Setzt wieder unser Grafikfenster
Graphics WINDOW_WIDTH, WINDOW_HEIGHT

Const SqSz:Byte = 40 'Squaresize die Größe eines Quadrates in Pixeln
SetClsColor 125,125,125
While Not KeyHit(KEY_ESCAPE) Or AppTerminate()
Cls
DrawBoard(8) 'hier müssen nun 8 Felder angegeben werden.
Flip 'Wechselt den Buffer, so dass das fertig gezeichnete Bild auf den Bildschirm übertragen wird.

Wend

End

Function DrawBoard(sq:Byte) 'Funktion zum Zeichnen
Local height:Byte
Local width:Byte
Local counter:Byte 'mit diesem Zähler, der in beiden Schleifen hochzählt, wird dafür gesorgt, dass trotz der geraden Zahlen die Felderfarben abwechseln
Local letter:String = "ABCDEFGH" 'X-Achsen Bezeichnung des Schachfeldes
Local number:String = "12345678" 'Y-Achsen Bezeichnung des Schachfeldes
For height = 0 To sq - 1


counter = counter + 1
For width = 0 To sq - 1
If height = 0 Then 'beim ersten Durchlauf sollen die Felderbezeichnungen an den Rand gezeichnet werden, daher fragen wir hier ab
SetColor 255, 255, 255
DrawText Mid(letter, width + 1, 1), calcCentered(sq, WINDOW_WIDTH, width) + 12, calcCentered(sq, WINDOW_HEIGHT, 8) 'Mid wählt nur die gewünschte Anzahl an Zeichen (hier also 1) aus der Zeichenkette aus.
DrawText Mid(number, width + 1, 1), calcCentered(sq, WINDOW_WIDTH, 0) - 10 , calcCentered(sq, WINDOW_HEIGHT, width) +12 'die anderen beiden Parameter berechnen die Position für die Textausgabe
EndIf

counter = counter + 1 'Kurzschreibweise von counter + 1
If counter Mod 2 <> 0 Then 'Mit Mod (Kurzform von "Modulus") kann geprüft werden, ob eine Zahl durch die zweite teilbar ist. Mod gibt dabei den "Rest" aus.
SetColor 255,255,255
Else
SetColor 0,0,0
EndIf
DrawRect calcCentered(sq, WINDOW_WIDTH, width), calcCentered(sq, WINDOW_HEIGHT, height), SqSz, SqSz
Next

Next
EndFunction

Function calcCentered:Short(sq:Byte, Window:Short, position:Byte) 'Mit dieser Funktion berechne ich die Pixel-Koordinaten, per Parameter werden die benötigten Daten eingegeben
Return (Window - SqSz * sq) / 2 + position * SqSz 'Man benötigt die Fenstergröße, die Feldgröße, die maximale Anzahl der Felder und das aktuelle Feld
EndFunction
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group