鱼C论坛

 找回密码
 立即注册
查看: 1624|回复: 1

pygame怎么把输出日地导入窗口中?

[复制链接]
发表于 2022-8-25 00:11:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import random
import time
import pygame
import sys
from pygame.locals import *

SCREEN_SIZE = WIDHT, HEIGHT = 640, 480

if __name__ == "__main__":
    pygame.init()  # 初始化程序
    screen = pygame.display.set_mode(SCREEN_SIZE)  # 创建主窗口界面
    pygame.display.set_caption('Demo')  # 创建窗口名称

    # 图像填充
    background_image = pygame.image.load('/Users/peak/Documents/game/image/Background.png')  # 导入图像
    font = pygame.font.Font('/Users/peak/Library/Fonts/华康黑体_W9.TTF', 20)

    # 显示进入信息
    print('* ' * 30)
    print(f'{"* " * 11}欢迎进入武侠江湖 {" *" * 11}')
    print('* ' * 30)
    input(f'{"* " * 11}回车确定开始游戏 {" *" * 11}')
    print('* ' * 30)

    # 身份注册信息
    time.sleep(0.5)
    print('请大侠起个名称: ')
    name = input('>>> ')
    print('* ' * 30)
    print(f'欢迎{name}大侠进入《武侠江湖》...')
    print('* ' * 30)

    # NPC初始化属性
    class Npc():
        def __init__(self, name, life, attack):
            self.name = name
            self.life = life
            self.attack = attack

        def npc(self):
            self.life += 50 + (random.randint(50, 100))
            self.attack += 5 + (random.randint(5, 10))

    wmans = ['钟灵', '任盈盈', '曲非烟', '苗若兰', '王语嫣', '小龙女']
    wman_result = random.choice(wmans)
    n = Npc(wman_result, random.randint(600, 1200), random.randint(20, 40))

    # 玩家初始化属性
    class Player(Npc):
        def __init__(self, name, life, attack):
            self.name = name
            self.life = life
            self.attack = attack

        def player(self):
            self.life += 50 + (random.randint(50, 100))
            self.attack += 5 + (random.randint(5, 10))
            print(f'{p.name}升级了!'
                  f'\t生命增加{self.life}'
                  f'\t攻击增加{self.attack}')
            print('* ' * 30)
            n.npc()

    p = Player(name, random.randint(400, 800), random.randint(15, 30))

    # 招式
    class Martial(Player, Npc):
        def __init__(self, p_martial, n_martial):
            self.p_martial = p_martial
            self.n_martial = n_martial

        def p_battle(self):
            p.life -= n.attack + random.randint(2, 5)
            print(
                f'【{p.name}】出手一招 {random.choice(m.p_martial)} 攻击了【{n.name}】受到了{p.attack + random.randint(2, 5)}点伤害!')

        def n_battle(self):
            n.life -= p.attack + random.randint(2, 5)
            print(
                f'【{n.name}】反击一招 {random.choice(m.n_martial)} 攻击了【{p.name}】受到了{n.attack + random.randint(2, 5)}点伤害!')
            time.sleep(0.5)

    player_martial = [' [大日如来] ', ' [猴子偷桃] ', ' [偷天换日] ', ' [倒挂金钟] ', ' [一指探穴] ']
    npc_martial = [' [黑虎掏心] ', ' [雪媚横生] ', ' [午夜聊骚] ', ' [官人来搞] ', ' [环龙抱月] ']
    m = Martial(player_martial, npc_martial)

    # 装备
    class Arms():
        def __init__(self, weapons):
            self.weapons = weapons

        def equip(self):
            print(f'装备: 1.木剑\t2.铁剑\t3.青铜剑')
            eq = input('>>> ')
            if eq == '1':
                p.attack += 5
                print(f'你装备上了 {self.weapons[0]}, 攻击力 +{5}')
                print('* ' * 30)
            elif eq == '2':
                p.attack += 10
                print(f'你装备上了 {self.weapons[1]}, 攻击力 +{10}')
                print('* ' * 30)
            elif eq == '3':
                p.attack += 20
                print(f'你装备上了 {self.weapons[2]}, 攻击力 +{20}')
                print('* ' * 30)

    arm_weapons = ['木剑', '铁剑', '青铜剑']
    arms = Arms(arm_weapons)

    # 物品掉落
    goods = []

    class Drop(Arms):
        def __init__(self):
            self.goods = goods

        def arms(self):
            if random.randint(1, 5) == 1:
                d.goods.append(arms.weapons[0])
                print(f'你获取一把 {arms.weapons[0]}')
                print('* ' * 30)
                return
            elif random.randint(1, 10) == 1:
                d.goods.append(arms.weapons[1])
                print(f'你获取一把 {arms.weapons[1]}')
                print('* ' * 30)
                return
            elif random.randint(1, 20) == 1:
                d.goods.append(arms.weapons[2])
                print(f'你获取一把 {arms.weapons[2]}')
                print('* ' * 30)
                return

    d = Drop()

    font_height = font.get_linesize()  # 获取字体高度
    list_texts = []  # 创建一个文字列表

    while True:

        event = pygame.event.wait()  # 如果没有事件会滞停
        list_texts.append(str(event))  # 把接收的日志转成字符串,存入列表中
        event_text = list_texts[int(-SCREEN_SIZE[1] / font_height): 0: 1]  # 将列表中的字符串切片

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        screen.blit(background_image, (0, 0))  # 图像填充到背景(背景变量,(位置元组))

        y = SCREEN_SIZE[1] - font_height  # 窗口高度 - 字体高度

        for text in reversed(list_texts):
            screen.blit(font.render(text, True, (0, 0, 50)), (10, y))
            y -= font_height

        pygame.display.update()  # 刷新界面

        while 0 < p.life and 0 < n.life:
            # 显示游戏选项
            print(f'\t[玩家]生命值: {p.life}\t攻击力: {p.attack}')
            print(f'\t[电脑]生命值: {n.life}\t攻击力: {n.attack}')
            print(f'{name}大侠, 请选择进行的操作:\n\t1.练级\n\t2.打BOSS\n\t3.装备\n\t4.退出游戏')
            game_choose = input('>>> ')
            print('* ' * 30)

            # 玩家升级操作
            if game_choose == '1':
                p.player()  # 玩家升级
                d.arms()  # 物品掉落

            # 双方战斗信息
            elif game_choose == '2':
                while 0 < p.life and 0 < n.life:
                    m.p_battle()
                    m.n_battle()

                    # 判断NPC是否死亡
                    if n.life <= 0:
                        print(f'【{p.name}】一招 {random.choice(m.p_martial)} 戳中【{n.name}】,重伤不治死了!')
                        print(f'【{p.name}】大声说道: 来生再见吧!')
                        break

                    # 判断玩家是否死亡
                    if p.life <= 0:
                        print(f'【{n.name}】一招 {random.choice(m.n_martial)} 把【{p.name}】勒死了!')
                        print(f'【{n.name}】轻视一眼, 大声喊道: 你给我下地狱吧!')
                        break
            # 背包
            elif game_choose == '3':
                arms.equip()

            # 逃跑退出游戏
            elif game_choose == '4':
                print(f'【{p.name}】一扭头,撒腿就跑!')
                print(f'【{n.name}】喊道:小样就那么不经打,看你还敢不敢来!')
                print(f'【{n.name}】轻视一眼: 有缘江湖再见!')
                break

            else:
                print('您的输入有误,请重新输入!')
                print('* ' * 30)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-28 23:37:24 | 显示全部楼层
你想问什么???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 14:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表