80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
|
# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015
|
|||
|
# TP n°5 donné le 10/10/2014 - Billard
|
|||
|
# http://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/tp_itcond_tortue.html
|
|||
|
|
|||
|
from turtle import *
|
|||
|
|
|||
|
def dessiner_billard(dx, dy):
|
|||
|
"""
|
|||
|
Dessine un billard centré en l'origine de coté 'dx' × 'dy'.
|
|||
|
|
|||
|
CU : dx et dy entiers strictement positifs
|
|||
|
|
|||
|
Exemple :
|
|||
|
>>> dessiner_billard(400, 300)
|
|||
|
"""
|
|||
|
assert(type(dx) is int and dx > 0), "dx doit être un entier strictement \
|
|||
|
positif"
|
|||
|
assert(type(dy) is int and dy > 0), "dy doit être un entier strictement \
|
|||
|
positif"
|
|||
|
penup()
|
|||
|
pencolor("red")
|
|||
|
goto(-dx//2, -dy//2)
|
|||
|
pendown()
|
|||
|
begin_fill()
|
|||
|
for i in range(0, 4):
|
|||
|
if i%2:
|
|||
|
forward(dy)
|
|||
|
else:
|
|||
|
forward(dx)
|
|||
|
left(90)
|
|||
|
color("green")
|
|||
|
end_fill()
|
|||
|
|
|||
|
PAS = 1
|
|||
|
|
|||
|
def billard(dx, dy, x, y, angle, bandes):
|
|||
|
"""
|
|||
|
Dessine un billard centré en l'origine de coté 'dx' × 'dy' et la
|
|||
|
trajectoire de la bille de position initiale ('x', 'y') et d'angle initial
|
|||
|
'angle' jusqu'à 'bandes' bandes.
|
|||
|
|
|||
|
CU : dx, dy et bandes entiers strictement positifs, x, y et angle entiers
|
|||
|
|
|||
|
Exemple :
|
|||
|
>>> billard(400, 300, 50, -25, 80, 5)
|
|||
|
"""
|
|||
|
assert(type(dx) is int and dx > 0), "dx doit être un entier strictement \
|
|||
|
positif"
|
|||
|
assert(type(dy) is int and dy > 0), "dy doit être un entier strictement \
|
|||
|
positif"
|
|||
|
assert(type(angle) is int and angle > 0), "angle doit être un entier \
|
|||
|
strictement positif"
|
|||
|
assert(type(x) is int), "x doit être un entier"
|
|||
|
assert(type(y) is int), "y doit être un entier"
|
|||
|
assert(type(bandes) is int), "bandes doit être un entier"
|
|||
|
|
|||
|
dessiner_billard(dx, dy)
|
|||
|
penup()
|
|||
|
pencolor("black")
|
|||
|
goto(x, y)
|
|||
|
pendown()
|
|||
|
left(angle)
|
|||
|
while bandes >= 1:
|
|||
|
forward(PAS)
|
|||
|
if xcor() >= dx//2:
|
|||
|
left(180-2*heading())
|
|||
|
bandes += -1
|
|||
|
if xcor() <= -dx//2:
|
|||
|
left(180-2*heading())
|
|||
|
bandes += -1
|
|||
|
if ycor() >= dy//2:
|
|||
|
left(-2*heading())
|
|||
|
bandes += -1
|
|||
|
if ycor() <= -dy//2:
|
|||
|
left(-2*heading())
|
|||
|
bandes += -1
|
|||
|
|
|||
|
# Exemple de test :
|
|||
|
#
|