Bertrand Benjamin
8b44d00a76
All checks were successful
continuous-integration/drone/push Build is passing
143 lines
5.7 KiB
TeX
143 lines
5.7 KiB
TeX
\documentclass[a4paper,12pt]{article}
|
|
\usepackage{myXsim}
|
|
|
|
\usepackage{listings}
|
|
|
|
\date{Décembre 2022}
|
|
\title{Documentation Pygame}
|
|
\tribe{ISN}
|
|
|
|
\definecolor{mygreen}{rgb}{0,0.6,0}
|
|
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
|
|
\definecolor{mymauve}{rgb}{0.58,0,0.82}
|
|
|
|
\lstset{ %
|
|
backgroundcolor=\color{white}, % choose the background color
|
|
basicstyle=\footnotesize, % size of fonts used for the code
|
|
breaklines=true, % automatic line breaking only at whitespace
|
|
captionpos=b, % sets the caption-position to bottom
|
|
commentstyle=\color{mygreen}, % comment style
|
|
escapeinside={\%*}{*)}, % if you want to add LaTeX within your code
|
|
keywordstyle=\color{blue}, % keyword style
|
|
stringstyle=\color{mymauve}, % string literal style
|
|
}
|
|
|
|
\pagestyle{empty}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
\section{Code minimal}
|
|
|
|
\lstinputlisting[language=Python, frame=single]{pygame_base.py}
|
|
|
|
\section{Dessiner sur la fenêtre: Draw}
|
|
|
|
Dans toute la suite, on supposera que vous avez appelé la fenêtre \texttt{windowSurface}.
|
|
|
|
Les couleurs se définissent avec leur code RGB:
|
|
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
BLACK = (0, 0, 0)
|
|
WHITE = (255, 255, 255)
|
|
RED = (255, 0, 0)
|
|
GREEN = (0, 255, 0)
|
|
BLUE = (0, 0, 255)
|
|
\end{lstlisting}
|
|
|
|
Tracer de objets géométriques
|
|
|
|
\begin{itemize}
|
|
\item \textbf{Un segment:} \texttt{(60, 60)} sont les coordonnées du points de départ, \texttt{(120,60)} le point d'arrivé et \texttt{4} est l'épaisseur du trait.
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
pygame.draw.line(windowSurface, color, (60, 60), (120, 60), 4)
|
|
\end{lstlisting}
|
|
\item \textbf{Un cercle:} \texttt{(300, 50)} sont les coordonnées du centre, \texttt{50} le rayon et \texttt{0} l'épaisseur du trait (0 signifie que le cercle est entièrement colorié).
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
pygame.draw.circle(windowSurface, color, (300, 50), 20, 0)
|
|
\end{lstlisting}
|
|
\item \textbf{Une ellipse:} \texttt{300} et \texttt{250} sont les coordonnées du centre, \texttt{40} le rayon horizontal, \texttt{80} le rayon vertical et \texttt{1} l'épaisseur du trait.
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
pygame.draw.ellipse(windowSurface, color, (300, 250, 40,80), 1)
|
|
\end{lstlisting}
|
|
\item \textbf{Un rectangle:} \texttt{20} et \texttt{30} sont les coordonnées du coin en haut à gauche du rectangle, \texttt{40} est la largeur et \texttt{50} est la hauteur.
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
pygame.draw.rect(windowSurface, color, (20, 30, 40, 50))
|
|
\end{lstlisting}
|
|
\item \textbf{Un polygone:} \texttt{((146, 0), (291, 106), (236, 277), (56, 277), (0, 106))} sont les coordonnées des sommets du polygone.
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
pygame.draw.polygon(windowSurface, color,
|
|
((146, 0), (291, 106), (236, 277), (56, 277), (0, 106))
|
|
)
|
|
\end{lstlisting}
|
|
\end{itemize}
|
|
|
|
Il ne faut pas oublier la ligne suivante après avoir tracé tout ce que vous vouliez, sinon rien ne s'affichera.
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
pygame.display.update()
|
|
\end{lstlisting}
|
|
|
|
|
|
D'autres fonctions de dessins existent. Voici un exemple de tout ce qui peut être fait en dessin avec pygame.
|
|
|
|
\lstinputlisting[language=Python, frame=single]{./draw_example.py}
|
|
|
|
\paragraph{Ajouter une image:} Pygame permet d'ajouter des images ayant les formats suivant: JPG, PNG, GIF (non-animated), BMP. On supposera dans la suite qu'elles sont rangées dans le même dossier que notre programme.
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
#Charger l'image
|
|
img = pygame.image.load('image.jpg')
|
|
# L'afficher sur la surface
|
|
windowSurface.blit(img, (0,0))
|
|
\end{lstlisting}
|
|
Les coordonnées \texttt{(0,0)} sont les coordonnées de l'angle en haut à droit de l'image sur la surface.
|
|
|
|
|
|
\section{Interaction avec les périphériques: Events}
|
|
|
|
L'interaction avec l'utilisateur se fait dans la boucle des évènements.
|
|
|
|
\begin{lstlisting}[language=Python, frame=single]
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
running = False
|
|
elif event.type == pygame.KEYUP:
|
|
# choses a faire quand une touche du clavier est relachee
|
|
if event.key == pygame.K_UP:
|
|
# choses a faire quand c'est la touche fleche du haut
|
|
elif event.key == pygame.K_DOWN:
|
|
# choses a faire quand c'est la touche fleche du bas
|
|
elif event.type == pygame.KEYDOWN:
|
|
# choses a faire quand une touche du clavier est pressee
|
|
elif event.key == pygame.K_LEFT:
|
|
# choses a faire quand c'est la touche fleche de gauche
|
|
elif event.key == pygame.K_RIGHT:
|
|
# choses a faire quand c'est la touche fleche de droite
|
|
elif event.type == pygame.MOUSEBUTTONUP:
|
|
# choses a faire quand le bouton de la souris est relache
|
|
elif event.type == pygame.MOUSEBUTTONDOWN:
|
|
# choses a faire quand le bouton de la souris est pressee
|
|
\end{lstlisting}
|
|
|
|
De manière générale, le nom des touches de clavier sont faite sur le même modèle: \texttt{K\_\#\#\#} où on remplace les \texttt{\#} par le nom de la touche.
|
|
\begin{itemize}
|
|
\item Touche flèche du haut: \texttt{K\_UP}
|
|
\item Touche E: \texttt{K\_E}
|
|
\item Touche entrée: \texttt{K\_ESCAPE}
|
|
\end{itemize}
|
|
|
|
Quelques méthodes pratiques pour manipuler la souris
|
|
|
|
\begin{itemize}
|
|
\item \texttt{pygame.mouse.get\_pos()} : connaître la position de la souris sur la fenêtre.
|
|
\item \texttt{pygame.mouse.set\_pos((x,y))}: déplacer la souris à un endroit.
|
|
\end{itemize}
|
|
|
|
|
|
\end{document}
|
|
|
|
%%% Local Variables:
|
|
%%% mode: latex
|
|
%%% TeX-master: "master"
|
|
%%% End:
|