【python】day06 模块 模块的顺序 包 pygame之满天星 pygame之小弹球

目录

01-模块

01-1:01-模块

01-2:XZ

02-模块的顺序

02-1:02-模块的顺序

02-2:oos

03-包

03-1:BAO

03-2:bao01

03-3:bao02

03-4:03-包

04-pygame之满天星

1.安装pygame

2.导入字体

3.创建项目

05-pygame之小弹球

05-1-一个球

05-2-五个球(进阶版)


本次代码目录一览:

01-模块

01-1:01-模块

'''
01-模块
    知识点:
        1.模块(Module)是以.py文件为单位
        2.模块中包含属性、方法、以及可执行的代码块等
        3.导入模块方式
            3.1 import 模块名
            3.2 from 模块名 import 功能名
            3.3 from 模块名 import *
            3.4 import 模块名 as 别名
            3.5 from 模块名 import 功能名 as 别名
        注意事项:
            1.导入的模块默认在site-package里面查找
            2.若要导入自定义模块则血药设置模块源
            3.若模块名和功能名相同,最后调用的是功能名
                from XZ import XZ
                from 模块名 import 功能名

'''
#1.1 导入模块名
# import XZ
# stu=XZ.Student()
# print("导入模块名:",stu.name)
#1.2 导入模块名和功能
from XZ import Student
stu = Student()
print("导入模块名和功能名:",stu.name)
#1.3 导入模块名的所有功能
# from XZ import *
# stu=Student()
# dog = Dog()
# xz=XZ()
#1.4 导入模块名设置别名
# import XZ as zpp
# stu=zpp.Student()
# dog=zpp.Dog()
# xz=zpp.XZ()
#1.5 导入模块名和功能名 功能名设置别名
# from XZ import Student as zy
# stu=zy()
# print("输出学生的信息:",stu.getName())
#
# from XZ import *
# #stu=Student()
# dog=Dog()
# print(testA(10,20))
# print(testB(10,20))

01-2:XZ

class Student(object):
    def __init__(self):
        self.name = "江苏师范大学"
    def getName (self):
        return  self.name
class Dog (object):
    def __init__(self):
        self.name = "旺财"
    def getDogName(self):
        return self.name
class XZ(object) :
    pass
#可以设置模块源
__all__=['testA','XZ','Dog']
#可以设置模块源
def testA(a,b):
    return a+b
def testB(a,b):
    return a-b

02-模块的顺序

02-1:02-模块的顺序

'''
02-模块顺序
知识点:
    1.模块的搜索顺序
        1.1 当前目录(设为ROOT文件夹 Pycharm设置)
        1.2 PythonPath的每个目录中
            (Anaconda3默认目录是site-package)
        1.3 会搜索默认目录,会根据安全的目录自行搜索
            Lib>>>>site-package
    2.__all__控制功能被使用的顺序以及导入的内容
        注意事项:
            1.site-package:第三方模块默认的下载目录
            2.Lib是python环境下载目录
            3.当前目录是  用户自定义的目录
            4.自己文件名不要和已有模块名重复,否则导致模块功能无法使用
            5.__all__既可以添加函数名也可以添加class类名
'''
# from XZ import *
# 1.调用模块中的测试函数
# dag= Dog()
# print("测试模块:",testA(10,20))
# print("测试模块2:",testB(10,20))
# 2.调用模块的顺序
#不要用os作为模块名,因为python中有函数会重名,使代码运行不正常


from XZ import Student
# from oos import Student
stu=Student()
print(stu)
stu.getName()
print(stu.getName())

02-2:oos

class Student(object):
    def __init__(self):
        self.name="江苏大学"
    def getName(self):
        return self.name

# __all__=['Student']

03-包

包自己先建一个BAO

03-1:BAO

03-2:bao01

'''
包 模块  01
'''
print("BAO>>>01")

def getInfo():
    print("当前是包-01模块")

03-3:bao02

'''
包 模块  02
'''
print("BA>>>02")

def getInfo():
    print("当前是包-02模块")

03-4:03-包

