
    &h0                        S r SSKrSSKrSSKJr  SSKr\R                  R                  5       (       d  \	" S5      eSr
SrSrSr\R                  " SSS	S
5      rSq\R"                  R%                  \R"                  R'                  \5      5      S   rS rS r " S S\R0                  R2                  5      r " S S\R0                  R2                  5      r " S S\R0                  R2                  5      r " S S\R0                  R2                  5      r " S S\R0                  R2                  5      r " S S\R0                  R2                  5      rSS jr \!S:X  a  \ " 5         \RD                  " 5         gg)a6  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                 $   [         R                  R                  [        SU 5      n  [        R
                  R                  U 5      nUR                  5       $ ! [        R                   a%    [        SU  S[        R                  " 5        35      ef = f)z$loads an image, prepares it for playdatazCould not load image "z" )ospathjoinmain_dirpgimageloaderror
SystemExit	get_errorconvert)filesurfaces     N/var/www/auris/envauris/lib/python3.13/site-packages/pygame/examples/aliens.py
load_imager   1   sv    77<<&$/DL((--% ?? 88 L1$r",,.9IJKKLs   A 9Bc                    [         R                  (       d  g[        R                  R	                  [
        SU 5      n  [         R                  R                  U 5      nU$ ! [         R                   a    [        SU  35         gf = f)z-because pygame can be compiled without mixer.Nr	   zWarning, unable to load, )	r   mixerr
   r   r   r   Soundr   print)r   sounds     r   
load_soundr   ;   sd    8877<<&$/D2t$88 2)$012s    A "BBc                   `    \ rS rSr% SrSrSrSr/ r\	\
R                     \S'   S rS rS	 rS
rg)PlayerP   z1Representing the player as a moon buggy type car.
      imagesc                 ,   [         R                  R                  R                  " U /UQ76   U R                  S   U l        U R
                  R                  [        R                  S9U l	        SU l
        U R                  R                  U l        SU l        g )Nr   	midbottom)r   spriteSprite__init__r%   r   get_rect
SCREENRECTr(   rect	reloadingtoporigtopfacingselfgroupss     r   r,   Player.__init__X   sj    
		!!$00[[^
JJ''*2F2F'G	yy}}    c                    U(       a  Xl         U R                  R                  XR                  -  S5        U R                  R	                  [
        5      U l        US:  a  U R                  S   U l        OUS:  a  U R                  S   U l        U R                  U R                  R                  U R                  -  S-  -
  U R                  l        g )Nr      r   )r3   r/   move_ipspeedclampr.   r%   r   r2   leftbouncer1   )r5   	directions     r   movePlayer.move`   s    #K		)jj0!4IIOOJ/	q=QDJ]QDJ		$++(E(IJ		r8   c                     U R                   U R                  -  U R                  R                  -   nXR                  R                  4$ )N)r3   
gun_offsetr/   centerxr1   )r5   poss     r   gunposPlayer.gunposk   s4    kkDOO+dii.?.??IIMM!!r8   )r3   r   r2   r/   r0   N)__name__
__module____qualname____firstlineno____doc__r<   r?   rD   r%   r   r   Surface__annotations__r,   rA   rG   __static_attributes__ r8   r   r    r    P   s7    ;EFJ!FD!	K"r8   r    c                   V    \ rS rSr% SrSrSr/ r\\	R                     \S'   S rS rSrg	)
Alienp   z7An alien space ship. That slowly moves down the screen.   r   r%   c                    [         R                  R                  R                  " U /UQ76   U R                  S   U l        U R
                  R                  5       U l        [        R                  " S5      [        R                  -  U l        SU l        U R                  S:  a   [        R                  U R                  l        g g )Nr   )r)   r:   )r   r*   r+   r,   r%   r   r-   r/   randomchoicerS   r<   r3   framer.   rightr4   s     r   r,   Alien.__init__w   s    
		!!$00[[^
JJ'')	mmG,u{{:
;;?(..DIIO r8   c                    U R                   R                  U R                  S5        [        R	                  U R                   5      (       d^  U R                  * U l        U R                   R
                  S-   U R                   l        U R                   R                  [        5      U l         U R                  S-   U l        U R                  U R                  U R                  -  S-     U l        g )Nr   r:      )r/   r;   r3   r.   containsbottomr1   r=   rY   r%   	animcycler   r5   argskwargss      r   updateAlien.update   s    		$++q)""499--;;,DK II,,q0DIIM		
3DIZZ!^
[[t~~!=!AB
r8   )r3   rY   r   r/   N)rI   rJ   rK   rL   rM   r<   r`   r%   r   r   rN   rO   r,   rd   rP   rQ   r8   r   rS   rS   p   s-    AEI!FD!/Cr8   rS   c                   V    \ rS rSr% SrSrSr/ r\\	R                     \S'   S rS rSrg	)
	Explosion   z5An explosion. Hopefully the Alien and not the player!r   r]   r%   c                    [         R                  R                  R                  " U /UQ76   U R                  S   U l        U R
                  R                  UR                  R                  S9U l        U R                  U l
        g )Nr   )center)r   r*   r+   r,   r%   r   r-   r/   rj   defaultlifelife)r5   actorr6   s      r   r,   Explosion.__init__   s^    
		!!$00[[^
JJ''uzz/@/@'A	$$	r8   c                     U R                   S-
  U l         U R                  U R                   U R                  -  S-     U l        U R                   S::  a  U R	                  5         gg)zcalled 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)rl   r%   r`   r   killra   s      r   rd   Explosion.update   sN     IIM	[[dnn!<q!@A
99>IIK r8   )r   rl   r/   N)rI   rJ   rK   rL   rM   rk   r`   r%   r   r   rN   rO   r,   rd   rP   rQ   r8   r   rg   rg      s,    ?KI!FD!%r8   rg   c                   R    \ rS rSr% SrSr/ r\\R                     \
S'   S rS rSrg)	Shot   z!a bullet the Player sprite fires.r$   r%   c                     [         R                  R                  R                  " U /UQ76   U R                  S   U l        U R
                  R                  US9U l        g )Nr   r'   )r   r*   r+   r,   r%   r   r-   r/   )r5   rF   r6   s      r   r,   Shot.__init__   sG    
		!!$00[[^
JJ''#'6	r8   c                     U R                   R                  SU R                  5        U R                   R                  S::  a  U R	                  5         gg)zNcalled every time around the game loop.

Every tick we move the shot upwards.
r   N)r/   r;   r<   r1   rp   ra   s      r   rd   Shot.update   s:    
 			!TZZ(99==AIIK r8   )r   r/   NrI   rJ   rK   rL   rM   r<   r%   r   r   rN   rO   r,   rd   rP   rQ   r8   r   rs   rs      s'    +E!FD!7
r8   rs   c                   R    \ rS rSr% SrSr/ r\\R                     \
S'   S rS rSrg)	Bomb   zA bomb the aliens drop.	   r%   c                    [         R                  R                  R                  " U /UQ76   U R                  S   U l        U R
                  R                  UR                  R                  SS5      R                  S9U l        X l
        g )Nr      r'   )r   r*   r+   r,   r%   r   r-   r/   rA   r(   explosion_group)r5   alienr   r6   s       r   r,   Bomb.__init__   sb    
		!!$00[[^
JJ''%**//!Q2G2Q2Q'R	.r8   c                     U R                   R                  SU R                  5        U R                   R                  S:  a&  [	        X R
                  5        U R                  5         gg)zcalled 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/   r;   r<   r_   rg   r   rp   ra   s      r   rd   Bomb.update   sJ     			!TZZ(99s"d001IIK #r8   )r   r   r/   Nry   rQ   r8   r   r{   r{      s'    !E!FD!/r8   r{   c                   $    \ rS rSrSrS rS rSrg)Score   zto keep track of the score.c                 t   [         R                  R                  R                  " U /UQ76   [         R                  R                  S S5      U l        U R                  R                  S5        SU l        SU l        U R                  5         U R                  R                  5       R                  SS5      U l        g )N   r:   whiter)   r"   i  )r   r*   r+   r,   fontFont
set_italiccolor	lastscorerd   r   r-   rA   r/   r4   s     r   r,   Score.__init__   s    
		!!$00GGLLr*			Q
JJ'')..r37	r8   c                     [         U R                  :w  aA  [         U l        S[          3nU R                  R                  USU R                  5      U l        gg)z9We only update the score in update() when it has changed.zScore: r   N)SCOREr   r   renderr   r   )r5   rb   rc   msgs       r   rd   Score.update   sD    DNN""DNE7#C))#q$**=DJ #r8   )r   r   r   r   r/   N)rI   rJ   rK   rL   rM   r,   rd   rP   rQ   r8   r   r   r      s    %8>r8   r   c                 :   [         R                  " 5       S   S:X  a"  [         R                  R                  SSSS5        [         R                  " 5         [         R                  (       a9  [         R                  R                  5       (       d  [        S5        S [         l        SnSn [         R                  R                  [        R                  U S5      n[         R                  R                  [        R                  X5      n[        S5      nU[         R                  R                  US	S5      /[        l        [        S
5      nU[         R                  R                  US	S	5      /["        l        S Vs/ s H  n[        U5      PM     sn[$        l        [        S5      /[&        l        [        S5      /[(        l        [         R                  R+                  [$        R                   S   S5      n[         R                  R-                  U5        [         R                  R/                  S5        [         R0                  R3                  S5        [        S5      n[         R4                  " [        R                  5      n[7        S[        R8                  UR;                  5       5       H  n	UR=                  XyS45        M     UR=                  US5        [         R                  R                  5         [?        S5      n
[?        S5      n[         R                  (       aw  [@        RB                  RE                  [F        SS5      n[         R                  RH                  RK                  U5        [         R                  RH                  RM                  S5        [         RN                  RQ                  5       n[         RN                  RQ                  5       n[         RN                  RQ                  5       n[         RN                  RS                  5       n[         RN                  RU                  5       n[V        n[         RX                  R[                  5       n[        U5      n[%        UUU5        [         R\                  (       a  UR_                  [a        U5      5        URc                  5       (       Ga  [         Rd                  Rg                  5        GH  nURh                  [         Rj                  :X  a    g URh                  [         Rl                  :X  a   URn                  [         Rp                  :X  a    g URh                  [         Rl                  :X  d  M  URn                  [         Rr                  :X  d  M  U(       dn  [        S5        URu                  5       n[         R                  R                  [        R                  U [         Rv                  -  U5      nUR=                  US5        O[[        S5        URu                  5       n[         R                  R                  [        R                  X5      nUR=                  US5        [         R                  R                  5         U(       + nGM     [         Rn                  Ry                  5       nUR{                  X85        UR}                  5         U[         R~                     U[         R                     -
  nUR                  U5        U[         R                     nUR                  (       d]  U(       aV  [        U5      [        :  aC  [)        UR                  5       UU5        [         R                  (       a  Ub  URM                  5         UUlC        U(       a  US	-
  nO=[        [        R                  " 5       [        -  5      (       d  [%        UUU5        [V        nU(       aB  [        [        R                  " 5       [        -  5      (       d  ['        URN                  UUU5        [         RN                  R                  UUS	5       H\  n[         R                  (       a  U
b  U
RM                  5         [#        UU5        [#        UU5        [        S	-   qLUR                  5         M^     [         RN                  R                  XS	S	5      R                  5        H@  n[         R                  (       a  U
b  U
RM                  5         [#        UU5        [        S	-   qLMB     [         RN                  R                  UUS	5       HS  n[         R                  (       a  U
b  U
RM                  5         [#        UU5        [#        UU5        UR                  5         MU     UR                  U5      n[         R                  R}                  U5        UR                  S5        URc                  5       (       a  GM  [         R                  (       a)  [         R                  RH                  R                  S5        [         RX                  R                  S5        g s  snf )Nr   r   iD      i   zWarning, no soundFzplayer1.gifr:   zexplosion1.gif)z
alien1.gifz
alien2.gifz
alien3.gifzbomb.gifzshot.gif)r   r   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   get_sdl_versionr   pre_initinitget_initr   displaymode_okr.   sizeset_moder   	transformflipr    r%   rg   rS   r{   rs   scaleset_iconset_captionmouseset_visiblerN   rangewidth	get_widthblitr   r
   r   r   r   musicr   playr*   GroupRenderUpdatesGroupSingleALIEN_RELOADtimeClockr   addr   aliveeventgettypeQUITKEYDOWNkeyK_ESCAPEK_fcopy
FULLSCREENget_pressedclearrd   K_RIGHTK_LEFTrA   K_SPACEr0   len	MAX_SHOTSrG   intrW   
ALIEN_ODDS	BOMB_ODDSspritecollider   rp   groupcollidekeysdrawtickfadeoutwait)winstyle
fullscreen	bestdepthscreenimgimiconbgdtile
backgroundx
boom_soundshoot_soundr   aliensshotsbombsall	lastalienalienreloadclockplayerr   screen_backupkeystater@   firingr   bombdirtys                                r   mainr      s   	A!#
%Q-GGI	xx))++!"JH

"":??HbAIZZ  (FF ]
#C",,++CA67FM
%
&CR\\..sAq9:I-WX-WrJrN-WXELj)*DKj)*DK <<ell1ox8DJJJJ?+HH )*GJOO,J1j&&(9(9(;<Q( =
KK
F#JJOO J'J^,K	xxXv~>
E"
B YY__FIIOOEIIOOE
))
!
!
#C		%%'I KGGMMOE C[F	Y 
wwc
 ,,..XX\\^EzzRWW$zzRZZ'EII,DzzRZZ'99&%67(.!#!4!4&OOX-Ey" M6:9:(.!#!4!4&OOX" M6:JJOO%%/J- $0 66%%' 			&% 	

 RZZ(8BII+>>	I"**%Fs5zI/E%-xxK3  "! %/KV]]_z122&#y)&K S9!<==!!3s3 YY,,VVQ?ExxJ2!eS!fc"AIEKKM @ YY++F1a@EEGExxJ2!eS!AIE	 H II++FE1=DxxJ2!fc"dC KKM >  


%  	

2i ,,..l 
xx
t$GGLLO Ys   5h__main__)r   )#rM   r
   rW   typingr   pygamer   r   get_extendedr   r   r   r   r   Rectr.   r   r   splitabspath__file__r   r   r   r*   r+   r    rS   rg   rs   r{   r   r   rI   quitrQ   r8   r   <module>r      sC  0 
    
xx
<
== 	
	WWQ3$
	77==23A6
*"RYY "@CBII C4		   6299 *299 6>BII >(\@ zFGGI r8   