• 技术文章 >Python技术 >Python基础教程

    python开发俄罗斯方块小游戏代码实例

    2021-02-06 15:11:07原创2723

    python开发实例.png

    1.操作环境

    win10系统,python3.5以上系统,

    2.相关模块

    pyqt5模块;

    以及一些Python自带的模块。

    3.安装Python并添加到环境变量,pip安装需要的相关模块。

    pip install -r requirements.txt

    4.运行下面代码

    '''
    
    
    Function:
    
        俄罗斯方块主程序
    
    Author:
    
        Charles
    
    公众号:
    
        Charles的皮卡丘
    
    '''
    
    import
    os
    
    import
    sys
    
    import
    random
    
    from
    modules
    import
    *
    
    from
    PyQt5
    .
    QtGui
    import
    *
    
    from
    PyQt5
    .
    QtCore
    import
    *
    
    from
    PyQt5
    .
    QtWidgets
    import
    *
    
    
    
    
    
    '''定义俄罗斯方块游戏类'''
    
    class
    TetrisGame
    (
    QMainWindow
    ):
    
    def
    __init__
    (
    self
    , 
    parent
    =
    None
    ):
    
    super
    (
    TetrisGame
    , 
    self
    ).
    __init__
    (
    parent
    )
    
    # 是否暂停ing
    
    self
    .
    is_paused
    =
    False
    
    # 是否开始ing
    
    self
    .
    is_started
    =
    False
    
    self
    .
    initUI
    ()
    
    '''界面初始化'''
    
    def
    initUI
    (
    self
    ):
    
    # icon
    
    self
    .
    setWindowIcon
    (
    QIcon
    (
    os
    .
    path
    .
    join
    (
    os
    .
    getcwd
    (), 
    'resources/icon.jpg'
    )))
    
    # 块大小
    
    self
    .
    grid_size
    =
    22
    
    # 游戏帧率
    
    self
    .
    fps
    =
    200
    
    self
    .
    timer
    =
    QBasicTimer
    ()
    
    # 焦点
    
    self
    .
    setFocusPolicy
    (
    Qt
    .
    StrongFocus
    )
    
    # 水平布局
    
    layout_horizontal
    =
    QHBoxLayout
    ()
    
    self
    .
    inner_board
    =
    InnerBoard
    ()
    
    self
    .
    external_board
    =
    ExternalBoard
    (
    self
    , 
    self
    .
    grid_size
    , 
    self
    .
    inner_board
    )
    
    layout_horizontal
    .
    addWidget
    (
    self
    .
    external_board
    )
    
    self
    .
    side_panel
    =
    SidePanel
    (
    self
    , 
    self
    .
    grid_size
    , 
    self
    .
    inner_board
    )
    
    layout_horizontal
    .
    addWidget
    (
    self
    .
    side_panel
    )
    
    self
    .
    status_bar
    =
    self
    .
    statusBar
    ()
    
    self
    .
    external_board
    .
    score_signal
    [
    str
    ].
    connect
    (
    self
    .
    status_bar
    .
    showMessage
    )
    
    self
    .
    start
    ()
    
    self
    .
    center
    ()
    
    self
    .
    setWindowTitle
    (
    'Tetris —— Charles的皮卡丘'
    )
    
    self
    .
    show
    ()
    
    self
    .
    setFixedSize
    (
    self
    .
    external_board
    .
    width
    () 
    +
    self
    .
    side_panel
    .
    width
    (), 
    self
    .
    side_panel
    .
    height
    () 
    +
    self
    .
    status_bar
    .
    height
    ())
    
    '''游戏界面移动到屏幕中间'''
    
    def
    center
    (
    self
    ):
    
    screen
    =
    QDesktopWidget
    ().
    screenGeometry
    ()
    
    size
    =
    self
    .
    geometry
    ()
    
    self
    .
    move
    ((
    screen
    .
    width
    () 
    -
    size
    .
    width
    ()) 
    //
    2
    , (
    screen
    .
    height
    () 
    -
    size
    .
    height
    ()) 
    //
    2
    )
    
    '''更新界面'''
    
    def
    updateWindow
    (
    self
    ):
    
    self
    .
    external_board
    .
    updateData
    ()
    
    self
    .
    side_panel
    .
    updateData
    ()
    
    self
    .
    update
    ()
    
    '''开始'''
    
    def
    start
    (
    self
    ):
    
    if
    self
    .
    is_started
    :
    
    return
    
    self
    .
    is_started
    =
    True
    
    self
    .
    inner_board
    .
    createNewTetris
    ()
    
    self
    .
    timer
    .
    start
    (
    self
    .
    fps
    , 
    self
    )
    
    '''暂停/不暂停'''
    
    def
    pause
    (
    self
    ):
    
    if
    not
    self
    .
    is_started
    :
    
    return
    
    self
    .
    is_paused
    =
    not
    self
    .
    is_paused
    
    if
    self
    .
    is_paused
    :
    
    self
    .
    timer
    .
    stop
    ()
    
    self
    .
    external_board
    .
    score_signal
    .
    emit
    (
    'Paused'
    )
    
    else
    :
    
    self
    .
    timer
    .
    start
    (
    self
    .
    fps
    , 
    self
    )
    
    self
    .
    updateWindow
    ()
    
    '''计时器事件'''
    
    def
    timerEvent
    (
    self
    , 
    event
    ):
    
    if
    event
    .
    timerId
    () 
    ==
    self
    .
    timer
    .
    timerId
    ():
    
    removed_lines
    =
    self
    .
    inner_board
    .
    moveDown
    ()
    
    self
    .
    external_board
    .
    score
    +=
    removed_lines
    
    self
    .
    updateWindow
    ()
    
    else
    :
    
    super
    (
    TetrisGame
    , 
    self
    ).
    timerEvent
    (
    event
    )
    
    '''按键事件'''
    
    def
    keyPressEvent
    (
    self
    , 
    event
    ):
    
    if
    not
    self
    .
    is_started
    or
    self
    .
    inner_board
    .
    current_tetris
    ==
    tetrisShape
    ().
    shape_empty
    :
    
    super
    (
    TetrisGame
    , 
    self
    ).
    keyPressEvent
    (
    event
    )
    
    return
    
    key
    =
    event
    .
    key
    ()
    
    # P键暂停
    
    if
    key
    ==
    Qt
    .
    Key_P
    :
    
    self
    .
    pause
    ()
    
    return
    
    if
    self
    .
    is_paused
    :
    
    return
    
    # 向左
    
    elif
    key
    ==
    Qt
    .
    Key_Left
    :
    
    self
    .
    inner_board
    .
    moveLeft
    ()
    
    # 向右
    
    elif
    key
    ==
    Qt
    .
    Key_Right
    :
    
    self
    .
    inner_board
    .
    moveRight
    ()
    
    # 旋转
    
    elif
    key
    ==
    Qt
    .
    Key_Up
    :
    
    self
    .
    inner_board
    .
    rotateAnticlockwise
    ()
    
    # 快速坠落
    
    elif
    key
    ==
    Qt
    .
    Key_Space
    :
    
    self
    .
    external_board
    .
    score
    +=
    self
    .
    inner_board
    .
    dropDown
    ()
    
    else
    :
    
    super
    (
    TetrisGame
    , 
    self
    ).
    keyPressEvent
    (
    event
    )
    
    self
    .
    updateWindow
    ()
    
    
    
    
    
    '''run'''
    
    if
    __name__
    ==
    '__main__'
    :
    
    app
    =
    QApplication
    ([])
    
    tetris
    =
    TetrisGame
    ()
    
    sys
    .
    exit
    (
    app
    .
    exec_
    ())

    专题推荐:python开发 俄罗斯方块
    上一篇:TCP在python中如何连接服务器? 下一篇:python守护线程是什么

    相关文章推荐

    • 什么是网络协议• python中的去除重复项的操作• python中少见的函数map()和partial()• python的sort()排序方法• Python中的文件读写-理论知识

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网