Skip to content Skip to main navigation Skip to footer

Python: Python中写一个乒乓球类的游戏

最近开始学Python,感觉挺好玩的,既有脚本语言的灵活性,又有丰富的类库与面向对象的特点,开发起来很方便。

Python: Python中写一个乒乓球类的游戏
Python: Python中写一个乒乓球类的游戏

游戏的规则和乒乓球一样,如果妙蛙种子掉地上了就算输,你可以用蓝色的跷跷板弹它,使他不落到地面上。

Game Over后可按任意键继续游戏或选择退出。

代码如下:

  1  import sys, pygame
   2  from  random import *
  3  from  pygame.locals import *
  4  from  pygame.font import *
  5  class  MyPlayer(pygame.sprite.Sprite):
   6      def __init__(self, image_file, location, speed):
   7          pygame.sprite.Sprite.__init__(self)
   8          self.image = pygame.image.load(image_file)
   9          self.rect = self.image.get_rect()
  10          self.rect.left, self.rect.top = location
  11          self.speed = speed
  12          self.status = True
  13      def move(self):
  14          self.rect = self.rect.move(self.speed)
  15  if  self.rect.left < 0  or self.rect.right > width:
  16              self.speed[0 ] = -self.speed[0 ]
  17  if  self.rect.top < 0 :
  18              self.speed&#91;1 &#93; = -self.speed&#91;1 &#93;
  19  if  self.rect.bottom > height:
  20              #Game over
  21              self.status = False
  22  class  Reflector(pygame.sprite.Sprite):
  23      def __init__(self, image_file, location, speed):
  24          pygame.sprite.Sprite.__init__(self)
  25          self.image = pygame.image.load(image_file)
  26          self.rect = self.image.get_rect()
  27          self.rect.left, self.rect.top = location
  28          self.speed = speed
  29      def move(self):
  30          self.rect = self.rect.move(self.speed)
  31  if  self.rect.left < 0  or self.rect.right > width:
  32              self.speed[0 ] = -self.speed[0 ]
  33  if  self.rect.top < 0  or self.rect.bottom > height:
  34              self.speed[1 ] = -self.speed[1 ]
  35  def animate(players):
  36      screen.fill([255 ,255 ,255 ])
  37  for  player in  players:
  38          player.move()
  39  for  player in  players:
  40          players.remove(player)
  41  if  pygame.sprite.spritecollide(player,players,False):
  42              player.speed[0 ] = -player.speed[0 ]
  43              player.speed[1 ] = -player.speed[1 ]
  44          players.add(player)
  45          player.move()
  46          screen.blit(player.image,player.rect)
  47      pygame.display.flip()
  48      pygame.time.delay(10 )
  49
 50  pygame.init()
  51  size = width,height = 640 ,480
 52  screen = pygame.display.set_mode(size)
  53  screen.fill([255 ,255 ,255 ])
  54  pygame.display.set_caption(" MiaoWa Game >" )
  55  def play():
  56      img_player = " C:UsersdswuDesktopplayer.png >"
 57      players = pygame.sprite.Group()
  58  for  row in  range(0 ,1 ):
  59  for  column in  range(0 ,1 ):
  60              playerLocation = [column*250 +10 ,row*250 +10 ]
  61              playerSpeed = [choice([-2 ,2 ]), choice([-2 ,2 ])]
  62              player = MyPlayer(img_player, playerLocation, playerSpeed)
  63              players.add(player)
  64      img_ref_path = " C:UsersdswuDesktopReflector.png >"
 65      ref_pos = [0 ,464 ]
  66      ref_speed = [0 ,0 ]
  67      reflector = Reflector(img_ref_path, ref_pos, ref_speed)
  68      players.add(reflector)
  69      running = True
  70  while  running:
  71          key_pressed = pygame.key.get_pressed()
  72  for  event  in  pygame.event .get ():
  73  if  event .type == pygame.QUIT:
  74                  game.quit()
  75  if  event .type == KEYDOWN:
  76  if  event .key == K_LEFT:
  77                      ref_speed[0 ] = -2
 78                  elif event .key == K_RIGHT:
  79                      ref_speed[0 ] = +2
 80          animate(players)
  81  if  player.status == False:
  82              running = False
  83      final_text = " Game Over! >"
 84      ft_font = pygame.font.Font(None, 100 )
  85      ft_surf = ft_font.render(final_text, 1 , (0 ,0 ,0 ))
  86      screen.blit(ft_surf, [screen.get_width()/2  - ft_surf.get_width()/2 , 100 ])
  87      tip_text = " Type any key to continue >"
 88      tip_font = pygame.font.Font(None, 50 )
  89      tip_surf = tip_font.render(tip_text, 1 , (0 ,0 ,0 ))
  90      screen.blit(tip_surf, [screen.get_width()/2  - tip_surf.get_width()/2 , 200 ])
  91      pygame.display.flip()
  92      keepOn = True
  93  while  keepOn:
  94          key_pressed = pygame.key.get_pressed()
  95  for  event  in  pygame.event .get ():
  96  if  event .type == pygame.QUIT:
  97                  pygame.quit()
  98  if  event .type == KEYDOWN:
  99                  play()
 100  play() 

主要是通过pygame.sprite.Sprite类实现碰撞的监控,通过事件的捕捉及判断实现这种弹力球类的游戏,其中涉及到文字在界面上的显示,游戏中的循环控制,以及重新开始游戏等。

把上面这段代码贴到你的IDLE中,找到下面这两行替换成你机器中的图片路径,按F5就可以运行了。

img_player = " C:UsersdswuDesktopplayer.png >"
img_ref_path  = " C:UsersdswuDesktopReflector.png >"  

由于比较简单,看看代码运行一下应该就差不多明白了,如果有不明白的地方请给我留言,方便一起学习与进步。

平时都在线,欢迎交流。

原文:http://www.cnblogs.com/LanTianYou/p/4544614.html

0 Comments

There are no comments yet

Leave a comment

Your email address will not be published.