'''
03-包
    注意事项:
        1.day06是一个包
        2.site-package 也是一包
        3.Lib也是一个包
包的主要目的是用于区分模块以及功能名
'''
'''
1.导入包 第一种方式
'''
import BAO.bao01
# 调用包>>>01模块>>>getInfo
# 虽然有下划线,但是可以执行
BAO.bao01.getInfo()

# 1.1
from BAO import bao01
bao01.getInfo()

# 1.2
from BAO.bao01 import getInfo
getInfo()

'''
2.导入包的第二种方式
包的package里面有__init__py
设置 __all__列表
'''
# 注意这种方式的限制 只能用bao01
from  BAO import  *
b1 = bao01.getInfo()
# b2 = bao02.getInfo()

# 单独导入其中一个模块
from BAO import bao02
bao02.getInfo()

04-pygame之满天星

1.安装pygame

打开cmd,输入 pip install pygame 后回车

如此,安装成功,可以使用了 

2.导入字体

按照图示,随便复制一种,粘贴到我们的项目包中。

我的是微软雅黑,使用时输入msyhbd.ttc[其它没用到]

3.创建项目

满天星:

mystart.png snow.png 网上找

'''
04-MyStar
1.运行===>cmd===>pip install pygame
    Lib>>>site-package>>>pygame
    配置好pygame
2.设置游戏窗口大小以及标题
3.设置窗口关闭模式
4.绘制小星星
5.窗口中绘制100颗小星星
6.绘制100颗五颜六色的星星
7.月亮
8.月食
9.动起来
    星星由左上角到右下角移动
'''
import pygame,sys,random
class MyStar(object):
    # 1.初始化函数
    def __init__(self):
        # 1.1 设置窗口大小 800*600尺寸
        self.screen=pygame.display.set_mode((800,600))
        # 1.2 设置星星或者雪花的坐标值
        self.xx=[random.randint(0,800) for i in range(100)]
        self.yy=[random.randint(0,600) for i in range(100)]
        # 1.3 设置图片
        #背景图
        self.background=pygame.image.load("mystart.png")
        self.snow=pygame.image.load("snow.png")
        # 1.4 设置月食坐标
        self.x=100
        self.y=100

    # 2. 设置程序主架构
    def menu(self):
        # 2.1 设置窗口标题 caption--说明文字,标题
        pygame.display.set_caption("满天星")
        # 2.2 死循环
        while True:
            #2.3 设置窗口背景颜色 RGB模式
            self.screen.fill((0,0,0))
            #2.4 调用业务执行函数
            self.action()
            #2.5 调用绘制函数
            self.paint()
            #2.6 延迟刷新时间
            pygame.time.delay(10)
            #2.7 设置屏幕
            pygame.display.update()
    #3. 业务执行函数
    def action(self):
        #3.1 获取pygame的监听事件
        for event in pygame.event.get():
            #3.2 判断退出
            if event.type==pygame.QUIT:
                sys.exit()
        #3.2 设置星星移动的坐标
        for i in range(100):
            self.xx[i]+=1
            self.yy[i]+=1
            if self.xx[i]>800:
                self.xx[i]=0
            if self.yy[i]>600:
                self.yy[i]=0

    #4.绘制函数
    def paint(self):
        #4.1 初始化pygame字体样式
        pygame.font.init()
        #4.2 设置具体的字体样式和大小
        #从系统中导一个字体进入包就可以了
        ft=pygame.font.Font("msyhbd.ttc",20)

        # 背景图 写在绘制图片的前面,则在最底层,不然会覆盖前面的图或者动画
        # blit(绘制的图片,(绘制的坐标))
        # 图片的缩放函数 pygame.transform.scale(缩放的图片,(缩放的尺寸)) transfrom转变
        scaleImg = pygame.transform.scale(self.background, (800, 600))
        self.screen.blit(scaleImg, (0, 0))


        '''绘制一颗小星星'''
        # #4.3 设置绘制的图案,一颗白色星星(绘制内容,使用,颜色(R,G,B))
        # starStr=ft.render("*",True,(255,255,255))
        # #4.4 设置图案位置(绘制对象,位置(x坐标,y坐标))【屏幕左上角为原点(0,0)】
        # #blit中文译名较多,都没有比较一致叫法。可能叫位偏移,位块传送,位块传输。选位偏移这个解释,因为要对象和坐标。
        # self.screen.blit(starStr,(100,100))

        '''绘制一百颗小星星'''
        # # for循环100次
        # for i in range(100):
        #     # 4.3 设置绘制的图案,一颗白色星星(绘制内容,使用,颜色(R,G,B))
        #     starStr=ft.render("*",True,(255,255,255))
        #     # 4.4 设置图案位置(绘制对象,位置(x坐标,y坐标))【屏幕左上角为原点(0,0)】
        #     self.screen.blit(starStr,(self.xx[i],self.yy[i]))

        '''绘制一百颗彩色的小星星,设置星星移动在action()'''
        # for循环100次
        # for i in range(100):
        #     #RGB 三原色 红绿蓝
        #     R = random.randint(0, 255)
        #     G = random.randint(0, 255)
        #     B = random.randint(0, 255)
        #     # 4.3 设置绘制的图案,一颗白色星星(绘制内容,使用,颜色(R,G,B))
        #     starStr = ft.render("*", True, (R,G,B))
        #     # 4.4 设置图案位置(绘制对象,位置(x坐标,y坐标))【屏幕左上角为原点(0,0)】
        #     self.screen.blit(starStr, (self.xx[i], self.yy[i]))

        '''绘制雪花'''
        for i in range(100):
            if 0<self.yy[i]<300:
                snowImg = pygame.transform.scale(self.snow, (15, 15))
            elif 300<self.yy[i]<450:
                snowImg = pygame.transform.scale(self.snow,(30,30))
            else:
                snowImg = pygame.transform.scale(self.snow, (40, 40))
            self.screen.blit(snowImg,(self.xx[i],self.yy[i]))

        '''绘制月亮'''
        # 月亮
        # self.screen=>窗口对象
        # (255,255,255)=>颜色
        # (100,100)=>圆心坐标
        # 50=>圆的半径
        # 0=>线宽,0代表的实心填充 非0代表的就是线宽
        pygame.draw.circle(self.screen, (0, 255, 255), (100, 100),50, 0)
        # 月食 用一个背景色的圆覆盖满⚪的一部分
        pygame.draw.circle(self.screen, (0,0,0), (80, 80), 50,0)

