pygame五子棋简略版

该程序使用Python的tkinter和pygame库创建了一个简单的五子棋游戏。玩家可以在GUI界面上点击开始游戏,进行黑白棋子的对弈。当一方连成五子时,游戏结束并显示胜利者。代码适合初学者学习Python图形界面和游戏开发。
摘要由CSDN通过智能技术生成
import tkinter as tk
import sys
import pygame
global flag
global list,list1,list2
list=[]
list1=[]
list2=[]
flag=1
win21 = tk.Tk()
win21.title("五子棋")
win21.geometry("500x500")
L324 = tk.Label(win21, text="棋王争霸", font=("Arial", 20)
             , width=15, height=3)
L324.pack()
pygame.mixer.init()
pq = pygame.mixer.music.load("./76.mp3")
pygame.mixer.music.play()
def gameover1():
    pk=tk.Tk()
    pk.title("Gameover!")
    pk.geometry("500x500")
    L325 = tk.Label(pk,text="黑棋获胜",font=("Arial", 20)
             , width=15, height=3)
    L325.pack()
    cjk = tk.Button(pk, text="退出游戏", bg="yellow", font=("Arial", 20)
                     , width=15, height=4, command=exit)
    cjk.pack()
    pk.mainloop()
def gameover2():
    pk1=tk.Tk()
    pk1.title("Gameover!")
    pk1.geometry("500x500")
    L325 = tk.Label(pk1,text="白棋获胜",font=("Arial", 20)
             , width=15, height=3)
    L325.pack()
    cjk =tk.Button(pk1, text="退出游戏", bg="yellow", font=("Arial", 20)
                     , width=15, height=4, command=exit)
    cjk.pack()
    pk1.mainloop()
def winner(width,heigth):
    kpl=0
    kpl1=0
    for i in list1:
        if (i[0],i[1])in list1:
            for j in range(1,5):#1
                if (i[0]+j*width,i[1])in list1:
                     kpl=0
                else:
                     kpl=1
                     break
            if kpl==0:
                return 1

            for j in range(1,5):#2
                if (i[0],i[1]+j*heigth)in list1:
                    kpl=0
                else:
                    kpl=1
                    break
            if kpl==0:
                return 1

            for j in range(1,5):#3
                if (i[0]+j*width,i[1]+j*heigth)in list1:
                    kpl=0
                else:
                    kpl=1
                    break
            if kpl==0:
                return 1

            for j in range(1,5):#4
                if (i[0]+j*width,i[1]-j*heigth)in list1:
                    kpl=0
                else:
                    kpl=1
                    break
            if kpl==0:
                return 1

    for i in list2:
            for j in range(1,5):#1
                if (i[0]+j*width,i[1])in list2:
                     kpl1=0
                else:
                     kpl1=1
                     break
            if kpl1==0:
                return 0

            for j in range(1,5):#2
                if (i[0],i[1]+j*heigth)in list2:
                    kpl1=0
                else:
                    kpl1=1
                    break
            if kpl1==0:
                return 0

            for j in range(1,5):#3
                if (i[0]+j*width,i[1]+j*heigth)in list2:
                    kpl1=0
                else:
                    kpl1=1
                    break
            if kpl1==0:
                return 0
            for j in range(1,5):#4
                if (i[0]+j*width,i[1]-j*heigth)in list2:
                    kpl1=0
                else:
                    kpl1=1
                    break
            if kpl1==0:
                return 0

def play2():  # 构建棋盘
    global flag

    pygame.init()
    R = 600  # r是行
    C = 600  # c是列
    size = (R, C)
    r = 25
    c = 25
    width = C / c  # 单行宽
    heigth = R / r  # 单行高
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("五子棋")
    pygame.draw.rect(screen, (238, 154, 73), (0, 0, R, C))
    def oto(screen,x,y,R,C,width,heigth,r,c):
        global flag,list,list1,list2
        if x>=width and x<=C-width:
            if y>=heigth and y<=R-heigth:
                for i in range(1,r):
                    if x>=i*width and x<=(i+0.5)*width:
                        x=i*width
                    elif x>(i+0.5)*width and x<=(i+1)*width:
                        x=(i+1)*width
                for i in range(1,c):
                    if y>=i*heigth and y<=(i+0.5)*heigth:
                        y=i*heigth
                    elif y>(i+0.5)*heigth and y<=(i+1)*heigth:
                        y=(i+1)*heigth
                if flag==1:
                 if (x,y)not in list:
                  pygame.draw.circle(screen, "black", (x, y), 10)
                  list.append((x,y))
                  list1.append((x,y))
                  flag*=-1
                else:
                  if (x,y)not in list:
                    pygame.draw.circle(screen, "white", (x, y), 10)
                    list.append((x,y))
                    list2.append((x,y))
                    flag *= -1

    for i in range(1, r):
        pygame.draw.line(screen, "pink", [width * i, heigth], [width * i, R-heigth], width=2)
    for i in range(1, c):
        pygame.draw.line(screen, "pink", [width, heigth * i], [C-width, heigth * i], width=2)
    t= True
    while t:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                t=False
                pygame.quit()
                sys.exit()
            tim=0
            x,y= pygame.mouse.get_pos()
            keys_pressed = pygame.mouse.get_pressed()  # 获取鼠标按键信息
            if keys_pressed[0] and tim == 0:
                 oto(screen,x,y,R,C,width,heigth,r,c)
            john=winner(width,heigth)
            if john==1:#黑棋胜利
                gameover1()
            elif john==0:#白棋胜利
                gameover2()
            pygame.display.update()
bkpq = tk.Button(win21, text="开始游戏", bg="yellow", font=("Arial", 20)
              , width=15, height=4, command=play2)
cjkl = tk.Button(win21, text="退出游戏", bg="yellow", font=("Arial", 20)
              , width=15, height=4, command=exit)
bkpq.pack()
cjkl.pack()
win21.mainloop()

只是稍微用了一点tkinter里的简单页面,pygame库学起来很简单,程序相对简单,适合没有学过的小白选手学习,都是查资料可以看懂的大佬完全可以跳过这种没有难度的游戏,毕竟本人也只是菜鸟一只

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GG bond123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值