用Python怎么写一个五子棋游戏,完整过程是怎样
Admin 2022-06-16 群英技术资讯 744 次浏览
在实际应用中,我们有时候会遇到“用Python怎么写一个五子棋游戏,完整过程是怎样”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“用Python怎么写一个五子棋游戏,完整过程是怎样”文章能帮助大家解决问题。本文实例为大家分享了Python实现五子棋小游戏的具体代码,供大家参考,具体内容如下
pygame、pyautogui
1.画棋盘
设置网格间隔40px ,留白 80 px ,与网格横竖线数量 ,初定19 × 19 。
2.鼠标点击
鼠标点击取得坐坐标(x0 , y0),再获得最近的网格上的点(x1 , y1),再将每次动作获得的(x1 , y1 )放入列表 chess_location 中。
再通过:
chess_location_b = chess_location[0::2] chess_location_w = chess_location[1::2]
分别获得黑棋和白棋所走过的坐标。
3.判断胜负
这一块网上有很多不同的方法,我为了让大家读懂尽量写的详细了。
首先 ,我们要知道连五有四个方向:竖直 ,水平 ,右上左下 , 右下左上 。
每次将新落下的子分别进行4个方向的判断,判断是否出现连五及以上。
我使用的方法是:
def result(x): # x 为 chess_location_b 或者 chess_location_w
# 竖直
score = []
for i in range(cell_num): #cell_num = 19
if [x[-1][0], i ] in x:
score.append([x[-1][0], i ])
if score.__len__() >= 5:
return 1
else:
score =[]
大概意思就是最新落下的(x1 , y1)中的竖直方向从上往下检查如果出现黑(白)棋 ,则将出现棋子的坐标加入列表 score 中 , 如果出现异色棋子或者没有棋子,则清空 score 中的元素 ,如果列表 score 中的元素数量大于等于5个 ,则分胜负 。
如果棋子填满棋盘但是仍没有分出胜负 ,则平局 。
代码
import pygame,pyautogui
from pygame.locals import *
# 初始参数
cell_size = 40
space = 80
cell_num = 19
grid_size = (cell_num - 1)*cell_size + space*2
screen = pygame.display.set_mode([grid_size,grid_size],0,32)
chess_location , chess_location_w , chess_location_b = [] , [] , []
# 画棋盘
def grid():
screen.fill([208,173,108])
font = pygame.font.SysFont("arial", 20)
i = 0
for x in range(0, cell_size * cell_num , cell_size):
i += 1
text_surface = font.render("{}".format(i), True, (0, 0, 0))
screen.blit(text_surface,[(space - font.get_height()) - 10,(space - font.get_height()/2) + cell_size*(i -1 )])
pygame.draw.line(screen, (0, 0, 0), (x + space, 0 + space), (x + space, cell_size * (cell_num - 1) + space), 2)
i = 0
for y in range(0, cell_size * cell_num, cell_size):
i += 1
text_surface = font.render("{}".format(chr(64 + i)), True, (0, 0, 0))
screen.blit(text_surface,[(space + cell_size * (i - 1)) -5, (space - font.get_height() / 2) - 20])
pygame.draw.line(screen, (0,0,0), (0 + space, y + space),(cell_size * (cell_num - 1) + space, y + space), 2)
# 分胜负
def result(x):
# 竖直
score = []
for i in range(cell_num):
if [x[-1][0], i ] in x:
score.append([x[-1][0], i ])
if score.__len__() >= 5:
return 1
else:
score =[]
# 水平
score = []
for i in range(cell_num):
if [i , x[-1][1]] in x:
score.append([i , x[-1][1]])
if score.__len__() >= 5:
return 1
else:
score = []
# 右上左下
score = []
for i in range(cell_num):
if [i,x[-1][0] + x[-1][1] - i] in x:
score.append([i,x[-1][0] + x[-1][1] - i])
if score.__len__() >= 5:
return 1
else:
score = []
# 右下左上
score = []
for i in range(cell_num):
if [x[-1][0] - x[-1][1] + i,i] in x:
score.append([x[-1][0] - x[-1][1] + i,i])
if score.__len__() >= 5:
return 1
else:
score = []
# 平局
if chess_location.__len__() == cell_num * cell_num :
return 2
# 主循环
def running():
global chess_location_w , chess_location_b
while True:
grid()
for event in pygame.event.get():
if event.type == QUIT:
exit()
# 落子
if event.type == MOUSEBUTTONDOWN:
x0 , y0 = pygame.mouse.get_pos()
if x0 > space and y0 > space and x0 < space + cell_size*(cell_num - 1) and y0 < space + cell_size * (cell_num - 1):
x1 = round((x0 - space) / cell_size)
y1 = round((y0 - space) / cell_size)
if [x1 , y1] not in chess_location:
chess_location.append([x1 , y1])
# 悔棋
elif event.type == KEYDOWN:
if event.key == K_LEFT:
chess_location.pop(-1)
chess_location_b = chess_location[0::2]
chess_location_w = chess_location[1::2]
# 黑棋
for i in chess_location_b:
pygame.draw.circle(screen, [ 0 , 0 , 0 ], [i[0]* cell_size + space, i[1]* cell_size + space], 15, 0)
# 白棋
for i in chess_location_w:
pygame.draw.circle(screen, [255,255,255], [i[0]* cell_size + space, i[1]* cell_size + space], 15, 0)
# 判断胜负
if chess_location_b and result(chess_location_b) == 1:
pyautogui.alert(text='黑棋胜',title='游戏结束')
exit()
elif chess_location_w and result(chess_location_w) == 1:
pyautogui.alert(text='白棋胜',title='游戏结束')
exit()
elif chess_location_b and chess_location_w:
if result(chess_location_b) or result(chess_location_w) == 2:
pyautogui.alert(text='平局', title='游戏结束')
exit()
pygame.display.update()
if __name__ == '__main__':
pygame.init()
running()
输出

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了是如何进行机器学习的模型的训练,全文逻辑清晰,简单易懂,如果您正在学习机器学习那么可以参考下,说不定会有不一样的收货
本文主要介绍的python排序算法的实现,下本有冒泡排序、选择排序、插入排序、快速排序这四种排序的算法实现步骤以及实现的介绍,和四种算法实现的比较,具有一定的参考价值。下面一起跟随小编看看吧。
python如何实现绘几何图形?今天我们来了解python绘制图形的内容,我们想要实现绘制几何图形,需要使用到turtle,那么turtle是什么?turtle怎样使用?turtle怎么绘制几何图形?接下来我们具体了解看看。
大家好,本篇文章主要讲的是Python项目打包成exe文件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
python链式调用如何实现?关于链式调用也就是调用完一个函数后还能再继续调用其它函数,这样大大减少了代码量。那么在Python中如何实现链式调用呢?下面给大家分享一下实现方法。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008