if __name__=='__main__':
    star = MyStar()
    star.menu()

05-pygame之小弹球

05-1-一个球

'''
MyBall
1.设置主体架构
2.添加挡板对小球反弹
    2.1 挡板设置反弹(下边界判断碰撞一样)
    2.2 设置小球与边界的碰撞  修改小球的颜色 碰撞一次修改一次
    2.3 添加计分功能  绘制在界面上
        score:10
        挡板和小球碰撞一次  +10分
        小球掉落在挡板下方则  -10分
    2.4 根据分数  修改速度
        100-200 10
        200-300 8
        300-400 5
        400-500 3
        500以上 1
    2.5 根据分数  修改挡板的宽度
        分数越高 挡板的宽度越窄
        100-200 180
        200-300 150
        300-400 120
        400-500 90
        500以上 50
'''
import pygame,sys,random

class MyBall(object):
    # 1.初始化函数
    def __init__(self):
        # 1.1 设置窗口对象
        self.screen=pygame.display.set_mode((800,600))
        # 1.2 设置小球的坐标
        self.x=100
        self.y=100
        self.f=0
        # 1.3 设置挡板的尺寸
        self.banX=350
        self.banY=550
        self.banW=200
        self.banH=20
        # 1.4 设置小球的颜色值
        self.colors=[0,0,0]
        # 1.5 设置分数
        self.score=0
        # 1.6 设置速度
        self.speed=10
    # 2.设置主结构
    def menu(self):
        # 2.1 设置标题
        pygame.display.set_caption("MyBall")
        # 2.2 死循环
        while True:
            # 2.3 设置背景颜色
            self.screen.fill((255,255,255))
            # 2.4 调用业务
            self.action()
            # 2.5 调用绘制
            self.paint()
            # 2.6 设置延迟
            pygame.time.delay(self.speed)
            # 2.7 设置更新
            pygame.display.update()
    # 3.业务执行函数
    def action(self):
        # 3.1 循环遍历所有的监听事件
        for event in pygame.event.get():
            # 3.2 判断  如果代码块泛黄色则代表代码有问题
            if event.type==pygame.QUIT:
                sys.exit()
            # 3.5 鼠标的监听事件
            if event.type==pygame.MOUSEMOTION:
                # 获取鼠标的坐标值
                mx,my=pygame.mouse.get_pos()
                #限制点击有反应的范围
                if 0<=mx<=800-self.banW:
                    self.banX=mx

        #碰撞过后,小球的飞行函数
        #3.3 根据飞行方向修改坐标值
        if self.f==0:
            self.x+=1
            self.y+=1
        if self.f==1:
            self.x+=1
            self.y-=1
        if self.f==2:
            self.x-=1
            self.y-=1
        if self.f==3:
            self.x-=1
            self.y+=1

        #挡板碰撞
        #3.4 根据坐标值修改飞翔方向
        if self.banX<=self.x<=self.banX+self.banW\
            and self.y>self.banY:
            # 修改小球的分数
            self.score+=10
            if self.f==0:
                self.f=1
            else :
                self.f=2
            # 修改小球的颜色
            self.colors[0]=random.randint(0,255)
            self.colors[1]=random.randint(0,255)
            self.colors[2]=random.randint(0,255)

        #边界
        if self.y>600:
            # 碰撞到下边界
            self.score-=10
            if self.f==0:
                self.f=1
            else:
                self.f=2
        if self.x>800:
            if self.f==1:
                self.f=2
            else :
                self.f=3
        if self.y<0:
            if self.f==2:
                self.f=3
            else:
                self.f=0
        if self.x<0:
            if self.f==3:
                self.f=0
            else:
                self.f=1
        #3.6 根据分数修改速度
        #3.7 根据分数修改挡板的宽度
        if 0<=self.score<100:
            self.speed=10
            self.banW=100
        elif 100<=self.score<300:
            self.speed=8
            self.banW=80
        elif 300<=self.score<400:
            self.speed=5
            self.banW=50
        elif 400<=self.score<500:
            self.speed=3
            self.banW=30
        elif self.score>=500:
            self.speed=1
            self.banW=10

    # 4.绘制函数
    def paint(self):
        # 4.1 绘制小球
        pygame.draw.circle(
            self.screen,tuple(self.colors),
            (self.x,self.y),10,0)
        # 4.2 绘制挡板
        # self.screen 窗口对象
        # (0,255,255) 颜色
        # (x,y,w,h) 矩形框左上角x,y点  w宽度  h高度
        # 0 实心的矩形框
        pygame.draw.rect(
            self.screen,(0,0,0),
            (self.banX,self.banY,self.banW,self.banH),0)

        # 4.3 设置小球分数绘制
        pygame.font.init()
        # 4.4 设置字体样式以及大小
        ft=pygame.font.Font("msyhbd.ttc",50)
        # 4.5 绘制内容
        scoreStr=ft.render("score=%d"%self.score,True,(255,0,0))
        # 4.5 绘制到窗口中
        self.screen.blit(scoreStr,(100,100))

