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

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

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

    python开发实例.png

    1.操作环境

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

    2.相关模块

    pyqt5模块;

    以及一些Python自带的模块。

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

    1

    pip install -r requirements.txt

    4.运行下面代码

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    125

    126

    127

    128

    129

    130

    131

    132

    133

    134

    135

    136

    137

    138

    139

    140

    141

    142

    143

    144

    145

    146

    147

    148

    149

    150

    151

    152

    153

    154

    155

    156

    157

    158

    159

    160

    161

    162

    163

    164

    165

    166

    167

    168

    169

    170

    171

    172

    173

    174

    175

    176

    177

    178

    179

    180

    181

    182

    183

    184

    185

    186

    187

    188

    189

    190

    191

    192

    193

    194

    195

    196

    197

    198

    199

    200

    201

    202

    203

    204

    205

    206

    207

    208

    209

    210

    211

    212

    213

    214

    215

    216

    217

    218

    219

    220

    221

    222

    223

    224

    225

    226

    227

    228

    229

    230

    231

    232

    233

    234

    235

    236

    237

    238

    239

    240

    241

    242

    243

    244

    245

    246

    247

    248

    249

    250

    251

    252

    253

    254

    255

    256

    257

    258

    259

    260

    261

    262

    263

    264

    265

    266

    267

    268

    269

    270

    271

    272

    273

    274

    275

    276

    277

    278

    279

    280

    281

    282

    283

    284

    285

    286

    287

    288

    289

    290

    291

    292

    293

    294

    295

    296

    297

    298

    299

    300

    301

    302

    303

    304

    305

    306

    307

    308

    309

    310

    311

    312

    313

    314

    315

    316

    317

    318

    319

    320

    321

    322

    323

    324

    325

    326

    327

    328

    329

    330

    331

    332

    333

    334

    335

    336

    337

    338

    339

    340

    341

    342

    343

    344

    345

    346

    347

    348

    349

    350

    351

    352

    353

    354

    355

    356

    357

    358

    359

    360

    361

    362

    363

    364

    365

    366

    367

    368

    369

    370

    371

    372

    373

    374

    375

    376

    377

    378

    379

    380

    381

    382

    383

    384

    385

    386

    387

    388

    389

    390

    391

    392

    393

    394

    395

    396

    397

    398

    399

    400

    401

    402

    403

    404

    405

    406

    407

    408

    409

    410

    411

    412

    413

    414

    415

    416

    417

    418

    419

    420

    421

    422

    423

    424

    425

    426

    427

    428

    429

    430

    431

    432

    433

    434

    435

    436

    437

    438

    439

    440

    441

    442

    443

    444

    445

    446

    447

    448

    449

    450

    451

    452

    453

    454

    455

    456

    457

    458

    459

    460

    461

    462

    463

    464

    465

    466

    467

    468

    469

    470

    471

    472

    473

    474

    475

    476

    477

    478

    479

    480

    481

    482

    483

    484

    485

    486

    487

    488

    489

    490

    491

    492

    493

    494

    495

    496

    497

    498

    499

    500

    501

    502

    503

    504

    505

    506

    507

    508

    509

    510

    511

    512

    513

    514

    515

    516

    517

    518

    519

    520

    521

    522

    523

    524

    525

    526

    527

    528

    529

    530

    531

    532

    533

    534

    535

    536

    537

    538

    539

    540

    541

    542

    543

    544

    545

    546

    547

    548

    549

    550

    551

    552

    553

    554

    555

    556

    557

    558

    559

    560

    561

    562

    563

    564

    565

    566

    567

    568

    569

    570

    571

    572

    573

    574

    575

    576

    577

    578

    579

    580

    581

    582

    583

    584

    585

    586

    587

    588

    589

    590

    591

    592

    593

    594

    595

    596

    597

    598

    599

    600

    601

    602

    603

    604

    605

    606

    607

    608

    609

    610

    611

    612

    613

    614

    615

    616

    617

    618

    619

    620

    621

    622

    623

    624

    625

    626

    627

    628

    629

    630

    631

    632

    633

    634

    635

    636

    637

    638

    639

    640

    641

    642

    643

    644

    645

    646

    647

    648

    649

    650

    651

    652

    653

    654

    655

    656

    657

    658

    659

    660

    661

    662

    663

    664

    665

    666

    667

    668

    669

    670

    671

    672

    673

    674

    675

    676

    677

    678

    679

    680

    681

    682

    683

    684

    685

    686

    687

    688

    689

    690

    691

    692

    693

    694

    695

    696

    697

    698

    699

    700

    701

    702

    703

    704

    705

    706

    707

    708

    709

    710

    711

    712

    713

    714

    715

    716

    717

    718

    719

    720

    721

    722

    723

    724

    725

    726

    727

    728

    729

    730

    731

    732

    733

    734

    735

    736

    737

    738

    739

    740

    741

    742

    743

    744

    745

    746

    747

    748

    749

    750

    751

    752

    753

    754

    755

    756

    757

    758

    759

    '''

     

     

    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学习网