WinFuture-Forum.de: Minesweeper - Programmvorstellung - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Minesweeper - Programmvorstellung Python 2 u. 3 + Tkinter


#1 Mitglied ist offline   Astorek 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.145
  • Beigetreten: 28. Juli 07
  • Reputation: 42
  • Geschlecht:Männlich

geschrieben 21. April 2017 - 23:09

Hi @ all,

Tjoar, ich hatte einfach in den letzten Tagen die Lust entwickelt, einen Minesweeper-Clone zu schreiben, den ich hier mal zum Download bereitstelle^^.

Screenshot:
Eingefügtes Bild

Leider sind mit Python erstellte .EXE-Dateien relativ groß:
Download mit .EXE-Datei, ca. 7 MB groß
(Mirror, falls Oberer nicht/zu langsam geht)

Wer Python selbst hat, kann sich alternativ auch "nur" den Quelltext herunterladen, der gerademal 10 KB groß ist:
Download des Quelltextes

Zum Spiel selbst muss ich, glaube ich, nicht allzuviel sagen ;) . Es ist halt Minesweeper in Reinkultur, hat verschiedene Schwierigkeitsgrade samt "Benutzerdefiniert", Rechtsklicks sind wie im Original möglich und ein Timer informiert über die vergangene Zeit. Man kann auch auf bereits geöffnete Felder klicken und alle angrenzenden Felder öffnen sich - sofern genausoviele Felder rot markiert sind wie Zahl des bereits geöffneten Felds.

Für Leute, die den Quelltext ohne EXE zum Laufen bringen wollen:
Das Spiel wurde erfolgreich unter Python 2.7 und 3.6 getestet; sehr wahrscheinlich läuft es auch auf etwas älteren Versionen, solange die eingesetzte Python-Version nicht zu alt ist. Das Spiel habe ich nur unter Windows getestet, bin mir aber sehr sicher, dass der Quelltext auch unter Linux läuft, solange die Tkinter-Bindings für Python mitinstalliert sind. Zu Macs kann ich nichts sagen.

Tjoar², zum Quelltext selbst (für alle, die es interessiert) kann ich auch noch ein paar Anmerkungen schreiben:
- Ich bin großteils Hobbyprogrammierer, der idR. fast nur Scripte schreibt. Erwartet also keinen tiptop-sauberen Quelltext^^.
- Der Quelltext ist eine einzige Datei! Bei einem Projekt dieser Größe (immerhin ca. 700 Zeilen) werde ich das nicht mehr machen, zu unübersichtlich^^.
- Erst spät ist mir die Idee gekommen, dass ich einen Timer einbauen könnte. Dieser ist aber ziemlich hingeschludert, was man im Quelltext merkt. Normalerweise hab ich mich bemüht, das alles ein wenig im MVC-Modell zu trennen, aber beim Timer kam mir diese Idee irgendwie viel zu spät, und das sieht man im Quelltext^^.
- Davon abgesehen, sollte das Programm allerdings fehlerfrei arbeiten. Wer weiß, wenn mich abermals der Ehrgeiz packt, könnte ich mir ein paar Erweiterungen vorstellen; gibt ja einige Stellen beim Original-Minesweeper, die eigentlich jeden Spieler nerven^^.

Tjoar³, würd mich über Feedback freuen :)

Dieser Beitrag wurde von Astorek bearbeitet: 22. April 2017 - 13:56

0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 22. April 2017 - 09:00

Sehr nett. :)

Python ist natürlich immer so ne Sache mit der Typerei. Und ich bin auch nicht sicher, ob das Zufall und aus Versehen war. Daher nur als kleiner Hinweis: Wenn Du eine Variable hast und die hat zB einen Integer, dann solltest Du die Variable nicht für Strings oder Objekte oder sonstwas weiterverwenden. Sonst kommst Du in des Teufels Kochpott. :imao:

Konkret aufgefallen ist mir das in ##842f. Da legst Du eine Array an und machst in der nächsten Zeile einen Skalar draus (Int). Hab nochmal flüchtig drübergeschaut, aber 'spontan' nix anderes gesichtet.

