编写五子棋的完整python代码_python实现五子棋游戏

本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下

话不多说,直接上代码:

全部工程文件,在GitHub:五子棋

效果预览:

201961884227276.jpg?20195188431

#!/usr/bin/env python3

#-*- coding:utf-8 -*-

import pygame

from pygame.locals import *

from sys import exit

import numpy

background_image = 'qipan.png'

white_image = 'white.png'

black_image = 'black.png'

def WhoWin(x,y,darray):

num1,num2,num3,num4 = 0,0,0,0

#判断上下左右左上右上左下右下8个方向

i = x-1

while(i>=0):

if darray[i][y] == 1:

num1+=1

i -= 1

else:

break

i = x+1

while i= 0):

if darray[x][j] == 1:

num2 += 1

j -= 1

else:

break

j = y + 1

while j < 19:

if darray[x][j] == 1:

num2 += 1

j += 1

else:

break

i,j = x-1,y-1

while(i>=0 and j>=0):

if darray[i][j] == 1:

num3 += 1

i -= 1

j -= 1

else :

break

i, j = x + 1, y + 1

while (i < 19 and j < 19):

if darray[i][j] == 1:

num3 += 1

i += 1

j += 1

else:

break

i, j = x + 1, y - 1

while (i >= 0 and j >= 0):

if darray[i][j] == 1:

num4 += 1

i += 1

j -= 1

else:

break

i, j = x - 1, y + 1

while (i < 19 and j < 19):

if darray[i][j] == 1:

num4 += 1

i -= 1

j += 1

else:

break

#五子胜

if num1>=4 or num2>=4 or num3 >= 4 or num4 >= 4:

return True

else:

return False

#初始化

pygame.init()

#屏幕、背景图、白黑子转换

screen = pygame.display.set_mode((584, 584), RESIZABLE, 32)

background = pygame.image.load(background_image).convert()

white = pygame.image.load(white_image).convert_alpha()

black = pygame.image.load(black_image).convert_alpha()

#标题画图字体

screen.blit(background, (0,0))

font = pygame.font.SysFont("arial", 40);

pygame.display.set_caption('五子棋')

#zeros()返回19行19列的数组

white_luodian = numpy.zeros((19,19))

black_luodian = numpy.zeros((19,19))

#设置棋盘的所有点的坐标

qipan_list = [(30+i*29-12,30+j*29-12) for i in range(19) for j in range(19)]

#默认黑子先手,转换下棋

transW_B = True

#游戏主循环

while True:

for event in pygame.event.get():

if event.type == QUIT:

exit()

if event.type == MOUSEBUTTONDOWN:

x,y = pygame.mouse.get_pos()

if 30 <= x <= 554 and 30 <= y <= 554 and ((x - 30) % 29 = 17) and (

(y - 30) % 29 = 17):

#四舍五入

m = int(round((x-30)/29))

n = int(round((y-30)/29))

#结果分析

if transW_B:

transW_B = not transW_B

screen.blit(black, qipan_list[19*m+n])

black_luodian[n][m] = 1

if WhoWin(n,m,black_luodian):

screen.blit(font.render('Black chess player wins!', True, (0, 0, 0),(0,229,238)), (120, 280))

else:

transW_B = not transW_B

screen.blit(white, qipan_list[19 * m + n])

white_luodian[n][m] = 1

if WhoWin(n,m,white_luodian):

screen.blit(font.render('White chess player wins!', True, (255, 255, 255),(0,229,238)), (120, 280))

qipan_list[19*m+n] = ''

pygame.display.update()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

相关文章

服务器网站显示多协议,解决高防IIS8服务器https协议多个同时访问的解决方法

iis提示:至少一个其他网站正在使用同一个https绑定&#xff0c;而次绑定用另一个证书配置。确实要重用https绑定并将其他网站重新指定为使用新证书吗&#xff1f;网友解释&#xff1a;SNI指是一项用于改善SSL/TLS的技术&#xff0c;在SSLv3/TLSv1中被启用。它允许客户端在发起S…

