猫史档案馆


【Python作品分享】five_in_a_row(五子棋)

用户:张嘉文2张嘉文2查看:0 回复:0 评论:0 创建时间:2024-05-31T19:24:53


【作品展示】

center_image

 

【作品介绍】

 

【作品源代码】

import pygame

pygame.init()
screen = pygame.display.set_mode((750,850))
pygame.display.set_caption("五子棋")

border_left = 25
border_right = 725
border_top = 25
border_bottom = 725
width = 50
height = 50

map = [0]*15
for i in range(15):
    map[i] = [0]*15

player = 1
winner = 0

running = True

font = pygame.font.Font("font.ttf", 24)

class Button:
    def _init_(self,x,y,width,height,text,color,click_color,text_color) -> None:
        self.text = text
        self.color = color
        self.click_color = click_color
        self.text_color = text_color
        self.rect = pygame.Rect(x,y,width,height)
        self.clicked = False

    def draw(self,screen):
        if self.clicked:
            pygame.draw.rect(screen,self.click_color,self.rect)
        else:
            pygame.draw.rect(screen,self.color,self.rect)

def check(row,col):
    #判断左右方向是否五子连线
    score = 1
    for i in range(4):
        if map[row][col+i] == map[row][col+i+1]:
            score = score + 1
        else:
            break
    for i in range(4):
        if map[row][col-i] == map[row][col-i-1]:
            score = score + 1
        else:
            break
    if score >= 5:
        return True

    #判断上下方向是否五子连线
    score = 1
    for i in range(4):
        if map[row+i][col] == map[row+i+1][col]:
            score = score + 1
        else:
            break
    for i in range(4):
        if map[row-i][col] == map[row-i-1][col]:
            score = score + 1
        else:
            break
    if score >= 5:
        return True

    #判断左下到右上倾斜方向是否五子连线
    score = 1
    for i in range(4):
        if map[row+i][col+i] == map[row+i+1][col+i+1]:
            score = score + 1
        else:
            break
    for i in range(4):
        if map[row-i][col-i] == map[row-i-1][col-i-1]:
            score = score + 1
        else:
            break
    if score >= 5:
        return True

    #判断左上到右下倾斜方向是否五子连线
    score = 1
    for i in range(4):
        if map[row-i][col+i] == map[row-i-1][col+i+1]:
            score = score + 1
        else:
            break
    for i in range(4):
        if map[row+i][col-i] == map[row+i+1][col-i-1]:
            score = score + 1
        else:
            break
    if score >= 5:
        return True

while running:
    for event in pygame.event.get():
        if (event.type == pygame.QUIT):
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x,y = pygame.mouse.get_pos()
            col = round((x - 25)/50)
            row = round((y - 25)/50)
            if map[row][col] == 0:
                print(row+1,col+1)
                map[row][col] = player
                if(check(row,col)):
                    winner = player
                else:
                    if player == 1:
                        player = 2
                    else:
                        player = 1
            else:
                print("这个位置已经有棋子了")

    screen.fill((238,154,73))

    #竖线
    for x in range(15):
        pygame.draw.line(screen,((0,0,0)),[border_left+width*x,border_top],[border_left+width*x,border_bottom],2)
    #横线
    for y in range(15):
        pygame.draw.line(screen,((0,0,0)),[border_left,border_top+height*y],[border_right,border_top+height*y],2)

        pygame.draw.circle(screen,((0,0,0)),[border_left+width*7,border_top+height*7],8)

        x,y = pygame.mouse.get_pos()
        x = round((x - border_left)/width)*width + border_left
        y = round((y - border_top)/height)*height + border_top

        pygame.draw.rect(screen,((255,255,255)),[x-border_left,y-border_top,width,height],2)

        pygame.draw.rect(screen,((153,51,250)),[50,750,100,50],2)
        text_surface = font.render("双人对战",True,((255,255,255)))
        text_position = (50,750)
        screen.blit(text_surface,text_position)

        for row in range(15):
            for col in range(15):
                if map[row][col] == 1:
                    pygame.draw.circle(screen,((0,0,0)),[col*width+border_left,row*height+border_top],border_left)
                elif map[row][col] == 2:
                    pygame.draw.circle(screen,((255,255,255)),[col*width+border_left,row*height+border_top],border_top)

    pygame.display.update()

    if(winner!=0):
        if(winner==1):
            text = '!黑方赢了!五秒后关闭'
            color = (0,0,0)
        else:
            text = '!白方赢了!五秒后关闭'
            color = (255,255,255)
        font = pygame.font.Font("font.ttf", 70)
        text_surface = font.render(text,True,color)
        text_position = (100,100)
        screen.blit(text_surface,text_position)
        pygame.display.update()
        pygame.time.wait(5000)
        running = False

pygame.quit()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页