欢迎访问宙启技术站
智能推送

使用Python的curses库进行控制台游戏开发

发布时间:2024-01-03 19:52:37

使用Python的curses库可以在控制台中开发文字界面的游戏。curses库提供了一组用于控制终端的函数,可以在控制台中创建文本、窗口、按键监听等各种操作。下面我们将使用curses库开发一个简单的井字棋游戏作为示例。

首先,我们需要导入curses库,并初始化一个窗口。

import curses

# 初始化窗口
stdscr = curses.initscr()
curses.curs_set(0)  # 隐藏光标

接下来,我们定义游戏的逻辑和界面绘制函数。

# 游戏逻辑
def tic_tac_toe():
    # 初始化游戏状态
    board = [[' ']*3 for _ in range(3)]
    player = 'X'

    while True:
        # 绘制游戏界面
        stdscr.clear()
        stdscr.addstr(0, 0, " 0 | 1 | 2 ")
        stdscr.addstr(1, 0, "---+---+---")
        stdscr.addstr(2, 0, f" {board[0][0]} | {board[0][1]} | {board[0][2]} ")
        stdscr.addstr(3, 0, "---+---+---")
        stdscr.addstr(4, 0, f" {board[1][0]} | {board[1][1]} | {board[1][2]} ")
        stdscr.addstr(5, 0, "---+---+---")
        stdscr.addstr(6, 0, f" {board[2][0]} | {board[2][1]} | {board[2][2]} ")
        stdscr.refresh()

        # 获取玩家输入
        key = stdscr.getch()

        if key == ord('q'):
            break
        elif ord('1') <= key <= ord('9'):
            row, col = (key-ord('1')) // 3, (key-ord('1')) % 3
            # 若位置为空,则玩家下棋
            if board[row][col] == ' ':
                board[row][col] = player
                # 判断游戏结果
                if check_win(board, player):
                    stdscr.addstr(8, 0, f"{player} wins!")
                    stdscr.refresh()
                    stdscr.getch()
                    break
                elif check_draw(board):
                    stdscr.addstr(8, 0, "Draw!")
                    stdscr.refresh()
                    stdscr.getch()
                    break
                # 切换玩家
                player = 'O' if player == 'X' else 'X'

# 判断是否胜利
def check_win(board, player):
    for i in range(3):
        if board[i][0] == board[i][1] == board[i][2] == player:
            return True
        if board[0][i] == board[1][i] == board[2][i] == player:
            return True
    if board[0][0] == board[1][1] == board[2][2] == player:
        return True
    if board[0][2] == board[1][1] == board[2][0] == player:
        return True
    return False

# 判断是否平局
def check_draw(board):
    for i in range(3):
        for j in range(3):
            if board[i][j] == ' ':
                return False
    return True

最后,在主函数中调用游戏逻辑函数并结束游戏。

def main():
    tic_tac_toe()
    curses.endwin()

if __name__ == '__main__':
    main()

以上便是使用Python的curses库开发控制台游戏的简单示例。你可以在终端中使用1-9键盘按键输入数字来下棋,按下q键结束游戏。游戏逻辑中还包括判断胜利和平局的逻辑。你可以根据需要进行扩展和改进,实现更复杂的游戏功能。