This repository has been archived on 2019-08-09. You can view files and clone it, but cannot push or open issues or pull requests.
s1-tp/S1/TP 5/billard.py

80 lines
2.1 KiB
Python
Raw Normal View History

2014-11-07 01:30:48 +01:00
# 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 :
#