用Pygame制作游戏(1):3D打丧尸游戏

#AI模型:追求全能还是专精?#

游戏源码

代码

import pygame
import sys
import random

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode([1000, 1000])
screen.fill((255, 255, 255))
pygame.display.set_caption('极限突围')
pygame.display.set_icon(pygame.image.load("/home/peddy/桌面/pygame组/极限突围组/图标.png"))


def paint(picture, left_right, up_down, rotate, width_height, x_y):
    screen.blit(pygame.transform.scale(pygame.transform.rotate(pygame.transform.flip(pygame.image.load(picture),
                left_right, up_down), rotate), width_height), x_y)


def word(mode, size, the_word, enable, colour, x_y):
    screen.blit(pygame.font.SysFont(mode, size).render(the_word, enable, colour), x_y)


lead = {'健康': {'头部': 30, '胸部': 80, '腹部': 35, '左手': 60, '右手': 60, '左腿': 65, '右腿': 65},
        '主武器': {'武器': 'MP5', '子弹': 200, '弹夹': 0},
        '手枪': {'武器': '无', '子弹': 0},
        '行动': {'举枪': False}}

zombie = []

system = {'坐标': {'走廊': {'x': 0, 'y': 0}},
          '大小': {'走廊': {'width': 1000, 'height': 1000}},
          '主角': {'举枪放大': False, '举枪缩小': False, '开枪': False},
          '烟雾': {'x': 300, 'y': 260, 'width': 270, 'height': 220}}

weapon = {'MP5': {'杀伤力': 20, '弹夹容量': 30},
          'G17': {'杀伤力': 10, '弹夹容量': 17}}

a, b = 0, 0


