python实现简单小游戏_python实现简单井字棋小游戏

#Tic-Tac-Toe 井字棋游戏

#全局常量

X="X"

O="O"

EMPTY=" "

#询问是否继续

def ask_yes_no(question):

response=None;

while response not in("y","n"):

response=input(question).lower()

return response

#输入位置数字

def ask_number(question ,low,high):

response=None

while response not in range(low,high):

response=int(input(question))

return response

#询问谁先走,先走方为X,后走方为O

#函数返回计算机方,玩家的角色代号

def pieces():

go_first=ask_yes_no("玩家你是否先走(y/n):")

if go_first=="y":

print("\n玩家你先走.")

human=X

computer=O

else:

print("\n计算机先走.")

computer=X

human=O

return computer,human

#产生新的棋盘

def new_board():

board=[]

for square in range(9):

board.append(EMPTY)

return board

#显示棋盘

def display_board(board):

board2=board[:]

for i in range(len(board)):

if board[i]==EMPTY:

board2[i]=i

print("\t",board2[0],"|",board2[1],"|",board2[2])

print("\t","----------")

print("\t",board2[3],"|",board2[4],"|",board2[5])

print("\t", "----------")

print("\t",board2[6],"|",board2[7],"|",board2[8],"\n")

#产生可以合法走棋位置序列(也就是还未下过子位置)

def legal_moves(board):

moves=[]

for square in range(9):

if board[square]==EMPTY:

moves.append(square)

return moves

#判断输赢

def winner(board):

# 所有赢得可能情况,例如(0,1,2)就是第一行,(0,4,8,),(2,4,6)就是对角线

WAYS_TO_WIN=((0,1,2,),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))

for row in WAYS_TO_WIN:

if board[row[0]]==board[row[1]]==board[row[2]]!=EMPTY:

winner=board[row[0]]

return winner

#棋盘没有空位置

if EMPTY not in board:

return "TIE"

return False

#人走棋

def human_move (board,human):

legal =legal_moves(board)

move =None

while move not in legal:

move=ask_number("你走那个位置?(0-8):",0,9)

if move not in legal:

print("\n此位置已经落过子了")

#print("Fine...")

return move

#计算机走棋

def computer_move(board,computer ,human):

board=board[:]

#按优劣顺序排序的下棋走子

BEST_MOVES=(4,0,2,6,8,1,3,5,7) #最佳下棋位置顺序表

#如果计算机能赢,就走那个位置

for move in legal_moves(board):

board[move]=computer

if winner(board)==computer:

print("计算机下棋位置...",move)

return move

#取消走棋方案

board[move]=EMPTY

#如果玩家能赢就堵住那个位置

for move in legal_moves(board):

board[move]=human

if winner(board)==human:

print("计算机下棋位置...",move)

return move

#取消走棋方案

board[move]=EMPTY

#如果不是上面情况,也就是这一轮赢不了

#则是从最佳下棋位置表中挑出第一个合法位置

for move in BEST_MOVES:

if move in legal_moves(board):

print("计算机下棋位置....",move)

return move

#转换角色

def next_turn(turn):

if turn ==X:

return O

else:

return X

#主函数

def main():

computer,human=pieces()

turn =X

board=new_board()

display_board(board)

while not winner(board):

if turn ==human:

move=human_move(board,human)

board[move]=human

else:

move=computer_move(board,computer,human)

board[move]=computer

display_board(board)

turn=next_turn(turn) #转换角色

#游戏结束输出输赢或和棋信息

the_winner=winner(board)

if the_winner==computer:

print("计算机赢!\n")

elif the_winner==human:

print("玩家赢!\n")

elif the_winner=="TIE":

print("平局,游戏结束\n")

main()

input("按任意键退出游戏")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ sort()排序详解

点击蓝字关注我们来源自网络,侵删一.sort()简介1.为什么选择使用sort()我们经常会碰到排序的问题,如果我们不使用一些排序的方法那我们只能手撕排序,这样就会浪费一些时间。而且我们还需要根据需要去选择相关的排序方法:冒泡排序、…

java尾行注释有什么不好_注释不好吗?

java尾行注释有什么不好那天,我在有关Spring XML与注释的文章中运用了自己的原则,轻松进入了这个主题。 对于目前正在编写此新应用程序的团队来说,这种简单的输入方式也是我不使事情复杂化的方式,该应用程序的生产寿命可能为3-5年…

python输出结果为none_python的reverse函数翻转结果为None的问题

今天刷二级题的时候,遇到一个问题>>> L2[1,2,3,4]>>> L3L2.reverse()>>> print( L3)None>>> print(L3)None>>> print(L2.reverse())None其实我想让它输出[4,3,2,1]reverse函数,翻转列表然后我改了一下>…

性能测试流程_流性能

性能测试流程当我阅读Angelika Langer的Java性能教程时-Java 8流有多快? 我简直不敢相信,对于一个特定的操作,它们花费的时间比循环要长15倍。 流媒体性能真的会那么糟糕吗? 我必须找出答案! 巧合的是,我最…

C++vector用法总结

