def __choose_button(self, x, y): """ 根据用户控制执行游戏逻辑,重新开始游戏,退出游戏,或者在棋盘内落子 :param x:鼠标横坐标 :param y:鼠标纵坐标 :return:无 """ pass left = self.__cell_width * self.__n+40 right=left + 150 if left < x < right: if 370 < y < 420: #重新开始 self.start() elif 300 < y < 350: pygame.quit() sys.exit() elif 230 < y < 280: self.__pvp() elif 160 < y < 210: self.__first() elif 0 < x < self.__cell_width*(self.__n-1) + self.__margin*2: self.__next_step(x, y) def valide(self, row, col, direct): if direct== 0: if 0 <= row <= (self.__n-1) and 0 <= col <= (self.__n-2): if 0 <= row <(self.__n-1): return self.logic_board_state[row*(self.__n-1)+col][0] == 0 else: return self.logic_board_state[(row-1)*(self.__n-1)+col][1] == 0 else: return False elif direct == 1: if 0 <= col <= (self.__n-1) and 0 <= row <= (self.__n-1): if 0 <= col < (self.__n-1): return self.logic_board_state[row*(self.__n-1)+col][2] == 0 else: return self.logic_board_state[row*(self.__n-1)+col-1][3] == 0 else: return False
时间: 2024-02-10 10:26:42 浏览: 28
这是两个方法的实现。
`__choose_button` 方法用于根据用户的输入控制游戏的逻辑。根据输入的鼠标坐标 `(x, y)`,判断用户点击的是重新开始游戏、退出游戏、PvP模式还是选择先手。如果点击在棋盘内,则调用 `__next_step` 方法进行落子。该方法没有返回值。
`valide` 方法用于检查给定的行、列和方向是否是有效的落子位置。根据给定的 `row`、`col` 和 `direct` 参数,判断是否在有效的范围内,并且该位置上没有已经落子。如果满足条件,则返回 True,否则返回 False。
相关问题
def __choose_button(self,x,y): ''' 根据用户控制执行游戏逻辑,重新开始游戏、退出游戏,或者在棋盘内落子 :param x:横坐标 :param y:纵坐标 :return: ''' left = self.__cell_width *self.__n+40 right = left+150 if left<x<right: if 420 < y < 470: # print('choose button\n') self.start() elif 500 < y < 550: pygame.quit() sys.exit() elif 0<x<self.__cell_width * (self.__n-1)+self.__margin*2: self.__next_step(x,y) pass def __next_step(self,x,y): ''' :param x:横坐标 :param y:纵坐标 :return: ''' color=0 if len(self.__history) % 4==0 or (len(self.__history)+1)%4==0 else 1 row=round((y-self.__margin)/self.__cell_width) col=round((x-self.__margin)/self.__cell_width) # print(f'row col:{row},{col}') if self.__pos_valid(row,col): self.__history.append((row, col)) self.__logic_board[row][col] = color + 1 self.__game_board.draw_chess(row, col,self.__logic_board[row][col]) result=self.__judge(row,col) if result in (1,2,-1): self.__game_board.pop_winner(result) self.__save(result) # self.__game_state=SixInRowGame.Stop pass def __pos_valid(self,row,col): return 0<=row<self.__n and 0<=col<self.__n and not self.__logic_board[row][col]
这段代码是一个私有方法`__choose_button(self, x, y)`,用于根据用户的操作执行游戏的逻辑。根据方法的注释,该方法可能会重新开始游戏、退出游戏,或者在棋盘内落子。
首先,方法中定义了两个变量`left`和`right`,用于确定重新开始游戏和退出游戏按钮的点击范围。
接下来,通过对给定的x和y坐标进行判断,确定用户是点击了哪个按钮或者在棋盘内进行了落子操作。
- 如果x在`left`和`right`之间,并且y在420到470之间,表示用户点击了重新开始游戏按钮,此时调用`self.start()`方法重新开始游戏。
- 如果x在`left`和`right`之间,并且y在500到550之间,表示用户点击了退出游戏按钮,此时调用`pygame.quit()`和`sys.exit()`方法退出游戏。
- 如果x在棋盘范围内,即0到(self.__cell_width * (self.__n-1) + self.__margin * 2)之间,调用`self.__next_step(x, y)`方法进行落子操作。
在`__next_step(self, x, y)`方法中,根据当前落子的顺序确定玩家的颜色。然后根据给定的x和y坐标计算出所在的行和列。如果位置合法(即在棋盘范围内且未被占据),则将该位置添加到历史记录中,并在逻辑棋盘和游戏界面上绘制相应的棋子。最后,调用`self.__judge(row, col)`方法判断游戏结果,并根据结果进行相应的操作。
`__pos_valid(self, row, col)`方法是一个辅助方法,用于判断给定的行和列是否合法,即在棋盘范围内且未被占据。如果合法,则返回True,否则返回False。
这段代码实现了用户操作的响应逻辑,根据用户的点击位置进行相应的处理,包括重新开始游戏、退出游戏和落子操作。
def start(self): self.logic_board_owner = [0]*((self.__n-1)*(self.__n-1)) self.logic_board_state = [[0]*(self.__n-1) for _ in range((self.__n-1)*(self.__n-1))] #[上,下,左,右] self.__history = 0 self.direct= 0 self.turelly_history = 0 self.judge_colory = False self.game_board = None self.__game_board = Game_Board(self.__cell_width,self.__n,self.__margin) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == locals.MOUSEBUTTONDOWN: if event.button == 1: x, y = event.pos[0], event.pos[1] self.__choose_button(x, y) pygame.display.update()
这段代码是一个`start`方法,它包含了一个主要的游戏循环。在开始游戏时,它会初始化一些变量,设置游戏的初始状态。
首先,它将`logic_board_owner`列表初始化为长度为`((self.__n-1)*(self.__n-1))`的全零列表。这个列表应该用于记录每个逻辑棋盘位置的所有者。
然后,它将`logic_board_state`初始化为一个二维列表,大小为`(self.__n-1)`行乘以`((self.__n-1)*(self.__n-1))`列,每个元素都是零。这个二维列表应该用于记录每个逻辑棋盘位置的状态,包括上、下、左、右四个方向。
接下来,它将一些其他变量初始化为零或False,并创建一个名为`__game_board`的`Game_Board`对象。
然后,进入一个无限循环,通过获取并处理游戏中发生的事件。如果点击了鼠标左键,获取鼠标点击的位置,并调用`__choose_button`方法来处理点击事件。
最后,通过调用`pygame.display.update()`来更新屏幕显示。
这段代码的作用是启动游戏并处理用户的输入和事件。如果还有其他问题,请继续提问。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)