赞
踩
目录
前期已经完成了小蜜蜂(这里我想更名了,因为是一只大花猫,每次说小蜜蜂怪怪的,以后都叫大花猫吧)的创建,现在我们要创建它的对手了,一群小老鼠,今天我们按照计划,先搞定一只小老鼠。
像之前的小蜜蜂一样,找图片不好找,本来是想找一只可爱的小老鼠,白色的,萌萌的,结果找不到,只能找一只写实的,看着有点恶心,不过缩小以后好多了,大家凑合看。
有了前面创建大花猫的经历,其实我们做这个小老鼠还是有一定思路的,首先,我们要创建一个老鼠的类mouse,为了编写的时候不搞混淆,我们把类的名字设置的和书上一样,也命名为Alien,然后我们需要在里面设置小老鼠的位置、速度等属性,和大花猫一样,下面我们看代码:
- import pygame
- from pygame.sprite import Sprite
-
- class Alien(Sprite):
- def __init__(self,new_setting,screen):
- super(Alien,self).__init__()
- self.screen = screen
- self.new_setting = new_setting
-
- self.image = pygame.image.load('mouse.jpg')
- self.rect = self.image.get_rect()
-
- self.rect.x = self.rect.width
- self.rect.y = self.rect.height
-
- self.x = float(self.rect.x)
-
- def blitme(self):
- self.screen.blit(self.image,self.rect)
可以看出,这段代码与大花猫的代码Ship很相似,但是它导入了Sprite类,这个类在创建子弹的时候也导入了,因为Sprite可以处理多个对象,子弹和小老鼠都不止一个。self.x = float(self.rect.x)的作用也和子弹、大花猫一致,用来存储位置信息,会有一个属性来控制速度,不明白的可以看看前面的内容。
Alien类写好之后,我们就需要在主函数中创建它的实例,创建实例很简单,我们导入Alien类,再创建,看代码:
- import pygame
- import settings
- from ship import Ship
- import game_functions as gf
- from pygame.sprite import Group
- from alien import Alien
-
- def run_game():
- pygame.init()
- new_setting=settings.Settings()
- screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))
- ship = Ship(screen,new_setting)
- alien = Alien(new_setting,screen)
- pygame.display.set_caption("狂敲代码的橘子")
- bullets = Group()
-
- while True:
- gf.check_events(new_setting,screen,ship,bullets)
- ship.update()
- gf.update_bullets(bullets)
- gf.update_screen(new_setting,screen,ship,bullets)
-
-
- run_game()
我们将创建实例的代码就写在ship下面,目前我们的操作都是按照先创建一只小老鼠来的,创建好实例后,我们先让屏幕显示这一只小老鼠看看效果。
在Alien类中,我们已经写好了显示函数blitme(),我们只需要在game_functions模块的update_screen()函数里调用blitme就可以了,同样,我们把代码写在ship.blitme()后面。
- import sys
- import pygame
- from bullet import Bullet
-
-
- def check_keydown_events(event,new_setting,screen,ship,bullets):
- if event.key == pygame.K_RIGHT:
- ship.moving_right = True
-
- elif event.key == pygame.K_LEFT:
- ship.moving_left = True
-
- elif event.key == pygame.K_SPACE:
- fire_bullet(new_setting, screen, ship, bullets)
-
- elif event.key ==pygame.K_q:
- sys.exit()
-
-
- def check_keyup_events(event,ship):
- if event.key == pygame.K_RIGHT:
- ship.moving_right = False
-
- if event.key == pygame.K_LEFT:
- ship.moving_left = False
-
-
- def check_events(new_setting,screen,ship,bullets):
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- sys.exit()
- elif event.type==pygame.KEYDOWN:
- check_keydown_events(event,new_setting,screen,ship,bullets)
-
- elif event.type==pygame.KEYUP:
- check_keyup_events(event, ship)
-
- def fire_bullet(new_setting,screen,ship,bullets):
- if len(bullets) < new_setting.bullets_allowed:
- new_bullet = Bullet(new_setting, screen, ship)
- bullets.add(new_bullet)
-
-
- def update_bullets(bullets):
- bullets.update()
- for bullet in bullets.copy():
- if bullet.rect.bottom <= 0:
- bullets.remove(bullet)
-
- def update_screen(new_setting,screen,ship,bullets,alien):
- screen.fill(new_setting.bg_color)
- for bullet in bullets.sprites():
- bullet.draw_bullet()
- ship.blitme()
- alien.blitme()
- pygame.display.flip()
这里我们要注意,我们将alien作为传参,传给了update_screen,所以我们的主函数调用update_screen的代码需要修改,加上传参alien。
现在一只小老鼠已经完成,我们来看看效果。
今天完成了一只小老鼠的创建,明天我们来创建一群小老鼠。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。