o
    OZŽh0  ã                   @   s&  d Z ddlZddlZddlmZ ddlZej ¡ se	dƒ‚dZ
dZdZdZe ddd	d
¡Zdaej ej e¡¡d Zdd„ Zdd„ ZG dd„ dejjƒZG dd„ dejjƒZG dd„ dejjƒZG dd„ dejjƒZG dd„ dejjƒZG dd„ dejjƒZddd„Z e!dkr‘e ƒ  e "¡  dS dS )a7   pygame.examples.aliens

Shows a mini game where you have to defend against aliens.

What does it show you about pygame?

* pg.sprite, the difference between Sprite and Group.
* dirty rectangle optimization for processing for speed.
* music with pg.mixer.music, including fadeout
* sound effects with pg.Sound
* event processing, keyboard handling, QUIT handling.
* a main loop frame limited with a game clock from pg.time.Clock
* fullscreen switching.


Controls
--------

* Left and right arrows to move.
* Space bar to shoot
* f key to toggle between fullscreen.

é    N)ÚListz%Sorry, extended image module requiredé   é   é<   é   i€  ià  c              	   C   sP   t j td| ¡} ztj | ¡}W | 
¡ S  tjy'   td| › dt 	¡ › ƒ‚w )z$loads an image, prepares it for playÚdatazCould not load image "z" )ÚosÚpathÚjoinÚmain_dirÚpgÚimageÚloadÚerrorÚ
SystemExitZ	get_errorÚconvert)ÚfileZsurface© r   úE/var/www/auris/lib/python3.10/site-packages/pygame/examples/aliens.pyÚ
load_image1   s   þÿr   c                 C   sR   t jsdS tj td| ¡} z	t j | ¡}|W S  t jy(   td| › ƒ Y dS w )z-because pygame can be compiled without mixer.Nr   zWarning, unable to load, )	r   Úmixerr   r	   r
   r   ZSoundr   Úprint)r   Úsoundr   r   r   Ú
load_sound;   s   þr   c                   @   sH   e Zd ZU dZdZdZdZg Zee	j
 ed< dd„ Zdd	„ Zd
d„ ZdS )ÚPlayerz1Representing the player as a moon buggy type car.é
   é   éõÿÿÿÚimagesc                 G   sN   t jjj| g|¢R Ž  | jd | _| jjtjd| _	d| _
| j	j| _d| _d S )Nr   ©Ú	midbottoméÿÿÿÿ)r   ÚspriteÚSpriteÚ__init__r   r   Úget_rectÚ
SCREENRECTr    ÚrectÚ	reloadingÚtopÚorigtopÚfacing©ÚselfÚgroupsr   r   r   r$   X   s   

zPlayer.__init__c                 C   sv   |r|| _ | j || j d¡ | j t¡| _|dk r!| jd | _n
|dkr+| jd | _| j| jj	| j
 d  | j_d S )Nr   é   r   )r+   r'   Úmove_ipÚspeedÚclampr&   r   r   r*   ÚleftÚbouncer)   )r-   Ú	directionr   r   r   Úmove`   s    zPlayer.movec                 C   s    | j | j | jj }|| jjfS )N)r+   Ú
gun_offsetr'   Zcenterxr)   )r-   Úposr   r   r   Úgunposk   s   zPlayer.gunposN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r4   r7   r   r   r   ÚSurfaceÚ__annotations__r$   r6   r9   r   r   r   r   r   P   s   
 r   c                   @   ó<   e Zd ZU dZdZdZg Zeej	 e
d< dd„ Zdd„ Zd	S )
ÚAlienz7An alien space ship. That slowly moves down the screen.é   r   r   c                 G   sb   t jjj| g|¢R Ž  | jd | _| j ¡ | _t 	d¡t
j | _d| _| jdk r/tj| j_d S d S )Nr   )r!   r/   )r   r"   r#   r$   r   r   r%   r'   ÚrandomÚchoicerA   r1   r+   Úframer&   Úrightr,   r   r   r   r$   w   s   
ÿzAlien.__init__c                 O   sl   | j  | jd¡ t | j ¡s"| j | _| j jd | j _| j  t¡| _ | jd | _| j	| j| j
 d  | _d S )Nr   r/   é   )r'   r0   r+   r&   ÚcontainsÚbottomr)   r2   rE   r   Ú	animcycler   ©r-   ÚargsÚkwargsr   r   r   Úupdate€   s   
