main.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import pygame # 导入pygame模块from setting import Setting
import startmain as sm
from pygame.sprite import Groupdef InitGame():print("InitGame")pygame.init() #初始化pygameai_settings = Setting()#创建类实例screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))#元组填参pygame.display.set_caption("start")start = Group()moon = Group()sm.create_start(ai_settings, screen, start)sm.create_moon(ai_settings, screen, moon)while True:sm.check_events(ai_settings,screen,start,moon)sm.update_start(ai_settings,screen,start)sm.update_moon(ai_settings, screen, moon)sm.hit_fun(ai_settings, screen, start, moon)sm.update_screen(ai_settings,screen,start,moon)InitGame()
seeting.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import sys
import pygame # 导入pygame模块
class Setting():# 存储该项目所有设置的类def __init__(self):# 初始化游戏的设置# 屏幕设置self.screen_width = 1024self.screen_height = 850self.bg_color = (123 ,198 ,241)self.start_width = 10self.start_height = 10self.start_num = 5self.start_color = 178, 34, 34self.start_speed_min = -20self.start_speed_max = 20self.moon_speed = 1
startmain.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import sys
import pygame # 导入pygame模块
from start import Start
from moon import Moon
from time import sleep
import randomdef update_start(ai_settings, screen,start):#所有星星消失后 重新绘制星星if len(start) == 0:create_start(ai_settings, screen, start)# 更新星星位置# start.update()# sleep(1)def create_start(ai_settings, screen,start):for a in range(ai_settings.start_num):new_start = Start(ai_settings, screen)new_start.rect.x = random.randint(0, ai_settings.screen_width)new_start.rect.y = random.randint(0, ai_settings.screen_height)start.add(new_start)def check_keydown_events(event,ai_settings,screen,start,moon):if event.key == pygame.K_RIGHT:for m in moon.copy():m.moving_right = Trueelif event.key == pygame.K_LEFT:for m in moon.copy():m.moving_left = Trueelif event.key == pygame.K_UP:for m in moon.copy():m.moving_up = Trueelif event.key == pygame.K_DOWN:for m in moon.copy():m.moving_down = Truedef check_keyup_events(event, ai_settings, screen, start, moon):if event.key == pygame.K_RIGHT:for m in moon.copy():m.moving_right = Falseelif event.key == pygame.K_LEFT:for m in moon.copy():m.moving_left = Falseelif event.key == pygame.K_UP:for m in moon.copy():m.moving_up = Falseelif event.key == pygame.K_DOWN:for m in moon.copy():m.moving_down = Falsedef check_events(ai_settings,screen,start,moon):for event in pygame.event.get():if event.type == pygame.QUIT: # 玩家单击游戏窗口关闭按钮时检测到sys.exit()elif event.type == pygame.KEYDOWN:#按下按键if event.key == pygame.K_1:# 处理左键按下事件print("1 key pressed")sys.exit()else:# print(" key pressed")check_keydown_events(event,ai_settings,screen,start,moon)elif event.type == pygame.KEYUP:#释放按键check_keyup_events(event, ai_settings, screen, start, moon)def create_moon(ai_settings, screen,moon):m = Moon(ai_settings,screen)m.rect.x = random.randint(0, ai_settings.screen_width)m.rect.y = random.randint(0, ai_settings.screen_height)moon.add(m)
def update_moon(ai_settings, screen,moon1):moon1.update()def hit_fun(ai_settings, screen,start,moon):# 两个组相撞 是否消失collisions = pygame.sprite.groupcollide(start, moon, True, False)def update_screen(ai_settings, screen,start,moon):screen.fill(ai_settings.bg_color)for start in start.sprites():start.start_draw()#自己绘制图形的绘制方式moon.draw(screen)#图片的绘制方式pygame.display.flip()
start.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import sys
import pygame # 导入pygame模块
from start import Start
from moon import Moon
from time import sleep
import randomdef update_start(ai_settings, screen,start):#所有星星消失后 重新绘制星星if len(start) == 0:create_start(ai_settings, screen, start)# 更新星星位置# start.update()# sleep(1)def create_start(ai_settings, screen,start):for a in range(ai_settings.start_num):new_start = Start(ai_settings, screen)new_start.rect.x = random.randint(0, ai_settings.screen_width)new_start.rect.y = random.randint(0, ai_settings.screen_height)start.add(new_start)def check_keydown_events(event,ai_settings,screen,start,moon):if event.key == pygame.K_RIGHT:for m in moon.copy():m.moving_right = Trueelif event.key == pygame.K_LEFT:for m in moon.copy():m.moving_left = Trueelif event.key == pygame.K_UP:for m in moon.copy():m.moving_up = Trueelif event.key == pygame.K_DOWN:for m in moon.copy():m.moving_down = Truedef check_keyup_events(event, ai_settings, screen, start, moon):if event.key == pygame.K_RIGHT:for m in moon.copy():m.moving_right = Falseelif event.key == pygame.K_LEFT:for m in moon.copy():m.moving_left = Falseelif event.key == pygame.K_UP:for m in moon.copy():m.moving_up = Falseelif event.key == pygame.K_DOWN:for m in moon.copy():m.moving_down = Falsedef check_events(ai_settings,screen,start,moon):for event in pygame.event.get():if event.type == pygame.QUIT: # 玩家单击游戏窗口关闭按钮时检测到sys.exit()elif event.type == pygame.KEYDOWN:#按下按键if event.key == pygame.K_1:# 处理左键按下事件print("1 key pressed")sys.exit()else:# print(" key pressed")check_keydown_events(event,ai_settings,screen,start,moon)elif event.type == pygame.KEYUP:#释放按键check_keyup_events(event, ai_settings, screen, start, moon)def create_moon(ai_settings, screen,moon):m = Moon(ai_settings,screen)m.rect.x = random.randint(0, ai_settings.screen_width)m.rect.y = random.randint(0, ai_settings.screen_height)moon.add(m)
def update_moon(ai_settings, screen,moon1):moon1.update()def hit_fun(ai_settings, screen,start,moon):# 两个组相撞 是否消失collisions = pygame.sprite.groupcollide(start, moon, True, False)def update_screen(ai_settings, screen,start,moon):screen.fill(ai_settings.bg_color)for start in start.sprites():start.start_draw()#自己绘制图形的绘制方式moon.draw(screen)#图片的绘制方式pygame.display.flip()
moon.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import sys
import pygame # 导入pygame模块
from pygame.sprite import Sprite
class Moon(Sprite):def __init__(self, ai_settings, screen):super(Moon, self).__init__()self.screen = screenself.ai_settings = ai_settingsself.image = pygame.image.load('./img/moon2.png')self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()# 放在屏幕底部中央self.rect.centerx = self.screen_rect.centerxself.rect.centery = self.screen_rect.centeryself.centerx = float(self.rect.centerx)self.centery = float(self.rect.centery)# 移动标志self.moving_right = Falseself.moving_left = Falseself.moving_up = Falseself.moving_down = Falsedef update(self):if self.moving_right and self.rect.right < self.screen_rect.right: # 标志为True时向右移动self.centerx += self.ai_settings.moon_speedif self.moving_left and self.rect.left > 0: # 标志为True时向左移动self.centerx -= self.ai_settings.moon_speedif self.moving_up and self.rect.top > 0: # 标志为True时向右移动self.centery -= self.ai_settings.moon_speedif self.moving_down and self.rect.bottom <self.screen_rect.bottom: # 标志为True时向左移动self.centery += self.ai_settings.moon_speed# 根据self.center更新rect对象self.rect.centerx = self.centerxself.rect.centery = self.centery
图片
这里自取更好
https://www.iconfont.cn/