Seite 1 von 1

if-Schleife

Verfasst: Donnerstag 16. Juni 2016, 17:50
von RoflKartoffel379
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!

Re: if-Schleife

Verfasst: Donnerstag 16. Juni 2016, 19:48
von 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.

Re: if-Schleife

Verfasst: Donnerstag 16. Juni 2016, 19:53
von RoflKartoffel379
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

Re: if-Schleife

Verfasst: Donnerstag 16. Juni 2016, 22:52
von 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.

Re: if-Schleife

Verfasst: Freitag 17. Juni 2016, 05:50
von RoflKartoffel379
Ich versteh das jz nicht so was du geschrieben hast. Könntest du ein beispiel posten?

Re: if-Schleife

Verfasst: Freitag 17. Juni 2016, 07:20
von Sirius3
@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.