目录
- 前言
- 一,游戏规则
- 二,游戏拆解:
- 版本1.0(自定属性,人工PK)
- 版本2.0(随机属性,自动PK)
- 版本3.0(打印结果,三局两胜)
前言
有很多人问,怎样学python可以进步最快,我回顾自己的编程经历始终无法忘记当我初次独立完成一个项目,那种仿佛站在世界的山巅,觉得自己无所不能的激动之情。所以想要进步快,就要进行项目实操
第一个小游戏项目中,我们会运用所学知识(也会适量补充一些新知识),一起完成一个文字版的人机对战小游戏,并逐步增加游戏的功能,让它变得更真实、更好玩。
一,游戏规则
简单来说,这个游戏中,会随机生成玩家和敌人的属性,同时互相攻击,直至一方血量小于零。
另外,这样的战斗会持续三局,采取三局两胜制,最后输出战斗结果,公布获胜方。
二,游戏拆解:
版本1.0(自定属性,人工PK)
版本1.0,我们需要规定双方战斗角色属性,战斗时人为扣除血量并打印出战斗过程。
import time #调用time模块
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步:设定【玩家】和【敌人】的属性,即【血量】和【攻击】。
第2步:手动计算攻击一次,双方各自所剩的血量。(对比2,7,12,13行代码)
第3步:继续做人工计算:算一算,玩家攻击2次敌人,敌人的血量就等于0了,这时候可以结束战斗,打印游戏结果。
好了,我们的1.0版本已经完成了,但是这个版本的代码还有两个明显的缺陷:一是玩家和敌人的属性(血量&攻击)是我自己说了算,那胜负早已没有悬念;二是战斗过程中血量的变化要自己手动算,那要计算机有何用?
所以我们对1.0版本经行升级,这些问题我们会在版本2.0解决的问题。
版本2.0(随机属性,自动PK)
版本2.0,需要随机生成双方战斗角色属性,战斗时自动计算并扣除血量并优化打印出战斗过程的代码。
第一步:定义四个变量,来存储玩家血量和玩家攻击力的数值,血量是100-150的随机数,攻击力是30-50的随机数
import time,random
player_life = random.randint(100,150)
player_attack = random.randint(30,50)
enemy_life = random.randint(100,150)
enemy_attack = random.randint(30,50)
第二部:随机生成双方战斗角色属性,并打印出来。
print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack))
print('------------------------')
time.sleep(1)
print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack))
print('------------------------')
time.sleep(1)
第三步:对战斗过程进行循环,并显示受到伤害时的血量变化,
while (player_life >0) and (enemy_life > 0):
player_life = player_life - enemy_attack
enemy_life = enemy_life - player_attack
print('你发起了攻击,【敌人】剩余血量'+str(enemy_life))
#player_life是整数型,所以拼接时要先用str()转换
print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life))
print('------------------------')
time.sleep(1.5)
# 为了体现出战斗回合,这里停顿1.5秒
版本2.0总算像模像样了,慢慢逼近我们的项目目标。
不过它还没有实现:打印出每局结果,三局两胜,并打印最终战果的功能。这就是我们在版本3.0要增加的功能。
版本3.0(打印结果,三局两胜)
版本3.0,双方PK三局,每局判定胜负,三局两胜,最终判定胜负。
import time,random
player_victory = 0
enemy_victory = 0
for i in range(1,4):
time.sleep(2) # 让局与局之间有较明显的有时间间隔
print(' \n——————现在是第'+str(i)+'局——————') # 作为局的标记
player_life = random.randint(100,150)
player_attack = random.randint(30,50)
enemy_life = random.randint(100,150)
enemy_attack = random.randint(30,50)
# 展示双方角色的属性
print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack))
print('------------------------')
time.sleep(1)
print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack))
print('------------------------')
time.sleep(1)
# 双方PK
while player_life > 0 and enemy_life > 0:
player_life = player_life - enemy_attack
enemy_life = enemy_life - player_attack
print('你发起了攻击,【敌人】剩余血量'+str(enemy_life))
print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life))
print('-----------------------')
time.sleep(1.5)
#打印最终战果
if player_life > 0 and enemy_life <= 0:
player_victory += 1
print('敌人死翘翘了,你赢了!')
elif player_life <= 0 and enemy_life > 0:
enemy_victory += 1
print('悲催,敌人把你干掉了!')
else:
print('哎呀,你和敌人同归于尽了!')
if player_victory > enemy_victory :
time.sleep(1)
print('【最终结果:你赢了!】')
elif enemy_victory > player_victory:
print('【最终结果:你输了!】')
else:
print('【最终结果:平局!】')
现在这个简单的人机对战小游戏最终完成了,怎么样,你学会了吗?
更多推荐
python自学 适合新手的 python人机对战小游戏
发布评论