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 :
|
||
#
|