鱼C论坛

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

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

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

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

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

x
  1. import random
  2. import time
  3. import pygame
  4. import sys
  5. from pygame.locals import *

  6. SCREEN_SIZE = WIDHT, HEIGHT = 640, 480

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

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

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

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

  27.     # NPC初始化属性
  28.     class Npc():
  29.         def __init__(self, name, life, attack):
  30.             self.name = name
  31.             self.life = life
  32.             self.attack = attack

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

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

  39.     # 玩家初始化属性
  40.     class Player(Npc):
  41.         def __init__(self, name, life, attack):
  42.             self.name = name
  43.             self.life = life
  44.             self.attack = attack

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

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

  54.     # 招式
  55.     class Martial(Player, Npc):
  56.         def __init__(self, p_martial, n_martial):
  57.             self.p_martial = p_martial
  58.             self.n_martial = n_martial

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

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

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

  71.     # 装备
  72.     class Arms():
  73.         def __init__(self, weapons):
  74.             self.weapons = weapons

  75.         def equip(self):
  76.             print(f'装备: 1.木剑\t2.铁剑\t3.青铜剑')
  77.             eq = input('>>> ')
  78.             if eq == '1':
  79.                 p.attack += 5
  80.                 print(f'你装备上了 {self.weapons[0]}, 攻击力 +{5}')
  81.                 print('* ' * 30)
  82.             elif eq == '2':
  83.                 p.attack += 10
  84.                 print(f'你装备上了 {self.weapons[1]}, 攻击力 +{10}')
  85.                 print('* ' * 30)
  86.             elif eq == '3':
  87.                 p.attack += 20
  88.                 print(f'你装备上了 {self.weapons[2]}, 攻击力 +{20}')
  89.                 print('* ' * 30)

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

  92.     # 物品掉落
  93.     goods = []

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

  97.         def arms(self):
  98.             if random.randint(1, 5) == 1:
  99.                 d.goods.append(arms.weapons[0])
  100.                 print(f'你获取一把 {arms.weapons[0]}')
  101.                 print('* ' * 30)
  102.                 return
  103.             elif random.randint(1, 10) == 1:
  104.                 d.goods.append(arms.weapons[1])
  105.                 print(f'你获取一把 {arms.weapons[1]}')
  106.                 print('* ' * 30)
  107.                 return
  108.             elif random.randint(1, 20) == 1:
  109.                 d.goods.append(arms.weapons[2])
  110.                 print(f'你获取一把 {arms.weapons[2]}')
  111.                 print('* ' * 30)
  112.                 return

  113.     d = Drop()

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

  116.     while True:

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

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

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

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

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

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

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

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

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

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

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

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

  165.             else:
  166.                 print('您的输入有误,请重新输入!')
  167.                 print('* ' * 30)



复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-28 23:37:24 | 显示全部楼层
你想问什么???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-27 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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