猫史档案馆


【Python作品分享】五子棋升级版【教程贴】

用户:121115121115查看:0 回复:0 评论:0 创建时间:2023-11-26T12:12:33


【作品展示】

center_image

 

【作品介绍】

我这个五子棋游戏最开始的时候有两个bug:

的一个是他6颗子连在一起都没赢。原因是他只有五颗子连在一起才算赢,只要在判断输赢的函数里边把

if score == 5:

return True

的==5改成>=5就行了。

第二个是你点击下和右边缘的时候会报错:

list index out of range

原因是你点击最下边(第15行)的时候,它会跟第16行比较,它就找不到第16行,就报错了。解决办法:在判断输赢的函数里,把它改成尝试判断输赢,报错了就直接跳出循环,这样就可以确保游戏的正常运行。

 

【作品源代码】

import pygame

pygame.init()
screen = pygame.display.set_mode((750,750))

row_map = [0]*15
winner = 0
player = 1
for i in range(15):
    row_map[i] = [0]*15

running = True

def check(row,col):
    score = 1
    for i in range(4):
        try:
            if row_map[row][col+i] == row_map[row][col+i+1]:
                score += 1
            else:
                break
        except:
            break
    for i in range(4):
        try:
            if row_map[row][col-i] == row_map[row][col-i-1]:
                score += 1
            else:
                break
        except:
            break
    if score >= 5:
        return True
    score = 1
    for i in range(4):
        try:
            if row_map[row+i][col] == row_map[row+i+1][col]:
                score += 1
            else:
                break
        except:
            break
    for i in range(4):
        try:
            if row_map[row-i][col] == row_map[row-i-1][col]:
                score += 1
            else:
                break
        except:
            break
    if score >= 5:
        return True
    score = 1
    for i in range(4):
        try:
            if row_map[row+i][col+i] == row_map[row+i+1][col+i+1]:
                score += 1
            else:
                break
        except:
            break
    for i in range(4):
        try:
            if row_map[row-i][col-i] == row_map[row-i-1][col-i-1]:
                score += 1
            else:
                break
        except:
            break
    if score >= 5:
        return True
    score = 1
    for i in range(4):
        try:
            if row_map[row+i][col-i] == row_map[row+i+1][col-i-1]:
                score += 1
            else:
                break
        except:
            break
    for i in range(4):
        try:
            if row_map[row-i][col+i] == row_map[row-i-1][col+i+1]:
                score += 1
            else:
                break
        except:
            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 row_map[row][col] == 0:
                row_map[row][col] = player
                if(check(row,col)):
                    winner = player
                else:
                    if player == 1:
                        player = 2
                    else:
                        player = 1

    screen.fill("#ee9a49")

    for x in range(15):
        pygame.draw.line(screen,"#000000",[25,25+50*x],[725,25+50*x],2)

    for y in range(15):
        pygame.draw.line(screen,"#000000",[25+50*y,25],[25+50*y,725],2)

    pygame.draw.circle(screen,"#000000",[25+50*7,25+50*7],8)

    x,y = pygame.mouse.get_pos()
    x = round((x - 25)/50)*50 + 25
    y = round((y - 25)/50)*50 + 25

    pygame.draw.rect(screen,"#ffffff",[x - 25,y - 25,50,50],2)

    for row in range(15):
        for col in range(15):
            if row_map[row][col] == 1:
                pygame.draw.circle(screen,"#000000",[col*50+25,row*50+25],25)
            elif row_map[row][col] == 2:
                pygame.draw.circle(screen,"#ffffff",[col*50+25,row*50+25],25)

    pygame.display.update()

    if(winner!=0):
        if winner == 1:
            text = "黑子赢了!3秒关闭"
            color = "#000000"
        else:
            text = "白子赢了!3秒关闭"
            color = "#ffffff"
        font = pygame.font.Font("font.ttf",70)
        text_surface = font.render(text,True,color)
        text_pos = (100,100)
        screen.blit(text_surface,text_pos)
        pygame.display.update()
        pygame.time.wait(3000)
        running = False

pygame.quit()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页