Python五子棋

news/2025/2/7 7:02:45/

一、五子棋

五子棋起源于中国,全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。

五子棋容易上手,老少皆宜,而且趣味横生,引人入胜。它不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

1.导入库:
 

import pygame
import sys
from pygame.locals import QUIT, KEYDOWN
import numpy as np

2.初始化pygame:

pygame.init()
screen = pygame.display.set_mode((670, 670))
screen_color = [238, 154, 73]  # 设置画布颜色,[238,154,73]对应为棕黄色
line_color = [0, 0, 0]  # 设置线条颜色,[0,0,0]对应黑色

3.总代码:

import pygame
import sys
from pygame.locals import QUIT, KEYDOWN
import numpy as np
pygame.init()
screen = pygame.display.set_mode((670, 670))
screen_color = [238, 154, 73]  # 设置画布颜色,[238,154,73]对应为棕黄色
line_color = [0, 0, 0]  # 设置线条颜色,[0,0,0]对应黑色def check_win(over_pos):  mp = np.zeros([15, 15], dtype=int)for val in over_pos:x = int((val[0][0]-27)/44)y = int((val[0][1]-27)/44)if val[1] == white_color:mp[x][y] = 2  else:mp[x][y] = 1 for i in range(15):pos1 = []pos2 = []for j in range(15):if mp[i][j] == 1:pos1.append([i, j])else:pos1 = []if mp[i][j] == 2:pos2.append([i, j])else:pos2 = []if len(pos1) >= 5:  return [1, pos1]if len(pos2) >= 5:return [2, pos2]for j in range(15):pos1 = []pos2 = []for i in range(15):if mp[i][j] == 1:pos1.append([i, j])else:pos1 = []if mp[i][j] == 2:pos2.append([i, j])else:pos2 = []if len(pos1) >= 5:return [1, pos1]if len(pos2) >= 5:return [2, pos2]for i in range(15):for j in range(15):pos1 = []pos2 = []for k in range(15):if i+k >= 15 or j+k >= 15:breakif mp[i+k][j+k] == 1:pos1.append([i+k, j+k])else:pos1 = []if mp[i+k][j+k] == 2:pos2.append([i+k, j+k])else:pos2 = []if len(pos1) >= 5:return [1, pos1]if len(pos2) >= 5:return [2, pos2]for i in range(15):for j in range(15):pos1 = []pos2 = []for k in range(15):if i+k >= 15 or j-k < 0:breakif mp[i+k][j-k] == 1:pos1.append([i+k, j-k])else:pos1 = []if mp[i+k][j-k] == 2:pos2.append([i+k, j-k])else:pos2 = []if len(pos1) >= 5:return [1, pos1]if len(pos2) >= 5:return [2, pos2]return [0, []]def find_pos(x, y): for i in range(27, 670, 44):for j in range(27, 670, 44):L1 = i-22L2 = i+22R1 = j-22R2 = j+22if x >= L1 and x <= L2 and y >= R1 and y <= R2:return i, jreturn x, ydef check_over_pos(x, y, over_pos): for val in over_pos:if val[0][0] == x and val[0][1] == y:return Falsereturn True flag = False
tim = 0over_pos = []
white_color = [255, 255, 255]  
black_color = [0, 0, 0] while True: for event in pygame.event.get():  if event.type in (QUIT, KEYDOWN):sys.exit()screen.fill(screen_color)  for i in range(27, 670, 44):if i == 27 or i == 670-27:  pygame.draw.line(screen, line_color, [i, 27], [i, 670-27], 4)else:pygame.draw.line(screen, line_color, [i, 27], [i, 670-27], 2)if i == 27 or i == 670-27:  pygame.draw.line(screen, line_color, [27, i], [670-27, i], 4)else:pygame.draw.line(screen, line_color, [27, i], [670-27, i], 2)pygame.draw.circle(screen, line_color, [27+44*7, 27+44*7], 8, 0)for val in over_pos: pygame.draw.circle(screen, val[1], val[0], 20, 0)res = check_win(over_pos)if res[0] != 0:for pos in res[1]:pygame.draw.rect(screen, [238, 48, 167], [pos[0]*44+27-22, pos[1]*44+27-22, 44, 44], 2, 1)pygame.display.update() continue  x, y = pygame.mouse.get_pos()x, y = find_pos(x, y)if check_over_pos(x, y, over_pos): pygame.draw.rect(screen, [0, 229, 238], [x-22, y-22, 44, 44], 2, 1)keys_pressed = pygame.mouse.get_pressed() if keys_pressed[0] and tim == 0:flag = Trueif check_over_pos(x, y, over_pos): if len(over_pos) % 2 == 0:  over_pos.append([[x, y], black_color])else:over_pos.append([[x, y], white_color])if flag:tim += 1if tim % 50 == 0: flag = Falsetim = 0pygame.display.update()  

