第七关—项目实操:PK小游戏

前面学习了数据的类型,数据的应用:条件判断和条件循环

这一节我们来学习如何设计一款三局两胜PK小游戏

先来理下思路

平常我们是怎么打游戏的

进入后→电脑随机匹配角色→PK过程自动扣血→每一局的结果→最终结果

分成三个小目标:打印随机属性→自动PK并扣血→每一局的结果→最终结果

例1  【玩家】

血量:100—150

攻击量:30—50

...............................

【敌人】

血量:100—150

攻击量:30—50

..............................

你发起了攻击,【敌人】剩余血量:

【敌人】向你发起了攻击,【玩家】剩余血量:

..........................................................

结果:玩家赢or敌人赢

最终结果:敌人赢or玩家赢

电脑终端最后呈现出来的效果大概是这样

我们先来看例1中玩家的属性

【玩家】

血量:100—150

攻击量:30—50

文字部分我们用print()函数打印

教给大家一个自动换行的小方法:\n

血量和攻击量分别是100—150、30—50的随机数

所以在代码前端先给电脑下指令,导入随机数—import random

随机整数的写法:random.randint(,)    括号内是数的范围

标准的变量名最好用英文来表示

如果有多个单词构成,用下划线_来分开

推荐一个命名网站CODELF

再啰嗦一句,我们为什么需要导入随机数呢?

既然是PK,我们当然希望PK过程是随机的

血量和攻击量是电脑随机匹配

PK直到有一方的血量小于0

游戏结束

保证了游戏的公平性

好,我们现在先把玩家和敌人的属性试着写一下

一:打印随机属性

例2  前端  #导入时间和随机数

import random,time 

#玩家血量

player_life=random.randint(100,150) 

#玩家攻击量

player_attack=random.randint(30,50) 

print('【玩家】'+'\n血量:'+str(player_life)+\n'攻击量:'+str(player_attack))

print(.........................................)

time.sleep(1.5)

print('【敌人】'+\n'血量:'+str(enemy_life)+\n'攻击量:'+str(enemy_attack))

print(..........................................)

time.sleep(1.5)

二:自动PK并扣血

PK过程是一直打到对方血量小于0才结束

所以整个过程是重复进行

循环次数不明确用while

例3 前端  #设置开启循环条件

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))

三:每一局的结果

例4  前端 

if player_life>0 and enemy_life<0:

        print('玩家赢了')

elif enemy_life>0 and player_life<0:

          print('敌人赢了')

else:

          print('你与敌人同归于尽了')

进行一局的代码我们写完了

四:三局两胜

这样的游戏要打三盘

整个过程循环三遍

循环次数确定用for in

五:最终结果

我们只需要把每局的结果统计起来就可以知道最终的胜负了

player_victory=0            (玩家赢的局数)

enemy_victory =0            (敌人赢的局数)

player_victory+=1              (玩家赢一局)

例5  前端 

if player_victory>enemy_victory:

        print(最终结果:玩家赢了)

elif enemy_victory>player_victory:

        print(最终结果:敌人赢了)

else:

        print(最终结果:两人打成平局)

六:PK小游戏

现在把刚才拆解的过程放在一起写一遍

例6  前端  #打印随机属性

for i in range(1,4):

    print('\n——现在是第'+str(i)+'局——')

    import random,time

    player_victory=0

    enemy_victory=0

    player_life=random.randint(100,150)

    enemy_life=random.randint(100,150)

    player_attack=random.randint(30,50)

    enemy_attack=random.randint(30,50)

    print('【玩家】'\n+'血量:'+str(player_life)+\n'攻击量:'+str(player_attack))

    print(...........................................)

    time.sleep(1.5)    #时间间隔1.5秒

    print('【敌人】'\n+'血量:'+str(enemy_life)+\n'攻击量:'+str(enemy_attack))

    print(........................................)

    time.sleep(1.5)    #时间间隔1.5秒

#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('玩家赢了')

            print(..........................)

      elif enemy_life>0 and player_life<0:

            enemy_victory+=1

            print('敌人赢了')

            print(........................)

      else:

            print('你与敌人同归于尽了')

            print(............................)

            time.sleep(1.5)

#打印最终结果

      if  player_victory>enemy_victory:

          print('最终结果:玩家赢了')

          print(.............................)

    elif enemy_victory>player_victory:

          print('最终结果:敌人赢了')

          print(................................)

    else:

        print(最终结果:两人同归于尽了)

        print(.....................................)

终端 

——现在是第1局——

【玩家】

血量:125

攻击量:32

...........................................

【敌人】

血量:132

攻击量:45

.....................................................

你发起了攻击,敌人剩余血量100

敌人向你发起了攻击,玩家剩余血量80

......................................................

你发起了攻击,敌人剩余血量68

敌人向你发起了攻击,玩家剩余血量35

.........................................................

你发起了攻击,敌人剩余血量36

敌人向你发起了攻击,玩家剩余血量-10

..........................................................

敌人赢了


——现在是第2局——

【玩家】

血量:140

攻击量:46

...............................................

【敌人】

血量:148

攻击量:39

...............................................

你发起了攻击,敌人剩余血量102

敌人向你发起了攻击,玩家剩余血量101

...................................................

你发起了攻击,敌人剩余血量56

敌人向你发起了攻击,玩家剩余血量62

...................................................

你发起了攻击,敌人剩余血量10

敌人向你发起了攻击,玩家剩余血量23

...................................................

你发起了攻击,敌人剩余血量-36

敌人向你发起了攻击,玩家剩余血量-16

...................................................

你与敌人同归于尽了

——现在是第3局——

【玩家】

血量:135

攻击量:45

...............................................

【敌人】

血量:126

攻击量:36

...............................................

你发起了攻击,敌人剩余血量81

敌人向你发起了攻击,玩家剩余血量99

...................................................

你发起了攻击,敌人剩余血量36

敌人向你发起了攻击,玩家剩余血量63

...................................................

你发起了攻击,敌人剩余血量9

敌人向你发起了攻击,玩家剩余血量27

...................................................

你发起了攻击,敌人剩余血量-36

敌人向你发起了攻击,玩家剩余血量-9

.................................................

你与敌人同归于尽了

..................................................

最终结果:敌人赢了

七:格式化字符

再给大家讲个新的知识点

例7 前端 a=886

          print('我的幸运数字是'+str(a))

          print('我的幸运数字是%d' % a)

          print('我的幸运数字是%d' % 886)

终端  我的幸运数字是886

        我的幸运数字是886

        我的幸运数字是886

用格式化字符的好处是不用转换

只需要用%d,%f,%s来占位,这三个符号分别代表了整数,浮点数,字符串

现在我们试着替换前面的代码

例8  #替换前

print('\n——现在是第'+str(i)+'局——') 

      #替换后

print('\n——现在是第%d局——' % i)     

例9  #替换前

print('【玩家】'\n+'血量:'+str(player_life)+\n'攻击量:'+str(player_attack))

  #替换后

print('【玩家】\n血量:%d\n攻击量:%' % (player_life,player_attack))       

是不是觉得简化了很多,不需要一遍遍的转换

如果是整数就用%d格式化字符占位

然后在括号里补上要填充的内容

总结一下

做项目首先要在心中有个大的框架,完成后大概是什么样子

然后分成小的目标一个个去实现

在实现的过程中我们需要知道用上哪些知识点

如果遇到不懂的就上网查找资料

你可能感兴趣的:(第七关—项目实操:PK小游戏)