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
6b507c8a
authored
2 years ago
by
BellCodeEditor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
save project
parent
535f9e3e
c199773l1463p256a14695/wx722520
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
74 additions
and
59 deletions
my_Tetris.py
my_Tetris.py
View file @
6b507c8a
...
@@ -10,6 +10,7 @@ grid_num_height = 25 # 纵向格子数量
...
@@ -10,6 +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
))
...
@@ -18,6 +19,7 @@ clock = pygame.time.Clock() # pygame时钟,控制游戏速度(帧数)
...
@@ -18,6 +19,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
)
# 字体
font_hu
=
pygame
.
font
.
Font
(
'STKAITI.TTF'
,
25
)
# 俄罗斯方块所有形状
# 俄罗斯方块所有形状
O
=
[[(
0
,
0
),
(
0
,
1
),
(
1
,
0
),
(
1
,
1
)]]
O
=
[[(
0
,
0
),
(
0
,
1
),
(
1
,
0
),
(
1
,
1
)]]
...
@@ -66,6 +68,8 @@ while True:
...
@@ -66,6 +68,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
:
...
@@ -75,12 +79,12 @@ while True:
...
@@ -75,12 +79,12 @@ while True:
center
[
1
]
=
center
[
1
]
+
1
center
[
1
]
=
center
[
1
]
+
1
if
check
(
center
)
==
False
:
if
check
(
center
)
==
False
:
center
[
1
]
=
center
[
1
]
-
1
center
[
1
]
=
center
[
1
]
-
1
elif
event
.
key
==
locals
.
K_DOWN
:
# 向下
elif
event
.
key
==
locals
.
K_DOWN
:
# 向下
center
[
0
]
=
center
[
0
]
+
1
center
[
0
]
=
center
[
0
]
+
1
if
check
(
center
)
==
False
:
if
check
(
center
)
==
False
:
center
[
0
]
=
center
[
0
]
-
1
center
[
0
]
=
center
[
0
]
-
1
elif
event
.
key
==
locals
.
K_UP
:
# 向上键
elif
event
.
key
==
locals
.
K_UP
:
# 向上键
old_index
=
index
old_index
=
index
index
+=
1
index
+=
1
...
@@ -90,64 +94,74 @@ while True:
...
@@ -90,64 +94,74 @@ 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
gameover
==
False
:
if
states
==
False
:
states
=
True
center
=
[
2
,
8
]
# 第2行第8列
shape
=
random
.
choice
(
shape_list
)
index
=
random
.
randint
(
0
,
len
(
shape
)
-
1
)
# 随机形状索引
current_shape
=
shape
[
index
]
color
=
random
.
choice
(
cube_colors
)
# 随机选取一种颜色
count
+=
1
if
count
%
FPS
==
0
:
# 降落速度的算式
center
[
0
]
=
center
[
0
]
+
1
if
check
(
center
)
==
False
:
center
[
0
]
=
center
[
0
]
-
1
states
=
False
for
cube
in
current_pos
:
num_list
[
cube
[
0
]
-
1
][
cube
[
1
]
-
1
]
=
color
# 将背景图画上去
screen
.
blit
(
background
,
(
0
,
0
))
# 计算出所有小方块的行、列位置
current_pos
=
[]
for
cube
in
current_shape
:
pos
=
(
cube
[
0
]
+
center
[
0
],
cube
[
1
]
+
center
[
1
])
current_pos
.
append
(
pos
)
# 取出所有小方块的行、列位置,计算坐标,绘制俄罗斯方块
for
cube
in
current_pos
:
pygame
.
draw
.
rect
(
screen
,
color
,
(
cube
[
1
]
*
20
-
20
,
cube
[
0
]
*
20
-
20
,
20
,
20
),
0
)
pygame
.
draw
.
rect
(
screen
,
(
255
,
255
,
255
),
(
cube
[
1
]
*
20
-
20
,
cube
[
0
]
*
20
-
20
,
20
,
20
),
1
)
for
i
,
row
in
zip
(
range
(
1
,
26
),
num_list
):
for
j
,
colors
in
zip
(
range
(
1
,
16
),
row
):
if
colors
!=
0
:
pygame
.
draw
.
rect
(
screen
,
colors
,
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
0
)
pygame
.
draw
.
rect
(
screen
,
(
255
,
255
,
255
),
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
1
)
if
states
==
False
:
new_list
=
[]
states
=
True
for
i
in
range
(
25
):
center
=
[
2
,
8
]
# 第2行第8列
new_list
.
append
([
0
]
*
15
)
shape
=
random
.
choice
(
shape_list
)
row_index
=
24
index
=
random
.
randint
(
0
,
len
(
shape
)
-
1
)
# 随机形状索引
for
i
in
range
(
24
,
-
1
,
-
1
):
current_shape
=
shape
[
index
]
is_fill
=
True
color
=
random
.
choice
(
cube_colors
)
# 随机选取一种颜色
for
j
in
range
(
grid_num_width
):
count
+=
1
if
num_list
[
i
][
j
]
==
0
:
if
count
%
FPS
==
0
:
# 降落速度的算式
is_fill
=
False
center
[
0
]
=
center
[
0
]
+
1
if
is_fill
==
False
:
if
check
(
center
)
==
False
:
new_list
[
row_index
]
=
num_list
[
i
]
center
[
0
]
=
center
[
0
]
-
1
row_index
-=
1
states
=
False
else
:
for
cube
in
current_pos
:
score
+=
1
num_list
[
cube
[
0
]
-
1
][
cube
[
1
]
-
1
]
=
color
num_list
=
new_list
# 将背景图画上去
screen
.
blit
(
background
,
(
0
,
0
))
# 计算出所有小方块的行、列位置
current_pos
=
[]
for
cube
in
current_shape
:
pos
=
(
cube
[
0
]
+
center
[
0
],
cube
[
1
]
+
center
[
1
])
current_pos
.
append
(
pos
)
# 取出所有小方块的行、列位置,计算坐标,绘制俄罗斯方块
for
cube
in
current_pos
:
pygame
.
draw
.
rect
(
screen
,
color
,
(
cube
[
1
]
*
20
-
20
,
cube
[
0
]
*
20
-
20
,
20
,
20
),
0
)
pygame
.
draw
.
rect
(
screen
,
(
255
,
255
,
255
),
(
cube
[
1
]
*
20
-
20
,
cube
[
0
]
*
20
-
20
,
20
,
20
),
1
)
for
i
,
row
in
zip
(
range
(
1
,
26
),
num_list
):
for
j
,
colors
in
zip
(
range
(
1
,
16
),
row
):
if
colors
!=
0
:
pygame
.
draw
.
rect
(
screen
,
colors
,
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
0
)
pygame
.
draw
.
rect
(
screen
,
(
255
,
255
,
255
),
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
1
)
new_list
=
[]
for
i
in
range
(
25
):
new_list
.
append
([
0
]
*
15
)
row_index
=
24
for
i
in
range
(
24
,
-
1
,
-
1
):
is_fill
=
True
for
j
in
range
(
grid_num_width
):
if
num_list
[
i
][
j
]
==
0
:
is_fill
=
False
if
is_fill
==
False
:
new_list
[
row_index
]
=
num_list
[
i
]
row_index
-=
1
else
:
score
+=
1
num_list
=
new_list
# 得分
if
num_list
[
1
][
7
]
!=
0
:
text_surface
=
font
.
render
(
str
(
score
),
True
,
(
0
,
0
,
0
))
gameover
=
True
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
=
font_hu
.
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
)
\ No newline at end of file
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