if-Schleife

Fragen zu Tkinter.
Antworten
RoflKartoffel379
User
Beiträge: 8
Registriert: Dienstag 7. Juni 2016, 14:03

Guten Tag,
ich möchte eine if-Schleife schreiben, aber ich weiß nicht wie ich anfangen soll.
Ich möchte das wenn das eine Objekt das andere berührt, das script sich quitet.
Danke schon mal im Vorraus!
BlackJack

@RoflKartoffel379: Ganz wichtig: http://if-schleife.de/

Ansonsten ist die Beschreibung ein wenig zu vage. Werd mal etwas konkreter was hier mit Objekt und berühren gemeint ist.
RoflKartoffel379
User
Beiträge: 8
Registriert: Dienstag 7. Juni 2016, 14:03

Hier ist der Code:

Code: Alles auswählen

import tkinter as tk
import random
from functools import partial
 
STEP_DELTA = 5
 
 
def show_control_info(parent):
    tk.Label(
        parent,
        text=
            '|W| ist nach oben\n'
            '|A| ist nach links\n'
            '|D| ist nach rechts\n'
            '|S| ist nach unten\n'
            '|Space| ist schießen'
    ).pack()
 
 
def move_circle(canvas, circle_id, x_delta, y_delta, step_count):
    if step_count > 0:
        canvas.move(circle_id, x_delta, y_delta)
        canvas.after(
            1000,
            move_circle,
            canvas,
            circle_id,
            x_delta,
            y_delta,
            step_count - 1,
            )
    if step_count == 0:
        tk.Label(text="Du hast Verloren!!\n"
                      "Um das Spiel neuzustarten bitte erneut öffnen!"
                 ).pack()
       
       
 
def move_up(canvas, rectangle_id, event):
    if event.char == 'w':
        canvas.move(rectangle_id, 0, -STEP_DELTA)
 
 
def move_down(canvas, rectangle_id, event):
    if event.char == 's':
        canvas.move(rectangle_id, 0, STEP_DELTA)
 
 
def move_right(canvas, rectangle_id, event):
    if event.char == 'd':
        canvas.move(rectangle_id, STEP_DELTA, 0)
 
 
def move_left(canvas, rectangle_id, event):
    if event.char == 'a':
        canvas.move(rectangle_id, -STEP_DELTA, 0)
 
 
def on_keypress(canvas, rectangle_id, event):
    for move_func in [move_down, move_up, move_right, move_left]:
        move_func(canvas, rectangle_id, event)
 
 
def main():  
    root = tk.Tk()
    root.title('Centipede')
     
    canvas = tk.Canvas(root, width=800, height=600, background='black')
    canvas.pack()
 
 
    circle_id = canvas.create_oval(10, 10, 20, 20, fill='green')
    rectangle_id = canvas.create_rectangle(200, 200, 210, 210, fill='red')
 
    root.bind('<KeyPress>', partial(on_keypress, canvas, rectangle_id))
 
 
   
    x_delta = random.randint(1, 30)
    y_delta = random.randint(1, 30)
    tk.Button(
        root,
        text='Start',
        command=partial(move_circle, canvas, circle_id, x_delta, y_delta, 10),
    ).pack()
    tk.Button(
        root, text='Controls', command=partial(show_control_info, root)
    ).pack()
 
    if rectangle_id == circle_id:
        tk.Label(text="Du hast Gewonnen!!"
                 ).pack()
        quit()
 
   
    root.mainloop()
 
def koordinaten(x, y):
    print(x,y,)
 
print(koordinaten)
 
if __name__ == '__main__':
    main()
Ich möchte das wenn sich rectangle_id und circle_id sich treffen, dass das "Spiel" quitet
Zuletzt geändert von Anonymous am Donnerstag 16. Juni 2016, 22:42, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@RoflKartoffel379: Du könntest Dir vom `Canvas`-Exemplar mit der `bbox()`-Methode die „bounding box“ von einer der beiden Objekt-IDs geben lassen und die Koordinaten dann `find_overlapping()` geben und schauen ob die andere Objekt-ID im dem Ergebnis enthalten ist. Oder Du verwendest `bbox()` mit beiden IDs und programmierst den Test auf überlappen selbst aus.
RoflKartoffel379
User
Beiträge: 8
Registriert: Dienstag 7. Juni 2016, 14:03

Ich versteh das jz nicht so was du geschrieben hast. Könntest du ein beispiel posten?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@RoflKartoffel379: schau doch einfach in der Dokumentation nach, was die von BlackJack angesprochenen Funktionen machen, probiere an Deinem konkrekten Programm aus, was diese Funktionen zurückliefern und überlege, wie Du damit Dein Problem lösen könntest.
Antworten