<pygame>进击的兔子

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.

 
原文地址:https://www.cnblogs.com/shuimohei/p/13639114.html