挑戰用純python寫一個王者榮耀小游戲?
信不信點進來看!小白們快來,你們也行!我就不信你不笑,快跟我來!
這是我第一次寫博客,如果有語言不當的地方,還請大家對小徐多多諒解(-.-)
先向大家介紹一下自己,我是一名人工智能專業的大一新生,就是那種啥也不會的小白,然后這個游戲我大約寫了一周左右吧,400多行代碼,里面所有的東西都是自己一點一點想的,做的時候挺開心的,玩的時候更開心!
Show time:

歡迎來到小徐想玩王者榮耀!
**一.我的思路:

**對王者榮耀,我只想說:你認真了,你就輸了;你開心了,這就夠了!反正受益的都是電腦螢屏后坐著數錢的老馬…
二.設定游戲人物,為其配置技能以及血量藍量:

看不清沒關系,一會兒我會在代碼中詳細介紹的!
三.代碼展示:
1.
import random
number = 8 #在這里我設定了八個角色,大家也可以再創作出自己的角色呦
print('*'*40)
print('\t歡迎來到小徐想玩王者榮耀!')
print('*'*40)
#開局bp
ban_1 = int(input('請玩家1禁用一個對方的英雄:'))
ban_2 = int(input('請玩家2禁用一個對方的英雄:'))
#取亂數,決定誰先走
A = random.randint(1, 2)
if A == 1:
print('1號玩家先手,2號玩家后手')#取亂數,決定誰先走
elif A == 2:
print('2號玩家先手,1號玩家后手')
#玩家1選英雄
while True:
role1 = int(input('玩家1請選擇您的游戲人物:(1.馬保國 2.小阿giao 3.馬化騰 4.張大仙 5.馬爸爸 6.兩個年輕人 7.盧本偉 8.李云龍)'))
if role1 == ban_2:
print('該英雄已經被禁用,請重新輸入')
elif role1 <= 0 or role1 > number:
print('輸入錯誤請重新輸入')
else:
print('親愛的1號召喚師恭喜你選擇成功')
break
這是開局的選英雄和bp以及決定誰先走
2.
if role1 == 1:
print('馬保國:\n---ph:101---\n---lan:101----\n英雄定位:戰士\n1技能:耗子尾汁(普攻),對對方造成20點傷害,消耗自身10點藍\n2技能:不講武德,保住性命,恢復20生命值,消耗自身10點藍\n技能三:五連鞭(大招),對對方造成40點傷害,消耗自身30點藍')
if role1 == 2:
print('小阿giao:\n---ph:151---\n---lan:101----\n英雄定位:坦克\n1技能:giao(普攻),對對方造成15點傷害,消耗自身10點藍\n2技能:要禮物,恢復15生命值,消耗自身10點藍\n技能三:一giao我里giaogiao(大招),對對方造成25點傷害,消耗自身20點藍')
if role1 == 3:
print('馬化騰:\n---ph:61---\n---lan:51----\n英雄定位:法師\n1技能:充錢(普攻),讓對手進入防沉迷狀態,減去其當前生命值的一半,消耗自身10點藍\n2技能:淦淦淦,私自修改游戲回血設定,大幅度恢復自身50生命值,消耗30藍\n技能三:金錢的力量(大招),秒殺生命值低于其原始生命值一半的角色,不耗藍')
if role1 == 4:
print('\n---ph:121---\n---lan:1000+----\n英雄定位:戰士\n1技能:吹牛皮(普攻),對對方造成10點傷害,不耗藍\n2技能:走位走位,吃口藥,恢復自身10點生命值,不耗藍\n技能三:冰心(大招),對自己和對方都造成傷害,對對方造成30點傷害,對自己造成20點傷害,不耗藍')
if role1 == 5:
print('馬爸爸:\n---ph:81---\n---lan:31----\n英雄定位:法師\n1技能:關閉淘寶(普攻),讓對方藍量下降一半,消耗自身30點藍\n2技能:收購美團外賣,補充能量,恢復自身10點生命值\n技能三:氪金(大招),將對方10點生命值轉化為自己的10點藍量')
if role1 == 6:
print('兩個年輕人:\n---ph:71---\n---lan:81----\n英雄定位:刺客\n1技能:不講武德(普攻),對對方造成30點傷害,消耗自身30點藍\n2技能:耗子尾汁,吸收馬大師精華,恢復25生命值,消耗自身10點藍\n技能三:偷襲(大招),以迅雷不及掩耳之勢對對方造成50點傷害,消耗自身40點藍')
if role1 == 7:
print('盧本偉:\n---ph:81---\n---lan:201---\n英雄定位:獻祭流戰士\n 1技能(普攻):召喚盧本偉廣場,隨意交換自己的藍量和血量,不耗藍\n技能2:給阿姨倒一杯卡布奇諾,被阿姨賞識,恢復20點生命值,消耗40點藍\n技能三(大招):把電腦螢屏吃掉,進入狂暴狀態,消耗自身100藍量,對對手造成60點傷害,但會增加對方50點藍量')
if role1 == 8:
print('李云龍:\n---ph:131---\n---lan:51---\n英雄定位:軟輔型坦克\n 1技能(普攻):給老子上意大利炮,對對方造成10點傷害,不耗藍\n技能2:召喚二營長,恢復40血量 消耗自身20藍\n技能三(大招):你他娘的真是個人才,和對方交換血量, 消耗自身30點藍')
while True:
role2 = int(input('玩家2請選擇您的游戲人物:(1.馬保國 2.小阿giao 3.馬化騰 4.張大仙 5.馬爸爸 6.兩個年輕人 7.盧本偉 8.李云龍)'))
if role2 == ban_1:
print('該英雄已經被禁用,請重新輸入')
elif role2 == role1:
print('該英雄已被選用,不能重復選擇呀!')
elif role2 <= 0 or role2 > number:
print('輸入錯誤請重新輸入')
else:
print('親愛的2號召喚師恭喜你選擇成功')
break
if role2 == 1:
print('馬保國:\n---ph:101---\n---lan:101----\n英雄定位:輸出型戰士\n1技能:耗子尾汁(普攻),對對方造成20點傷害,消耗自身10點藍\n2技能:不講武德,保住性命,恢復20生命值,消耗自身10點藍\n技能三:五連鞭(大招),對對方造成40點傷害,消耗自身30點藍')
if role2 == 2:
print('小阿giao:\n---ph:151---\n---lan:101----\n英雄定位:硬輔型坦克\n1技能:giao(普攻),對對方造成10點傷害,消耗自身10點藍\n2技能:要禮物,恢復15生命值,消耗自身10點藍\n技能三:一giao我里giaogiao(大招),對對方造成25點傷害,消耗自身20點藍')
if role2 == 3:
print('馬化騰:\n---ph:61---\n---lan:51----\n英雄定位:爆發型法師\n1技能:充錢(普攻),讓對手進入防沉迷狀態,減去其當前生命值的一半,消耗自身10點藍\n2技能:淦淦淦,私自修改游戲回血設定,大幅度恢復自身50生命值,消耗30藍\n技能三:金錢的力量(大招),秒殺生命值低于其原始生命值一半的角色,不耗藍')
if role2 == 4:
print('張大仙:\n---ph:121---\n---lan:1000+----\n英雄定位:續航型戰士\n1技能:吹牛皮(普攻),對對方造成10點傷害,不耗藍\n2技能:走位走位,吃口藥,恢復自身10點生命值,不耗藍\n技能三:冰心(大招),對自己和對方都造成傷害,對對方造成30點傷害,對自己造成20點傷害,不耗藍')
if role2 == 5:
print('馬爸爸:\n---ph:81---\n---lan:31----\n英雄定位:持續型法師\n1技能:關閉淘寶(普攻),讓對方藍量下降一半,消耗自身30點藍\n2技能:收購美團外賣,補充能量,恢復自身10點生命值\n技能三:氪金(大招),將對方10點生命值轉化為自己的10點藍量')
if role2 == 6:
print('兩個年輕人:\n---ph:71---\n---lan:81----\n英雄定位:爆炸型刺客\n1技能:不講武德(普攻),對對方造成30點傷害,消耗自身30點藍\n2技能:耗子尾汁,吸收馬大師精華,恢復25生命值,消耗自身10點藍\n技能三:偷襲(大招),以迅雷不及掩耳之勢對對方造成50點傷害,消耗自身40點藍')
if role2 == 7:
print('盧本偉:\n---ph:81---\n---lan:201---\n英雄定位:獻祭流戰士\n 1技能(普攻):召喚盧本偉廣場,隨意交換自己的藍量和血量,不耗藍\n技能2:給阿姨倒一杯卡布奇諾,被阿姨賞識,恢復20點生命值,消耗40點藍\n技能三(大招):把電腦螢屏吃掉,進入狂暴狀態 ,消耗自身100藍量,對對手造成60點傷害,但會增加對方50點藍量')
if role2 == 8:
print('李云龍:\n---ph:131---\n---lan:51---\n英雄定位:軟輔型坦克\n 1技能(普攻):給老子上意大利炮,對對方造成10點傷害,不耗藍\n技能2:召喚二營長,恢復40血量 消耗自身20藍\n技能三(大招):你他娘的真是個人才,和對方交換血量 ,消耗自身30點藍')
這是英雄介紹,在玩家選擇之后會給出提示的,防止一些沒玩過的玩家處于mb狀態,
3.
print('注明:\n’1’代表玩家1普攻\n‘2’代表玩家2普攻\n‘3’代表玩家1回血\n‘4’代表玩家2回血\n’5‘代表玩家1大招\n’6‘代表玩家2大招\n提示:每個英雄的1技能(普攻),有百分之十的幾率造成追擊效果,即連續使用兩次\n每個英雄的大招有百分之二的幾率造成暴擊,即一招制敵!')
print('規則:選手通過控制英雄進行作戰,每個英雄初始生命值和藍量均為100左右\n每一方藍量或ph先消耗完則被淘汰')
print('請各位召喚師發揮自己最大的智慧,取得戰爭的勝利吧!\n你們的戰斗時刻會受到國際組織的時刻關注,他們會有20%的可能會為你們添油加醋的呦!')
這是游戲規則的介紹,介紹攻擊回血鍵位,及一些游戲中的彩蛋:
暴擊 追加 隨機轟炸(血上加霜)或隨機回血(血中送碳)
*** 這個游戲中人物的血量和藍量都設計的非常巧妙,需要我們考慮好每一步的打法,每一步的小差錯,都會使局面逆轉,需要你平衡藍量與血量,算是個燒腦and不確定性很強的游戲吧***
4.
class Person:
def __init__(self, name, hp, attack, lan, chushishengmingzhi, chushilanliang):
self.name = name
self.hp = hp
self.attack = attack
self.lan=lan
self.chushishengmingzhi=chushishengmingzhi
self.chushilanliang=chushilanliang
def __str__(self):
return '{}的血量還剩下{},{}的藍還剩下{}'.format(self.name, self.hp, self.name,self.lan)
這里首先設定了一個類,然后呼叫了init函式,為其附上屬性(name, hp, attack, lan, chushishengmingzhi, chushilanliang)
接著呼叫了str函式,使其在接下來的每個回合都可以隨時注意血量藍量的變化
5.
# 普通攻擊函式
def small_kill(self, name):
if self.name == "馬保國":
name.hp -= 20
self.lan -= 10
elif self.name == "小阿giao":
name.hp -= 15
self.lan -= 10
elif self.name == "馬化騰":
name.hp = name.hp/2
self.lan -= 10
elif self.name == "張大仙":
name.hp -= 10
elif self.name == "馬爸爸":
name.lam = name.lan/2
self.lan -= 30
elif self.name == "兩個年輕人":
name.hp -= 30
self.lan -= 30
elif self.name == "盧本偉":
self.hp,self.lan=self.lan,self.hp
elif self.name == "李云龍":
name.hp -= 10
if role1 == 1 and x == 1:
self.attack = "耗子尾汁"
elif role1 == 2 and x == 1:
self.attack = "giao"
elif role1 == 3 and x == 1:
self.attack = "充錢,馬化騰讓對手陷入防沉迷狀態"
elif role1 == 4 and x == 1:
self.attack = "吹牛皮,mvp理所應當"
elif role1 == 5 and x == 1:
self.attack = "關閉淘寶,對手藍量下降一半"
elif role1 == 6 and x == 1:
self.attack = "不講武德"
elif role1 == 7 and x == 1:
self.attack = "召喚盧本偉廣場,隨意交換自己的藍量和血量"
elif role1 == 8 and x == 1:
self.attack = "給老子上意大利炮"
elif role2 == 1 and x == 2:
self.attack = "耗子尾汁"
elif role2 == 2 and x == 2:
self.attack = "giao"
elif role2 == 3 and x == 2:
self.attack = "充錢,馬化騰讓對手陷入防沉迷狀態"
elif role2 == 4 and x == 2:
self.attack = "吹牛皮,mvp理所應當"
elif role2 == 5 and x == 2:
self.attack = "關閉淘寶,對手藍量下降一半"
elif role2 == 6 and x == 2:
self.attack = "不講武德"
elif role2 == 7 and x == 2:
self.attack = "召喚盧本偉廣場,隨意交換自己的藍量和血量"
elif role2 == 8 and x == 2:
self.attack = "給老子上意大利炮"
print('{}使用{},普通攻擊了{}'.format(self.name, self.attack, name.name))
print(self, ' ', name) #輸出剩余血量
這里定義了普攻函式
6.
# 大招攻擊函式
def big_kill(self, name):
if self.name == "馬保國":
name.hp -= 40
self.lan -= 30
elif self.name == "小阿giao":
name.hp -= 25
self.lan -= 20
elif self.name == "馬化騰":
if name.hp < name.chushishengmingzhi/2:
name.hp = 0
else:
name.hp = name.hp
elif self.name == "張大仙":
name.hp -= 30
self.hp -= 20
elif self.name == "馬爸爸":
name.hp -= 10
self.lan += 10
elif self.name == "兩個年輕人":
name.hp -= 50
self.lan -= 40
elif self.name == "盧本偉":
name.hp -= 60
self.lan -= 100
name.lan+=50
elif self.name == "李云龍":
name.hp,self.hp = self.hp,name.hp
self.lan-=30
if role1 == 1 and x == 5:
self.attack = "以極快的手速打出了五連鞭"
elif role1 == 2 and x == 5:
self.attack = "使用一giao我里giaogiao"
elif role1 == 3 and x == 5:
self.attack = "相信錢可以解決一切問題,對低于自身血量50%的人物秒殺"
elif role1 == 4 and x == 5:
self.attack = "出了一個冰心,對自己和對方都造成傷害"
elif role1 == 5 and x == 5:
self.attack = "進行不斷地氪金"
elif role1 == 6 and x == 5:
self.attack = "不講武德偷襲"
elif role1 == 7and x == 5:
self.attack = "進入狂暴狀態 -消耗自身100藍量,對對手造成60點傷害"
elif role1 == 8 and x == 5:
self.attack = "你他娘的真是個人才,和對方交換血量"
elif role2 == 1 and x == 6:
self.attack = "以極快的手速打出了五連鞭"
elif role2 == 2 and x == 6:
self.attack = "使用一giao我里giaogiao"
elif role2 == 3 and x == 6:
self.attack = "相信錢可以解決一切問題,對低于自身血量50%的人物秒殺"
elif role2 == 4 and x == 6:
self.attack = "出了一個冰心,對自己和對方都造成傷害"
elif role2 == 5 and x == 6:
self.attack = "進行不斷地氪金"
elif role2 == 6 and x == 6:
self.attack = "不講武德偷襲"
elif role2 == 7and x == 6:
self.attack = "進入狂暴狀態 -消耗自身100藍量,對對手造成60點傷害"
elif role2 == 8 and x == 6:
self.attack = "你他娘的真是個人才,和對方交換血量"
print('{}{},大招攻擊了{}'.format(self.name, self.attack, name.name))
print(self, ' ', name)
這里定義了大招攻擊函式
7.
# 回血函式
def reback(self):
if self.name == "馬保國":
self.hp += 20
self.lan -= 10
elif self.name == "小阿giao":
self.hp += 15
self.lan -= 10
elif self.name == "馬化騰":
self.hp += 50
self.lan -= 30
elif self.name == "張大仙":
self.hp += 10
elif self.name == "馬爸爸":
self.hp += 10
elif self.name == "兩個年輕人":
self.hp += 25
self.lan -= 10
elif self.name == "盧本偉":
self.hp += 20
self.lan -= 40
elif self.name == "李云龍":
self.hp += 40
self.lan -= 20
if role1 == 1 and x == 3:
self.attack = "不講武德,保住性命"
elif role1 == 2 and x == 3:
self.attack = "太難了,要到禮物"
elif role1 == 3 and x == 3:
self.attack = "淦淦淦,私自修改游戲回血設定"
elif role1 == 4 and x == 3:
self.attack = "走位,走位,吃口藥"
elif role1 == 5 and x == 3:
self.attack = "收購美團外賣,補充能量"
elif role1 == 6 and x == 3:
self.attack = "耗子尾汁,吸收馬大師精華"
elif role1 == 7 and x == 3:
self.attack = "給阿姨倒了一杯卡布奇諾,被阿姨賞識"
elif role1 == 8 and x == 3:
self.attack = "召喚二營長"
elif role2 == 1 and x == 4:
self.attack = "不講武德,保住性命"
elif role2 == 2 and x == 4:
self.attack = "太難了,要到禮物"
elif role2 == 3 and x == 4:
self.attack = "淦淦淦,私自修改游戲回血設定"
elif role2 == 4 and x == 4:
self.attack = "走位,走位,吃口藥"
elif role2 == 5 and x == 4:
self.attack = "收購美團外賣,補充能量"
elif role2 == 6 and x == 4:
self.attack = "耗子尾汁,吸收馬大師精華"
elif role2 == 7 and x == 4:
self.attack = "給阿姨倒了一杯卡布奇諾,被阿姨賞識"
elif role2 == 8 and x == 4:
self.attack = "召喚二營長"
if self.name == "馬保國":
xyp = 20
elif self.name == "小阿giao":
xyp = 15
elif self.name == "馬化騰":
xyp = 50
elif self.name == "張大仙":
xyp = 10
elif self.name == "馬爸爸":
xyp = 10
elif self.name == "兩個年輕人":
xyp = 25
elif self.name == "盧本偉":
xyp = 20
elif self.name == "李云龍":
xyp = 40
print('{}{},恢復了'.format(self.name, self.attack,), xyp, '滴血')
print(self)
這里定義了一個回血函式
8.
print('----------游戲開始啦-----------')
count = 1
x = 0
MBG = Person('馬保國', 101, 0, 101, 101, 1010)#需要修改lan的值
XAG = Person('小阿giao', 151, 0, 101, 150, 101)
MHT = Person('馬化騰', 61, 0, 51, 61, 51)
ZDX = Person('張大仙', 121, 0, 10000, 121, 10000)
MBB = Person('馬爸爸', 81, 0, 31, 81, 31)
NQR = Person('兩個年輕人', 71, 0, 81, 71, 81)
LBW = Person('盧本偉',81,0,201,81,201)
LYL = Person('李云龍',131,0,51,131,51)
現在開始進入游戲的實作階段
為人物英雄附上其各種屬性
9.
if role1 == 1:
a = MBG
if role1 == 2:
a = XAG
if role1 == 3:
a = MHT
if role1 == 4:
a = ZDX
if role1 == 5:
a = MBB
if role1 == 6:
a = NQR
if role1 == 7:
a = LBW
if role1 == 8:
a = LYL
if role2 == 1:
b = MBG
if role2 == 2:
b = XAG
if role2 == 3:
b = MHT
if role2 == 4:
b = ZDX
if role2 == 5:
b = MBB
if role2 == 6:
b = NQR
if role2 == 7:
b = LBW
if role2 == 8:
b = LYL
確定人物
10.
while True:
userIn = int(input('請輸入數字 1 , 2, 3, 4, 5, 6:'))
x = userIn
if userIn == 1:
aa = random.randint(1, 100)
a.small_kill(b)
if 10 <= aa < 20:
a.small_kill(b)
print('恭喜你打出了追加效果,棒棒噠!')
print('------第{}回合結束------'.format(count))
elif userIn ==2:
bb = random.randint(1, 100)
b.small_kill(a)
if 10 <= bb < 20:
b.small_kill(a)
print('恭喜你打出了追加效果,棒棒噠!')
elif userIn == 3:
a.reback()
print('------第{}回合結束------'.format(count))
elif userIn == 4:
b.reback()
print('------第{}回合結束------'.format(count))
elif userIn == 5: ## 大招加上2%的暴擊率,直接致死
a.big_kill(b)
cc = random.randint(1, 100)
if 1 <= cc <= 2:
b.hp = 0
print('恭喜你打出了暴擊效果,一招制敵,干飯了干飯了!')
print('------第{}回合結束------'.format(count))
elif userIn == 6:
b.big_kill(a)
dd = random.randint(1, 100)
if 1 <= dd <= 2:
a.hp = 0
print('恭喜你打出了暴擊效果,一招制敵,干飯了干飯了!')
print('------第{}回合結束------'.format(count))
else:
print('輸入錯誤,請重新輸入')
if a.hp <= 0 or a.lan <= 0:
print('------游戲結束------\n恭喜你玩家2獲勝,干得漂亮!\n玩家1遺憾敗北,這操作下飯下飯!')
break
elif b.hp <= 0 or b.lan <= 0:
print('------游戲結束------\n恭喜你玩家獲勝1,干得漂亮!\n玩家2遺憾敗北,這操作下飯下飯!')
break
count += 1
print('------第{}回合開始------'.format(count))
cc=random.randint(1,10)
if 1<cc<4:
print('----緊急通知,你們的戰斗引來了世界和平邪會的不滿,給你們血上加霜,每個人血量減10點----')
a.hp-=10
b.hp-=10
elif 5<cc<8:
print('----請注意,你們的戰斗受到了國際紅十字邪會的關注,為你們血中送碳,每個人血量加10點----')
a.hp += 10
b.hp += 10
這是各種攻擊功能的實作,以及用亂數實作暴擊,追加,隨機等的各種效果,
四.總結:
以上便是我所有的代碼,趕緊復制下來和小伙伴玩一下吧,如果它給你帶來了快樂,我覺得我就成功了!(哈哈哈)
另外這是小徐冒著四級英語不過,期末掛科的風險連夜寫的,如果你喜歡的話,就給我點個關注吧!
有可能你就是我第一個粉絲呢!(渺小卑微)
qq:2511864242(歡迎加我一起學習)
最后祝大家學習快樂,干飯愉快!謝謝你的觀看,再見!(bye~)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/233168.html
標籤:其他