如何计算实际物理地址?

1.确认物理地址&#xff1a; 2.由逻辑地址的页号去页表中查找对应的物理内存的页号 3.通过物理页号加上偏移量得到实际物理地址 例如&#xff1a;已知每页大小为1024byte&#xff08;逻辑页表和实际内存分页的大小都是1024byte&#xff09; 那么&#xff08;3,1023&#xf…

python高效处理文件_使用Python语言高效地处理一个文本文件

使用Python语言高效地处理一个文本文件&#xff1a; # -- encoding: utf-8 -- # 脚本功能&#xff1a;在指定的文件中查找指定的字符串 # 此脚本接受两个参数 # 参数1&#xff1a;指定一个文件名&#xff0c;在这个文件中查找字符串 # 参数2&#xff1a;指定一个字符串用于查找…

zabbix加vm虚拟服务器,zabbix监控vmware exsi主机的图文步骤

1、进入虚拟化vcenter中&#xff0c;用浏览器登录(客户端没找到地方设置)&#xff0c;新建一个只读用户zabbix。2、 登录vcenter客户端,将新建用户授权为只读授权过后可以使用新账号登录测试一下。3、开启exsi主机Managed Object Browser (MOB)功能&#xff0c;没有就默认开着的…

服务器开设虚拟主机,服务器自动开设虚拟主机

服务器自动开设虚拟主机 内容精选换一换Linux操作系统XEN实例变更为KVM实例前&#xff0c;必须已完成必要的驱动安装和配置。当您需要变更的Linux操作系统的XEN实例比较多时候&#xff0c;推荐您使用本节的批量自动配置的方法安装驱动&#xff0c;通过自动化脚本的方式批量为Li…

服务器c的环境配置文件,配置linux服务器环境(jdk+tomcat+mysql+nginx+redis+svn+nexus的maven私服)...

一.安装jdk&#xff1a;1.远程连接工具我用的是xshell6&#xff1b;切换到root用户2.创建安装目录&#xff1a;创建安装目录3.将jdk上传到目录下&#xff0c;并解压&#xff1a;上传文件解压tar zxvf jdk-8u191-linux-x64.tar.gz文件解压后4.修改配置文件&#xff1a;vim /etc/…

Android studio如何写滚动视图

在布局文件里面的布局改为ScrollView&#xff08;垂直滚动&#xff09; 但是要注意&#xff0c;ScrollView只允许一个子元素&#xff0c;需要用一个LinearLayout嵌套作为它的子元素使用 加入后就有滚动效果了 还有一个是水平滚动 HorizontalScrollView

springboot启动_Spring boot启动原理解析

作者&#xff1a;平凡希链接&#xff1a;https://www.cnblogs.com/xiaoxi/p/7999885.html我们开发任何一个Spring Boot项目&#xff0c;都会用到如下的启动类SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringAppli…

把一个dataset的表放在另一个dataset里面_现在开始:用你的Mac训练和部署一个图像分类模型...

可能有些同学学习机器学习的时候比较迷茫&#xff0c;不知道该怎么上手&#xff0c;看了很多经典书籍介绍的各种算法&#xff0c;但还是不知道怎么用它来解决问题&#xff0c;就算知道了&#xff0c;又发现需要准备环境、准备训练和部署的机器&#xff0c;啊&#xff0c;好麻烦…

Android studio的布局总结

首先我们的安卓的页面实际上的组件就是需要一些东西控制住他们 这些东西是什么呢&#xff0c;叫做布局管理器&#xff0c;一开始的开发中有常用的5款布局管理器 下面我来一一介绍其中的功能和一些关键字属性 1.relativelayout 相对布局管理器 属性&#xff1a;android:gra…

安装redis提示[test] error 2_安装PHP Redis扩展

