python實現尼姆遊戲

2022-09-22 00:48:07 字數 3567 閱讀 3486

尼姆遊戲,這是乙個著名的遊戲,有很多變種玩法。兩個玩家輪流從一堆物品中拿走一部分。在每一步中,玩家可以自由選擇拿走多少物品,但是必須拿走一部並且最多只能拿走一半物品,然後輪到下乙個玩家。拿走最後乙個物品的玩家輸掉遊戲。先手隨機。

#/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('%shzuqup已取走%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 fihzuquprst==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)

prin程式設計客棧t('﹊'*21)

print(('%s輸了!'%first).rjust(20))

print('﹊'*21)

本文標題: python實現尼姆遊戲

本文位址:

Python 尼姆遊戲 人機對戰

實驗目的 實驗內容 n 目的數運算元x n目的數 運算元x11 失敗17152 21118 1533 ran19154 43120 15553 221156 63322 1577 ran23158 87124 15997 2251510107 3261511117 4271512127 528151...

python 聰明的尼姆遊戲

兩個玩家輪流從一堆物品中拿走一部分,在每一步中,玩家可以自由選擇拿走多少物品,但是必須至少拿走乙個並且最多只能拿走一半物品,然後輪到下乙個玩家。拿走最後乙個物品的玩家輸掉遊戲。在聰明模式中,計算機每次拿走足夠多的物品使得堆的大小是2 的冪次方減1 也就是3,7,15,31 或63。除了堆的大小已經是...

取石子遊戲之尼姆博弈

尼姆博弈 有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝 這種情況與二進位制有著很大的關係,我們用 a,b,c 來表示某種局勢,那麼 0,0,0 必然為奇異局勢,最後乙個面對這個局勢的必敗。0,n,n 也是種奇異局勢。因為如果對手在其中一堆取m個石...