001.Hello, 兔子
# 导入模块
import pygame
from pygame.locals import *
import math
import random
# 初始化,设置展示窗口大小
pygame.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
# 加载图片
rabbit_img = pygame.image.load("resources/images/dude.png")
# 不停执行循环部分
while 1:
# 在屏幕画任何东西前先用黑色填充
screen.fill(0)
# 在屏幕100,100处加载兔子图片
screen.blit(rabbit_img, (100, 100))
# 刷新屏幕
pygame.display.flip()
# 检查新的事件,如果存在退出命令,就终止程序执行
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
dude.png

效果图:

002.添加背景
# 导入模块
import pygame
from pygame.locals import *
import math
import random
# 初始化,设置展示窗口大小
pygame.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
# 加载图片
rabbit_img = pygame.image.load("resources/images/dude.png")
# 002.新加入的图片
grass_img = pygame.image.load("resources/images/grass.png")
castle_img = pygame.image.load("resources/images/castle.png")
# 不停执行循环部分
while 1:
# 在屏幕画任何东西前先用黑色填充
screen.fill(0)
# 将002新加入的背景画在屏幕上,草部分
for x in range(width // grass_img.get_width() + 1):
for y in range(width // grass_img.get_width() + 1):
screen.blit(grass_img, (x * 100, y * 100))
# 4个花坛部分
screen.blit(castle_img, (0, 30))
screen.blit(castle_img, (0, 135))
screen.blit(castle_img, (0, 240))
screen.blit(castle_img, (0, 345))
# 在屏幕100,100处加载兔子图片
screen.blit(rabbit_img, (100, 100))
# 刷新屏幕
pygame.display.flip()
# 检查新的事件,如果存在退出命令,就终止程序执行
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
grass.png

castle.png

效果图:

003.让兔子动起来
# 导入模块
import pygame
from pygame.locals import *
import math
import random
# 初始化,设置展示窗口大小
pygame.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
# 003 keys用来记录按键情况,WASD(依次对应)
keys = [False, False, False, False]
# 003 playerpos表示玩家位置
playerpos = [100, 100]
# 加载图片
rabbit_img = pygame.image.load("resources/images/dude.png")
# 002.新加入的图片
grass_img = pygame.image.load("resources/images/grass.png")
castle_img = pygame.image.load("resources/images/castle.png")
# 不停执行循环部分
while 1:
# 在屏幕画任何东西前先用黑色填充
screen.fill(0)
# 将002新加入的背景画在屏幕上,草部分
for x in range(width // grass_img.get_width() + 1):
for y in range(width // grass_img.get_width() + 1):
screen.blit(grass_img, (x * 100, y * 100))
# 4个花坛部分
screen.blit(castle_img, (0, 30))
screen.blit(castle_img, (0, 135))
screen.blit(castle_img, (0, 240))
screen.blit(castle_img, (0, 345))
# 在屏幕100,100处加载兔子图片,改为playerpos
screen.blit(rabbit_img, playerpos)
# 刷新屏幕
pygame.display.flip()
# 检查新的事件,如果存在退出命令,就终止程序执行
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 根据按下的键来更新按键记录数组
if event.type == pygame.KEYDOWN:
if event.key == K_w:
keys[0] = True
elif event.key == K_a:
keys[1] = True
elif event.key == K_s:
keys[2] = True
elif event.key == K_d:
keys[3] = True
if event.type == pygame.KEYUP:
if event.key == K_w:
keys[0] = False
elif event.key == K_a:
keys[1] = False
elif event.key == K_s:
keys[2] = False
elif event.key == K_d:
keys[3] = False
# 移动玩家
if keys[0]:
playerpos[1] -= 5
elif keys[2]:
playerpos[1] += 5
if keys[1]:
playerpos[0] -= 5
elif keys[3]:
playerpos[0] += 5
效果图

004.陆压道人:"请宝贝转身"!!!
# 导入模块
import pygame
from pygame.locals import *
import math
import random
# 初始化,设置展示窗口大小
pygame.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
# 003 keys用来记录按键情况,WASD(依次对应)
keys = [False, False, False, False]
# 003 playerpos表示玩家位置
playerpos = [100, 100]
# 加载图片
rabbit_img = pygame.image.load("resources/images/dude.png")
# 002.新加入的图片
grass_img = pygame.image.load("resources/images/grass.png")
castle_img = pygame.image.load("resources/images/castle.png")
# 不停执行循环部分
while 1:
# 在屏幕画任何东西前先用黑色填充
screen.fill(0)
# 将002新加入的背景画在屏幕上,草部分
for x in range(width // grass_img.get_width() + 1):
for y in range(width // grass_img.get_width() + 1):
screen.blit(grass_img, (x * 100, y * 100))
# 4个花坛部分
screen.blit(castle_img, (0, 30))
screen.blit(castle_img, (0, 135))
screen.blit(castle_img, (0, 240))
screen.blit(castle_img, (0, 345))
# 004 根据鼠标的位置和玩家位置,通过tan函数计算角度
position = pygame.mouse.get_pos()
angle = math.atan2(position[1] - (playerpos[1] + 32), position[0] - (playerpos[0] + 26))
playerrot = pygame.transform.rotate(rabbit_img, 360 - angle * 57.29)
playerpos1 = (playerpos[0] - playerrot.get_rect().width / 2, playerpos[1] - playerrot.get_rect().height / 2)
screen.blit(playerrot, playerpos1)
# 在屏幕100,100处加载兔子图片,改为playerpos
# screen.blit(rabbit_img, playerpos)
# 刷新屏幕
pygame.display.flip()
# 检查新的事件,如果存在退出命令,就终止程序执行
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 根据按下的键来更新按键记录数组
if event.type == pygame.KEYDOWN:
if event.key == K_w:
keys[0] = True
elif event.key == K_a:
keys[1] = True
elif event.key == K_s:
keys[2] = True
elif event.key == K_d:
keys[3] = True
if event.type == pygame.KEYUP:
if event.key == K_w:
keys[0] = False
elif event.key == K_a:
keys[1] = False
elif event.key == K_s:
keys[2] = False
elif event.key == K_d:
keys[3] = False
# 移动玩家
if keys[0]:
playerpos[1] -= 5
elif keys[2]:
playerpos[1] += 5
if keys[1]:
playerpos[0] -= 5
elif keys[3]:
playerpos[0] += 5
效果图
005.biu、biu、biu
# 导入模块
import pygame
from pygame.locals import *
import math
import random
# 初始化,设置展示窗口大小
pygame.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
# 003 keys用来记录按键情况,WASD(依次对应)
keys = [False, False, False, False]
# 003 playerpos表示玩家位置
playerpos = [100, 100]
# 005 跟踪精准度,记录射击的箭头数,命中的箭头数
acc = [0, 0]
arrows = []
# 加载图片
rabbit_img = pygame.image.load("resources/images/dude.png")
# 002.新加入的图片
grass_img = pygame.image.load("resources/images/grass.png")
castle_img = pygame.image.load("resources/images/castle.png")
# 005 箭头
arrow_img = pygame.image.load("resources/images/bullet.png")
# 不停执行循环部分
while 1:
# 在屏幕画任何东西前先用黑色填充
screen.fill(0)
# 将002新加入的背景画在屏幕上,草部分
for x in range(width // grass_img.get_width() + 1):
for y in range(width // grass_img.get_width() + 1):
screen.blit(grass_img, (x * 100, y * 100))
# 4个花坛部分
screen.blit(castle_img, (0, 30))
screen.blit(castle_img, (0, 135))
screen.blit(castle_img, (0, 240))
screen.blit(castle_img, (0, 345))
# 004 根据鼠标的位置和玩家位置,通过tan函数计算角度
position = pygame.mouse.get_pos()
angle = math.atan2(position[1] - (playerpos[1] + 32), position[0] - (playerpos[0] + 26))
playerrot = pygame.transform.rotate(rabbit_img, 360 - angle * 57.29)
playerpos1 = (playerpos[0] - playerrot.get_rect().width / 2, playerpos[1] - playerrot.get_rect().height / 2)
screen.blit(playerrot, playerpos1)
# 005.画出箭头
for bullet in arrows:
index = 0
velx = math.cos(bullet[0]) * 10
vely = math.sin(bullet[0]) * 10
bullet[1] += velx
bullet[2] += vely
# 判断是否超出屏幕
if bullet[1] < -64 or bullet[1] > 640 or bullet[2] < -64 or bullet[2] > 480:
arrows.pop(index)
index += 1
# 箭头的旋转
for projectile in arrows:
arrow1 = pygame.transform.rotate(arrow_img, 360 - projectile[0] * 57.29)
screen.blit(arrow1, (projectile[1], projectile[2]))
# 在屏幕100,100处加载兔子图片,改为playerpos
# screen.blit(rabbit_img, playerpos)
# 刷新屏幕
pygame.display.flip()
# 检查新的事件,如果存在退出命令,就终止程序执行
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 根据按下的键来更新按键记录数组
if event.type == pygame.KEYDOWN:
if event.key == K_w:
keys[0] = True
elif event.key == K_a:
keys[1] = True
elif event.key == K_s:
keys[2] = True
elif event.key == K_d:
keys[3] = True
if event.type == pygame.KEYUP:
if event.key == K_w:
keys[0] = False
elif event.key == K_a:
keys[1] = False
elif event.key == K_s:
keys[2] = False
elif event.key == K_d:
keys[3] = False
if event.type == pygame.MOUSEBUTTONDOWN:
position = pygame.mouse.get_pos()
acc[1] += 1
arrows.append(
[math.atan2(position[1] - (playerpos1[1] + 32), position[0] - (playerpos1[0] + 26)), playerpos1[0] + 32,
playerpos1[1] + 32])
# 移动玩家
if keys[0]:
playerpos[1] -= 5
elif keys[2]:
playerpos[1] += 5
if keys[1]:
playerpos[0] -= 5
elif keys[3]:
playerpos[0] += 5
bullet.png
效果图

06.