zAlien.updateN)r:   r;   r<   r=   r1   rJ   r   r   r   r>   r?   r$   rN   r   r   r   r   rA   p   s   
 	rA   c                   @   r@   )
Ú	Explosionz5An explosion. Hopefully the Alien and not the player!r   rG   r   c                 G   sB   t jjj| g|¢R Ž  | jd | _| jj|jjd| _| j	| _
d S )Nr   )Úcenter)r   r"   r#   r$   r   r   r%   r'   rP   ÚdefaultlifeÚlife)r-   Zactorr.   r   r   r   r$   ‘   s   zExplosion.__init__c                 O   s>   | j d | _ | j| j | j d  | _| j dkr|  ¡  dS dS )zÈcalled every time around the game loop.

        Show the explosion surface for 'defaultlife'.
        Every game tick(update), we decrease the 'life'.

        Also we animate the explosion.
        r/   r   r   N)rR   r   rJ   r   ÚkillrK   r   r   r   rN   —   s
   
ÿzExplosion.updateN)r:   r;   r<   r=   rQ   rJ   r   r   r   r>   r?   r$   rN   r   r   r   r   rO   Š   s   
 rO   c                   @   ó8   e Zd ZU dZdZg Zeej e	d< dd„ Z
dd„ ZdS )	ÚShotz!a bullet the Player sprite fires.r   r   c                 G   s6   t jjj| g|¢R Ž  | jd | _| jj|d| _d S )Nr   r   )r   r"   r#   r$   r   r   r%   r'   )r-   r8   r.   r   r   r   r$   «   s   zShot.__init__c                 O   s,   | j  d| j¡ | j jdkr|  ¡  dS dS )z^called every time around the game loop.

        Every tick we move the shot upwards.
        r   N)r'   r0   r1   r)   rS   rK   r   r   r   rN   °   s   ÿzShot.updateN©r:   r;   r<   r=   r1   r   r   r   r>   r?   r$   rN   r   r   r   r   rU   ¥   s   
 rU   c                   @   rT   )	ÚBombzA bomb the aliens drop.é	   r   c                 G   sH   t jjj| g|¢R Ž  | jd | _| jj|j dd¡j	d| _|| _
d S )Nr   é   r   )r   r"   r#   r$   r   r   r%   r'   r6   r    Úexplosion_group)r-   ÚalienrZ   r.   r   r   r   r$   À   s   
zBomb.__init__c                 O   s8   | j  d| j¡ | j jdkrt| | jƒ |  ¡  dS dS )zÅcalled every time around the game loop.

        Every frame we move the sprite 'rect' down.
        When it reaches the bottom we:

        - make an explosion.
        - remove the Bomb.
        r   iÖ  N)r'   r0   r1   rI   rO   rZ   rS   rK   r   r   r   rN   Æ   s
   	þzBomb.updateNrV   r   r   r   r   rW   º   s   
 rW   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚScorezto keep track of the score.c                 G   s^   t jjj| g|¢R Ž  t j d d¡| _| j d¡ d| _d| _|  	¡  | j
 ¡  dd¡| _d S )Né   r/   Úwhiter!   r   iÂ  )r   r"   r#   r$   ÚfontZFontZ
set_italicÚcolorÚ	lastscorerN   r   r%   r6   r'   r,   r   r   r   r$   Ø   s   zScore.__init__c                 O   s6   t | jkrt | _dt › }| j |d| j¡| _dS dS )z9We only update the score in update() when it has changed.zScore: r   N)ÚSCOREra   r_   Úrenderr`   r   )r-   rL   rM   Úmsgr   r   r   rN   á   s
   

