• pygame系列_箭刺Elephant游戏


    这个游戏原名为:Chimp,我们可以到:

    http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html

    获取到源码和详细的源码讲解

    下面是我对游戏的改编:

    运行效果:

    hongten_elephant

    当箭刺到大象的时候,大象的身体就会翻转,并且发出声音,当然没有刺到的时候,也会发出另外的声音。

    hongten_elephant

    在游戏中,有很多地方值得我们参考,如加载图片,声音和异常处理等

    =========================================

    代码部分:

    =========================================

    复制代码
      1 #python elephant
      2 
      3 #Import Modules
      4 import os, pygame
      5 from pygame.locals import *
      6 
      7 __author__ = {'name' : 'Hongten',
      8               'mail' : 'hongtenzone@foxmail.com',
      9               'blog' : 'http://www.cnblogs.com/hongten',
     10               'QQ'   : '648719819',
     11               'Version' : '1.0'}
     12 
     13 if not pygame.font: print('Warning, fonts disabled')
     14 if not pygame.mixer: print('Warning, sound disabled')
     15 
     16 
     17 #functions to create our resources
     18 def load_image(name, colorkey=None):
     19     fullname = os.path.join('data', name)
     20     try:
     21         image = pygame.image.load(fullname)
     22     except pygame.error as message:
     23         print('Cannot load image:', fullname)
     24         raise (SystemExit, message)
     25     image = image.convert()
     26     if colorkey is not None:
     27         if colorkey is -1:
     28             colorkey = image.get_at((0,0))
     29         image.set_colorkey(colorkey, RLEACCEL)
     30     return image, image.get_rect()
     31 
     32 def load_sound(name):
     33     class NoneSound:
     34         def play(self): pass
     35     if not pygame.mixer or not pygame.mixer.get_init():
     36         return NoneSound()
     37     fullname = os.path.join('data', name)
     38     try:
     39         sound = pygame.mixer.Sound(fullname)
     40     except pygame.error as message:
     41         print('Cannot load sound:', fullname)
     42         raise (SystemExit, message)
     43     return sound
     44 
     45 
     46 #classes for our game objects
     47 class Spear(pygame.sprite.Sprite):
     48     """moves a clenched spear on the screen, following the mouse"""
     49     def __init__(self):
     50         pygame.sprite.Sprite.__init__(self) #call Sprite initializer
     51         self.image, self.rect = load_image('spear-w.png', -1)
     52         self.punching = 0
     53 
     54     def update(self):
     55         "move the spear based on the mouse position"
     56         pos = pygame.mouse.get_pos()
     57         self.rect.midtop = pos
     58         if self.punching:
     59             self.rect.move_ip(5, 10)
     60 
     61     def punch(self, target):
     62         "returns true if the spear collides with the target"
     63         if not self.punching:
     64             self.punching = 1
     65             hitbox = self.rect.inflate(-5, -5)
     66             return hitbox.colliderect(target.rect)
     67 
     68     def unpunch(self):
     69         "called to pull the spear back"
     70         self.punching = 0
     71 
     72 
     73 class Elephant(pygame.sprite.Sprite):
     74     """moves a elephant critter across the screen. it can spin the
     75        monkey when it is punched."""
     76     def __init__(self):
     77         pygame.sprite.Sprite.__init__(self) #call Sprite intializer
     78         self.image, self.rect = load_image('elephant-nw.png', -1)
     79         screen = pygame.display.get_surface()
     80         self.area = screen.get_rect()
     81         self.rect.topleft = 10, 10
     82         self.move = 9
     83         self.dizzy = 0
     84 
     85     def update(self):
     86         "walk or spin, depending on the monkeys state"
     87         if self.dizzy:
     88             self._spin()
     89         else:
     90             self._walk()
     91 
     92     def _walk(self):
     93         "move the monkey across the screen, and turn at the ends"
     94         newpos = self.rect.move((self.move, 0))
     95         if self.rect.left < self.area.left or 
     96            self.rect.right > self.area.right:
     97             self.move = -self.move
     98             newpos = self.rect.move((self.move, 0))
     99             self.image = pygame.transform.flip(self.image, 1, 0)
    100         self.rect = newpos
    101 
    102     def _spin(self):
    103         "spin the monkey image"
    104         center = self.rect.center
    105         self.dizzy = self.dizzy + 12
    106         if self.dizzy >= 360:
    107             self.dizzy = 0
    108             self.image = self.original
    109         else:
    110             rotate = pygame.transform.rotate
    111             self.image = rotate(self.original, self.dizzy)
    112         self.rect = self.image.get_rect(center=center)
    113 
    114     def punched(self):
    115         "this will cause the monkey to start spinning"
    116         if not self.dizzy:
    117             self.dizzy = 1
    118             self.original = self.image
    119 
    120 
    121 def main():
    122     """this function is called when the program starts.
    123        it initializes everything it needs, then runs in
    124        a loop until the function returns."""
    125 #Initialize Everything
    126     pygame.init()
    127     screen = pygame.display.set_mode((468, 60))
    128     pygame.display.set_caption('Monkey Fever')
    129     pygame.mouse.set_visible(0)
    130 
    131 #Create The Backgound
    132     background = pygame.Surface(screen.get_size())
    133     background = background.convert()
    134     background.fill((250, 250, 250))
    135 
    136 #Put Text On The Background, Centered
    137     if pygame.font:
    138         font = pygame.font.Font(None, 36)
    139         text = font.render("Pummel The Elephant, And Win $$$", 1, (10, 10, 10))
    140         textpos = text.get_rect(centerx=background.get_width()/2)
    141         background.blit(text, textpos)
    142 
    143 #Display The Background
    144     screen.blit(background, (0, 0))
    145     pygame.display.flip()
    146 
    147 #Prepare Game Objects
    148     clock = pygame.time.Clock()
    149     whiff_sound = load_sound('elephant-jump.wav')
    150     punch_sound = load_sound('elephant-mmove.wav')
    151     elephant = Elephant()
    152     spear = Spear()
    153     allsprites = pygame.sprite.RenderPlain((spear, elephant))
    154 
    155 #Main Loop
    156     while 1:
    157         clock.tick(60)
    158 
    159     #Handle Input Events
    160         for event in pygame.event.get():
    161             if event.type == QUIT:
    162                 return
    163             elif event.type == KEYDOWN and event.key == K_ESCAPE:
    164                 return
    165             elif event.type == MOUSEBUTTONDOWN:
    166                 if spear.punch(elephant):
    167                     punch_sound.play() #punch
    168                     elephant.punched()
    169                 else:
    170                     whiff_sound.play() #miss
    171             elif event.type is MOUSEBUTTONUP:
    172                 spear.unpunch()
    173 
    174         allsprites.update()
    175 
    176     #Draw Everything
    177         screen.blit(background, (0, 0))
    178         allsprites.draw(screen)
    179         pygame.display.flip()
    180 
    181 #Game Over
    182 
    183 
    184 #this calls the 'main' function when this script is executed
    185 if __name__ == '__main__': main()
    复制代码

    源码下载:http://files.cnblogs.com/liuzhi/spear_elephant.zip

  • 相关阅读:
    C# 操作txt
    下周学习计划(0815——0822)
    配置允许外界访问的端口
    修改表结构
    C# return和break
    js Ajax的几种操作方法
    WebForm
    Extjs4新特性
    25、手把手教你Extjs5(二十五)Extjs5常用组件--form的基本用法
    24、手把手教你Extjs5(二十四)模块Form的自定义的设计[3]
  • 原文地址:https://www.cnblogs.com/liuzhi/p/3975777.html
Copyright © 2020-2023  润新知