您的位置:首页 > 编程语言 > Python开发

Python编程:从入门到实践,课后题13-5

2018-01-08 15:12 274 查看
自学Python两三个月了,深感智商的欠缺,思维方式比较线性,毕竟是一个大学只学过一门VB的女同学

。所以学编程的道路上经常遇到障碍,笨笨……一个小问题都会牵出很深奥的知识。发现这本书的第二部分网上找不到参考答案,就分享一个自己研究了很多天(真的是好几天,?),最后做的还算成功的13.5。编程真的很奇妙,虽然我学的很笨拙,但是成就感还是要爆了……
import pygame
import sys
from random import randint
from pygame.sprite import Sprite
from pygame.sprite import Group

pygame.init()
bg_color=(20,40,50)
screen=pygame.display.set_mode((1200,700))
random_number=randint(1,1200)
dropspeed=3
speed_factor=5

class Doll(Sprite):
"""docstring for Doll"""
def __init__(self, screen):
super(Doll, self).__init__()
self.screen = screen
self.image=pygame.image.load('timg.bmp')
self.rect=self.image.get_rect()
self.screen_rect=self.screen.get_rect()
self.rect.centerx=self.screen_rect.centerx
self.rect.bottom=self.screen_rect.bottom
self.moving_right=False
self.moving_left=False
def blitme(self):
self.screen.blit(self.image,self.rect)
def update(self):
if self.moving_right and self.rect.right<self.screen_rect.right:
self.rect.centerx+=speed_factor
if self.moving_left and self.rect.left>0:
self.rect.centerx-=speed_factor

class Water(Sprite):
def __init__(self,screen,random_number):
super(Water, self).__init__()
self.screen=screen
self.image=pygame.image.load("raindrop.bmp")
self.rect=self.image.get_rect()
self.screen_rect=self.screen.get_rect()
self.rect.centerx=random_number
self.rect.top=0
self.y=float(self.rect.y)
def blitme(self):
self.screen.blit(self.image,self.rect)
def update(self):
self.y+=dropspeed
self.rect.y=self.y

def fail(self):
if self.rect.top>=self.screen_rect.bottom:
print("no")
waters.empty()
random_number=randint(1,1200)
water=Water(screen,random_number)
waters.add(water)

def catch_water(doll,water,waters):
catch=pygame.sprite.spritecollide(doll,waters,True,collided=None)
#曾经前边有doll=Doll()……导致在只有移动娃娃才能接到水珠的情况下,水珠不消失
for water in waters:#之前丢了这句,就不是遍历了!!!!
if water.rect.top>=water.screen_rect.bottom:
waters.empty()

if len(waters)==0:
random_number=randint(1,1200)
water=Water(screen,random_number)
waters.add(water)

def check_keydown_events(event,doll):
if event.key==pygame.K_RIGHT:
doll.moving_right=True
elif event.key==pygame.K_LEFT:
doll.moving_left=True

def check_keyup_events(event,doll):
if event.key==pygame.K_RIGHT:
doll.moving_right=False
elif event.key==pygame.K_LEFT:
doll.moving_left=False

def event_check(doll):
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN:
check_keydown_events(event,doll)
elif event.type==pygame.KEYUP:
check_keyup_events(event,doll)

def rungame():
water=Water(screen,random_number)
waters=Group()
waters.add(water)
doll=Doll(screen)
while True:
screen.fill(bg_color) #这一步很重要啊,要是挪到True以前,娃娃就会出现重影,擦掉背景色。
doll.blitme()
waters.draw(screen)
pygame.display.flip()
event_check(doll)
doll.update()
waters.update()
catch_water(doll,water,waters)

rungame()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息