有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。


http://www.ppmy.cn/news/1281701.html

相关文章

Flume采集日志存储到HDFS

1 日志服务器上配置Flume,采集本地日志文件&#xff0c;发送到172.19.115.96 的flume上进行聚合&#xff0c;如日志服务器有多组&#xff0c;则在多台服务器上配置相同的配置 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1# Describe/con…

11-GraalVM元原生时代的Java虚拟机

文章目录 GraalVM诞生的背景Java在微服务/云原生时代的困境事实矛盾 问题根源Java离不开虚拟机 解决方案革命派保守派 GraalVM入门GraalVM特征GraalVM下载和安装GraalVM下载win10安装及配置linux安装及配置 GraalVM初体验(Linux)多语言开发(了解即可、官网有Demo)GraalCompiler…

RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 模型的加载转换

文章目录 一、Caffe 模型加载接口二、TensorFlow 模型加载接口三、TensorFlowLite 模型加载接口四、ONNX 模型加载五、DarkNet 模型加载接口六、PyTorch 模型加载接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 RKNN-Toolkit2 目前支持 Caffe、TensorFlow、Tensor…

vue 项目/备案网页/ip网页打包成 apk 安装到平板/手机(含vue项目跨域代理打包成apk后无法访问接口的解决方案)

下载安装HBuilder X编辑器 https://www.dcloud.io/hbuilderx.html 新建 5APP 项目 打开 HBuilder X&#xff0c;新建项目 此处项目名以 ‘test’ 为例 含跨域代理的vue项目改造 若 vue 项目中含跨域代理&#xff0c;如 vue.config.js module.exports {publicPath: "./&…

用手机做无人直播怎么做?

用手机进行无人直播已经成为了一种新兴的方式&#xff0c;给我们的生活带来了便利和创新。无人直播是指通过手机进行实时转播&#xff0c;而无需人工操作的一种直播形式。以下将介绍如何用手机实现无人直播。 首先&#xff0c;要实现手机无人直播&#xff0c;我们需要一个稳定…

持之以恒-美文美句

年龄不小了做事情老是不能持之以恒&#xff0c;最近突然发现有一件事情坚持了好长时间&#xff0c;每次都能回馈一些美文良句&#xff0c;让人赏心悦目&#xff0c;感觉很有意思这里记录一下 持之以恒&#xff0c;美文积累 二零二三年【兔】&#xff08;农历起止时间2023年1月2…

xxl-job使用笔记

文章目录 xxl-jobXxlJob 和 JobHandler(过时了) 其他报错 msg&#xff1a;job handler [demoJobHandler] not found.git地址 定时任务的实现方式不只一种。 最基础的是spring的Scheduled定时任务&#xff0c;使用简单方便&#xff0c;但是用的多了&#xff0c;有一些确定。 xxl…

一台服务器​最大并发 tcp 连接数多少?65535?

首先&#xff0c;问题中描述的65535个连接指的是客户端连接数的限制。 在tcp应用中&#xff0c;server事先在某个固定端口监听&#xff0c;client主动发起连接&#xff0c;经过三次握手后建立tcp连接。那么对单机&#xff0c;其最大并发tcp连接数是多少呢&#xff1f; 如何标…