五子棋Python源代码

article/2025/8/18 7:20:22

图形化界面

库:numpy,pygame

效果:

源代码:

#调用pygame库
import pygame
import sys
#调用常用关键字常量
from pygame.locals import QUIT,KEYDOWN
import numpy as np
#初始化pygame
pygame.init()
#获取对显示系统的访问,并创建一个窗口screen
#窗口大小为670x670
screen = pygame.display.set_mode((670,670))
screen_color=[238,154,73]#设置画布颜色,[238,154,73]对应为棕黄色
line_color = [0,0,0]#设置线条颜色,[0,0,0]对应黑色
white_color=[255,255,255]#白棋颜色
black_color=[0,0,0]#黑棋颜色
pygame.mixer.init()
pygame.mixer.music.load("bg 音乐(BgMusic)_爱给网_aigei_com.mp3")
pygame.mixer.music.play(-1)#背景音乐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 False#表示已落子if x not in range(27, 670, 44) or y not in range(27, 670, 44):#判断棋子是否出界return Falsereturn True#表示没有落子def showFont(screen, text, location_x, locaiton_y, height):#显示出胜利方胜利的字样font = pygame.font.SysFont(None, height)font_image = font.render(text, True, (255, 215, 0), (255, 255, 255))  # 金黄色font_image_rect = font_image.get_rect()font_image_rect.x = location_xfont_image_rect.y = locaiton_yscreen.blit(font_image, font_image_rect)flag=False
tim=0#计时
p = 0#判断的标志over_pos=[]#表示已经落子的位置while True:#不断训练刷新画布for event in pygame.event.get():#获取事件,如果鼠标点击右上角关闭按钮,关闭if event.type == QUIT: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:#如果五子连心p += 1for pos in res[1]:#用金黄色矩形框框出五子连心的五个棋子pygame.draw.rect(screen,[255,215,000],[pos[0]*44+27-22,pos[1]*44+27-22,44,44],6,1)if len(over_pos)%2==0:#如果白棋胜str = 'White Wins!'#显示的字样else:str = 'Black Wins!'win_x = 27+1.5*44#显示胜利字样在画布上的位置win_y = 27+2*44win_size = 120#胜利字样的大小showFont(screen, str, win_x,win_y,win_size)  # 居上中,字号120pygame.mouse.set_visible(True)#返回光标在调用该方法之前的可视化情况pygame.display.update()#刷新显示if p==1:#当判断值p=1时bg_music4 = pygame.mixer.Sound("win_爱给网_aigei_com.mp3")#播放胜利的音乐bg_music4.play()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,[255,255,255],[x-22,y-22,44,44],2,1)#如果可以落子,则显示白色的框框keys_pressed = pygame.mouse.get_pressed()#获取鼠标按键信息#鼠标左键表示落子,tim用来延时的,因为每次循环时间间隔很断,容易导致明明只按了一次左键,却被多次获取,认为我按了多次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])bg_music3 = pygame.mixer.Sound("检查(check)_爱给网_aigei_com.mp3")#播放落子时的音效bg_music3.play()#鼠标左键延时作用if flag:tim+=1if tim%50==0:#延时200msflag=Falsetim=0pygame.display.update()#刷新显示

http://www.hkcw.cn/article/YQhjUcHjFk.shtml

相关文章

Ubantu 20.04 安装 Mujoco210、mujoco-py、gym及报错解决

1. 安装Mujoco 1.1 官网下载Mujoco210安装包 Mujoco2.1.0下载链接 选第一个 1.2 创建文件夹并解压安装包 mkdir ~/.mujoco创建好后&#xff0c;点击显示隐藏文件可以找到 找到刚刚下载的压缩包所在位置&#xff08;一般在下载目录下&#xff09;&#xff0c;右键选择 在终…

CUDA重大更新:原生Python可直接编写高性能GPU程序

