root.overrideredirect(0)

Fragen zu Tkinter.
Antworten
KlausP
User
Beiträge: 60
Registriert: Mittwoch 8. Juli 2020, 17:00

Hi,
vielleicht ein doofes betreff.

Habe hier im Forum ein einfaches grafische Spiel entdeckt und zum üben heruntergeladen:

Ich versuch das auch mal vom Code Anzuhängen - aber sorry - letzte Mal habe ich hier in de Oberfläche Code und Kommentar total verhuddelt.

1. die Frage:
je nach root.overrideredirect(0,1) werden weiter Eier kreiert.
In der Fensterversion hört der Prozess auf; warum nur da?

2. falls ich den Programmcode sauber hochgeladen bekomme:
Im der Windows Version kommen von tkinter diverse Fehlermeldungen:
Das zu analysieren fällt mir noch schwer.

3. Wollte dieses Spiel auch mal auf meinem Tablett laufen lassen.
Da gibt es denn aber keine rechts - oder links Taste.

4. Wenn ich das Proggi editiert habe, erfolgt der erste Lauf in einem m.E. zu kleinem Font.
Weitere Runs erfolgen dann im 18er (?) Font:
Ob 18 oder sonst was; warum stimmt der Font beim ersten Start nicht?

Habt Ihr vielleicht einen Beispiel - Link, um mich auf Maus- oder Tablett-Orientierung einzustimmen.
Danke für irgendwelche Tipps - Bin noch Beginner.

Klaus


from random import randrange
from tkinter import Canvas, Tk, messagebox, font

root = Tk()


w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.overrideredirect(1) # (0) eröffnet als Fenster
root.geometry("%dx%d+0+0" % (w, h))

canvas_width = w
canvas_height = h



c = Canvas(root, width=canvas_width, height=canvas_height, background="deep sky blue")
c.create_rectangle(-5, canvas_height - 300, canvas_width + 50, canvas_height + 50, fill="sea green", width=0)
c.create_oval(-100, -100, 140, 140, fill="orange", width=0)

c.pack()


ei_width = 45
ei_height = 55
global ei_punktzahl
ei_punktzahl = 10
global ei_tempo
ei_tempo = 500
global ei_intervall
ei_intervall = 4000
global schwierigkeit
schwierigkeit = 0.95
global verbleibende_leben

korb_color = "blue"
korb_width = 100
korb_height = 100
korb_start_x = canvas_width / 2 - korb_width / 2
korb_start_y = canvas_height - korb_height - 20
korb_start_x2 = korb_start_x + korb_width
korb_start_y2 = korb_start_y + korb_height

korb = c.create_arc(korb_start_x, korb_start_y, korb_start_x2, korb_start_y2, start=200, extent=140, style="arc", outline=korb_color, width=3)

game_font = font.nametofont("TkFixedFont")
game_font.config(size=18)

global breite
breite = w
breite_text = c.create_text(10, 35, anchor="nw", font=game_font, fill="darkblue", text="Breite: " + str(breite))

global hoehe
hoehe = h
hoehe_text = c.create_text(10, 60, anchor="nw", font=game_font, fill="darkblue", text="Höhe: " + str(hoehe))


global punktzahl
punktzahl = 0
punktzahl_text = c.create_text(10, 10, anchor="nw", font=game_font, fill="darkblue", text="Punktzahl: " + str(punktzahl))


verbleibende_leben = 10
leben_text = c.create_text(canvas_width - 10, 10, anchor="ne", font=game_font, fill="darkblue", text="Leben " + str(verbleibende_leben))

eier = []
def create_ei():
x = randrange(10, w-100)
y = 40
neues_ei = c.create_oval(x, y, x + ei_width, y + ei_height, fill="yellow", width=0)
eier.append(neues_ei)
root.after(ei_intervall, create_ei)

def move_eier():
for ei in eier:
(ei_x, ei_y, ei_x2, ei_y2,) = c.coords(ei)
c.move(ei, 0, 10)
if ei_y2 > canvas_height:
ei_gefallen(ei)
root.after(ei_tempo, move_eier)

def ei_gefallen(ei):
eier.remove(ei)
c.delete(ei)
verliere_ein_leben()
if verbleibende_leben == 0:
messagebox.showinfo("Game Over", "Punkte: " + str(punktzahl))
root.destroy()
exit

def verliere_ein_leben():
global verbleibende_leben
verbleibende_leben = verbleibende_leben - 1
c.itemconfigure(leben_text, text="Leben: " + str(verbleibende_leben))

def check_fang():
(korb_x, korb_y, korb_x2, korb_y2) = c.coords(korb)
for ei in eier:
(ei_x, ei_y, ei_x2, ei_y2,) = c.coords(ei)
if korb_x < ei_x and ei_x2 < korb_x2 and korb_y2 - ei_y2 < 40:
eier.remove(ei)
c.delete(ei)
erhoehe_punktzahl(ei_punktzahl)
root.after(100, check_fang)

def erhoehe_punktzahl(points):
global punktzahl, ei_tempo, ei_intervall
punktzahl = punktzahl + 1
ei_tempo = int(ei_tempo * schwierigkeit)
ei_intervall = int(ei_intervall * schwierigkeit)
c.itemconfigure(punktzahl_text, text="Punktzahl: " + str(punktzahl))

def move_left(event):
(x1, y1, x2, y2) = c.coords(korb)
if x1 > 0:
c.move(korb, -20, 0)

def move_right(event):
(x1, y1, x2, y2) = c.coords(korb)
if x2 < canvas_width:
c.move(korb, 20, 0)

c.bind("<Left>", move_left)
c.bind("<Right>", move_right)
c.focus_set()


root.after(5000, create_ei)
root.after(500, move_eier)
root.after(500, check_fang)
root.mainloop()
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast ein kaputtes Programm gefunden, das von __blackjack__ schon deutlich kommentiert wurde und nimmst trotzdem die Variante mit den vielen Fehlern? Warum fängst Du nicht damit an?
KlausP
User
Beiträge: 60
Registriert: Mittwoch 8. Juli 2020, 17:00

Hi Sirus,
Die Hinweise, dass das Proggi nicht perfekt sei, hatte ich schon gesehen.
Andererseits hatte ich festgestellt, dass das Programm "spielte". Und hab es einfach als Übungsobjekt gesehen.
Meine Fragen bzgl. 1, 3, 4 und in Richtung Tablett oder Maus haben möglicherweise gar nichts mit dem teils fehlerhaften Programm zu tun, oder?

Jedenfalls hab ich schon ein paar wertvolle Hinweise gesichtet.

Du fragst, warum fängst du nicht "damit" an?
Habe da schon kurz reinschauen können.
Vielleicht täusche ich mich, aber es erscheint mir um Klassen professioneller, aber auch schwieriger.
Ich kann ja mal im Forum rumbrowsen; gibt vllt. eine kleinere Demo für die "Sprites".
Im übrigen würde ich mich über hilfreiche Links freuen.

Im Ernst, ich bin Renntier (Rentner); irgendwie ist der Tag immer zu schnell rum.
Es ist ein Wettlauf, wenn man noch was zustande bekommen will.
Sorry, das gehört eigentlich nicht hierher. Darum frage ich so doof, statt von der "Pike" zu lernen. Danke für euer Verständnis.
Antworten