01-recode
- 1.json數(shù)據(jù)
標(biāo)準(zhǔn)格式:a.只能是一個(gè)數(shù)據(jù) b.數(shù)據(jù)必須是json支持的類型
數(shù)據(jù)類型:對(duì)象(字典),數(shù)組(列表),字符串(雙引號(hào))形葬,數(shù)字合呐,布爾(true,false),null
json數(shù)據(jù)和python之間的轉(zhuǎn)換關(guān)系
python模塊中的方法:load,loads,dump,dumps - 2.異常捕獲
try - except - finally - 3.第三方庫(kù)導(dǎo)入
import 模塊
from 模塊 import 內(nèi)容
02-pygame操作
import pygame
if __name__ == '__main__':
# 1.初始化游戲模塊
pygame.init()
# 2.創(chuàng)建游戲窗口
'''
display.set_mode(窗口大畜弦浴):創(chuàng)建一個(gè)窗口并且返回
窗口大刑适怠:是一個(gè)元組,并且表示寬度和高度(單位是像素)
'''
window = pygame.display.set_mode((500,600))
# 3.讓游戲一直運(yùn)行源织,直到點(diǎn)關(guān)閉按鈕結(jié)束
flag = True
while flag:
window.fill((255,255,255))
# 獲取游戲過(guò)程中產(chǎn)生的所有事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
# exit() # 退出程序
flag = False
03-顯示圖片
- 給窗口填充顏色
顏色:計(jì)算機(jī)的三原色(紅翩伪,綠微猖,藍(lán))谈息,顏色對(duì)應(yīng)的范圍分別是0-255,可以通過(guò)改變?nèi)闹盗莅{(diào)配出不同的顏色
顏色值:是一個(gè)元組侠仇,元組中有三個(gè)元素,分別是紅綠藍(lán)(rgb)
紅色(255犁珠,0逻炊,0),綠色(0犁享,255余素,0),藍(lán)色(0炊昆,0桨吊,255)
黑色(0,0凤巨,0)视乐,白色(255,255敢茁,255)
window.fill((255,255,255))
- 顯示圖片
image.load(圖片路徑):獲取本地的一張圖片佑淀,返回圖片對(duì)象 - a.獲取圖片,創(chuàng)建圖片對(duì)象
image = pygame.image.load('./files/gjl.jpg')
get_size():獲取大小彰檬,返回值是一個(gè)元組伸刃,分別是寬和高
image_width,image_height =image.get_size()
- b.渲染圖片(將圖片畫(huà)在紙上)
blit(渲染對(duì)象,位置)
位置:坐標(biāo)(x,y)逢倍,值的類型是元組奕枝,元組有兩個(gè)對(duì)應(yīng)的元素,分別是x,y的坐標(biāo)
# window.blit(image,(600-int(image_width),400-int(image_height)))將圖片放到右下角
window.blit(image,(0,0))
# c.展示內(nèi)容(將紙貼在畫(huà)框上)
pygame.display.flip()
04-形變
a.縮放
transform.scale(縮放對(duì)象瓶堕,目標(biāo)大邪馈):將指定的對(duì)象縮放到指定的大小,會(huì)返回縮放后的對(duì)象
new_image = pygame.transform.scale(image())
b.旋轉(zhuǎn)縮放(指定縮放比例)
rotozoom(Surface,angle,scale)
Surface:旋轉(zhuǎn)對(duì)象
angle:旋轉(zhuǎn)角度
scale:縮放比例
new_image = pygame.transform.rotozoom(image,90,0.8)
c.旋轉(zhuǎn)
rotate(Surface,angle)
Surface:旋轉(zhuǎn)對(duì)象
angle:旋轉(zhuǎn)角度
new_image = pygame.transform.rotate(image, 270)
05-顯示文字
- 1.創(chuàng)建字體對(duì)象
a.創(chuàng)建系統(tǒng)的字體對(duì)象
SysFont(name,size,bold = False,italic = False)
name:字體名(系統(tǒng)支持的字體名)
size:字體大小
bold:是否加粗
italic:是否傾斜
b.創(chuàng)建自定義的字體對(duì)象
Font(字體文件路徑,字體大刑饭!)
字體文件路徑:ttf文件
# a.創(chuàng)建系統(tǒng)字體
# font = pygame.font.SysFont('Times',30)
# b.創(chuàng)建自定義字體
font = pygame.font.Font('./files/aa.ttf',50)
- 2.根據(jù)字體去創(chuàng)建文字對(duì)象
render(text,antialias,color,background = None)
text:需要顯示的文字(字符串)
antialias:是否平滑(布爾)
color:顏色
background:背景顏色
text = font.render('Hello,高漸離 忘晤!',True,(255,80,200))
print(text.get_size())
06-顯示圖形
1.畫(huà)直線
def line(Surface,color,star_pos,end_pos,width=1)
Surface:畫(huà)在哪
color:顏色
star_pos:起點(diǎn)
end_pos:終點(diǎn)
width:線寬
# 畫(huà)一條水平線
# pygame.draw.line(window,(255,0,0),(50,100),(200,100))
# pygame.draw.line(window, (255, 100, 200), (0, 0), (100, 100),10)
2.畫(huà)線段(折線)
def lines(Surface,color,close,pointlist,width=1)
Surface:畫(huà)在那
color:顏色
close:是否閉合(是否連接起點(diǎn)和終點(diǎn))
pointlist:點(diǎn)對(duì)應(yīng)的列表
width:線的寬度
pygame.draw.lines(window,(255,100,200),True,[(0,0),(100,0),(100,100),(200,100),(200,200)],10)
3.畫(huà)圓
def circle(Surface,color,pos,radius,width=1)
Surface:畫(huà)在那
color:顏色
pos:圓心坐標(biāo)
radius:半徑
width:0-->填充
pygame.draw.circle(window,(255,255,0),(200,300),100,0)
4.畫(huà)矩形
def rect(Surface,color,Rect,width=0)
Surface:畫(huà)在那
color:顏色
Rect:范圍(元組,元組中有4個(gè)元素激捏,分別是x,y,width,height)
pygame.draw.rect(window,(200, 150, 200), (200, 200, 250, 300),20)
5.畫(huà)多邊形
polygon(Surface,color,pointlist,width=0)
pointlist:多邊形各點(diǎn)坐標(biāo)设塔,組成一個(gè)元組
6.畫(huà)橢圓
def ellipse(Surface,color,Rect,width=0)
pygame.draw.ellipse(window, (200, 150, 200), (200, 200, 250, 300), 20)
7.畫(huà)弧線
def arc(Surface,color,Rect,start_angle,stop_angle,width=1)
import math pygame.draw.arc(window,(255,0,0),(100, 100, 100, 100),math.pi,math.pi/2,10)
07-事件
所有的事件處理的入口就是這個(gè)for循環(huán)
-
for循環(huán)中的代碼只有游戲事件發(fā)生后才會(huì)執(zhí)行
a.事件的type:
QUIT:關(guān)閉按鈕被點(diǎn)擊事件
鼠標(biāo)事件:
MOUSEBUTTONDOWN:鼠標(biāo)按下事件
MOUSEBUTTONUP:鼠標(biāo)彈起
MOUSEMOTION:鼠標(biāo)移動(dòng)
鍵盤(pán)事件:
KEYDOWN:鍵盤(pán)按下
KEYUP:鍵盤(pán)彈起b.事件的pos--鼠標(biāo)事件發(fā)生的位置(坐標(biāo))
c.事件的key--鍵盤(pán)事件被按的鍵對(duì)應(yīng)的編碼值
for event in pygame.event.get():
# 不同的事件發(fā)生后,對(duì)應(yīng)的type值不一樣
if event.type == pygame.QUIT:
print('點(diǎn)擊關(guān)閉')
exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
# 鼠標(biāo)按下要做的事情
print(event.pos)
print('鼠標(biāo)按下')
# 鼠標(biāo)按下一次畫(huà)一個(gè)球
pygame.draw.circle(window,(random.randint(0,255),random.randint(0,255),random.randint(0,255)),event.pos,20)
pygame.display.flip()
elif event.type == pygame.MOUSEBUTTONUP:
print('鼠標(biāo)彈起')
elif event.type == pygame.MOUSEMOTION:
print('鼠標(biāo)正在移動(dòng)',event.pos)
elif event.type == pygame.KEYDOWN:
print('鍵盤(pán)按下',event.key,chr(event.key))
elif event.type == pygame.KEYUP:
print('鍵盤(pán)彈起')
08-動(dòng)畫(huà)效果
# c.展示內(nèi)容(將紙貼在畫(huà)框上)
pygame.display.flip()
# 圓心坐標(biāo)
x = 100
y = 100
r = 50
add = 4
m = 2
n = 1
# 游戲循環(huán)
while True:
pygame.time.delay(5)
# 將之前window上的內(nèi)容覆蓋了
window.fill((255,255,255))
# 不斷的畫(huà)圓
pygame.draw.circle(window,(randint(0,255),randint(0,255),randint(0,255)),(x,y),r)
pygame.display.update()
# 改變y值讓圓在垂直方向移動(dòng)
y += m
x += n
# r += add
# if r >=600 or r <= 20 :
# add *= -1
if y >= 600 - r or y <= 50:
m *= -1
elif x >= 400-r or x <= 50:
n *= -1
# 事件檢測(cè)
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
09-按住不放原理
import pygame
if __name__ == '__main__':
# 初始化远舅,創(chuàng)建窗口
pygame.init()
window = pygame.display.set_mode((400,600))
window.fill((255,255,255))
image = pygame.image.load('./files/gjl.jpg')
# 縮放
image = pygame.transform.rotozoom(image,0,0.5)
window.blit(image,(100,100))
# 獲取圖片的寬度闰蛔、高度
image_w,image_h = image.get_size()
# c.展示內(nèi)容(將紙貼在畫(huà)框上)
pygame.display.flip()
# 用來(lái)存儲(chǔ)圖片是否移動(dòng)
flag = False
# 保存圖片的坐標(biāo)
image_x,image_y = 100,100
# 游戲循環(huán)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
# 鼠標(biāo)按下
if event.type == pygame.MOUSEBUTTONDOWN:
# 判斷鼠標(biāo)的范圍是否在圖片上
m_x,m_y = event.pos
if image_x<=m_x<=image_x+image_w and image_y<=m_y<=image_y+image_h:
flag = True
elif event.type == pygame.MOUSEBUTTONUP:
flag = False
# 鼠標(biāo)移動(dòng)事件
# 鼠標(biāo)在移動(dòng),并且flag為T(mén)rue
if event.type == pygame.MOUSEMOTION and flag:
# 填充背景色
window.fill((255,255,255))
# 在鼠標(biāo)移動(dòng)的位置渲染圖片
# window.blit(image,event.pos
center_x,center_y = event.pos
image_x, image_y = center_x - image_w/2,center_y - image_h/2
window.blit(image,(image_x, image_y))
# 更新屏幕顯示
pygame.display.update()