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.