Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Administrator
/
pygame_lesson12_diy01
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
45f07b93
authored
2 years ago
by
BellCodeEditor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
save project
parent
1c7e7e19
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
164 additions
and
3 deletions
my_Tetris.py
s.py
my_Tetris.py
View file @
45f07b93
...
...
@@ -7,8 +7,8 @@ score = 0
grid_size
=
20
# 格子大小
grid_num_width
=
15
# 横向格子数量
grid_num_height
=
25
# 纵向格子数量
FPS
=
3
0
# 帧率
count
=
0
FPS
=
5
0
# 帧率
count
=
1
states
=
False
# 创建窗口
...
...
@@ -47,6 +47,9 @@ cube_colors = [
(
255
,
204
,
0
),
(
204
,
0
,
51
),(
255
,
0
,
51
),
(
0
,
102
,
153
),
(
153
,
0
,
51
),
(
204
,
255
,
102
),
(
255
,
153
,
0
)]
num_list
=
[]
for
i
in
range
(
25
):
num_list
.
append
([
0
]
*
15
)
def
check
(
center
):
for
cube
in
current_shape
:
cube
=
(
cube
[
0
]
+
center
[
0
],
cube
[
1
]
+
center
[
1
])
...
...
@@ -54,6 +57,8 @@ def check(center):
if
cube
[
0
]
<
1
or
cube
[
1
]
<
1
or
cube
[
0
]
>
grid_num_height
\
or
cube
[
1
]
>
grid_num_width
:
return
False
if
num_list
[
cube
[
0
]
-
1
][
cube
[
1
]
-
1
]
!=
0
:
return
False
while
True
:
for
event
in
pygame
.
event
.
get
():
...
...
@@ -97,7 +102,9 @@ while True:
center
[
0
]
=
center
[
0
]
+
1
if
check
(
center
)
==
False
:
center
[
0
]
=
center
[
0
]
-
1
states
=
False
states
=
False
for
cube
in
current_pos
:
num_list
[
cube
[
0
]
-
1
][
cube
[
1
]
-
1
]
=
color
# 将背景图画上去
screen
.
blit
(
background
,
(
0
,
0
))
# 计算出所有小方块的行、列位置
...
...
@@ -111,6 +118,14 @@ while True:
(
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
))
pygame
.
draw
.
rect
(
screen
,(
255
,
255
,
255
),
(
j
*
20
-
20
,
i
*
20
-
20
,
20
,
20
),
1
)
# 得分
text_surface
=
font
.
render
(
str
(
score
),
True
,
(
0
,
0
,
0
))
screen
.
blit
(
text_surface
,
(
350
,
70
))
...
...
This diff is collapsed.
Click to expand it.
s.py
0 → 100644
View file @
45f07b93
import
pygame
,
sys
,
random
,
time
all_block
=
[[[
0
,
0
],[
0
,
-
1
],[
0
,
1
],[
0
,
2
]],
[[
0
,
0
],[
0
,
1
],[
1
,
1
],[
1
,
0
]],
[[
0
,
0
],[
0
,
-
1
],[
-
1
,
0
],[
-
1
,
1
]],
[[
0
,
0
],[
0
,
1
],[
-
1
,
-
1
],[
-
1
,
0
]],
[[
0
,
0
],[
0
,
1
],[
1
,
0
],[
0
,
-
1
]],
[[
0
,
0
],[
1
,
0
],[
-
1
,
0
],[
1
,
-
1
]],
[[
0
,
0
],[
1
,
0
],[
-
1
,
0
],[
1
,
1
]]]
background
=
[[
0
for
column
in
range
(
0
,
10
)]
for
row
in
range
(
0
,
22
)]
background
[
0
]
=
[
1
for
column
in
range
(
0
,
10
)]
select_block
=
list
(
random
.
choice
(
all_block
))
block_initial_position
=
[
21
,
5
]
times
=
0
score
=
[
0
]
gameover
=
[]
press
=
False
pygame
.
init
()
screen
=
pygame
.
display
.
set_mode
((
250
,
500
))
title
=
pygame
.
display
.
set_caption
(
"俄罗斯方块"
)
#下落、位置、数组检测、得分、屏幕信息
def
block_move_down
():
y_drop
=
block_initial_position
[
0
]
x_move
=
block_initial_position
[
1
]
y_drop
-=
1
for
row
,
column
in
select_block
:
row
+=
y_drop
column
+=
x_move
if
background
[
row
][
column
]
==
1
:
break
else
:
block_initial_position
.
clear
()
block_initial_position
.
extend
([
y_drop
,
x_move
])
return
y_drop
,
x_move
=
block_initial_position
for
row
,
column
in
select_block
:
background
[
y_drop
+
row
][
x_move
+
column
]
=
1
complete_row
=
[]
for
row
in
range
(
1
,
21
):
if
0
not
in
background
[
row
]:
complete_row
.
append
(
row
)
complete_row
.
sort
(
reverse
=
True
)
for
row
in
complete_row
:
background
.
pop
(
row
)
background
.
append
([
0
for
column
in
range
(
0
,
10
)])
score
[
0
]
+=
len
(
complete_row
)
pygame
.
display
.
set_caption
(
str
(
score
[
0
])
+
'分'
)
select_block
.
clear
()
select_block
.
extend
(
list
(
random
.
choice
(
all_block
)))
block_initial_position
.
clear
()
block_initial_position
.
extend
([
20
,
5
])
y_drop
,
x_move
=
block_initial_position
for
row
,
column
in
select_block
:
row
+=
y_drop
column
+=
x_move
if
background
[
row
][
column
]:
gameover
.
append
(
1
)
#方块设置、变化、背景改变
def
new_draw
():
y_drop
,
x_move
=
block_initial_position
for
row
,
column
in
select_block
:
row
+=
y_drop
column
+=
x_move
pygame
.
draw
.
rect
(
screen
,(
255
,
165
,
0
),(
column
*
25
,
500
-
row
*
25
,
23
,
23
))
for
row
in
range
(
0
,
20
):
for
column
in
range
(
0
,
10
):
bottom_block
=
background
[
row
][
column
]
if
bottom_block
:
pygame
.
draw
.
rect
(
screen
,(
0
,
0
,
255
),(
column
*
25
,
500
-
row
*
25
,
23
,
23
))
#方块的移动,防止出界,碰撞
def
move_left_right
(
n
):
y_drop
,
x_move
=
block_initial_position
x_move
+=
n
for
row
,
column
in
select_block
:
row
+=
y_drop
column
+=
x_move
if
column
<
0
or
column
>
9
or
background
[
row
][
column
]:
break
else
:
block_initial_position
.
clear
()
block_initial_position
.
extend
([
y_drop
,
x_move
])
#旋转,位置都进行变化
def
rotate
():
y_drop
,
x_move
=
block_initial_position
rotating_position
=
[(
-
column
,
row
)
for
row
,
column
in
select_block
]
for
row
,
column
in
rotating_position
:
row
+=
y_drop
column
+=
x_move
if
column
<
0
or
column
>
9
or
background
[
row
][
column
]:
break
else
:
select_block
.
clear
()
select_block
.
extend
(
rotating_position
)
while
True
:
screen
.
fill
((
255
,
255
,
255
))
for
event
in
pygame
.
event
.
get
():
if
event
.
type
==
pygame
.
QUIT
:
sys
.
exit
()
elif
event
.
type
==
pygame
.
KEYDOWN
and
event
.
key
==
pygame
.
K_LEFT
:
move_left_right
(
-
1
)
elif
event
.
type
==
pygame
.
KEYDOWN
and
event
.
key
==
pygame
.
K_RIGHT
:
move_left_right
(
1
)
elif
event
.
type
==
pygame
.
KEYDOWN
and
event
.
key
==
pygame
.
K_UP
:
rotate
()
elif
event
.
type
==
pygame
.
KEYDOWN
and
event
.
key
==
pygame
.
K_DOWN
:
press
=
True
elif
event
.
type
==
pygame
.
KEYUP
and
event
.
key
==
pygame
.
K_DOWN
:
press
=
False
if
press
:
times
+=
10
if
times
>=
50
:
block_move_down
()
times
=
0
else
:
times
+=
1
if
gameover
:
sys
.
exit
()
new_draw
()
pygame
.
time
.
Clock
()
.
tick
(
200
)
pygame
.
display
.
flip
()
\ 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