目录

  • 前言
  • 一,游戏规则
  • 二,游戏拆解:
    • 版本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人机对战小游戏