点击蓝字关注我们来源自网络,侵删一.vector1. vector 说明1)vector是C标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。2.)vector之所以被认为是一个容器,是因为它能…

python中创建集合的语句_Python 集合(set) 介绍

集合 set集合是可变的容器集合内的数据对象都是唯一的(不能重复多次的)集合是无序的存储结构,集合中的数据没有先后关系集合内的元素必须是不可变对象集合是可迭代对象(可以用for等遍历)集合是相当于只有键,没有值的字典(键则是集合的数据)创建空集合&am…

C++ STL 线性容器的用法

点击蓝字关注我们来源于网络,侵删1.vectorvector 是顺序容器的一种,是可变长的动态数组,支持随机访问迭代器,所有stl算法都能对 vector 进行操作。vector 容器在实现时,动态分配的存储空间一般都大于存放元素所需的空间…

redis复制_Redis复制

redis复制本文是我们学院课程的一部分,标题为Redis NoSQL键值存储 。 这是Redis的速成课程。 您将学习如何安装Redis和启动服务器。 此外,您还会在Redis命令行上乱七八糟。 接下来是更高级的主题,例如复制,分片和集群&#xff0c…

python打开.data_DataX初体验-python命令启动以及纯java启动

一、DataX安装官网描述很详细,很简单---->DataX安装二、使用示例:从Oracle数据库导数据到Mysql数据库事先准备:Oracle数据库的ORDER_INFO表,MySQL数据库的order_info表,表结构相同2.1使用Python启动生成模板文件打开…

java高级教程_高级Java教程

java高级教程课程大纲 学习Java基础很容易。 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员。 网络上充斥着“软”,“便宜”,“低端” Java教程,但是所缺少的实际上是将您带入新的高度的材…

JavaWeb笔记之WEB项目

一. 版本控制 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。 版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变&a…

c++获取数组长度

点击蓝字关注我们来源于网络&#xff0c;侵删方法一&#xff1a; 用宏函数 #define#define foo(arr) sizeof(arr)/sizeof(arr[0])int main(){int arr[4] {1,2,3,4};cout<<foo(arr)<<endl; }方法二&#xff1a;用函数模板int getArrLen1(int *a ){return sizeof(a)…

python从列表随机取出多个数据_【python】从数组随机取数据

在神经网络中&#xff0c;经常会用到批量样本训练。我们需要从数组随机取数据&#xff0c;主要有以下几种方法&#xff1a;1、np.random.shuffle&#xff1a;将原数组打乱import numpy as nparray np.random.randint(1,100,size10)#[63 32 80 33 61 45 28 55 39 80]batch_size…

java代理模式_Java代理

java代理模式本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的旅程&#xff01; 在这里查看 &#xff01;…

如何用python抢课_名额不够,技术来凑,利用Python实现教务系统强制性抢课

这个不是一个点击脚本&#xff0c;而是属于扩容性质的脚本。名额不够咱们利用技术来解决&#xff01;最近一学期一次的抢课大戏又来了&#xff0c;几家欢乐几家愁。O(∩_∩)O哈哈~(l我每次一选就过了hah&#xff0c;我还是有欧的时候滴)。看着他们盯着教务系统就着急&#xff0…

C++ 利用硬件加速矩阵乘法

点击蓝字关注我们来源于网络&#xff0c;侵删1.矩阵乘法定义2.矩阵类封装我们用 C封装了一个n m 的矩阵类&#xff0c;用二维数组来存储数据&#xff0c;定义如下&#xff1a;#define MAXN 1000 #define LL __int64class Matrix { private:int n, m;LL** pkData; public:Matri…

redis分片_Redis分片

redis分片本文是我们学院课程的一部分&#xff0c;标题为Redis NoSQL键值存储 。 这是Redis的速成课程。 您将学习如何安装Redis和启动服务器。 此外&#xff0c;您还会在Redis命令行上乱七八糟。 接下来是更高级的主题&#xff0c;例如复制&#xff0c;分片和集群&#xff0c…

python tkinter窗口切换_tkinter--实现简单的页面切换

[Python] 纯文本查看 复制代码import tkinter as tkindex_num 4def up_page():info frame_root.place_info()x int(info[x]) 100y info[y]frame_root.place(xx, yy)global index_numindex_num 1index[text] "第 {} 页".format( index_num)def down_page():inf…

解析C++全排列

点击蓝字关注我们来源于网络&#xff0c;侵删1.C实现全排列的函数next_permutation(start,end)这个函数在暴力解决问题方面有很大作用&#xff0c;使用时需要引入头文件 < algorithm >&#xff0c;当当前序列不存在下一个序列时就会结束&#xff0c;若想得到一个序列的全…

python读写文件代码_Python 读写文件的操作代码

Python读写文件模式1、r 打开只读文件&#xff0c;该文件必须存在。2、r 打开可读写的文件&#xff0c;该文件必须存在。3、w 打开只写文件&#xff0c;若文件存在则文件长度清为0&#xff0c;即该文件内容会消失。若文件不存在则建立该文件。4、w 打开可读写文件&#xff0c;若…