if __name__=='__main__':
    ball=MyBall()
    ball.menu()

05-2-五个球(进阶版)

说明文字前的序号有误,但是说明是正确的。(待改)

'''
多个小弹球
1.同时运行5个小弹球
    1.1 不同的飞行方向
    1.2 不同的颜色值
    1.3 碰撞到边 加分 10分
    1.4 根据分数修改速度
'''
import pygame,sys,random

class MyBalls:
    # 1.初始化函数
    def __init__(self):
        # 1.1 窗口对象
        self.screen=pygame.display.set_mode((800,600))
        # 1.2 设置小球的坐标值
        self.x=[random.randint(0,800) for i in range(5)]
        self.y=[random.randint(0,600) for i in range(5)]
        # 1.3 设置小球的飞行方向
        self.f=[random.randint(0,3) for i in range(5)]
        # 1.4 设置小球的颜色值
        self.colors=[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
        # 1.5 设置挡板的尺寸
        self.banX=100
        self.banY=550
        self.banH=20
        self.banW=100
        # 1.6 设置分数
        self.score=0
        # 1.7 设置速度
        self.speed=10

    # 2.主架构函数
    def menu(self):
        # 2.1 设置标题
        pygame.display.set_caption("MyBalls")
        # 2.2 死循环
        while True:
            # 2.3 设置背景颜色
            self.screen.fill((255,255,255))
            # 2.4 调用业务执行函数
            self.action()
            # 2.5 调用绘制函数
            self.paint()
            # 2.6 调用延时
            pygame.time.delay(self.speed)
            # 2.7 刷新屏幕
            pygame.display.update()

    # 3.业务执行函数
    def action(self):
        # 3.1 循环遍历所有的监听事件
        for event in pygame.event.get():
            # 3.2 判断是否退出
            if event.type==pygame.QUIT:
                sys.exit()
            # 3.5 鼠标的监听事件
            if event.type==pygame.MOUSEMOTION:
                # 获取鼠标的坐标值
                mx,my=pygame.mouse.get_pos()
                # 限制点击有反应的范围
                if 0<mx<800-self.banW:
                    self.banX=mx
        for i in range(5):
            # 碰撞过后,小球的飞行函数
            # 3.3 根据飞行方向修改坐标值
            if self.f[i]==0:
                self.x[i]+=1
                self.y[i]+=1
            if self.f[i]==1:
                self.x[i]+=1
                self.y[i]-=1
            if self.f[i]==2:
                self.x[i]-=1
                self.y[i]-=1
            if self.f[i]==3:
                self.x[i]-=1
                self.y[i]+=1
            # 边界
            if self.y[i]>600:
                self.score-=10
                if self.f[i]==0:
                    self.f[i]=1
                else :
                    self.f[i]=2
            if self.x[i]>800:
                if self.f[i]==1:
                    self.f[i]=2
                else:
                    self.f[i]=3
            if self.y[i]<0:
                if self.f[i]==2:
                    self.f[i]=3
                else:
                    self.f[i]=0
            if self.x[i]<0:
                if self.f[i]==3:
                    self.f[i]=0
                else:
                    self.f[i]=1
            # 挡板碰撞
            # 3.4 根据坐标值修改飞翔方向
            if self.banX<=self.x[i]<=self.banX+self.banW and self.y[i]>self.banY:
                self.colors[i]=[random.randint(0,255),random.randint(0,255),random.randint(0,255)]
                if self.f[i]==0:
                    self.f[i]=1
                else:
                    self.f[i]=2
                self.score+=10
            #3.7 根据分数修改挡板的宽度
            if 0 <= self.score < 200:
                self.banW = 180
            elif 200 <= self.score < 300:
                self.banW = 150
            elif 300 <= self.score < 400:
                self.banW = 120
            elif 400 <= self.score < 500:
                self.banW = 90
            elif 500 <= self.score:
                self.banW = 50

             #3.6 根据分数修改速度
            if 0 <= self.score < 200:
                self.speed = 10
            elif 200 <= self.score < 300:
                self.speed = 8
            elif 300 <= self.score < 400:
                self.speed = 5
            elif 400 <= self.score < 500:
                self.speed = 3
            elif 500 <= self.score:
                self.speed = 1

    # 4.绘制函数
    def paint(self):
        # 4.1 绘制小球
        for i in range(5):
            pygame.draw.circle(self.screen,tuple(self.colors[i]),
                               (self.x[i],self.y[i]),10,0)
        pygame.draw.rect(self.screen,(0,0,0),
                         (self.banX,self.banY,self.banW,self.banH),0)
        pygame.font.init()
        ft=pygame.font.Font("msyhbd.ttc",50)
        scoreStr=ft.render("score:%d"%self.score,True,(255,0,0))
        self.screen.blit(scoreStr,(100,100))

if __name__=='__main__':
    balls=MyBalls()
    balls.menu()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值