安装PHP Redis扩展1、查看本机已经安装的Redis版本brew info redisredis: stable 5.0.7 (bottled), HEAD Persistent key-value database, with built-in net interface https://redis.io//usr/local/Cellar/redis/5.0.7 (13 files, 3.1MB) * Poured from bottle on 2020-02-19…

Android studio的监听器初学者要懂

首先&#xff0c;什么是监听器呢&#xff1f;监听器的作用是什么呢&#xff1f;我们如何去使用他&#xff1f; 1.什么是监听器&#xff1a;监听器的作用是什么呢&#xff1f; 监听器顾名思义&#xff0c;一旦你的按钮或者其他组件被你用例如鼠标点击&#xff0c;就会产生一个…

zincrby redis python_【Redis数据结构 序】使用redis-py操作Redis数据库

想要看更加舒服的排版、更加准时的推送关注公众号“不太灵光的程序员”每日八点有干货推送同时发布《【Redis数据结构 1序】1使用redis-py操作Redis数据库》本文依旧会对学习内容进行拆分&#xff0c;建议阅读时间基本保持10分钟内&#xff0c;想学习之前章节内容点击《你不了解…

Android studio的UI组件

1.文本框组件 掌管文字大小&#xff0c;文字来源&#xff0c;文字是否以行的形式显示&#xff0c;对齐方式居中 9patch图片拉伸不变形&#xff0c;需要放在drawable中 <TextViewandroid:layout_width"wrap_content"android:layout_height"wrap_content"…

visual paradigm 表示选择关系_知识获取的新挑战—远程监督关系抽取

本文主要介绍远程监督关系抽取任务上两个最新的工作。远程监督&#xff08;Distantly Supervised&#xff09;是关系抽取&#xff08;Relation Extraction&#xff09;的一种主要实现方法。关系抽取是指获得文本中的三元组&#xff08;triple&#xff09;&#xff0c;包括实体对…

Android studio的Activity详解

Activity就相当于我们的手机界面&#xff0c;里面包含着各个组件 Activity 的4种状态 运行状态&#xff1a;屏幕可视&#xff0c;且可以进行操作 暂停状态&#xff1a;返回退出的时候&#xff0c;询问是否退出运行状态&#xff0c;此时属于暂停状态 ------------------------…

arraylist 的扩容机制_每天都用ArrayList,你读过它的源码么?

作者&#xff1a;陌北有棵树&#xff0c;玩Java&#xff0c;架构师社区合伙人&#xff01;【一】关于扩容如果没有指定初始容量&#xff0c;则设置为10/** * Default initial capacity. */private static final int DEFAULT_CAPACITY 10;ArrayList的扩容比较简单&#xff0c;容…

JAVA入门级教学之(IDEA工具的快捷键和简单设置)

1.字体font file-->settings-->输入font-->设置字体样式以及字号大小 2.快速生成main方法 psvm 3.快速输出Systm.out.println(); sout 4.删除一行 ctrly 5.怎么运行 代码删右键run 或者点击右上角箭头 shiftf10(不同电脑可能不一样) 6.左侧窗口中的列表怎么展开…

java selenium_selenium 常见面试题以及答案(Java版)

1.怎么 判断元素是否存在&#xff1f;判断元素是否存在和是否出现不同&#xff0c; 判断是否存在意味着如果这个元素压根就不存在&#xff0c; 就会抛出NoSuchElementException这样就可以使用try catch&#xff0c;如果catch到NoSuchElementException 就返回false2.如何判断元素…

关于HTML的盒子的一些小问题

最近在开发的时候发现一个小问题&#xff0c;<DIV>我们很熟悉的一个盒子元素 关于他的描述 1.按照我们正常人的思维逻辑 编写好一个DIV盒子&#xff0c;然后再在盒子里面添加边框border、内边距padding、内容&#xff0c;这是我们的思维逻辑 但是DIV的编写会随着你添加…