外星人大战-----------------------------课后习题(从入门到实践)第十三章

这篇博客介绍了如何使用Python进行图形游戏编程,从创建整齐排列并显示的星星,到随机分布的星星,再到制作下落消失的雨滴效果。进一步,博主展示了如何创建一个游戏,让玩家控制角色接住下落的球,如果未接到球三次则游戏结束。通过逐步升级的编程挑战,帮助读者掌握Python游戏开发技巧。
摘要由CSDN通过智能技术生成

1.找一幅星星的图像,并在屏幕上显示一系列整齐排列的星星

先创建一个star类;

#-*-coding:GBK-*-
#-*-coding:utf-8-*-
#星星类
import pygame
from pygame.sprite import Sprite

class Star(Sprite):
    def __init__(self,ai_settings,screen):
        super().__init__()
        self.screen=screen
        self.ai_settings=ai_settings
        self.image=pygame.image.load('images/star.bmp')
        self.rect=self.image.get_rect()
        self.rect.x=self.rect.width
        self.rect.y=self.rect.height
        #存储星星的准确位置
        self.x=float(self.rect.x)
    
    def blitme(self):
        self.screen.blit(self.image,self.rect)

设置类:

#-*-coding:GBK-*-
#-*-coding:utf-8-*-
#存储作业例子的设置类

class Setting():
    def __init__(self):
        self.screen_width=800      #设置屏幕高度宽度,背景颜色
        self.screen_height=600
        self.bg_color=(230,230,230)

功能模块:

#-*-coding:GBK-*-
#-*-coding:utf-8-*-
#功能模块,包括按键的设置检测,退出游戏设置

import pygame
import sys
from star import Star

#检测鼠标键盘事件
def check_events(screen):
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
       
#计算每行可以放入多少个星星
def star_number_x(ai_settings,star_width):
    available_space_x=ai_settings.screen_width-2*star_width
    number_stars=int(available_space_x/(2*star_width))
    return number_stars

#计算可以放入多少行
def star_number_rows(ai_settings,star_height):
    available_space_y=ai_settings.screen_height-2*star_height
    rows_number=int(available_space_y/(2*star_height))
    return rows_number

#创建一个星星
def creat_star(ai_settings,screen,stars,star_number,row_number):
    star=Star(ai_settings,screen)
    star_width=star.rect.width
    star.x=star_width+2*star_width*star_number
    star.rect.x=star.x
    star.rect.y=star.rect.height+2*star.rect.height*row_number
    stars.add(star)

#创建一群星星
def creat_star_group(ai_settings,screen,stars):
    star=Star(ai_settings,screen)
    number_stars_x=star_number_x(ai_settings,star.rect.width)
    rows_number=star_number_rows(ai_settings,star.rect.height)
    for row_number in range(rows_number):
        for star_number in range(number_stars_x):
            creat_star(ai_settings,screen,stars,star_number,row_number)

#更新屏幕:
def update_screen(ai_settings,screen,stars):
    screen.fill(ai_settings.bg_color)
    stars.draw(screen)
    pygame.display.flip()

主程序:

#-*-coding:GBK-*-
#-*-coding:utf-8-*-

import sys     #退出时需要这个模块
import pygame  #导入游戏模块
from setting import Setting    #导入设置类
from star import Star   #导入图片类
from pygame.sprite import Group
import game_functions as gf  #导入功能模块

def run_game():
    pygame.init()  #初始化,创建屏幕对象
    ai_settings=Setting()    #创建一个800*800的屏幕
    screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))  
    pygame.display.set_caption("13-1")   #对于这个窗口的命名

    stars=Group()
    gf.creat_star_group(ai_settings,screen,stars)


    "开始游戏的主代码循环"
    while True:
        gf.check_events(screen)
        gf.update_screen(ai_settings,screen,stars)


run_game()

运行主程序后,结果如下:

2.随机分布星星

在1的基础上:

修改star类:

#-*-coding:GBK-*-
#-*-coding:utf-8-*-
#星星类
#星星类
import pygame
from pygame.sprite import Sprite
from random import randint

class Star(Sprite):
    def __init__(self,ai_setings,screen):
        super().__init__()
        self.screen=screen
        self.random_number=randint(-10, 10)
        self.image=pygame.image.load('images/star.bmp')
        self.r
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值