精华内容
下载资源
问答
  • python五子棋游戏代码实现

    万次阅读 多人点赞 2019-08-25 09:54:01
    五子棋的规则大家肯定都了解,也是大家在百忙之中娱乐的一部分,也都在网上玩过五子棋的游戏,那么大家有没有想过自己编写一个五子棋游戏呢。很多人都感觉做“游戏”这个词汇听着就很难,不知道怎么去实现。那么“接...

    单机五子棋的代码实现(python)

    五子棋的规则大家肯定都了解,也是大家在百忙之中娱乐的一部分,也都在网上玩过五子棋的游戏,那么大家有没有想过自己编写一个五子棋游戏呢。很多人都感觉做“游戏”这个词汇听着就很难,不知道怎么去实现。那么“接下来就是见证奇迹的时刻”。

    思路:

    (1)准备好棋盘图片,棋子图片(白棋、黑棋),获胜时的图片共四张。想要图片资源可以点击此链接: https://pan.baidu.com/s/13Ajqv29YXL2zWlDNk63rxA 提取码: rvh2 ;最好将图片文件夹放在自己要创建的项目里。
    (2)以下是编写单机五子棋程序的几个重要部分:
    【1】创建初始化棋盘方法initChessSquare(x,y):根据棋盘图片的交叉点个数,遍历其所有交叉点坐标。
    【2】创建监听各种事件的方法eventHander():如:鼠标点击退出位置,程序能实现退出响应(退出很重要,因为游戏界面的显示就是一个死循环whileTrue;一个不断刷新界面(背景图片)的过程,因此,不做退出操作,此窗口会进入死锁状态,用户将无法操作);鼠标只有点击棋盘的交叉点位置时,才通过pygame.mouse.get_pos()获取鼠标点击的坐标并给出相应的棋子类型value。通过列表封装后,再存入到全局列表initChessList中。
    【3】创建判断输赢的规则方法judgeResult(i,j,value):创建标志位flag为False,当满足赢的规则时,标志位flag再为True;判断横向、纵向、左斜向、右斜向有没有出现5连(在边缘依次向内逐一遍历,是否五个棋子的类型一样,一样则为赢,即五子连珠)
    【4】创建主方法main():其中包含初始化游戏环境pygame.init();绘制游戏窗口pygame.display.set_mode((600,600),0,0)(其中第一个参数(600,600)为设定窗口的大小,第二个参数为标志位,如果不用什么特性就指定为0(指定为FULLSCREEN时,绘制的是一个全屏窗口,如果没有相应的退出机制,只有按 菜单键 才能跳回之前界面),第三个参数为色深);通过pygame.image.load(“图片路径”)的方法加载棋子以及判赢的图片;遍历全局列表initChessList中的子列表,再遍历子列表中封装的棋子类型value,通过之前的响应值来绘制相应棋子类型的图片;当其中一方为赢时,清空棋盘,重新初始化棋盘,绘制赢的图片,再更新显示的视图;最后调用监听事件方法(函数),监听用户的鼠标操作。
    【5】定义入口函数,调用主方法main()。
    至此,单机五子棋完成,当然,有的地方还可进一步完善,但对于初学者来说,如上的大体概括已经受用了。如上思路只作为下面具体的代码参考。

    具体实现代码如下:
    import pygame        #导入pygame游戏模块
    import time
    import sys
    from pygame.locals import *
    
    initChessList = []          #保存的是棋盘坐标
    initRole = 1                #1:代表白棋; 2:代表黑棋
    resultFlag = 0              #结果标志
    
    class StornPoint():
        def __init__(self,x,y,value):
            '''
            :param x: 代表x轴坐标
            :param y: 代表y轴坐标
            :param value: 当前坐标点的棋子:0:没有棋子 1:白子 2:黑子
            '''
            self.x = x            #初始化成员变量
            self.y = y
            self.value = value
    
    def initChessSquare(x,y):     #初始化棋盘
        for i in range(15):       # 每一行的交叉点坐标
            rowlist = []
            for j in range(15):   # 每一列的交叉点坐标
                pointX = x+ j*40
                pointY = y+ i*40
                sp = StornPoint(pointX,pointY,0)
                rowlist.append(sp)
            initChessList.append(rowlist)
    
    def eventHander():            #监听各种事件
        for event in pygame.event.get():
            global initRole
            if event.type == QUIT:#事件类型为退出时
                pygame.quit()
                sys.exit()
            if event.type == MOUSEBUTTONDOWN: #当点击鼠标时
                x,y = pygame.mouse.get_pos()  #获取点击鼠标的位置坐标
                i=0
                j=0
                for temp in initChessList:
                    for point in temp:
                        if x>=point.x-10 and x<=point.x+10 and y>=point.y-10 and y<=point.y+10:
                            if point.value == 0 and initRole == 1:   #当棋盘位置为空;棋子类型为白棋
                                point.value = 1             #鼠标点击时,棋子为白棋
                                judgeResult(i,j,1)
                                initRole = 2                #切换角色
                            elif point.value == 0 and initRole ==2:  #当棋盘位置为空;棋子类型为黑棋
                                point.value = 2             #鼠标点击时,棋子为黑棋
                                judgeResult(i,j,2)
                                initRole = 1                #切换角色
                            break
                        j+=1
                    i+=1
                    j=0
    
    def judgeResult(i,j,value):   #横向判断
        global resultFlag
        flag = False
        for  x in  range(j - 4, j + 5):  # 横向有没有出现5连(在边缘依次逐一遍历,是否五个棋子的类型一样)
            if x >= 0 and x + 4 < 15 :
                if initChessList[i][x].value == value and \
                    initChessList[i][x + 1].value == value and \
                    initChessList[i][x + 2].value == value and \
                    initChessList[i][x + 3].value == value and \
                    initChessList[i][x + 4].value == value :
                    flag = True
                    break
                    pass
        for x in range(i - 4, i + 5):  # 纵向有没有出现5连(在边缘依次逐一遍历,是否五个棋子的类型一样)
            if x >= 0 and x + 4 < 15:
                if initChessList[x][j].value == value and \
                        initChessList[x + 1][j].value == value and \
                        initChessList[x + 2][j].value == value and \
                        initChessList[x + 3][j].value == value and \
                        initChessList[x + 4][j].value == value:
                    flag = True
                    break
                    pass
    
        # 先判断东北方向的对角下输赢 x 列轴, y是行轴 , i 是行 j 是列(右斜向)(在边缘依次逐一遍历,是否五个棋子的类型一样)
        for x, y in zip(range(j + 4, j - 5, -1), range(i - 4, i + 5)):
            if x >= 0 and x + 4 < 15 and y + 4 >= 0 and y < 15:
                if initChessList[y][x].value == value and \
                        initChessList[y - 1][x + 1].value == value and \
                        initChessList[y - 2][x + 2].value == value and \
                        initChessList[y - 3][x + 3].value == value and \
                        initChessList[y - 4][x + 4].value == value:
                    flag = True
    
        # 2、判断西北方向的对角下输赢 x 列轴, y是行轴 , i 是行 j 是列(左斜向)(在边缘依次逐一遍历,是否五个棋子的类型一样)
        for x, y in zip(range(j - 4, j + 5), range(i - 4, i + 5)):
            if x >= 0 and x + 4 < 15 and y >= 0 and y + 4 < 15:
                if initChessList[y][x].value == value and \
                        initChessList[y + 1][x + 1].value == value and \
                        initChessList[y + 2][x + 2].value == value and \
                        initChessList[y + 3][x + 3].value == value and \
                        initChessList[y + 4][x + 4].value == value:
                    flag = True
    
    
        if flag:               #如果条件成立,证明五子连珠
            resultFlag = value #获取成立的棋子颜色
            print("白棋赢" if value ==1 else "黑棋赢")
    
    # 加载素材
    def main():
        global initChessList,resultFlag
        initChessSquare(27,27)
        pygame.init()     # 初始化游戏环境
        screen = pygame.display.set_mode((620,620),0,0)          # 创建游戏窗口 # 第一个参数是元组:窗口的长和宽
        pygame.display.set_caption("老手er五子棋")                # 添加游戏标题
        background = pygame.image.load("images/bg.png")          #加载背景图片
        whiteStorn = pygame.image.load("images/storn_white.png") #加载白棋图片
        blackStorn = pygame.image.load("images/storn_black.png") #加载黑棋图片
        resultStorn = pygame.image.load("images/resultStorn.jpg")#加载 赢 时的图片
        rect = blackStorn.get_rect()
    
        while True:
            screen.blit(background,(0,0))
            for temp in initChessList:
                for point in temp:
                    if point.value == 1:          #当棋子类型为1时,绘制白棋
                        screen.blit(whiteStorn,(point.x-18,point.y-18))
                    elif point.value == 2:        #当棋子类型为2时,绘制黑棋
                        screen.blit(blackStorn,(point.x-18,point.y-18))
    
            if resultFlag >0:
                initChessList = []                 # 清空棋盘
                initChessSquare(27,27)             # 重新初始化棋盘
                screen.blit(resultStorn,(200,200)) #绘制获胜时的图片
            pygame.display.update()                #更新视图
    
            if resultFlag >0:
                time.sleep(3)
                resultFlag = 0                     #置空之前的获胜结果
            eventHander()                          #调用之前定义的事件函数
    if __name__ == '__main__':
        main()        #调用主函数绘制窗口
        pass
    

    至此,对访问当前博客的你来说,或许对游戏也有了新的认识吧!没错,之前的我也感同身受。时不我待,咱们下篇博客见。当然,如有纰漏,请多指教

    展开全文
  • 本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下暑假学了十几天python,然后用pygame模块写了一个五子棋的小游戏代码跟有缘人分享一下。import numpy as npimport pygameimport ...

    本文实例为大家分享了python实现五子棋小游戏的具体代码,供大家参考,具体内容如下

    暑假学了十几天python,然后用pygame模块写了一个五子棋的小游戏,代码跟有缘人分享一下。

    import numpy as np

    import pygame

    import sys

    import traceback

    import copy

    from pygame.locals import *

    pygame.init()

    pygame.mixer.init()

    #颜色

    background=(201,202,187)

    checkerboard=(80,80,80)

    button=(52,53,44)

    #音乐

    play_chess_sound = pygame.mixer.Sound("music/play_chess.wav")

    play_chess_sound.set_volume(0.2)

    button_sound = pygame.mixer.Sound("music/button.wav")

    button_sound.set_volume(0.2)

    victor_sound = pygame.mixer.Sound("music/victory.wav")

    victor_sound.set_volume(0.2)

    #绘制棋盘

    def Draw_a_chessboard(screen):

    #填充背景色

    screen.fill(background)

    Background=pygame.image.load("background.jpg").convert_alpha()

    screen.blit(Background,(0,0))

    #画棋盘

    for i in range(21):

    pygame.draw.line(screen, checkerboard, (40*i+3, 3), (40*i+3, 803))

    pygame.draw.line(screen, checkerboard, (3, 40*i+3), (803, 40*i+3))

    #画边线

    pygame.draw.line(screen, checkerboard, (3, 3), (803, 3),5)

    pygame.draw.line(screen, checkerboard, (3, 3), (3, 803),5)

    pygame.draw.line(screen, checkerboard, (803, 3), (803, 803),5)

    pygame.draw.line(screen, checkerboard, (3, 803), (803, 803),5)

    #画定位点

    pygame.draw.circle(screen, checkerboard, (163, 163), 6)

    pygame.draw.circle(screen, checkerboard, (163, 643), 6)

    pygame.draw.circle(screen, checkerboard, (643, 163), 6)

    pygame.draw.circle(screen, checkerboard, (643, 643), 6)

    pygame.draw.circle(screen, checkerboard, (403, 403), 6)

    #画‘悔棋'‘重新开始'跟‘退出'按钮

    pygame.draw.rect(screen,button,[900,350,120,100],5)

    pygame.draw.rect(screen,button,[900,500,200,100],5)

    pygame.draw.rect(screen,button,[900,650,200,100],5)

    s_font=pygame.font.Font('font.ttf',40)

    text1=s_font.render("悔棋",True,button)

    text2=s_font.render("重新开始",True,button)

    text3=s_font.render("退出游戏",True,button)

    screen.blit(text1,(920,370))

    screen.blit(text2,(920,520))

    screen.blit(text3,(920,670))

    #绘制棋子(横坐标,纵坐标,屏幕,棋子颜色(1代表黑,2代表白))

    def Draw_a_chessman(x,y,screen,color):

    if color==1:

    Black_chess=pygame.image.load("Black_chess.png").convert_alpha()

    screen.blit(Black_chess,(40*x+3-15,40*y+3-15))

    if color==2:

    White_chess=pygame.image.load("White_chess.png").convert_alpha()

    screen.blit(White_chess,(40*x+3-15,40*y+3-15))

    #绘制带有棋子的棋盘

    def Draw_a_chessboard_with_chessman(map,screen):

    screen.fill(background)

    Draw_a_chessboard(screen)

    for i in range(24):

    for j in range(24):

    Draw_a_chessman(i+1,j+1,screen,map[i][j])

    #定义存储棋盘的列表,

    #列表为24列24行是因为判断是否胜利函数里的索引会超出19

    #列表大一点不会对游戏有什么影响

    map=[]

    for i in range(24):

    map.append([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])

    #清零map列表

    def clear():

    global map

    for i in range(24):

    for j in range(24):

    map[i][j]=0

    #判断是否胜利

    def win(i, j):

    k = map[i][j]

    p=[]

    for a in range(20):

    p.append(0)

    for i3 in range(i-4,i+5):

    for j3 in range(j-4,j+5):

    if (map[i3][j3] == k and i3 - i == j3 - j and i3 <= i and j3 <= j):

    p[0]+=1

    if (map[i3][j3] == k and j3 == j and i3 <= i and j3 <= j):

    p[1]+=1

    if (map[i3][j3] == k and i3 == i and i3 <= i and j3 <= j):

    p[2]+=1

    if (map[i3][j3] == k and i3 - i == j3 - j and i3 >= i and j3 >= j):

    p[3]+=1

    if (map[i3][j3] == k and j3 == j and i3 >= i and j3 >= j):

    p[4]+=1

    if (map[i3][j3] == k and i3 == i and i3 >= i and j3 >= j):

    p[5]+=1

    if (map[i3][j3] == k and i - i3 == j3 - j and i3 <= i and j3 >= j):

    p[6]+=1

    if (map[i3][j3] == k and i3 - i == j - j3 and i3 >= i and j3 <= j):

    p[7]+=1

    if (map[i3][j3] == k and j - j3 == i - i3 and i3 <= i + 1 and i3 >= i - 3 and j3 <= j + 1 and j3 >= j - 3):

    p[8]+=1

    if (map[i3][j3] == k and j == j3 and i3 <= i + 1 and i3 >= i - 3 and j3 <= j + 1 and j3 >= j - 3):

    p[9]+=1

    if (map[i3][j3] == k and i == i3 and i3 <= i + 1 and i3 >= i - 3 and j3 <= j + 1 and j3 >= j - 3):

    p[10]+=1

    if (map[i3][j3] == k and j - j3 == i - i3 and i3 >= i - 1 and i3 <= i + 3 and j3 >= j - 1 and j3 <= j + 3):

    p[11]+=1

    if (map[i3][j3] == k and j == j3 and i3 >= i - 1 and i3 <= i + 3 and j3 >= j - 1 and j3 <= j + 3):

    p[12]+=1

    if (map[i3][j3] == k and i == i3 and i3 >= i - 1 and i3 <= i + 3 and j3 >= j - 1 and j3 <= j + 3):

    p[13]+=1

    if (map[i3][j3] == k and i - i3 == j3 - j and i3 <= i + 1 and i3 >= i - 3 and j3 >= j - 1 and j3 <= j + 3):

    p[14]+=1

    if (map[i3][j3] == k and i3 - i == j - j3 and i3 >= i - 1 and i3 <= i + 3 and j3 <= j + 1 and j3 >= j - 3):

    p[15]+=1

    if (map[i3][j3] == k and j - j3 == i - i3 and i3 <= i + 2 and i3 >= i - 2 and j3 <= j + 2 and j3 >= j - 2):

    p[16]+=1

    if (map[i3][j3] == k and j == j3 and i3 <= i + 2 and i3 >= i - 2 and j3 <= j + 2 and j3 >= j - 2):

    p[17]+=1

    if (map[i3][j3] == k and i == i3 and i3 <= i + 2 and i3 >= i - 2 and j3 <= j + 2 and j3 >= j - 2):

    p[18]+=1

    if (map[i3][j3] == k and i - i3 == j3 - j and i3 <= i + 2 and i3 >= i - 2 and j3 <= j + 2 and j3 >= j - 2):

    p[19]+=1

    for b in range(20):

    if p[b]==5:

    return True

    return False

    #绘制提示器(类容,屏幕,字大小)

    def text(s,screen,x):

    #先把上一次的类容用一个矩形覆盖

    pygame.draw.rect(screen,background,[850,100,1200,100])

    #定义字体跟大小

    s_font=pygame.font.Font('font.ttf',x)

    #定义类容,是否抗锯齿,颜色

    s_text=s_font.render(s,True,button)

    #将字放在窗口指定位置

    screen.blit(s_text,(880,100))

    pygame.display.flip()

    #用于控制顺序

    t=True

    #用于结束游戏后阻止落子

    running=True

    #主函数

    def main():

    #将 t,map,running设置为可改的

    global t,map,running,maps,r,h

    #将map置零

    clear()

    #定义储存所有棋盘状态的列表(用于悔棋)

    map2=copy.deepcopy(map)

    maps=[map2]

    #定义窗口

    screen = pygame.display.set_mode([1200,806])

    #定义窗口名字

    pygame.display.set_caption("五子棋")

    #在窗口画出棋盘,提示器以及按钮

    Draw_a_chessboard(screen)

    pygame.display.flip()

    clock=pygame.time.Clock()

    while True:

    #只有running为真才能落子,主要用于游戏结束后防止再次落子

    if running:

    if t:

    color=1

    text('黑棋落子',screen,54)

    else:

    color=2

    text('白棋落子',screen,54)

    for event in pygame.event.get():

    #点击x则关闭窗口

    if event.type ==pygame.QUIT:

    pygame.quit()

    sys.exit()

    #点击窗口里面类容则完成相应指令

    elif event.type == MOUSEBUTTONDOWN:

    if event.button == 1:

    x,y=event.pos[0],event.pos[1]

    for i in range(19):

    for j in range(19):

    #点击棋盘相应位置

    if i*40+3+20

    #在棋盘相应位置落相应颜色棋子

    Draw_a_chessman(i+1,j+1,screen,color)

    #播放音效

    play_chess_sound.play(0)

    #在map里面记录落子位置

    map[i][j]=color

    #将map存入maps

    map3=copy.deepcopy(map)

    maps.append(map3)

    #判断落子后是否有五子一线

    if win(i,j):

    if t:

    text('黑棋胜利,请重新游戏',screen,30)

    else:

    text('白棋胜利,请重新游戏',screen,30)

    #播放音效

    victor_sound.play(0)

    #阻止再往棋盘落子

    running=False

    pygame.display.flip()

    t=not t

    #如果点击‘重新开始'

    if 900

    #取消阻止

    running=True

    #播放音效

    button_sound.play(0)

    #重新开始

    main()

    #点击‘退出游戏',退出游戏

    elif 900

    #播放音效

    button_sound.play(0)

    pygame.quit()

    sys.exit()

    #点击‘悔棋'

    elif 900

    #播放音效

    button_sound.play(0)

    #删除maps里最后一个元素

    del maps[len(maps)-1]

    #再将最后一个元素copy给map

    map=copy.deepcopy(maps[len(maps)-1])

    #切换顺序

    t=not t

    #将map显示出来

    Draw_a_chessboard_with_chessman(map,screen)

    #悔棋完成,阻止再次悔棋

    x,y=0,0

    clock.tick(60)

    if __name__ == "__main__":

    try:

    main()

    except SystemExit:

    pass

    except:

    traceback.print_exc()

    pygame.quit()

    input()

    实现效果图如下:

    2019124160040421.jpg?201902416058

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: python实现五子棋小游戏

    本文地址: http://www.cppcns.com/jiaoben/python/250992.html

    展开全文
  • python五子棋代码

    2018-12-26 19:30:07
    python制作的五子棋游戏,利用graphics库来制作,采用ab剪枝法
  • Python五子棋游戏代码源程序

    千次阅读 2020-06-02 12:11:04
    五子棋游戏,我们将游戏分为两个方面:一个是棋盘,另一个是棋子,利用横线和纵线将棋盘分成一个个小方格,当黑子或者白子形成5个棋子连线时,显示胜利者,游戏结束。本程序难点在于确定胜利条件。 import pygame ...

    五子棋游戏,我们将游戏分为两个方面:一个是棋盘,另一个是棋子,利用横线和纵线将棋盘分成一个个小方格,当黑子或者白子形成5个棋子连线时,显示胜利者,游戏结束。本程序难点在于确定胜利条件。
    在这里插入图片描述

    
    import pygame as pg
    class Chessboard:  # 设置棋盘
        def __init__(s):
            s.grid_lenght = 26                               #棋盘格子的边长
            s.grid_count = 20                                #格子的数量
            s.start_x = 150                                  #棋盘初始点坐标,左上角的坐标
            s.start_y = 50
            s.edge_lenght = s.grid_lenght / 2                #棋盘周围边缘的长度13
    
    
            s.piece = "black"
            s.winner = None
            s.gameover = False
            s.grid = []
            for i in range(s.grid_count):                      #棋盘大小为20*20个格子
                s.grid.append(list("." * s.grid_count))
    
    
    
    
        def handle_event(s, e):
            origin_x = s.start_x - s.edge_lenght
            origin_y = s.start_y - s.edge_lenght
            chessboard_lenght = (s.grid_count - 1) * s.grid_lenght + s.edge_lenght * 2
            mouse_pos = e.pos                                  #鼠标位置在棋盘坐标内
            if (mouse_pos[0] > origin_x and mouse_pos[0] <= origin_x + chessboard_lenght) and (
                    mouse_pos[1] >= origin_y and mouse_pos[1] <= origin_y + chessboard_lenght):
                if not s.gameover:
                    x = mouse_pos[0] - origin_x                 #X轴方向距离
                    c = int(x / s.grid_lenght)                  #换算出X轴第几格
                    y = mouse_pos[1] - origin_y
                    r = int(y / s.grid_lenght)                  #换算出Y轴第几格
                    if s.set_piece(r, c):
                        s.check_win(r, c)
    
    
        def set_piece(s, r, c):
            if s.grid[r][c] == ".":                             #该位置没有棋子
                s.grid[r][c] = s.piece
                if s.piece == "black":                          #交替使用棋子
                    s.piece = "white"
                else:
                    s.piece = "black"
                return True
            return False
    
    
        def check_win(s, r, c):
            n_count = s.get_continuous_count(r, c, -1, 0)            #上方向相周颜色棋子数量
            s_count = s.get_continuous_count(r, c, 1, 0)             #下方相同颜色棋子数量
            w_count = s.get_continuous_count(r, c, 0, -1)            #左方
            e_count = s.get_continuous_count(r, c, 0, 1)             #右方
            nw_count = s.get_continuous_count(r, c, -1, -1)          #左上方
            ne_count = s.get_continuous_count(r, c, -1, 1)           #右上方
            sw_count = s.get_continuous_count(r, c, 1, -1)           #左下方
            se_count = s.get_continuous_count(r, c, 1, 1)            #右下方
            if (n_count + s_count + 1 >= 5) or (e_count + w_count + 1 >= 5) or (se_count + nw_count + 1 >= 5) or (
                    ne_count + sw_count + 1 >= 5):
                s.winner = s.grid[r][c]
                s.gameover = True
    
    
        def get_continuous_count(s, r, c, dr, dc):            #统计一个方向的同颜色棋子数量
            piece = s.grid[r][c]
            result = 0
            i = 1
            while True:
                new_r = r + dr * i
                new_c = c + dc * i
                if 0 <= new_r < s.grid_count and 0 <= new_c < s.grid_count:
                    if s.grid[new_r][new_c] == piece:              #该方向颜色相同则加上
                        result += 1
                    else:
                        break
                else:
                    break
                i += 1
            return result
    
    
        def draw(s, screen):
            pg.draw.rect(screen, (185, 122, 87), [s.start_x - s.edge_lenght, s.start_y - s.edge_lenght,              #画棋盘
                                                  (s.grid_count - 1) * s.grid_lenght + s.edge_lenght * 2,
                                                  (s.grid_count - 1) * s.grid_lenght + s.edge_lenght * 2], 0)
            for r in range(s.grid_count):                                                                           #画棋盘横线
                y=s.start_y+r*s.grid_lenght
                pg.draw.line(screen,(0,0,0),[s.start_x,y],[s.start_x+s.grid_lenght*(s.grid_count-1),y],2)
            for c in range(s.grid_count):                                                                           #画棋盘竖线
                x = s.start_x+c*s.grid_lenght
                pg.draw.line(screen, (0, 0, 0), [x,s.start_y], [x,s.start_y + s.grid_lenght * (s.grid_count - 1)], 2)
            for r in range(s.grid_count):
                for c in range(s.grid_count):
                    piece=s.grid[r][c]
                    if piece!=".":
                        if piece=="black":                                           #设置棋子颜色
                            color=(0,0,0)
                        else:
                            color=(255,255,255)
                        x=s.start_x+c*s.grid_lenght
                        y=s.start_y+r*s.grid_lenght
                        pg.draw.circle(screen,color,[x,y],s.grid_lenght//2)             #在棋盘上画棋子
    class Gomoku:
        def __init__(s):
            pg.init()
            s.screen=pg.display.set_mode((800,600))
            pg.display.set_caption("五子棋对战")
            s.clock=pg.time.Clock()
            s.font=pg.font.Font(u"C:\Windows\Fonts\Candarab.ttf", 24)
            s.going=True
            s.chessboard=Chessboard()
        def loop(s):                               #主循环
            while s.going:
                s.update()
                s.draw()
                s.clock.tick(50)
            pg.quit()
        def update(s):                            #更新画面
            for e in pg.event.get():
                if e.type==pg.QUIT:
                    s.going=False
                elif e.type==pg.MOUSEBUTTONDOWN:
                    s.chessboard.handle_event(e)
        def draw(s):
            s.screen.fill((255,255,255))                          #窗口底色为白色
            s.screen.blit(s.font.render("FPS:{0:.2F}".format(s.clock.get_fps()),True,(0,0,0)),(10,10))
            s.chessboard.draw(s.screen)                          #画棋盘窗口
            if s.chessboard.gameover:
                s.screen.blit(s.font.render("{0}Win".format("black"if s.chessboard.winner=="black"else"white"),True,(0,0,0)),(500,10))
            pg.display.update()                                 #更新界面
    if __name__=="__main__":
        game=Gomoku()
        game.loop()
    

    更多Python源代码,请关注公众号:Python代码大全
    在这里插入图片描述

    展开全文
  • Python五子棋游戏实现

    2019-04-12 15:00:14
    五子棋游戏python+pyqt5)实现,采取棋盘评分与博弈树搜索进行AI决策
  • 这个python的小案例是五子棋游戏的实现,在这个案例中,我们可以实现五子棋游戏的两个玩家在指定的位置落子,画出落子后的棋盘,并且根据函数判断出输赢的功能。 这个案例的思路如下所示: 首先,根据棋盘的样子画出...
  • 这个python的小案例是五子棋游戏的实现,在这个案例中,我们可以实现五子棋游戏的两个玩家在指定的位置落子,画出落子后的棋盘,并且根据函数判断出输赢的功能。这个案例的思路如下所示:首先,根据棋盘的样子画出...

    这个python的小案例是五子棋游戏的实现,在这个案例中,我们可以实现五子棋游戏的两个玩家在指定的位置落子,画出落子后的棋盘,并且根据函数判断出输赢的功能。

    这个案例的思路如下所示:

    首先,根据棋盘的样子画出棋盘

    然后,对棋盘进行初始化,将可以落子的位置进行统一化处理

    接下来,就是进入游戏的环节,双方轮流落子,落子后,并将棋盘画出

    最后,根据落子的位置判断选手的的输赢情况,游戏结束

    五子棋游戏的设计和实现

    代码如下:

    def main():

    print("五子棋游戏".center(50,'='))

    guige=int(input("请输入棋盘的规格:"))

    #按照五子棋的棋盘样式,画出棋盘

    print_init(guige)

    # 初始化棋盘

    wzq = {}

    for i in range(1, guige + 1):

    for j in range(1, guige + 1):

    wzq[(i, j)] = "+"

    #重画棋盘

    reprint(guige,wzq)

    #按照五子棋的棋盘样式,画出棋盘

    def print_init(guige):

    #打印出首行的棋盘列

    for i in range(guige):

    print("%4d"%(i+1),end='')

    print()

    #双重循环,第一重为棋盘的行,隔一行输出棋盘的行数

    for i in range(guige*2-1):

    #打印出类似 “1 +---+---+---+---+---+”,行号,+,—

    if(i%2==0):

    print("%-3d"%((i+2)/2),end='')

    #第二重循环,为棋盘的列,主要在于找出对应位置显示的内容

    for j in range(guige * 4 - 3):

    if (j % 4 == 0):

    print("+", end='')

    else:

    print("-", end='')

    #打印出类似“ | | | | | |”

    else:

    print("%3s"%' ',end='')

    for j in range(guige*4-3):

    if(j%4==0):

    print("|",end='')

    else:

    print(" ",end='')

    #每行输出完成之后换行

    print()

    #重画棋盘,对双方下子进行重画

    def reprint(guige,wzq):

    for i in range(guige*guige) :

    if i % 2 == 0:

    xuanshou = "X"

    else:

    xuanshou = "O"

    # 双方轮流下棋

    while 1:

    print("现在轮到%s方落子" % xuanshou)

    position = input("请输入落子位置:")

    x_position = int(position.split()[0])

    y_position = int(position.split()[1])

    #判断输入的位置是否有子,有子一直输入,直到输入的位置无子

    if wzq[(x_position, y_position)] in ["X", "O"]:

    print("您输入的位置有子,请重新输入!")

    else:

    break

    if wzq[(x_position, y_position)]=="+":

    #重画棋盘

    wzq[(x_position, y_position)] = xuanshou

    for i in range(guige):

    print("%4d"%(i+1),end='')

    print()

    for i in range(guige*2-1):

    if(i%2==0):

    print("%-3d"%((i+2)/2),end='')

    for j in range(guige * 4 - 3):

    if (j % 4 == 0):

    x=(i+2)/2

    y=j/4+1

    print(wzq[(x,y)],end='')

    else:

    print("-", end='')

    else:

    print("%3s"%' ',end='')

    for j in range(guige*4-3):

    if(j%4==0):

    print("|",end='')

    else:

    print(" ",end='')

    print()

    else:

    isture=True

    print("您输入的位置已经有子,请重新输入!")

    # 判断输赢

    # 第一种情况

    wzq_win1(wzq,guige,xuanshou)

    # 第二种情况

    wzq_win2(wzq,guige,xuanshou)

    # 第三种情况

    wzq_win3(wzq,guige,xuanshou)

    # 第四种情况

    wzq_win4(wzq,guige,xuanshou)

    else:

    print("游戏结束,平局!")

    # 判断输赢

    def wzq_win1(wzq,guige,xuanshou):

    # 第一种输赢情况

    for i in range(1, guige + 1):

    for j in range(1, guige - 3):

    if (wzq[(i, j)] == wzq[(i, j + 1)] == wzq[(i, j + 2)] == wzq[(i, j + 3)] == wzq[(i, j + 4)] and wzq[(i, j)] in ["X", "O"]):

    print("%s获胜,游戏结束!" % xuanshou)

    exit()

    def wzq_win2(wzq,guige,xuanshou):

    # 第二种输赢情况

    for i in range(1, guige - 3):

    for j in range(1, guige + 1):

    if (wzq[(i, j)] == wzq[(i + 1, j)] == wzq[(i + 2, j)] == wzq[(i + 3, j)] == wzq[(i + 4, j)] and wzq[(i, j)] in ["X", "O"]):

    print("%s获胜,游戏结束!" % xuanshou)

    exit()

    def wzq_win3(wzq,guige,xuanshou):

    # 第三种输赢情况

    for i in range(1, guige - 3):

    for j in range(1, guige - 3):

    if (wzq[(i, j)] == wzq[(i + 1, j + 1)] == wzq[(i + 2, j + 2)] == wzq[(i + 3, j + 3)] == wzq[(i + 4, j + 4)] and wzq[(i, j)] in ["X", "O"]):

    print("%s获胜,游戏结束!" % xuanshou)

    exit()

    def wzq_win4(wzq, guige, xuanshou):

    # 第四种输赢情况

    for i in range(1, guige - 3):

    for j in range(5, guige + 1):

    if (wzq[(i, j)] == wzq[(i +1, j - 1)] == wzq[(i + 2, j - 2)] == wzq[(i + 3, j - 3)] == wzq[(i + 4, j - 4)] and wzq[(i, j)] in ["X", "O"]):

    print("%s获胜,游戏结束!" % xuanshou)

    exit()

    main()

    结果如下:

    ======================五子棋游戏=======================

    请输入棋盘的规格:8

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---+---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---+---+---+---+---+

    | | | | | | | |

    5 +---+---+---+---+---+---+---+

    | | | | | | | |

    6 +---+---+---+---+---+---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到X方落子

    请输入落子位置:5 5

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---+---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---+---+---+---+---+

    | | | | | | | |

    5 +---+---+---+---X---+---+---+

    | | | | | | | |

    6 +---+---+---+---+---+---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到O方落子

    请输入落子位置:6 1

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---+---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---+---+---+---+---+

    | | | | | | | |

    5 +---+---+---+---X---+---+---+

    | | | | | | | |

    6 O---+---+---+---+---+---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到X方落子

    请输入落子位置:4 4

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---+---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---X---+---+---+---+

    | | | | | | | |

    5 +---+---+---+---X---+---+---+

    | | | | | | | |

    6 O---+---+---+---+---+---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到O方落子

    请输入落子位置:5 4

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---+---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---X---+---+---+---+

    | | | | | | | |

    5 +---+---+---O---X---+---+---+

    | | | | | | | |

    6 O---+---+---+---+---+---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到X方落子

    请输入落子位置:6 6

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---+---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---X---+---+---+---+

    | | | | | | | |

    5 +---+---+---O---X---+---+---+

    | | | | | | | |

    6 O---+---+---+---+---X---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到O方落子

    请输入落子位置:6 5

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---+---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---X---+---+---+---+

    | | | | | | | |

    5 +---+---+---O---X---+---+---+

    | | | | | | | |

    6 O---+---+---+---O---X---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到X方落子

    请输入落子位置:3 3

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---X---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---X---+---+---+---+

    | | | | | | | |

    5 +---+---+---O---X---+---+---+

    | | | | | | | |

    6 O---+---+---+---O---X---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到O方落子

    请输入落子位置:5 6

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---+---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---X---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---X---+---+---+---+

    | | | | | | | |

    5 +---+---+---O---X---O---+---+

    | | | | | | | |

    6 O---+---+---+---O---X---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    现在轮到X方落子

    请输入落子位置:2 2

    1 2 3 4 5 6 7 8

    1 +---+---+---+---+---+---+---+

    | | | | | | | |

    2 +---X---+---+---+---+---+---+

    | | | | | | | |

    3 +---+---X---+---+---+---+---+

    | | | | | | | |

    4 +---+---+---X---+---+---+---+

    | | | | | | | |

    5 +---+---+---O---X---O---+---+

    | | | | | | | |

    6 O---+---+---+---O---X---+---+

    | | | | | | | |

    7 +---+---+---+---+---+---+---+

    | | | | | | | |

    8 +---+---+---+---+---+---+---+

    X获胜,游戏结束!

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下话不多说,直接上代码:全部工程文件,在GitHub:五子棋效果预览:#!/usr/bin/env python3#-*- coding:utf-8 -*-import pygamefrom ...
  • Python & 2 python五子棋游戏实现

    千次阅读 2019-04-11 00:23:08
    python五子棋游戏实现,其中的AI采取棋盘评分和博弈树算法。 项目背景与规划 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用...
  • 本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下目录简介实现过程结语简介使用python实现pygame版的五子棋游戏;环境:Windows系统+python3.8.0游戏规则:1.分两位棋手对战,默认黑棋先...
  • python五子棋游戏

    2021-08-28 17:14:10
    python新手练习做的一个小游戏,五子棋游戏(黑白子可渲染,也可使用图片,不过此文件纯代码,不含图片,可自行找图替代)
  • 本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下话不多说,直接上代码:全部工程文件,在GitHub:五子棋效果预览:#!/usr/bin/env python3#-*- coding:utf-8 -*-import pygamefrom ...
  • Python大作业——五子棋游戏姓名:学号:姓名:学号:一游戏介绍:我们设计的是五子棋游戏,支持两人一个鼠标对下,黑方用左键单击,白方用右键单击,谁先下均可,落子无悔,下过的棋子对方点击后不会变色,程序可...
  • Pygame、Python五子棋游戏

    万次阅读 2017-08-22 11:27:58
    五子棋游戏Pygamepygame是python的一个第三方库,用来实现游戏界面的开发比较方便,我只用了很简单的一部分来实现五子棋的游戏,想要学习更多的Pygame知识可以看下xishui大大的博客:...主要功能主要是实现了两个人的...
  • 本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下目录简介实现过程结语简介使用python实现pygame版的五子棋游戏;环境:Windows系统+python3.8.0游戏规则:1.分两位棋手对战,默认黑棋先...
  • python 五子棋

    2018-12-29 14:39:12
    Python五子棋程序设计课程大作业,五子棋游戏,支持两人一个鼠标对下,黑方用黑子代替,白方用白子代替,谁先下均可,落子无悔,下过的棋子对方点击后也不可更改。游戏双方需遵循一次下一子的规则。
  • 本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下#五子棋‘”矩阵做棋盘 16*16 “+”打印棋盘 for for游戏是否结束开始下棋 while 游戏是否结束:黑白交替 player=0 p%2==0 ==1 p+=1下棋...
  • 简介这是实验室2018年底招新时的考核题目,使用Python编写一个能够完成基本对战的五子棋游戏。面向新手。程序主要包括两个部分,图形创建与逻辑编写两部分。程序的运行结果:样式创建老规矩,先把用到的包导入进来。...
  • N年前用python写的五子棋游戏,电脑执白子,只能判断一步,新手级别(可以再添加几层循环让它厉害一点) 。程序的UI界面是用python的标准库 Tkinter 写的,有点乱,现在已然看不懂。代码如下,可以在py2.7 下运行:#-...
  • python实现五子棋游戏

    2021-01-20 05:42:07
    本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下 话不多说,直接上代码: 全部工程文件,在GitHub:五子棋 效果预览: #!/usr/bin/env python3 #-*- coding:utf-8 -*- import ...
  • 中文源码网 浏览: 次 日期:2019年11月5日【下载文档: python制作简单五子棋游戏.txt 】(友情提示:右键点上行txt文档名->目标另存为)python制作简单五子棋游戏本文实例为大家分享了python五子棋游戏的具体代码,...
  • 这个python的小案例是五子棋游戏的实现,在这个案例中,我们可以实现五子棋游戏的两个玩家在指定的位置落子,画出落子后的棋盘,并且根据函数判断出输赢的功能。这个案例的思路如下所示:首先,根据棋盘的样子画出...
  • Python五子棋游戏

    2021-09-08 19:14:36
    在刚刚学习完python套接字的时候做的一个五子棋游戏,可以在局域网内双人对战,也可以和电脑对战 实现思路 局域网对战 对于局域网功能来说,首先建立连接(tcp),然后每次下棋时将棋子的坐标发送给对方,当...
  • 原标题:Python游戏五子棋之人机对战开端画棋盘首先肯定是要画出棋盘来,用 pygame 画出一个 19 × 19 或 15 × 15 的棋盘并不是什么难事,这在之前的文章中已经多次用到,就不赘述了。画棋子需要说一下的是画...
  • python-大作业之五子棋游戏(附代码) Python 大作业大作业五子棋游戏五子棋游戏姓名吴欣 学号姓名张雨清 学号 一一 游戏介绍游戏介绍我们设计的是五子棋游戏,支持两人一个鼠标对下,黑方用左键单击,白方用右键单击...
  • 本案例基于UDP的socket编程方法来制作五子棋程序,网络五子棋采用C/S架构,分为服务器端和客户端...1.数据通信协议网络五子棋游戏设计的难点在于对方进行通信,这里使用面向非连接的Socket编程,Socket编程用于C/S开...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 972
精华内容 388
关键字:

python五子棋游戏代码

python 订阅