NVIDIA 在2025年GTC大会上宣布了一项具有里程碑意义的技术更新&#xff1a;CUDA并行计算平台正式支持原生Python编程。这一突破性进展将消除Python开发者进入GPU加速计算领域的主要技术壁垒&#xff0c;无需再依赖C/C语言作为中介。 此次更新意味着数千万Python开发者现在可以…

Python的pandas库基础知识(超详细教学)

目录 一、配置环境 二、序列和数据表 2.1 初始化 2.2 获取数值 2.3 获取索引 2.4 索引取内容 2.5 索引改变取值 2.6 字典生成序列 2.7 计算取值出现次数 2.8 数据表 2.9 数据表添加新变量 2.10 获取列名 2.11 根据列名获取数据 2.12 输出固定行 2.13 输出多行…

男子把矿泉水带到高原一觉醒来大变样 当地的水就没事

男子把矿泉水带到高原,一觉醒来大变样,当地的水就没事!矿泉水被带到高原后出现的物理变化主要与高原环境的气压和温度条件有关,具体表现如下:1.瓶体膨胀现象高原地区平均气压仅为平地的60%-70%,密封瓶装水在运输过程中因外部气压骤降,内部气体体积膨胀导致瓶身变形,可能…

年轻人,花1000多亿干这个!押注谷子经济

年轻人,花1000多亿干这个!押注谷子经济。“六一”前夕,义乌国际商贸城一区内,印着动漫主人公的巨幅海报已经换上,最新的盲盒、徽章以及各种周边好物被摆在了最显眼的位置。2000多家玩具批发商户汇聚于此,谷子浓度越来越高。“谷子”由英文“Goods”音译而来,这个词囊括了…

“端午躲好午,不愁没好运”怎么躲午? 五种方法保平安

“端午躲好午,不愁没好运”怎么躲午? 五种方法保平安!艾旗迎百福,蒲剑斩千邪。今年的端午节比往年早一些,大街小巷已经有很多售卖艾蒿的商贩。端午节是中国传统的四大佳节之一,有着悠久的历史和丰富的文化习俗。进入农历五月后,阳光变得炙热,雨水增多,这个时节是各种毒…

基于python合成100X100的透明背景图片和图标

一、实现思路 1. 加载图像 使用 Image.open() 加载图标图像。 Image.new() 创建一个新的透明背景图像。 2. 调整大小 使用 resize() 方法调整图标图像的大小&#xff0c;确保它不会超过背景图像的一半大小。这里使用 Image.Resampling.LANCZOS 作为过滤器&…

新能源电池壳冲压车间看板实施

车间漫游 这个厂区就一个车间&#xff0c;面积还好&#xff0c;但是被机器和仓库区的产品塞得满满当当。我观察车间布局&#xff0c;为了出货方便&#xff0c;仓库区就在大门旁&#xff0c;叉车到门口货车的转运很快速方便。到车间后&#xff0c;对接人还没来&#xff0c;我们…

秋招Day10 - JVM - 内存管理

JVM组织架构主要有三个部分&#xff1a;类加载器、运行时数据区和字节码执行引擎 类加载器&#xff1a;负责从文件系统、网络或其他来源加载class文件&#xff0c;将class文件中的二进制数据加载到内存中运行时数据区&#xff1a;运行时的数据存放的区域&#xff0c;分为方法区…

茅台经销商被罚后起诉市监局续:法院重审一审撤销处罚决定

“贵州茅台经销商被罚后起诉市监局”一案近日有了最新进展。澎湃新闻从当事人及其代理律师处了解到,贵州省都匀市人民法院日前对该案作出重审一审判决,认定案涉处罚决定适用法律错误、程序违法,决定撤销黔南州市场监督管理局此前作出的行政处罚决定。澎湃新闻此前报道,郭亮…

花生壳里塞冰淇淋卖28一个 真果壳制成引争议

