pygame从入门到放弃(一)

首先pip 那个pygame;
然后看代码;
临时写的,图片就不插了(防止舍友砍我,现在是凌晨。。。。)
[TOC]

井字棋游戏

# 此代码基本能立于不败之地;
import random
#可视化输出
def draw_Board(board):
    print('-----------')
    print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
    print('-----------')
    print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
    print('-----------')
    print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
    print('-----------')
#输入选择符号
def input_Player_Letter():
    letters = ''
    while not (letters == 'X' or letters == 'O'):
        print('Do you want to be X or O?')
        letters = input().upper()
    if letters == 'X':return ['X','O']
    else:return ['O','X']
#谁先?
def who_Goes_First():
    if random.randint(0, 1) == 0:
        return 'computer'
    else: return 'player'
#是否再来一次?
def play_Again():
    print('Do you want to play again?(yes or no?)')
    return input().lower().startswith('y')
#下子
def make_Move(board, letter, move):
    board[move] = letter
#判断是否有获胜者
def is_Winner(bo, le):
    return ((bo[7] == bo[8] == bo[9] == le) or
            (bo[4] == bo[5] == bo[6] == le) or
            (bo[1] == bo[2] == bo[3] == le) or
            (bo[7] == bo[4] == bo[1] == le) or
            (bo[8] == bo[5] == bo[2] == le) or
            (bo[9] == bo[6] == bo[3] == le) or
            (bo[7] == bo[5] == bo[3] == le) or
            (bo[1] == bo[5] == bo[9] == le))
#复制表盘测试
def get_Board_Copy(board):
    dupe_Board = []
    for i in board:
        dupe_Board.append(i)
    return dupe_Board
#判断位置是否为空
def is_Space_Free(board,move):
    return board[move] == ' '
#选手下棋
def get_Player_Move(board):
    move = ' '
    while move not in '1 2 3 4 5 6 7 8 9'.split() or not is_Space_Free(board,int(move)):
        print('What is your next move?')
        move = input()
    return int(move)
#随机下棋
def choose_Random_Move_From_List(board, movesList):
    possibleMoves = []
    for i in movesList:
        if is_Space_Free(board, i):
            possibleMoves.append(i)
    if len(possibleMoves ) != 0 :
        return random.choice(possibleMoves)#随机返回
    else:
        return None ##不在此中下棋
#简易AI
def get_Computer_Move(board, computerLetter):
    if computerLetter == 'X':
        playerLetter = 'O'
    else :playerLetter = 'X'
#是否有胜利的一步
    for i in range(1,10):
        copy = get_Board_Copy(board)
        if is_Space_Free(copy, i):
            make_Move(copy, computerLetter, i)
            if is_Winner(copy, computer_Letter):
                return i
#阻止选手胜利
    for i in range(1,10):
        copy = get_Board_Copy(board)
        if is_Space_Free(copy, i):
            make_Move(copy, player_Letter, i)
            if is_Winner(copy, player_Letter):
                return i
#占中间的
    if is_Space_Free(board, 5):
        return 5
#选角落不易输
    move = choose_Random_Move_From_List(board, [1,3,7,9])
    if move != None:
        return move
#别无后路
    return choose_Random_Move_From_List(board, [2, 4, 6, 8])
#判断棋盘是否满
def is_Board_Full(board):
    for i in range(1, 10):
        if is_Space_Free(board, i):
            return
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值