ýzScore.updateN)r:   r;   r<   r=   r$   rN   r   r   r   r   r\   Õ   s    	r\   c                 C   s   t  ¡ d dkrt j dddd¡ t  ¡  t jr$t j ¡ s$tdƒ d t _d}d} t j t	j
| d¡}t j t	j
| |¡}tdƒ}|t j |d	d¡gt_td
ƒ}|t j |d	d	¡gt_dd„ dD ƒt_tdƒgt_tdƒgt_t j tjd d¡}t j |¡ t j d¡ t j d¡ tdƒ}t  t	j
¡}tdt	j| ¡ ƒD ]
}| ||df¡ q›| |d¡ t j ¡  tdƒ}	tdƒ}
t jrÒt j! "t#dd¡}t jj$ %|¡ t jj$ &d¡ t j' (¡ }t j' (¡ }t j' (¡ }t j' )¡ }t j' *¡ }t+}t j, -¡ }t|ƒ}t|||ƒ t j.r| /t0|ƒ¡ | 1¡ r}t j2 3¡ D ]i}|j4t j5kr d S |j4t j6kr.|j7t j8kr. d S |j4t j6kry|j7t j9kry|sZtdƒ | :¡ }t j t	j
| t j;B |¡}| |d¡ ntdƒ | :¡ }t j t	j
| |¡}| |d¡ t j ¡  | }qt j7 <¡ }| =||¡ | >¡  |t j? |t j@  }| A|¡ |t jB }|jCsÁ|rÁtD|ƒtEk rÁt| F¡ ||ƒ t jrÁ|
d urÁ|
 &¡  ||_C|rÌ|d	 }ntGtH H¡ tI ƒsÝt|||ƒ t+}|rñtGtH H¡ tJ ƒsñt|j'|||ƒ t j' K||d	¡D ]"}t jr|	d ur|	 &¡  t||ƒ t||ƒ tLd	 aL| M¡  qùt j' N||d	d	¡ O¡ D ]}t jr6|	d ur6|	 &¡  t||ƒ tLd	 aLq't j' K||d	¡D ]}t jrX|	d urX|	 &¡  t||ƒ t||ƒ | M¡  qI| P|¡}t j >|¡ | Qd¡ | 1¡ st jrˆt jj$ Rd¡ t j, Sd¡ d S )Nr   r   iD¬  é    i   zWarning, no soundFzplayer1.gifr/   zexplosion1.gifc                 S   s   g | ]}t |ƒ‘qS r   )r   )Ú.0Zimr   r   r   Ú
<listcomp>þ   s    zmain.<locals>.<listcomp>)z
alien1.gifz
alien2.gifz
alien3.gifzbomb.gifzshot.gif)re   re   zPygame Alienszbackground.gif)r   r   zboom.wavzcar_door.wavr   zhouse_lo.wavr!   zChanging to FULLSCREENzChanging to windowed modeé(   iè  )Tr   Zget_sdl_versionr   Zpre_initÚinitZget_initr   ÚdisplayZmode_okr&   ÚsizeÚset_moder   Z	transformÚflipr   r   rO   rA   rW   rU   ÚscaleZset_iconZset_captionÚmouseZset_visibler>   ÚrangeÚwidthZ	get_widthZblitr   r   r	   r
   r   Úmusicr   Zplayr"   ÚGroupZRenderUpdatesZGroupSingleÚALIEN_RELOADÚtimeZClockr_   Úaddr\   ÚaliveÚeventÚgetÚtypeZQUITZKEYDOWNÚkeyZK_ESCAPEZK_fÚcopyZ
FULLSCREENZget_pressedÚclearrN   ZK_RIGHTZK_LEFTr6   ZK_SPACEr(   ÚlenÚ	MAX_SHOTSr9   ÚintrC   Ú
ALIEN_ODDSÚ	BOMB_ODDSZspritecolliderb   rS   ZgroupcollideÚkeysZdrawZtickZfadeoutÚwait)ZwinstyleZ
fullscreenZ	bestdepthÚscreenZimgÚiconZbgdtileÚ
backgroundÚxZ
boom_soundZshoot_soundrr   ZaliensZshotsZbombsÚallZ	lastalienZalienreloadÚclockZplayerrx   Zscreen_backupZkeystater5   Zfiringr[   ÚbombZdirtyr   r   r   Úmainé   sâ   






ÿ
ÿÿ
€











¬VrŒ   Ú__main__)r   )#r=   r   rC   Útypingr   Zpygamer   r   Zget_extendedr   r   r   r‚   rt   ZRectr&   rb   r	   ÚsplitÚabspathÚ__file__r   r   r   r"   r#   r   rA   rO   rU   rW   r\   rŒ   r:   Úquitr   r   r   r   Ú<module>   s8   

 
 !þ