花生壳里塞冰淇淋卖28一个 真果壳制成引争议!近日,一位女子发布视频称,在苏州一家餐厅遇到了价格高昂的冰淇淋。她提到,一份装在花生壳里的冰淇淋售价28元,分量却少得惊人。尽管服务员会帮忙切开,仪式感十足,但她认为并不值这个价格。记者随后走访了位于苏州市姑苏区美罗…

严重或可能导致死亡!不要空腹吃荔枝 了解“荔枝病”真相

最近,话题#荔枝病突然成为热门话题。广东一名女子因过量食用荔枝后,次日出现头晕不适、持续性鼻出血等症状,最终被诊断为“荔枝病”。科普博主表示,此病严重时会引发休克甚至死亡。荔枝病也称为低血糖急性脑炎综合征,发病人群以4至11岁的儿童较为多见。一旦发生,会导致人…

工信部曝光:“腾讯支付”有诈!冒名诈骗需警惕

工信部反诈专班近日发布消息称,有用户举报发现了一款名为“腾讯支付”的理财APP。经与腾讯官方核实,这款APP并非大众熟知的“微信支付”。实际上,微信支付仅支持在微信应用内使用,并没有独立的APP。所谓的“腾讯支付”APP冒充腾讯集团名义,恶意使用腾讯名称,虚构腾讯股权…

郑州最长寿奶奶根本闲不住:我115岁,成大人了

5月28日河南新密,“我115岁,成大人了!”郑州最长寿奶奶根本闲不住,推车散步,眼神好,能爬4楼,还爱洗碗。70岁小女儿:每次回家喊一声妈,很幸福。责任编辑:zx0002

男子家暴被捕后与弟弟弟媳造假借条起诉妻子追债 三人因虚假诉讼被判刑

被丈夫殴打导致4根肋骨骨折后,刘颖报了警,并向法院起诉离婚。而丈夫的弟弟也起诉了她——要她偿还三百多万“债务”。几年下来,刘颖和丈夫的“夫妻官司”牵涉了离婚案、故意伤害案、民间借贷案。其后,刘颖的丈夫李某涛,以及他的弟弟、弟媳三人,均被湖南邵阳的一审法院以虚…

HTML 计算网页的PPI

HTML 计算网页的PPI vscode上安装live server插件&#xff0c;可以实时看网页预览 有个疑问&#xff1a; 鸿蒙density是按照类别写死的吗&#xff0c;手机520dpi 折叠屏426dpi 平板360dpi <html lang"en" data - overlayscrollbars - initialize><header&…

Axure RP11安装、激活、汉化

一:注册码 Axure RP11.0.0.4122在2025-5-29日亲测有效: 49bb9513c40444b9bcc3ce49a7a022f9

300斤巨石砸中汽车 司机幸运逃生 地质灾害点雨后落石

300斤巨石砸中汽车 司机幸运逃生 地质灾害点雨后落石!5月28日,贵州毕节市七星关区何官屯镇一条通村公路上发生落石事故。一块约300斤重的巨石砸中一辆过路汽车,导致车辆从路边高坎坠落。司机受轻伤,送医检查后当日返回家中,车损由保险公司处理。落石还击碎了附近民房的玻璃…

高校校长论文抄袭复制比高达90%?校方:属实,免职

近日,“烟台科技学院校长硕士论文涉嫌严重抄袭”一事引发社会广泛关注。5月29日,烟台科技学院就有关情况发布声明:经查核,情况属实。学校董事会研究决定,免去马红坤烟台科技学院校长职务。据媒体此前报道,马红坤2007年在南昌大学法学院获得硕士学位的论文涉嫌严重抄袭,复…

油价将调整!92号汽油或重返“7元时代” 猪价波动影响市场情绪

油价将调整!92号汽油或重返“7元时代” 猪价波动影响市场情绪!五月渐入尾声,生猪市场数据显示,月内猪价呈现波动走低的趋势。5月1日标猪报价为14.82元/公斤,2-3号稳定在14.85元/公斤,但从5月4日起,价格盘整在14.79~14.82元/公斤之间。进入中旬后,猪价降幅逐渐扩大,至5…