@Freddyyy: Ja es gibt Beispiele im Internet. Zum Beispiel in diesem Thema im ersten Beitrag von Dir, da sieht man wie man ein Bild auf einem `Canvas`-Objekt erzeugt. Jetzt musst Du an das `Canvas` vom Turtlemodul heran kommen. Da gibt's eine Funktion bzw. Methode auf `Screen`-Objekten. Die ist eigentlich sehr offensichtlich benannt und man findet sie in der Dokumentation vom `turtle`-Modul.
Ich würde das Bild nicht in den positiven Quadranten platzieren, denn dann ist die obere linke Ecke im Mittelpunkt der Anzeige vom Turtlefenster. Und die Y-Achse läuft auch immer noch entgegengesetzt, Du musst die Koordinaten also so oder so in einer eigenen Funktion von Turtle-Koordinaten auf Bildkoordinaten umrechnen.
Nach der Projektbeschreibung: Also soll sich der Spieler gar nicht so frei bewegen können wie in meinem Beispielprogramm? Da ist die Labyrinth-Grafik ja komplett frei von irgendwelchen Einschränkungen und der Spieler bewegt sich da in recht kleinen Schritten. Schon etwas mehr als Pixel, 3 um genau zu sein, aber eben ein Bruchteil von der Wanddicke die ich da gezeichnet habe. Deine Beschreibung klingt jetzt eher nach einem Gitter aus grösseren Quadraten die jeweils die Mauern und die Schrittweite/Bewegungsfreiheit des Spielers einschränken. In dem Fall würde es vielleicht Sinn machen zwischen Weltkoordinaten und Anzeigekoordinaten zu unterscheiden.
@wuf: Ist das Hy-Programm wirklich so schwer zu lesen? Das kann man fast 1:1 auf Python umsetzen.
Tkinter App, Turtle ein JPG Skin zuweisen
- __blackjack__
- User
- Beiträge: 13099
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Also muss ich einj Canvas objekt mit dieser Funktion erzeugen und dann mein Image darauf legen. Dafür kann ich also die FKT am anfange benutzen ok. (die FKT am anfang ist übrigens von wuf)
Also ich wollte imprenzip einen anfangspunkt und eienen Endpunkt haben und derspieler muss dann vom einen zum anderen. Das ganze auf basis eines Labyrinths das ich mir mit gimp erzeugt habe. Ich habe häufiger irgendwas von Rawturtle gelesen und auch das das was mit Canvas zu tuhen hat.
[*]"RawTurtle (alias: RawPen) defines Turtle objects which draw on a TurtleScreen. Its constructor needs a Canvas, ScrolledCanvas or TurtleScreen as argument, so the RawTurtle objects know where to draw.
Derived from RawTurtle is the subclass Turtle (alias: Pen), which draws on “the” Screen - instance which is automatically created, if not already present.
All methods of RawTurtle/Turtle also exist as functions, i.e. part of the procedure-oriented interface."
Und es gibt noch "getcanvas()"
Mit beiden weiß ich aber wenig anzufangen.
Also ich wollte imprenzip einen anfangspunkt und eienen Endpunkt haben und derspieler muss dann vom einen zum anderen. Das ganze auf basis eines Labyrinths das ich mir mit gimp erzeugt habe. Ich habe häufiger irgendwas von Rawturtle gelesen und auch das das was mit Canvas zu tuhen hat.
[*]"RawTurtle (alias: RawPen) defines Turtle objects which draw on a TurtleScreen. Its constructor needs a Canvas, ScrolledCanvas or TurtleScreen as argument, so the RawTurtle objects know where to draw.
Derived from RawTurtle is the subclass Turtle (alias: Pen), which draws on “the” Screen - instance which is automatically created, if not already present.
All methods of RawTurtle/Turtle also exist as functions, i.e. part of the procedure-oriented interface."
Und es gibt noch "getcanvas()"
Mit beiden weiß ich aber wenig anzufangen.
- __blackjack__
- User
- Beiträge: 13099
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@wuf: Hy ist im Package Index, kann also einfach mit `pip` installiert werden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hi __blackjack__
Habe hier das hv mit Hilfe von synaptic installiert. Deinem Skript gab ich folgenden Namen turtle_trial.hy. Führe das Skript im Terminal mit hy turtle_trial.hy aus. Es wird folgende Exeption geworfen:
File "turtle_trial.hy", line 7, column 1
(def *white* (, 255 255 255)
^---------------------------
*wall-color* *white*
-------------------------
*move-distance* 3
----------------------
*fast-distance* 10
-----------------------
*fast-key* "f"
-------------------
*move-delay* 100 ; In milliseconds.
-----------------------------------------
*background-image* (-> (Image.open "test.png") (.convert "RGB")))
---------------------------------------------------------------------^
HyTypeError: `def' needs 2 arguments, got 14
Muss annehmen, dass hy alle für Python installierte Module wie:
functools
turtle
PIL
selber findet.
Gruss wuf
Habe hier das hv mit Hilfe von synaptic installiert. Deinem Skript gab ich folgenden Namen turtle_trial.hy. Führe das Skript im Terminal mit hy turtle_trial.hy aus. Es wird folgende Exeption geworfen:
File "turtle_trial.hy", line 7, column 1
(def *white* (, 255 255 255)
^---------------------------
*wall-color* *white*
-------------------------
*move-distance* 3
----------------------
*fast-distance* 10
-----------------------
*fast-key* "f"
-------------------
*move-delay* 100 ; In milliseconds.
-----------------------------------------
*background-image* (-> (Image.open "test.png") (.convert "RGB")))
---------------------------------------------------------------------^
HyTypeError: `def' needs 2 arguments, got 14
Muss annehmen, dass hy alle für Python installierte Module wie:
functools
turtle
PIL
selber findet.
Gruss wuf
Take it easy Mates!
- __blackjack__
- User
- Beiträge: 13099
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@wuf: Das ist dann wohl eine ältere Version von `def` und `setv` nur jeweils *einen* Namen an einen Wert binden konnte.
Wobei aktuell stabil glaube ich sogar 0.14.0 ist.
Wird es besser wenn Du das einzelne `def` durch das hier ersetzt?
Code: Alles auswählen
$ hy --version
hy 0.13.0
Wird es besser wenn Du das einzelne `def` durch das hier ersetzt?
Code: Alles auswählen
(def *white* (, 255 255 255)
(def *wall-color* *white*)
(def *move-distance* 3)
(def *fast-distance* 10)
(def *fast-key* "f")
(def *move-delay* 100) ; In milliseconds.
(def *background-image* (-> (Image.open "test.png") (.convert "RGB")))
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hi __blackjack__
Danke für deinen Feedback. Meine hy-Version hier ist 0.11.1-1.
Ich bekomme mit deiner Änderung jetzt noch folgende Fehlermeldung:
LexException: Premature end of input
Irgendwie kann ich mich mit dem Lisp-Syntax nicht so richtig anfreunden. Den er weicht zu stark von Python und C ab. Lisp ist sicher eine interessante Sprache. Aber wie es so ist, wenn sich im Hirn über Jahrzehnte einmal etwas eingebrannt hat lässt es sich nur schwer überschreiben.
Frage an Freddyyy:
Gibt es schon ein ähnliches Spiel welches deinem geplanten entspricht an dem man sich über den Spielablauf orientieren kann?
Gruss wuf
Danke für deinen Feedback. Meine hy-Version hier ist 0.11.1-1.
Ich bekomme mit deiner Änderung jetzt noch folgende Fehlermeldung:
LexException: Premature end of input
Irgendwie kann ich mich mit dem Lisp-Syntax nicht so richtig anfreunden. Den er weicht zu stark von Python und C ab. Lisp ist sicher eine interessante Sprache. Aber wie es so ist, wenn sich im Hirn über Jahrzehnte einmal etwas eingebrannt hat lässt es sich nur schwer überschreiben.
Frage an Freddyyy:
Gibt es schon ein ähnliches Spiel welches deinem geplanten entspricht an dem man sich über den Spielablauf orientieren kann?
Gruss wuf
Take it easy Mates!
@wuf Ja gibt es. Freunde von mir haben das gemacht (mit mir) indem wir ein Lybyrinth gemalt haben mit dem Turtle modul und dann jeden pixel den wir gemalt haben in einer liste mit den koordinaten der Turle vergleicht haben. Ich kann dir den Code mal schicken aber ich habe ihn leider nicht hier und muss ihn mir erst besorgen. Das kann etwas dauern.
Aber wieder zu den Canvas. Wie kann ich ein Bild auf die Turtle-Canvas legen und welche FKT brauche ich dafür?
LG Freddy
Aber wieder zu den Canvas. Wie kann ich ein Bild auf die Turtle-Canvas legen und welche FKT brauche ich dafür?
LG Freddy
Hi Freddyyy
Trage die Abmessungen (Breite & Höhe) deines Hintergrundbildes in das Skript ein. Das Bild sollte im .png oder .gif Format vorhanden sein. Mein setup hier ist Ubuntu 18.04, Python 3.5
Gruss wuf
Den Code brauchen wir vorläufig nicht. Wie verhält sich das folgende Skript bei dir:Ich kann dir den Code mal schicken
Code: Alles auswählen
import turtle
image_width = 1024 # Breite deines Hintergrundbides (Pixels)
image_height = 600 # Höhe deines Hintergrundbides (Pixels)
screen = turtle.Screen()
screen.setup(image_width, image_height)
screen.bgpic("hintergrundbild.png")
turtle.mainloop()
Gruss wuf
Take it easy Mates!
Dein Skript hamoniert leider nicht mit meinem. Also die Turtle ist nicht sichtbar, aber ich kann sie auch nicht bewegen. Es gibt aber auch kein Fehler code
btw ich benutze Windows 10 und Python 3.6.5
Vllt ist ja wichtig für euch das wenn ich das Programm schließe, folgender Error kommt:
btw ich benutze Windows 10 und Python 3.6.5
Vllt ist ja wichtig für euch das wenn ich das Programm schließe, folgender Error kommt:
Code: Alles auswählen
raise RuntimeError('Too early to create image')
RuntimeError: Too early to create image
Hi Freddyyy
Wird bei dir das Hintergrundbild aber angezeigt? Stimmt die Grösse des Turtle-Fensters mit der Bildgrösse überein? Es ist richtig das bei diesem Versuch die Turtle nicht sichtbar ist. Habe das Skript bei mir auch unter Windows 10 & Python 3.5 ausprobiert. Ich bekomme zwar die von dir erwähnte Fehlermeldung beim schliessen des Fensters nicht aber es funktioniert richtig.
OK! Wie verhält sich das nächst folgende Skript bei dir:
Gruss wuf
Wird bei dir das Hintergrundbild aber angezeigt? Stimmt die Grösse des Turtle-Fensters mit der Bildgrösse überein? Es ist richtig das bei diesem Versuch die Turtle nicht sichtbar ist. Habe das Skript bei mir auch unter Windows 10 & Python 3.5 ausprobiert. Ich bekomme zwar die von dir erwähnte Fehlermeldung beim schliessen des Fensters nicht aber es funktioniert richtig.
OK! Wie verhält sich das nächst folgende Skript bei dir:
Code: Alles auswählen
import turtle
import tkinter as tk
screen = turtle.Screen()
bg_image = tk.PhotoImage(file="hintergrundbild.png")
bg_image_width = bg_image.width()
bg_image_height = bg_image.height()
print("Grösse des Hintergrundbildes: {}x{}".format(
bg_image_width, bg_image_height))
screen.setup(bg_image_width, bg_image_height)
canvas = screen.getcanvas()
canvas.create_image(0, 0, image=bg_image)
turtle.mainloop()
Take it easy Mates!
Ist imprinzip genau das gleiche. Ich sehe das Bild aber ansonsten kann ich nichts machen. Bekomme jetzt aber beim schließen diese Fehlermeldung:
Code: Alles auswählen
File "<string>", line 5, in fd
turtle.Terminator
Hi Freddyyy
Soweit ist das Verhalten richtig. Das mit der Fehlermeldung beim schliessen versuche ich hier nach zu vollziehen.
Hier noch ein weiteres Skript zum ausprobieren wie verhält sich das?:Welchen Editor verwendest du unter Windows um deine Skripts zu erstellen? Startest du das Skript aus dem Editor heraus?
Gruss wuf
Soweit ist das Verhalten richtig. Das mit der Fehlermeldung beim schliessen versuche ich hier nach zu vollziehen.
Hier noch ein weiteres Skript zum ausprobieren wie verhält sich das?:
Code: Alles auswählen
import turtle
from PIL import Image, ImageTk
screen = turtle.Screen()
bg_image = ImageTk.PhotoImage(Image.open("hintergrundbild.png"))
bg_image_width = bg_image.width()
bg_image_height = bg_image.height()
screen.setup(bg_image_width,bg_image_height)
print("Grösse des Hintergrundbildes: {}x{}".format(
bg_image_width, bg_image_height))
canvas = screen.getcanvas()
canvas.create_image(0, 0, image=bg_image)
turtle.mainloop()
Gruss wuf
Take it easy Mates!
Hi Freddyyy
Zuerst noch das erweiterte Skript mit der Turtle, welche bis jetzt auf dem Hintergrundbild noch nicht sichtbar war. Das Hintergrundbild wurde mit der Turtle eigenen Methode screen.bgpic erstellt. Die Turtle ist angehoben. Könntest du einmal die Bewegung der Turtle bei dir kontrollieren?:
Gruss wuf
Zuerst noch das erweiterte Skript mit der Turtle, welche bis jetzt auf dem Hintergrundbild noch nicht sichtbar war. Das Hintergrundbild wurde mit der Turtle eigenen Methode screen.bgpic erstellt. Die Turtle ist angehoben. Könntest du einmal die Bewegung der Turtle bei dir kontrollieren?:
Code: Alles auswählen
import turtle
MOVE_STEP = 10
TURN_ANGLE = 45
def forward():
turtle.forward(MOVE_STEP)
def backward():
turtle.backward(MOVE_STEP)
def left():
turtle.left(TURN_ANGLE)
def right():
turtle.right(TURN_ANGLE)
image_width = 1024 # Hier: Breite deines Hintergrundbides (Pixels)
image_height = 600 # Hier: Höhe deines Hintergrundbides (Pixels)
screen = turtle.Screen()
screen.setup(image_width, image_height)
screen.bgpic("hintergrundbild.gif")
turtle.penup()
turtle.speed(0)
turtle.home()
screen.onkey(forward, "Up")
screen.onkey(backward, "Down")
screen.onkey(left, "Left")
screen.onkey(right, "Right")
screen.listen()
turtle.mainloop()
Take it easy Mates!