高新区万达(大连)编程猫学院(二)

最近在带NCT2级的课程,孩子们开始学习比较大的项目,今天记录一个小飞机游戏的模板代码:
完成功能:五颜六色的陨石下落,五颜六色的子弹飞出去,小飞机左右移动。
成果图,如下

在这里插入图片描述

废话不多说,上代码:

import pygame
import random

#定义屏幕宽,高
WIDTH = 480
HEIGHT = 600
#创建颜色
COLOR_GREEN = (0, 255, 0)
COLOR_BLACK = (0, 0, 0)
COLOR_RED = (255, 0, 0)
COLOR_YELLOW = (255, 255, 0)
#刷新频率
FPS = 60
#初始化
pygame.init()

#定义精灵区域

# 1. 定义飞机精灵
class Player(pygame.sprite.Sprite):
	def __init__(self):
		# 完成精灵初始化
		pygame.sprite.Sprite.__init__(self)
		# 初始化精灵图像
		self.image = pygame.Surface((50,50))
		self.image.fill(COLOR_GREEN)
		self.rect = self.image.get_rect()
		#设置长方形中心的X,Y值
		self.rect.centerx = WIDTH / 2
		self.rect.centery = HEIGHT - 10
	def update(self):
		self.speedx = 0
		keys = pygame.key.get_pressed()
		if keys[pygame.K_LEFT]:
			self.speedx = -8
		if keys[pygame.K_RIGHT]:
			self.speedy = 8
		self.rect.x += self.speedx
		if self.rect.right > WIDTH:
			self.rect.right = WIDTH
		if self.rect.left < 0:
			self.rect.left = 0

#2. 定义陨石精灵
class Meteorite(pygame.sprite.Sprite):
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		#定义陨石的图形
        self.image = pygame.Surface((30, 40))
        # 五颜六色的陨石
        self.image.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(WIDTH - self.rect.width)
        self.rect.y = random.randrange(-100, 40)

        #设定运行速度
        self.speedy = random.randrange(1, 8)
        self.speedx = random.randrange(-3, 3)
    def update(self):
    	self.rect.x += self.speedx
    	self.rect.y += self.speedy
    	# 检查是否出边界
		if self.rect.top > HEIGHT + 10 or self.rect.left < -30 or self.rect.right > WIDTH + 30:
            self.rect.x = random.randrange(WIDTH - self.rect.width)
            self.rect.y = random.randrange(-100, -40)
            
class Bullet(pygame.sprite.Sprite):
	def __init__(self,x,y):
		pygame.sprite.Sprite.__init__(self)
		self.image = pygame.Surface((10,20))
		self.image.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
        self.rect = self.image.get_rect()
        # 设置出现的位置
        self.rect.y = y
        self.rect.centerx = x
        self.speedy = -10
        
     def update(self):
     	self.rect.y += self.speedy
     	# 子弹超出屏幕检测
     	if self.rect.bottom < 0:
     		self.kill()

# 设置屏幕
screen = pygame.display.set_mode((WIDTH,HEIGHT))
clock = pygame.time.Clock()
# 定义一个飞机对象
player = Player()

all_sprites = pygame.sprite.Group()
all_sprites.add(player)

for i in range(10):
	met = Meteorite()
	all_sprites.add(met)
running = True
while running:
	clock.tick(FPS)
	screen.fill(COLOR_BLACK)
	all_sprites.update()
	all_sprites.draw(screen)
	pygame.display.flip()
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			running = False
		elif event.type == pygame.KEYDOWN:
			if event.key == pygame.K_SPACE:
				player.shoot()
			if event.key == pygame.K_ESCAPE:
				running = False
pygame.quit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松桥爸(仁勇)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值