Human: 扫雷代码

Assistant: 以下是一个简单的扫雷游戏的Python代码：
```python
import random

class Minesweeper:
    def __init__(self, size, mines):
        self.size = size                          # 棋盘大小
        self.mines = mines                        # 地雷数量
        self.board = [[0 for _ in range(size)] for _ in range(size)]  # 棋盘，用二维列表表示
        self.visible_board = [['-' for _ in range(size)] for _ in range(size)]  # 可见的棋盘，用二维列表表示
        self.game_over = False                     # 游戏是否结束
        self.generate_mines()                      # 生成地雷

    def generate_mines(self):
        mines_placed = 0                           # 记录已经放置的地雷数量
        while mines_placed < self.mines:
            row = random.randint(0, self.size-1)   # 随机生成行坐标
            col = random.randint(0, self.size-1)   # 随机生成列坐标
            if self.board[row][col] != '*':        # 如果该位置没有地雷
                self.board[row][col] = '*'         # 在该位置放置地雷
                mines_placed += 1                   # 已放置地雷数量加1
                # 遍历该位置周围的8个位置，如果不是地雷，则将数字加1
                for r in range(row-1, row+2):
                    for c in range(col-1, col+2):
                        if (r >= 0 and r < self.size and c >= 0 and c < self.size
                                and self.board[r][c] != '*'):
                            self.board[r][c] += 1

    def play(self, row, col):
        if self.game_over:
            print('Game Over')
            return
        if self.board[row][col] == '*':           # 如果该位置是地雷
            self.visible_board[row][col] = '*'    # 在可见棋盘中显示地雷
            self.game_over = True                  # 游戏结束
            print('Game Over')
        else:                                     # 如果该位置不是地雷
            self.reveal(row, col)                  # 揭示该位置周围的位置
            self.print_board()                     # 打印可见棋盘
            if self.check_win():                   # 检查是否获胜
                print('You Win!')

    def reveal(self, row, col):
        # 如果该位置已经揭示过，或者超出棋盘范围，返回
        if (row < 0 or row >= self.size or col < 0 or col >= self.size
                or self.visible_board[row][col] != '-'):
            return
        # 在可见棋盘中显示该位置的数字
        self.visible_board[row][col] = str(self.board[row][col])
        # 如果该位置数字为0，揭示周围的8个位置
        if self.board[row][col] == 0:
            for r in range(row-1, row+2):
                for c in range(col-1, col+2):
                    self.reveal(r, c)

    def check_win(self):
        # 遍历整个棋盘，如果有未揭示的非地雷位置，返回False
        for row in range(self.size):
            for col in range(self.size):
                if self.visible_board[row][col] == '-' and self.board[row][col] != '*':
                    return False
        return True

    def print_board(self):
        for row in range(self.size):
            print(' '.join(self.visible_board[row]))

if __name__ == '__main__':
    size = 10
    mines = 10
    game = Minesweeper(size, mines)
    game.print_board()
    while not game.game_over:
        row, col = input('Enter row and column (separated by space): ').strip().split()
        row, col = int(row), int(col)
        game.play(row, col)
```
该代码实现了一个10x10的扫雷游戏，有10个地雷。它在命令行中运行，每次提示用户输入要揭示的行和列。输入回车后，程序会更新可见的棋盘并检查是否获胜或失败。

Human: 你可以演示一下这个程序运行时的界面吗？

Assistant: 这个扫雷游戏的运行时界面如下：
```
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
Enter row and column (separated by space): 
```
它表示一个10x10的扫雷棋盘，`-`表示该格子还没有被翻开，所以现在是游戏的开局。

您可以输入0开始的行号和列号，以空格隔开，比如`0 3`或`9 9`，以翻开某一行某一列的格子。翻开一个非地雷的格子后，如果周围8格有地雷，就会用数字`1-8`显示当前格子周围的地雷数量，如果没有地雷，就会递归地翻开周围的没有地雷的格子。

比如在某一场游戏中，输入`5 5`（第6行第6列）后，游戏界面更新为如下：
```
0 1 - 1 0 1 - - - -
0 1 - 1 0 1 1 2 - -
0 1 1 1 0 0 0 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 1
0 0 1 1 1 0 1 - - -
0 0 1 - 1 0 2 - - -
2 2 3 - 2 0 1 - - -
- - - - 1 0 1 - - -
Enter row and column (separated by space):
```

当您翻开所有非地雷的格子后，就能取胜。

Human: 这个扫雷写得可以，那你还能再用Python写一个2048游戏吗？