用Python做五子棋小游戏,Pygame库

游戏大致介绍:两个玩家通过依次操作鼠标进行落子,其中谁先达成五子连线谁就获得最终胜利

import pygame,sys

老规矩先导入要用到的两个包,没有下载和导入pygame的包请参考链接:
安装Pygame包

first_colour=(0,0,0)#黑色
second_colour=(0,0,255)#蓝色

定义两种颜色,分别代表两位玩家

chessboard=[[0for i in range(16)]for i in range(16)]

创建chessboard[16][16]数组,保存每个棋子的坐标,方便判断输赢

is_win(x,y,logo)的作用是根据当前落子的坐标(x,y)和落子的玩家(logo1代表第一位玩家,logo2代表第二位玩家)来判断当前落子的玩家是否获得胜利

def is_win(x,y,logo):
    left=right=1 #用于计数当前落子位置的左(left),右(right)两边的本方棋子个数

    left_right=1#用于计数当前落子位置横向本方棋子数量

    up=down=1#用于计数当前落子位置的上(up),下(down)两边的本方棋子个数

    up_down=1#用于计数当前落子位置纵向本方棋子数量
    ####同理:
                   ##下面是对于两个斜向的棋子数量的统计计数的定义
    left_up=right_down=1
    left_down=right_up=1
    left_down_right_up=1
    left_up_right_down=1
 while  y-left>=0:
             if chessboard[x][y-left]==logo:
                 left_right+=1
                 left+=1
             else:
                 break
 while  right+y

分别以当前位置坐标搜索左右两个方向的本方棋子数

    while  x-up>=0:
                if chessboard[x-up][y]==logo:
                    up_down+=1
                    up+=1
                else:
                    break
    while  down+x

分别以当前位置坐标搜索上下两个方向的本方棋子数

 while  x-left_up>=0 and y-left_up>=0:
             if chessboard[x-left_up][y-left_up]==logo:
                 left_up_right_down+=1
                 left_up+=1
             else:
                 break
 while  right_down+x
    while  x+left_down=0:
                if chessboard[x+left_down][y-left_down]==logo:
                    left_down_right_up+=1
                    left_down+=1
                else:
                    break
    while  x-right_up>=0 and y+right_up

分别以当前位置坐标搜索左个左下和方右上两个方向的本方棋子数

    if left_right>=5 or up_down>=5 or left_down_right_up>=5 or left_up_right_down>=5:
             return 1
    else:
             return 0

判断,如果有某一条直线上的棋子数量大于等于5,就返回1(胜利),反之,返回0(失败)

def main():
     now_colour=first_colour#记录当前落子的棋子颜色
     pygame.init();
     screen=pygame.display.set_mode((450,450))#设置游戏窗口大小为400*400
     screen.fill((255,255,255))#设置棋盘背景为白色
     while True:

              for i in range(0,450,30):
                     pygame.draw.line(screen, pygame.Color(255, 0, 0), (0,i),(450,i),1)
                     pygame.draw.line(screen, pygame.Color(255, 0, 0), (i,0),(i,450),1)
                     #画棋盘,16*16,(255,0,0)红色的线

用Python做五子棋小游戏,Pygame库
              for event in pygame.event.get():
                           if   event.type==pygame.MOUSEBUTTONDOWN:
                 ##当获取到鼠标点击事件后,pos记录点击的坐标
                                pos=[event.pos[0],event.pos[1]]
                  ##将pos的坐标标准化为chessboard数组的坐标(除以30)
                                pos[0]=int(pos[0]/15)
                                if pos[0]%2!=0:
                                    pos[0]=(pos[0]+1)*15
                                else:
                                    pos[0]=pos[0]*15
                                pos[1]=int(pos[1]/15)
                                if pos[1]%2!=0:
                                    pos[1]=int(pos[1]+1)*15
                                else:
                                    pos[1]=int(pos[1]*15)
 `

注意这里的:
pos[0]=int(pos[0]/15)
if pos[0]%2!=0:
pos[0]=(pos[0]+1)15
else:
pos[0]=pos[0]
15
实际上是对于鼠标点击区域的一个最接近判断,将鼠标坐标定位到最接近的棋盘坐标(因为棋盘坐标只有30的倍数)

                              pygame.draw.circle(screen,now_colour , (pos[0],pos[1]), 10,10)##画出当前棋子
                              if now_colour==first_colour:
                                     chessboard[int(pos[1]/30)][int(pos[0]/30)]=1
                                     if is_win(int(pos[1]/30),int(pos[0]/30),1)==1:
                                              print("The First Scored!")
                                              break;
                                     now_colour=second_colour##转换棋子颜色(轮到另一个玩家落子)
                              elif now_colour==second_colour:
                                      chessboard[int(pos[1]/30)][int(pos[0]/30)]=2
                                      if is_win(int(pos[1]/30),int(pos[0]/30),2)==1:
                                              print("The Second Scored!")
                                              break;
                                      now_colour=first_colour##转换棋子颜色(轮到另一个玩家落子)
                         elif event.type==pygame.QUIT:
                              sys.exit()
            pygame.display.update()
main()

用Python做五子棋小游戏,Pygame库
用Python做五子棋小游戏,Pygame库

小游戏还有需要完善的地方,比如:做一个计分面板,每次五子相连记分;添加落子音效,游戏背景音乐什么的

总之游戏大致框架就是这样

Original: https://blog.csdn.net/m0_56060629/article/details/115841730
Author: searching learner
Title: 用Python做五子棋小游戏,Pygame库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782347/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球