目录
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()