在五子棋对战中,有以下按钮需要实现:
选择白棋: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