zoukankan      html  css  js  c++  java
  • <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.

     
  • 相关阅读:
    manjora20安装搜狗输入法
    manjora20使用体验
    deepin20体验
    deepin20搜狗输入法使用
    deepin20使用snap并设置代理
    C#服务器端使用office组件
    华为多屏互动看学英语
    ThinkPad S5立体声混响以及语音识别
    mate10碎屏机当成小电脑使用尝试
    刷机错误ERROR:STATUS_BROM_CMD__FAIL
  • 原文地址:https://www.cnblogs.com/shuimohei/p/13639114.html
Copyright © 2011-2022 走看看