main.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pygame # 导入pygame模块
from setting import Setting
import startmain as sm
from pygame.sprite import Group
def InitGame():
print("InitGame")
pygame.init() #初始化pygame
ai_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 = 1024
self.screen_height = 850
self.bg_color = (123 ,198 ,241)
self.start_width = 10
self.start_height = 10
self.start_num = 5
self.start_color = 178, 34, 34
self.start_speed_min = -20
self.start_speed_max = 20
self.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 random
def 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 = True
elif event.key == pygame.K_LEFT:
for m in moon.copy():
m.moving_left = True
elif event.key == pygame.K_UP:
for m in moon.copy():
m.moving_up = True
elif event.key == pygame.K_DOWN:
for m in moon.copy():
m.moving_down = True
def check_keyup_events(event, ai_settings, screen, start, moon):
if event.key == pygame.K_RIGHT:
for m in moon.copy():
m.moving_right = False
elif event.key == pygame.K_LEFT:
for m in moon.copy():
m.moving_left = False
elif event.key == pygame.K_UP:
for m in moon.copy():
m.moving_up = False
elif event.key == pygame.K_DOWN:
for m in moon.copy():
m.moving_down = False
def 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 random
def 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 = True
elif event.key == pygame.K_LEFT:
for m in moon.copy():
m.moving_left = True
elif event.key == pygame.K_UP:
for m in moon.copy():
m.moving_up = True
elif event.key == pygame.K_DOWN:
for m in moon.copy():
m.moving_down = True
def check_keyup_events(event, ai_settings, screen, start, moon):
if event.key == pygame.K_RIGHT:
for m in moon.copy():
m.moving_right = False
elif event.key == pygame.K_LEFT:
for m in moon.copy():
m.moving_left = False
elif event.key == pygame.K_UP:
for m in moon.copy():
m.moving_up = False
elif event.key == pygame.K_DOWN:
for m in moon.copy():
m.moving_down = False
def 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 = screen
self.ai_settings = ai_settings
self.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.centerx
self.rect.centery = self.screen_rect.centery
self.centerx = float(self.rect.centerx)
self.centery = float(self.rect.centery)
# 移动标志
self.moving_right = False
self.moving_left = False
self.moving_up = False
self.moving_down = False
def update(self):
if self.moving_right and self.rect.right < self.screen_rect.right: # 标志为True时向右移动
self.centerx += self.ai_settings.moon_speed
if self.moving_left and self.rect.left > 0: # 标志为True时向左移动
self.centerx -= self.ai_settings.moon_speed
if self.moving_up and self.rect.top > 0: # 标志为True时向右移动
self.centery -= self.ai_settings.moon_speed
if 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.centerx
self.rect.centery = self.centery
图片
这里自取更好
https://www.iconfont.cn/