while True:
    # print(503 > (zombie[0]['x'] - zombie[0]['width']) > -503 and 617 > (zombie[0]['y'] - zombie[0]['height']) > -617)
    for event in pygame.event.get():
        pygame.display.flip()
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_j:
                if lead['行动']['举枪'] is False:
                    system['主角']['举枪缩小'] = False
                    lead['行动']['举枪'] = True
                elif lead['行动']['举枪'] is True:
                    system['主角']['举枪放大'] = False
                    lead['行动']['举枪'] = False
            if event.key == pygame.K_k and lead['行动']['举枪'] is True and lead['主武器']['弹夹'] != 0:
                system['主角']['开枪'] = True
                lead['主武器']['弹夹'] -= 1
                for i in range(len(zombie)):
                    if 503 > (zombie[i]['x'] - zombie[i]['width']) > -503 and \
                            617 > (zombie[i]['y'] - zombie[i]['height']) > -617 and zombie[i]['状态'] is True:
                        zombie[i]['状态'] = False
                        break
            if event.key == pygame.K_r and lead['主武器']['弹夹'] == 0:
                if lead['主武器']['子弹'] >= weapon[lead['主武器']['武器']]['弹夹容量']:
                    lead['主武器']['子弹'] -= weapon[lead['主武器']['武器']]['弹夹容量']
                    lead['主武器']['弹夹'] = weapon[lead['主武器']['武器']]['弹夹容量']

    if pygame.key.get_pressed()[pygame.K_RIGHT] and lead['行动']['举枪'] is True:
        system['坐标']['走廊']['x'] -= 50
    if pygame.key.get_pressed()[pygame.K_LEFT] and lead['行动']['举枪'] is True:
        system['坐标']['走廊']['x'] += 50
    if pygame.key.get_pressed()[pygame.K_DOWN] and lead['行动']['举枪'] is True:
        system['坐标']['走廊']['y'] -= 50
    if pygame.key.get_pressed()[pygame.K_UP] and lead['行动']['举枪'] is True:
        system['坐标']['走廊']['y'] += 50

    if lead['行动']['举枪'] is True and system['主角']['举枪放大'] is False:
        system['大小']['走廊']['width'] = 3000
        system['大小']['走廊']['height'] = 3000
        system['坐标']['走廊']['x'] = -850
        system['坐标']['走廊']['y'] = -470
        for i in range(len(zombie)):
            zombie[i]['width'] = 450 + zombie[i]['a']
            zombie[i]['height'] = 450 + zombie[i]['b']
        system['主角']['举枪放大'] = True
    elif lead['行动']['举枪'] is False and system['主角']['举枪缩小'] is False:
        system['大小']['走廊']['width'] = 1000
        system['大小']['走廊']['height'] = 1000
        system['坐标']['走廊']['x'] = 0
        system['坐标']['走廊']['y'] = 0
        for i in range(len(zombie)):
            zombie[i]['width'] = 150 + zombie[i]['a']
            zombie[i]['height'] = 150 + zombie[i]['b']
        system['主角']['举枪缩小'] = True

    if system['坐标']['走廊']['x'] > -10 and lead['行动']['举枪'] is True:
        system['坐标']['走廊']['x'] = -10
    if system['坐标']['走廊']['x'] < -1990 and lead['行动']['举枪'] is True:
        system['坐标']['走廊']['x'] = -1990
    if system['坐标']['走廊']['y'] > -10 and lead['行动']['举枪'] is True:
        system['坐标']['走廊']['y'] = -10
    if system['坐标']['走廊']['y'] < -1990 and lead['行动']['举枪'] is True:
        system['坐标']['走廊']['y'] = -1990

    if lead['行动']['举枪'] is True:
        for i in range(len(zombie)):
            if zombie[i]['状态'] is True:
                # x = random.randint(1, 2)
                # if x == 1:
                zombie[i]['x'] = system['坐标']['走廊']['x'] + 1200
                zombie[i]['y'] = system['坐标']['走廊']['y'] + 1000
                # elif x == 2:
                #     zombie[i]['x'] = system['坐标']['走廊']['x'] + 1000
                #     zombie[i]['y'] = system['坐标']['走廊']['y'] + 800
            else:
                zombie[i]['x'] = 300
                zombie[i]['y'] = 400

    screen.fill((255, 255, 255))

    for i in range(len(zombie)):
        if zombie[i]['状态'] is True:
            zombie[i]['a'] += 3
            zombie[i]['b'] += 3
            zombie[i]['width'] += 3
            zombie[i]['height'] += 3

    x = random.randint(1, 50)
    if 45 >= x >= 1:
        pass
    else:
        for i in range(1):
            if lead['行动']['举枪'] is False:
                zombie.append({'x': random.randint(300, 400), 'y': random.randint(250, 350),
                               'width': 150, 'height': 150, '状态': True, 'a': 0, 'b': 0, '尸体': random.randint(1, 2)})
            else:
                zombie.append({'x': random.randint(300, 400), 'y': random.randint(200, 270),
                               'width': 450, 'height': 450, '状态': True, 'a': 0, 'b': 0, '尸体': random.randint(1, 2)})

    paint(picture="走廊.png", left_right=False, up_down=False, rotate=0,
          width_height=(system['大小']['走廊']['width'], system['大小']['走廊']['width']),
          x_y=(system['坐标']['走廊']['x'], system['坐标']['走廊']['y']))
    for i in range(len(zombie)):
        if zombie[i]['状态'] is True:
            paint(picture="丧尸.png", left_right=False, up_down=False, rotate=0,
                  width_height=(zombie[i]['width'], zombie[i]['height']), x_y=(zombie[i]['x'], zombie[i]['y']))
        else:
            if zombie[i]['尸体'] == 1:
                paint(picture="丧尸 尸体1.png", left_right=False, up_down=False,
                      rotate=0, width_height=(zombie[i]['width'], zombie[i]['height']), x_y=(zombie[i]['x'],
                                                                                             zombie[i]['y']))
            elif zombie[i]['尸体'] == 2:
                paint(picture="丧尸 尸体2.png", left_right=False, up_down=False,
                      rotate=0, width_height=(zombie[i]['width'], zombie[i]['height']), x_y=(zombie[i]['x'],
                                                                                             zombie[i]['y']))

    if lead['行动']['举枪'] is True:
        if system['主角']['开枪'] is False:
            paint(picture="举枪.png", left_right=False, up_down=False, rotate=0,
                  width_height=(1100, 1100), x_y=(0, 0))
        if system['主角']['开枪'] is True:
            paint(picture="举枪 射击.png", left_right=False, up_down=False, rotate=0,
                  width_height=(1000, 1000), x_y=(0, 0))
            system['主角']['开枪'] = False

    paint(picture="主武器.png", left_right=False, up_down=False, rotate=0,
          width_height=(400, 300), x_y=(600, 0))
    word(mode='gbk', size=30, enable=True, colour=(0, 0, 0), x_y=(670, 150),
         the_word=str(lead['主武器']['弹夹']) + ' / ' + str(lead['主武器']['子弹']))

    pygame.display.update()

图片

在下载图片后记得向代码中填入对应路径。

举枪 射击:
在这里插入图片描述
举枪:
在这里插入图片描述
丧尸 尸体1:
在这里插入图片描述
丧尸 尸体2:
在这里插入图片描述
丧尸:
在这里插入图片描述
图标:
在这里插入图片描述
主武器:
在这里插入图片描述
走廊:
在这里插入图片描述

快捷资源(可直接运行)

从百度网盘下载,是一个文件夹,叫“极限突围快捷资源”。
所有的图片都在里面,找到“极限突围 可执行文件”,然后后直接运行就可以了。

快捷资源内容:
·游戏可执行文件
·游戏源代码
·游戏所需图片

链接: link
提取码:1234

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值