脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python实现尼姆游戏

python实现尼姆游戏

2022-03-11 10:01梦幻精灵_cq Python

这篇文章通过详细的python代码实现尼姆游戏,小编觉得挺不错的。现在分享给大家,也给大家做个参考,需要的朋友可以收藏下。一起跟随小编过来看看吧

题目

尼姆游戏,这是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须拿走一部并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。先手随机。

 

代码运行效果

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

 

 

python代码

#/sur/bin/nve python
# coding: utf-8
import os #用os.system(r'clear')清屏
import random #用random.randint()随机取数



def clear():
  '''#Linux清屏'''
  clear = os.system(r'clear')


def optimal(n):
  '''机器最优拿法'''
  if n in (1, 2, 3, 4):
      return 1
  take = int(n/2)
  m = 1
  for i in range(take):
      if m>take:
          break
      m *= 2
  take = n-m+1
  if take>int(n/2):
      take = random.randint(1, int(n/2))
  return take


def common(n):
  '''机器一般拿法'''
  while True:
      if n==1:
          return 1
      return random.randint(1, int(n/2))


def effect(first, take, n):
  '''结果输出'''
  cl()
  print('\n'*6)
  flag_s = ('简单', '困难')[flag-1]
  print('%s\n'%('【%s】'%flag_s).rjust(20))
  print('﹊'*21)
  print(' '*4, end='')
  print('%s已取走%s。物品堆物品还剩%s。'%(first, take, n))
  print('﹊'*21)


def show_error():
  '''报错信息打印'''
  print('\n\n%s'%error)
  print('输入错误!请重试。'.rjust(20))
  print('﹊'*21)
  input('任意键继续……'.rjust(20))


#Main Codes
cl = clear
s = '''
    尼姆游戏,这是一个著名的游戏,
有很多变种玩法。
    两个玩家轮流从一堆物品中拿走
一部分。在每一步中,玩家可以自由
选择拿走多少物品,但是必须拿走一个
并且最多只能拿走一半物品,然后轮到
下一个玩家。
    拿走最后一个物品的玩家输掉游戏。
    先手随机。
'''
#规则打印
cl()
print('\n\n%s'%'“尼姆”游戏规则'.rjust(20))
print()
print('﹊'*21)
print(s)
print('﹊'*21)
input('任意键继续……'.rjust(20))
#难度选择
while True:
  cl()
  print('\n'*6)
  print('\n%s'%'【难度选择】'.rjust(20))
  print()
  print('﹊'*21)
  print('1. 简单  2. 困难'.rjust(24))
  print('﹊'*21)
  try:
      flag = int(input('请选择:'.rjust(12)))
      if flag not in (1, 2):
          error()
          continue
      break
  except Exception as error:
      show_error()

#开始游戏
p = '小可爱'
cl()
print('\n'*6)
while True:
  try:
      c = input('给对手命名:'.rjust(12))
      break
  except Exception as error:
      error()
      continue
if flag==2:
  n = random.randint(1, 500)
else:
  n = random.randint(1, 100)
cl()
print('\n'*6)
print('﹊'*21)
print('%s\n'%'【本局游戏物品堆】'.rjust(21))
print(('%s:%3d'%('物品总数', n)).rjust(22))
print('﹊'*21)
input('任意键继续……'.rjust(20))
#随机先手选择
first = random.choice((c, p))
while n>0:
  #机器取
  if flag==2 and first==c:
      take = optimal(n)
      n = n-take
  if flag==1 and first==c:
      take = common(n)
      n = n-take
  if first==c:
      effect(first, take, n)
  if n==0:
      break
  first = p #转换玩家先手
  #玩家取
  if first==p:
      while True:
          try:
              take = int(input('\n%s'%'您取物:'.rjust(12)))
              if take==1 and (n in (1, 2, 3)):
                  break
              if take>int(n/2) or take<1:
                  error()
                  continue 
              break
          except Exception as error:
              show_error()
      n = n-take
  if first==p:
      effect('您', take, n)
      input('任意键继续……'.rjust(20))
  if n==0:
      break
  first = c #转换机器先手
  
#结果输出
if first==p:
  first = '您'
cl()
print('\n'*6)
print('﹊'*21)
print(('%s输了!'%first).rjust(20))
print('﹊'*21)

到此这篇关于python实现尼姆游戏的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/m0_57158496/article/details/121645399

延伸 · 阅读

精彩推荐