Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Administrator
/
pygame_lesson12_diy3
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
018284c4
authored
2 years ago
by
BellCodeEditor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
auto save
parent
5d3d2a53
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
66 additions
and
55 deletions
my_Tetris.py
my_Tetris.py
View file @
018284c4
...
@@ -10,7 +10,7 @@ grid_num_height = 25 # 纵向格子数量
...
@@ -10,7 +10,7 @@ grid_num_height = 25 # 纵向格子数量
FPS
=
30
# 帧率
FPS
=
30
# 帧率
count
=
0
count
=
0
states
=
False
states
=
False
gameover
=
False
# 创建窗口
# 创建窗口
screen
=
pygame
.
display
.
set_mode
((
460
,
500
))
screen
=
pygame
.
display
.
set_mode
((
460
,
500
))
pygame
.
display
.
set_caption
(
"俄罗斯方块"
)
pygame
.
display
.
set_caption
(
"俄罗斯方块"
)
...
@@ -18,7 +18,7 @@ clock = pygame.time.Clock() # pygame时钟,控制游戏速度(帧数)
...
@@ -18,7 +18,7 @@ clock = pygame.time.Clock() # pygame时钟,控制游戏速度(帧数)
# 载入素材
# 载入素材
background
=
pygame
.
image
.
load
(
'bg.png'
)
background
=
pygame
.
image
.
load
(
'bg.png'
)
font
=
pygame
.
font
.
Font
(
'STKAITI.TTF'
,
60
)
# 字体
font
=
pygame
.
font
.
Font
(
'STKAITI.TTF'
,
60
)
# 字体
font1
=
pygame
.
font
.
Font
(
'STKAITI.TTF'
,
25
)
# 字体
# 俄罗斯方块所有形状
# 俄罗斯方块所有形状
O
=
[[(
0
,
0
),
(
0
,
1
),
(
1
,
0
),
(
1
,
1
)]]
O
=
[[(
0
,
0
),
(
0
,
1
),
(
1
,
0
),
(
1
,
1
)]]
I
=
[[(
0
,
-
1
),
(
0
,
0
),
(
0
,
1
),
(
0
,
2
)],
I
=
[[(
0
,
-
1
),
(
0
,
0
),
(
0
,
1
),
(
0
,
2
)],
...
@@ -67,6 +67,8 @@ while True:
...
@@ -67,6 +67,8 @@ while True:
if
event
.
type
==
locals
.
QUIT
:
if
event
.
type
==
locals
.
QUIT
:
exit
()
exit
()
if
event
.
type
==
locals
.
KEYDOWN
:
if
event
.
type
==
locals
.
KEYDOWN
:
if
gameover
==
True
:
gameover
=
False
if
event
.
key
==
locals
.
K_LEFT
:
# 向左
if
event
.
key
==
locals
.
K_LEFT
:
# 向左
center
[
1
]
=
center
[
1
]
-
1
# 左移1列
center
[
1
]
=
center
[
1
]
-
1
# 左移1列
if
check
(
center
)
==
False
:
if
check
(
center
)
==
False
:
...
@@ -91,59 +93,68 @@ while True:
...
@@ -91,59 +93,68 @@ while True:
if
check
(
center
)
==
False
:
if
check
(
center
)
==
False
:
index
=
old_index
index
=
old_index
current_shape
=
shape
[
index
]
current_shape
=
shape
[
index
]
if
num_list
[
1
][
7
]
!=
0
:
if
states
==
False
:
gameover
=
True
states
=
True
if
gameover
==
False
:
center
=
[
2
,
8
]
# 第2行第8列
if
states
==
False
:
shape
=
random
.
choice
(
shape_list
)
states
=
True
index
=
random
.
randint
(
0
,
len
(
shape
)
-
1
)
# 随机形状索引
center
=
[
2
,
8
]
# 第2行第8列
current_shape
=
shape
[
index
]
shape
=
random
.
choice
(
shape_list
)
color
=
random
.
choice
(
cube_colors
)
# 随机选取一种颜色
index
=
random
.
randint
(
0
,
len
(
shape
)
-
1
)
# 随机形状索引
count
+=
1
current_shape
=
shape
[
index
]
if
count
%
FPS
==
0
:
# 降落速度的算式
color
=
random
.
choice
(
cube_colors
)
# 随机选取一种颜色
center
[
0
]
=
center
[
0
]
+
1
count
+=
1
if
check
(
center
)
==
False
:
if
count
%
FPS
==
0
:
# 降落速度的算式
center
[
0
]
=
center
[
0
]
-
1
center
[
0
]
=
center
[
0
]
+
1
states
=
False
if
check
(
center
)
==
False
:
for
cube
in
current_pos
:
center
[
0
]
=
center
[
0
]
-
1
num_list
[
cube
[
0
]
-
1
][
cube
[
1
]
-
1
]
=
color
states
=
False
# 将背景图画上去
for
cube
in
current_pos
:
screen
.
blit
(
background
,
(
0
,
0
))
num_list
[
cube
[
0
]
-
1
][
cube
[
1
]
-
1
]
=
color
# 计算出所有小方块的行、列位置
# 将背景图画上去
current_pos
=
[]
screen
.
blit
(
background
,
(
0
,
0
))
for
cube
in
current_shape
:
# 计算出所有小方块的行、列位置
pos
=
(
cube
[
0
]
+
center
[
0
],
cube
[
1
]
+
center
[
1
])
current_pos
=
[]
current_pos
.
append
(
pos
)
for
cube
in
current_shape
:
# 取出所有小方块的行、列位置,计算坐标,绘制俄罗斯方块
pos
=
(
cube
[
0
]
+
center
[
0
],
cube
[
1
]
+
center
[
1
])
for
i
,
raw
in
zip
(
range
(
1
,
26
),
num_list
):
current_pos
.
append
(
pos
)
for
j
,
colors
in
zip
(
range
(
1
,
16
),
raw
):
# 取出所有小方块的行、列位置,计算坐标,绘制俄罗斯方块
if
colors
!=
0
:
for
i
,
raw
in
zip
(
range
(
1
,
26
),
num_list
):
pygame
.
draw
.
rect
(
screen
,
colors
,
for
j
,
colors
in
zip
(
range
(
1
,
16
),
raw
):
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
0
)
if
colors
!=
0
:
pygame
.
draw
.
rect
(
screen
,
(
255
,
255
,
255
),
pygame
.
draw
.
rect
(
screen
,
colors
,
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
1
)
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
0
)
for
cube
in
current_pos
:
pygame
.
draw
.
rect
(
screen
,
(
255
,
255
,
255
),
pygame
.
draw
.
rect
(
screen
,
color
,
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
1
)
(
cube
[
1
]
*
20
-
20
,
cube
[
0
]
*
20
-
20
,
20
,
20
),
0
)
for
cube
in
current_pos
:
pygame
.
draw
.
rect
(
screen
,
(
255
,
255
,
255
),
pygame
.
draw
.
rect
(
screen
,
color
,
(
cube
[
1
]
*
20
-
20
,
cube
[
0
]
*
20
-
20
,
20
,
20
),
1
)
(
cube
[
1
]
*
20
-
20
,
cube
[
0
]
*
20
-
20
,
20
,
20
),
0
)
new_list
=
[]
pygame
.
draw
.
rect
(
screen
,
(
255
,
255
,
255
),
for
i
in
range
(
25
):
(
cube
[
1
]
*
20
-
20
,
cube
[
0
]
*
20
-
20
,
20
,
20
),
1
)
new_list
.
append
([
0
]
*
15
)
new_list
=
[]
row_index
=
24
for
i
in
range
(
25
):
for
i
in
range
(
24
,
-
1
,
-
1
):
new_list
.
append
([
0
]
*
15
)
is_full
=
True
row_index
=
24
for
j
in
range
(
grid_num_width
):
for
i
in
range
(
24
,
-
1
,
-
1
):
if
num_list
[
i
][
j
]
==
0
:
is_full
=
True
is_full
=
False
for
j
in
range
(
grid_num_width
):
if
is_full
==
False
:
if
num_list
[
i
][
j
]
==
0
:
new_list
[
row_index
]
=
num_list
[
i
]
is_full
=
False
row_index
-=
1
if
is_full
==
False
:
num_list
=
num_list
new_list
[
row_index
]
=
num_list
[
i
]
row_index
-=
1
# 得分
num_list
=
num_list
text_surface
=
font
.
render
(
str
(
score
),
True
,
(
0
,
0
,
0
))
screen
.
blit
(
text_surface
,
(
350
,
70
))
# 得分
text_surface
=
font
.
render
(
str
(
score
),
True
,
(
0
,
0
,
0
))
screen
.
blit
(
text_surface
,
(
350
,
70
))
if
gameover
==
True
:
text_surface
=
font1
.
render
(
"按下任意键开始游戏"
,
True
,
(
0
,
0
,
0
))
screen
.
blit
(
text_surface
,
(
20
,
250
))
score
=
0
num_list
=
[]
for
i
in
range
(
25
):
num_list
.
append
([
0
]
*
15
)
# 刷新画面
# 刷新画面
pygame
.
display
.
update
()
pygame
.
display
.
update
()
clock
.
tick
(
FPS
)
clock
.
tick
(
FPS
)
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment