前面学习了数据的类型,数据的应用:条件判断和条件循环
这一节我们来学习如何设计一款三局两胜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格式化字符占位
然后在括号里补上要填充的内容
总结一下
做项目首先要在心中有个大的框架,完成后大概是什么样子
然后分成小的目标一个个去实现
在实现的过程中我们需要知道用上哪些知识点
如果遇到不懂的就上网查找资料