1.抓住它 这是主python文件
import sys
import pygame
from settings import Settings
from character import Character
from ball import Ball
import game_functions as gf
def run_game():
ai_settings=Settings(1200,700,(230,230,230))
screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption('catch it')
boy=Character(screen,ai_settings)
ball=Ball(screen,ai_settings)
while True:
gf.check_events(screen,ai_settings,boy)
gf.update_ball(screen,ai_settings,ball,boy)
boy.update()
gf.update_screen(screen,ai_settings,boy,ball)
run_game()
2.settings.py 该文件具有屏幕、球速和角色速度的所有设置
class Settings():
def __init__(self,screen_width,screen_height,screen_bg_color):
self.screen_width=screen_width
self.screen_height=screen_height
self.screen_bg_color=screen_bg_color
self.speed_ball=0.1
self.speed_character=2
3.ball.py 更新方法将球向下移动一个像素,并检查球的底部是否到达屏幕底部。在球到达底部后,我尝试放置另一个随机落下的球,但我的球没有落下,我可以看到一个随机球形成但没有移动,然后消失,然后出现另一个,依此类推
from time import sleep
import pygame
from random import randint
class Ball():
def __init__(self,screen,ai_settings):
self.screen=screen
self.screen_rect=screen.get_rect()
self.ai_settings=ai_settings
self.image=pygame.image.load('/Users/WIN-10/Desktop/game/catching ball/ball.bmp')
self.rect=self.image.get_rect()
'''randomly initialize position of ball'''
self.rect.x=randint(0,self.ai_settings.screen_width)
self.rect.y=randint(0,self.ai_settings.screen_height)
self.y=float(self.rect.y)
def update(self):
'''check if ball reached bottom of screen'''
self.y+=self.ai_settings.speed_ball
self.rect.y=self.y
if self.rect.bottom>=self.screen_rect.bottom:
self.rect.x=randint(0,self.ai_settings.screen_width)
sleep(1)
def blitme(self):
self.screen.blit(self.image,self.rect)
4.character.py
from random import randint
import pygame
class Character():
def __init__ (self,screen,ai_settings):
self.screen=screen
self.ai_settings=ai_settings
self.image=pygame.image.load('/Users/WIN-10/Desktop/game/catching ball/boy.bmp ')
self.rect=self.image.get_rect()
self.screen_rect=self.screen.get_rect()
'''initializing position'''
self.rect.x=self.screen_rect.centerx
self.rect.bottom=self.screen_rect.bottom
self.moving_left=False
self.moving_right=False
self.x=float(self.rect.x)
def update(self):
if self.moving_left and self.x>0:
self.x-=self.ai_settings.speed_character
if self.moving_right and self.x<self.screen_rect.right:
self.x+=self.ai_settings.speed_character
self.rect.x=self.x
def blitme(self):
self.screen.blit(self.image,self.rect)
5.game_functions.py
import pygame
import sys
from random import randint
def check_key_down(event,screen,ai_settings,boy):
if event.key==pygame.K_LEFT:
boy.moving_left=True
elif event.key==pygame.K_RIGHT:
boy.moving_right=True
def check_key_up(event,screen,ai_settings,ship):
if event.key==pygame.K_LEFT:
ship.moving_left=False
elif event.key==pygame.K_RIGHT:
ship.moving_right=False
def check_events(screen,ai_settings,boy):
for event in pygame.event.get():
if event.type==pygame.K_q:
sys.exit()
elif event.type==pygame.KEYUP:
check_key_up(event,screen,ai_settings,boy)
elif event.type==pygame.KEYDOWN:
check_key_down(event,screen,ai_settings,boy)
def check_ball_character_collision(screen,ai_settings,ball,boy):
collisions=pygame.sprite.collide_rect(ball, boy)
return collisions
def ball_caught(ball):
ball.rect.x=randint(0,ball.ai_settings.screen_width)
ball.rect.y=randint(0,ball.ai_settings.screen_height-200)
def update_ball(screen,ai_settings,ball,boy):
ball.update()
if check_ball_character_collision(screen,ai_settings,ball,boy):
ball_caught(ball)
def update_screen(screen,ai_settings,boy,ball):
screen.fill(ai_settings.screen_bg_color)
ball.blitme()
boy.blitme()
pygame.display.flip()
Ball
实例的self.rect.y
由self.y
更新。因此,您必须更改ball.y
而不是ball.rect.y
:从类} 模块
Ball
中删除sleep(1)
。如果您想延迟游戏,那么使用^{相关问题 更多 >
编程相关推荐