设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Pygame 第8课】 火力全开

[复制链接]

0

主题

0

好友

63

积分

注册会员

Rank: 2

楼主
发表于 2013-9-11 13:17:32 |显示全部楼层
感觉让Bullet类自己管理实例的状态的也不错
  1. # -*- coding: utf-8 -*-
  2. import pygame,sys,random

  3. class Enemy:

  4.     def restart(self):
  5.         self.x = random.randint(50,400)
  6.         self.y = random.randint(-200,-50)
  7.         self.speed = random.random() + 0.1


  8.     def __init__(self):
  9.         self.restart()
  10.         self.image = pygame.image.load('enemy.png').convert_alpha()

  11.     def move(self):
  12.         if self.y < 800:
  13.             self.y += self.speed
  14.         else:
  15.             self.restart()

  16. class Bullet:

  17.     active_bullets = []
  18.     bullets = []

  19.     def __init__(self):
  20.         self.x = 0
  21.         self.y = -1
  22.         self.image = pygame.image.load('bullet.png').convert_alpha()
  23.         self.active = False
  24.         Bullet.bullets.append(self)
  25.         print(len(Bullet.bullets))

  26.     def move(self):
  27.         if self.y < 0:
  28.             Bullet.active_bullets.pop(Bullet.active_bullets.index(self))
  29.             Bullet.bullets.append(self)
  30.         if self in Bullet.active_bullets:
  31.             self.y -= 3

  32.     def restart(self):
  33.         mouseX,mouseY = pygame.mouse.get_pos()
  34.         self.x = mouseX - self.image.get_width()/2
  35.         self.y = mouseY - self.image.get_height()/2
  36.         self.active = True
  37.         Bullet.active_bullets.append(self)



  38. pygame.init()
  39. screen = pygame.display.set_mode((450,800),0,32)
  40. pygame.display.set_caption("Hello,Wrold!")
  41. background = pygame.image.load('back.jpg').convert()
  42. plane = pygame.image.load('plane.png').convert_alpha()


  43. for i in range(5):
  44.     Bullet()

  45. enemy = Enemy()
  46. interval_b = 0

  47. while True:
  48.     for event in pygame.event.get():
  49.         if event.type == pygame.QUIT:
  50.             pygame.quit()
  51.             sys.exit()
  52.     screen.blit(background,(0,0))

  53.     interval_b -= 1
  54.     if interval_b < 0:
  55.         if len(Bullet.bullets):
  56.             Bullet.bullets.pop(0).restart()
  57.         interval_b = 100

  58.     for b in Bullet.active_bullets:
  59.         b.move()
  60.         screen.blit(b.image,(b.x,b.y))

  61.     enemy.move()
  62.     screen.blit(enemy.image,(enemy.x,enemy.y))


  63.     x,y = pygame.mouse.get_pos()
  64.     x -= plane.get_width()/2
  65.     y -= plane.get_height()/2
  66.     screen.blit(plane,(x,y))
  67.     pygame.display.update()
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-19 19:18 , Processed in 0.024423 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部