【Python开发实践】AI人机对战五子棋——按钮功能的实现

发布于:2024-08-21 ⋅ 阅读:(110) ⋅ 点赞:(0)

在五子棋对战中,有以下按钮需要实现:

选择白棋:pick white

选择黑棋:pcik black

投降:surrender

下面是具体的实现:

按钮方法的父类

class Button:
    def __int__(self,screen,text,x,y,color,enable):
        self.screen=screen
        self.width=button_w
        self.height=button_h
        self.button_color=color
        self.text_color=(255,255,255)
        self.enable=enable
        self.font=pygame.font.SysFont(None,button_h*2//3)
        self.rect=pygame.Rect(0,0,self.width,self.height)
        self.rect.topleft=(x,y)
        self.text=text
        self.init_msg()
    #重写pygame函数,初始化按钮
    def init_msg(self):
        if self.enable:
            self.msg_iamge=self.font.render(self.text,True,self.text_color,self.button_color[0])
        else:
            self.msg_iamge=self.font.render(self.text,True,self.text_color,self.button_color[1])
        self.msg_iamge_rect=self.msg_iamge.get_rect()
        self.msg_iamge_rect.center=self.rect.center
    #根据按钮的enable状态填色,具体颜色在后续子类控制
    def draw(self):
        if self.enable:
            self.screen.fill(self.button_color[0],self.rect)
        else:
            self.screen.fill(self.button_color[1],self.rect)
        self.screen.blit(self.msg_iamge,self.msg_iamge_rect)

实现选择白棋的功能

class WhiteStartButton(Button):             #开始按钮(选择白棋)
    def __int__(self,screen,text,x,y):
        super().__int__(screen,text,x,y,[(26,173,25),(158,217,157)],True)
    def click(self,game):                   #点击,pygame内置方法
        if self.enable:
            game.start()
            game.winner=None
            game.multiple=False
            self.msg_iamge=self.font.render(self.text,True,self.text_color,self.button_color[1])
            self.enable=False
            return True
        return False
    def unclick(self):
        if not self.enable:
            self.msg_iamge=self.font.render(self.text,True,self.text_color,self.button_color[0])
            self.enable=True

实现选择黑棋的功能

class BlackStartButton(Button):             #开始按钮(选择黑棋)
    def __int__(self,screen,text,x,y):
        super().__int__(screen,text,x,y,[(26,173,25),(158,217,157)],True)
    def click(self,game):                   #点击,pygame内置方法
        if self.enable:
            game.start()
            game.winner=None
            game.multiple=False
            self.msg_iamge=self.font.render(self.text,True,self.text_color,self.button_color[1])
            self.enable=False
            return True
        return False
    def unclick(self):
        if not self.enable:
            self.msg_iamge=self.font.render(self.text,True,self.text_color,self.button_color[0])
            self.enable=True

实现投降的功能

class GiveupButton(Button):
    def __int__(self,screen,text,x,y):
        super().__int__(screen,text,x,y,[(230,67,64),(236,139,137)],False)
    def click(self,game):
        if self.enable:
            game.is_play=False
            if game.winner is None:
                game.winner=game.map.intoNextTurn(game.player)
            self.msg_iamge=self.font.render(self.text,True,self.text_color,self.button_color[1])
            self.enable=False
            return True
        return False
    def unclick(self):
        if not self.enable:
            self.msg_iamge=self.font.render(self.text,True,self.text_color,self.button_color[0])
            self.enable=True


网站公告

今日签到

点亮在社区的每一天
去签到