用pygame写五子棋



# -*- coding = utf-8 -*-
# @Time:2022/5/14 0014 12:26
# @Author:jackelh
# @File:五子棋.py
# @Software:PyCharm

import pygame

pygame.init()
window = pygame.display.set_mode((800, 800))
window.fill('white')
font = pygame.font.SysFont('SimHei', 20)
font1 = pygame.font.SysFont('SimHei', 40)
txt = 'author: ljackeh'
txt1 = 'date: 2022-05-15'
txt2 = 'Game: five-in-a-row(五子棋)'
textauthor = font1.render(txt, True, (0, 0, 0))
window.blit(textauthor, (0, 500))
textauthor = font1.render(txt1, True, (0, 0, 0))
window.blit(textauthor, (0, 600))
textauthor = font1.render(txt2, True, (0, 0, 0))
window.blit(textauthor, (0, 700))
# 画棋盘
pygame.draw.rect(window, (238, 154, 73), (20, 20, 420, 420), 420)
pygame.display.update()
for i in range(15):
    if i == 0 or i == 14:
        text = font.render(str(i + 1), True, 'black')
        window.blit(text, (450, 10 + 30 * i))
        text1 = font.render(chr(i + 65), True, 'black')
        window.blit(text1, (20 + 30 * i, 450))
        pygame.draw.line(window, 'black', (20, 20 + 30 * i), (440, 20 + 30 * i), 4)
        pygame.draw.line(window, 'black', (20 + 30 * i, 20), (20 + 30 * i, 440), 4)
        pygame.display.update()
    else:
        pygame.draw.line(window, 'black', (20, 20 + 30 * i), (440, 20 + 30 * i))
        text = font.render(str(i + 1), True, 'black')
        window.blit(text, (450, 10 + 30 * i))
        pygame.draw.line(window, 'black', (20 + 30 * i, 20), (20 + 30 * i, 440))
        text1 = font.render(chr(i + 65), True, 'black')
        window.blit(text1, (20 + 30 * i, 450))
        pygame.display.flip()
positon = []  # 储存落点的位置
for i in range(15):
    for k in range(15):
        positon.append((20 + 30 * i, 20 + 30 * k))
pygame.draw.circle(window, 'black', (110, 110), 5)
pygame.draw.circle(window, 'black', (350, 110), 5)
pygame.draw.circle(window, 'black', (350, 350), 5)
pygame.draw.circle(window, 'black', (110, 350), 5)
pygame.draw.circle(window, 'black', (230, 230), 5)
window.blit(font.render('黑方: 请下棋', True, 'red'), (500, 500))
pygame.display.update()
print(type(positon[0]))
play1 = []
play2 = []
count = 0
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            for i in positon:
                if (i[0] - 10) < x < (i[0] + 10) and (i[1] - 10) < y < (i[1] + 10):
                    if count % 2 == 0:
                        # font.render('黑方:')
                        for ct in range(10):
                            window.blit(font.render('黑方: 请下棋', True, 'white'), (500, 500))

                        window.blit(font.render('白方: 请下棋', True, 'red'), (500, 500))
                        pygame.display.update()
                        pygame.draw.circle(window, 'black', i, 10)
                        play1.append(i)
                        positon.remove(i)
                        pygame.display.update()
                        f = [[-1, 0], [-1, 1], [0, 1], [1, 1]]
                        for z in range(4):
                            a, b = f[z][0], f[z][1]  # a = -1,b=0
                            count1 = 0  # 正向
                            count2 = 0  # 反向
                            for k in range(len(play1)):
                                for c in range(1, 5):
                                    if (i[0] + a * 30 * c, i[1] + b * 30 * c) == play1[k]:
                                        count1 += 1
                                    if (i[0] - a * 30 * c, i[1] - b * 30 * c) == play1[k]:
                                        count2 += 1
                                    if count1 + count2 == 4:
                                        window.blit(font1.render('black win!', True, 'red'), (500, 300))
                                        pygame.display.update()
                                        count = 0.5


                    if count % 2 == 1:
                        for ct in range(10):
                            window.blit(font.render('白方: 请下棋', True, 'white'), (500, 500))

                        window.blit(font.render('黑方: 请下棋', True, 'red'), (500, 500))
                        pygame.display.update()
                        pygame.draw.circle(window, 'white', i, 10)
                        play2.append(i)
                        positon.remove(i)
                        pygame.display.update()

                        f = [[-1, 0], [-1, 1], [0, 1], [1, 1]]
                        for z in range(4):
                            a, b = f[z][0], f[z][1]  # a = -1,b=0
                            count1 = 0  # 正向
                            count2 = 0  # 反向
                            for k in range(len(play2)):
                                for c in range(1, 5):
                                    if (i[0] + a * 30 * c, i[1] + b * 30 * c) == play2[k]:
                                        count1 += 1
                                    if (i[0] - a * 30 * c, i[1] - b * 30 * c) == play2[k]:
                                        count2 += 1
                                    if count1 + count2 == 4:
                                        window.blit(font1.render('white win!', True, 'red'), (500, 300))
                                        pygame.display.update()
                                        count = 0.5

                    count += 1


这就是全部代码,可能还有一些写得不好的地方,请大家提出意见

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜如影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值