python小白学习笔记《7.项目实操-人机PK小游戏》

这篇博客介绍了如何使用Python实现一个人机对战小游戏。游戏分为三个版本,从人工PK到自动战斗,再到三局两胜的规则。通过随机生成属性、while循环和条件判断实现战斗逻辑,并利用time.sleep()函数控制信息显示的节奏。在版本3.0中,增加了战果打印和三局两胜的机制,完整实现了游戏流程。
摘要由CSDN通过智能技术生成

0.明确项目目标

我们此次要实现的需求是:人机PK小游戏。
这个游戏中,会随机生成玩家和敌人的属性,同时互相攻击,直至一方血量小于零。
另外,这样的战斗会持续三局,采取三局两胜制,最后输出战斗结果,公布获胜方。

1.分析过程,拆解项目

编写代码,我们无须苛求一步到位。尤其对于刚接触编程的学习者来说,层层递进、逐渐提升难度才能达到更好的练习效果。
从“功能叠加、难度递增”这个角度考虑,将我们要实现的小游戏拆分成了三个版本。
版本1.0,主要是帮我们理清战斗逻辑。
当项目被清晰地拆解后,剩下的就是去逐步执行,也就是重复“执行→遇到问题→解决问题→继续执行”这个循环的过程。

2.逐步执行,代码实现

首先,我们来看看版本1.0该怎么实现

2.0 版本1.0:自定属性,人工PK

第一阶段的代码,我们的主要任务是理清战斗的逻辑,再用print()函数将战斗过程打印在终端。
根据这一版本的设定,我们要做的主要有三步:1.规定并显示出玩家和敌人的属性 2.双方同时互相攻击,血量根据对方的攻击力扣除 3.若有一方血量小于等于0,游戏结束。
为了让我们的思路保持清晰,画成流程图就是这样子的:

Created with Raphaël 2.2.0 开始 显示玩家和敌人的属性 PK过程展示双方血量 显示PK结果
#第1步开始:设定【玩家】和【敌人】的属性,即【血量】和【攻击】。
print('【玩家】\n血量:100\n攻击:50')  # 自定义玩家角色的血量和攻击,用换行符'\n'来优化视觉
print('------------------------')  # 辅助功能,起到视觉分割的作用,让代码的运行结果更清晰

print('【敌人】\n血量:100\n攻击:30')
print('------------------------')

#第2步:手动计算攻击一次,双方各自所剩的血量。
print('你发起了攻击,【敌人】剩余血量50')  # 人工计算敌人血量:100-50=50
print('敌人向你发起了攻击,【玩家】剩余血量70')  # 人工计算玩家血量:100-30=70
print('------------------------')

#第3步:继续做人工计算:算一算,玩家攻击2次敌人,敌人的血量就等于0了,这时候可以结束战斗,打印游戏结果。
print('你发起了攻击,【敌人】剩余血量0')  # 双方同时攻击,若血量出现小于等于0,游戏结束
print('敌人向你发起了攻击,【玩家】剩余血量40')
print('-----------------------')

print('敌人死翘翘了,你赢了!') # 打印结果

唔…虽然看起来还有点儿意思,但所有信息一下子都蹦跶出来,一点都没有体现游戏的进程感。

所以,为了让打印出的东西能有时间间隔地依次出现,我们需要设置一个类似“计时器”的东西。

请看示例代码:

import time   #调用time模块
time.sleep(secs)   
#使用time模块下面的sleep()函数,括号里填的是间隔的秒数(seconds,简称secs)
#time.sleep(1.5)就表示停留1.5秒再运行后续代码

这里我们使用time模块里的sleep()函数,也就是让代码运行结果不要一次性全部出现,而是分批分批的出现。就要写成time.sleep(secs)的形式。

如果我想设置成打印的信息间隔1.5秒出现,代码就可以这么写:

import time  #通常import语句会写到代码的开头

print('【玩家】\n血量:100\n攻击:50')  
print('------------------------')  
time.sleep(1.5)
#暂停1.5秒,再继续运行后面的代码

print('【敌人】\n血量:100\n攻击:30')
print('------------------------')
time.sleep(1.5)
#同上

print('你发起了攻击,【敌人】剩余血量50')  
print('敌人向你发起了攻击,【玩家】剩余血量70') 
print('------------------------')
time.sleep(1.5)

print('你发起了攻击,【敌人】剩余血量0')  
print('敌人向你发起了攻击,【玩家】剩余血量40')
print('-----------------------')
time.sleep(1.5)

print('敌人死翘翘了,你赢了!') 

总算完成了1.0版本,但是这个版本的代码还有两个明显的缺陷:
一是玩家和敌人的属性(血量&攻击)是我自己说了算,那胜负早已没有悬念;
二是战斗过程中血量的变化要自己手动算,那要计算机有何用?

这些都是我们会在版本2.0解决的问题。

2.1 版本2.0:随机属性,自动PK

这个阶段,我们主要新增【随机属性】和【自动战斗】两个功能,画成流程图是这样子的:

Created with Raphaël 2.2.0 开始 随机显示玩家和敌人的属性
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值