Außerdem, ebenfalls als Hinweis: Wenn Du nur eine fixe Anzahl von Zeichenfolgen hast, dann kann es sinnvoll sein, für diese Zeichenfolgen Konstanten anzulegen, statt expliziten Text zu verwenden.

Dann würdest Du also zB eine Datei lang.de.py anlegen können und eine Datei lang.en.py und so weiter, wo Du abgeleitete Sprachklassen mit den Konstanten anlegen könntest. Wenn das da ist, läßt sich mit einer Codezeile eine der abgeleiteten Sprachklassen auswählen und hey presto, fast aufwandslos hast Du nun eine neue UI-Sprache implementiert. Und Du müßtest auch nicht im Quelltext rumsuchen, wenn Du irgendwo einen Schreibfehler finden solltest oder einfach nur den Anzeigetext ändern willst. (Insbesondere, wenn ein Text öfter verwendet werden muß.)

Danke Dir fürs Bauen und fürs Bereitstellen. :)
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   Astorek 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.145
  • Beigetreten: 28. Juli 07
  • Reputation: 42
  • Geschlecht:Männlich

geschrieben 22. April 2017 - 14:10

Vielen Dank fürs Feedback! :)


Beitrag anzeigenZitat (RalphS: 22. April 2017 - 09:00)

Sehr nett. :)

Python ist natürlich immer so ne Sache mit der Typerei.
Ja, stimmt schon; da muss man sich als Programmierer selbst an eine Konvention halten, ansonsten wird es sehr schnell unübersichtlich^^.

GUI-Programmierung "von Hand" ist gefühlt sowieso immer relativ unsauber, egal bei welcher Sprache und selbst unter Einhaltung der Best-Practice... Verstehe da jeden Programmierer, der für kleinere Dinge lieber eine Kommandozeilen-Oberfläche baut^^.

Zitat

Und ich bin auch nicht sicher, ob das Zufall und aus Versehen war. Daher nur als kleiner Hinweis: Wenn Du eine Variable hast und die hat zB einen Integer, dann solltest Du die Variable nicht für Strings oder Objekte oder sonstwas weiterverwenden. Sonst kommst Du in des Teufels Kochpott. :imao:

Konkret aufgefallen ist mir das in ##842f. Da legst Du eine Array an und machst in der nächsten Zeile einen Skalar draus (Int). Hab nochmal flüchtig drübergeschaut, aber 'spontan' nix anderes gesichtet.
Oh ja ;) . Sowas nutze ich aber auch fast nur bei Variablen, die sowieso nur in den nächsten 3-4 Quelltextzeilen gebraucht werden und dann weggeworfen werden können. Bei Daten, die während der längeren Laufzeit gespeichert werden sollen, wäre das fatal^^.

Zitat

Außerdem, ebenfalls als Hinweis: Wenn Du nur eine fixe Anzahl von Zeichenfolgen hast, dann kann es sinnvoll sein, für diese Zeichenfolgen Konstanten anzulegen, statt expliziten Text zu verwenden.

Dann würdest Du also zB eine Datei lang.de.py anlegen können und eine Datei lang.en.py und so weiter, wo Du abgeleitete Sprachklassen mit den Konstanten anlegen könntest. Wenn das da ist, läßt sich mit einer Codezeile eine der abgeleiteten Sprachklassen auswählen und hey presto, fast aufwandslos hast Du nun eine neue UI-Sprache implementiert. Und Du müßtest auch nicht im Quelltext rumsuchen, wenn Du irgendwo einen Schreibfehler finden solltest oder einfach nur den Anzeigetext ändern willst. (Insbesondere, wenn ein Text öfter verwendet werden muß.)
Das ist eine sehr gute Idee; ich wollte mich sowieso auch mal drüber informieren, wie das andere Frameworks handhaben, die Ähnliches ja schon bereitstellen (denke da z.B. an Qt)^^.

Zitat

Danke Dir fürs Bauen und fürs Bereitstellen. :)
Danke Dir fürs Feedback-Geben. :)
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0