Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Administrator
/
pygame_lesson9_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
56346275
authored
3 years ago
by
BellCodeEditor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
save project
parent
785852ab
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
103 additions
and
87 deletions
my_game.py
my_game.py
View file @
56346275
import
pygame
import
pygame
from
pygame
import
locals
from
pygame
import
locals
import
random
import
random
import
json
pygame
.
init
()
# 初始化
pygame
.
init
()
# 初始化
# 创建一个窗口
screen
=
pygame
.
display
.
set_mode
((
1000
,
600
))
FPS
=
pygame
.
time
.
Clock
()
# pygame时钟,控制游戏速度(帧数)
# 载入图片
background
=
pygame
.
image
.
load
(
'bg.png'
)
# 背景
road
=
pygame
.
image
.
load
(
'road.png'
)
# 路
stone
=
pygame
.
image
.
load
(
'stone.png'
)
# 石头
cacti
=
pygame
.
image
.
load
(
'cacti.png'
)
# 仙人掌
apple
=
pygame
.
image
.
load
(
'bush.png'
)
# 灌木丛
gameover
=
pygame
.
image
.
load
(
'gameover.png'
)
class
Block
(
pygame
.
sprite
.
Sprite
):
# 障碍物精灵类
class
Block
(
pygame
.
sprite
.
Sprite
):
def
__init__
(
self
,
image1
,
image2
,
image3
):
def
__init__
(
self
,
image1
,
image2
,
image3
):
super
()
.
__init__
()
super
()
.
__init__
()
# 加载障碍物的图片
self
.
image
=
random
.
choice
([
image1
,
image2
,
image3
])
self
.
image
=
random
.
choice
([
image1
,
image2
,
image3
])
# 根据障碍物位图的宽高设置矩形
self
.
rect
=
self
.
image
.
get_rect
()
self
.
rect
=
self
.
image
.
get_rect
()
# 障碍物绘制坐标
self
.
rect
.
x
=
1000
self
.
rect
.
x
=
1000
self
.
rect
.
y
=
500
-
self
.
rect
.
height
self
.
rect
.
y
=
500
-
self
.
rect
.
height
self
.
score
=
1
class
Player
(
pygame
.
sprite
.
Sprite
):
# 悟空
self
.
success
=
0
def
__init__
(
self
,
image
):
class
WuKong
(
pygame
.
sprite
.
Sprite
):
super
()
.
__init__
()
def
__init__
(
self
,
wukong_img
):
# 加载悟空精灵图像
self
.
image
=
wukong_img
self
.
image
=
image
# image的get_rect()方法,可以返回pygame.Rect(0,0,图像宽,图像高)的对象
self
.
rect
=
self
.
image
.
get_rect
()
self
.
rect
=
self
.
image
.
get_rect
()
self
.
rect
.
x
=
150
self
.
rect
.
x
=
150
self
.
rect
.
y
=
400
self
.
rect
.
y
=
400
# 创建一个窗口
list_group
=
pygame
.
sprite
.
Group
()
screen
=
pygame
.
display
.
set_mode
((
1000
,
600
))
FPS
=
pygame
.
time
.
Clock
()
# pygame时钟,控制游戏速度(帧数)
# 关卡1 实现悟空跑步效果
pygame
.
display
.
set_caption
(
"悟空酷跑"
)
# 逻辑:绘制图画时,不断切换悟空图片
# 载入图片
hero
=
[
pygame
.
image
.
load
(
'hero1.png'
),
pygame
.
image
.
load
(
'hero2.png'
),
pygame
.
image
.
load
(
'hero3.png'
)
background
=
pygame
.
image
.
load
(
'bg.png'
)
# 背景
,
pygame
.
image
.
load
(
'hero4.png'
),
pygame
.
image
.
load
(
'hero5.png'
)]
#加载悟空图片
road
=
pygame
.
image
.
load
(
'road.png'
)
# 路
stone
=
pygame
.
image
.
load
(
'stone.png'
)
# 石头
score_bgm
=
pygame
.
mixer
.
Sound
(
'score.wav'
)
cacti
=
pygame
.
image
.
load
(
'cacti.png'
)
# 仙人掌
bush
=
pygame
.
image
.
load
(
'bush.png'
)
# 灌木丛
hero
=
[
pygame
.
image
.
load
(
'hero1.png'
),
pygame
.
image
.
load
(
'hero2.png'
),
pygame
.
image
.
load
(
'hero3.png'
),
pygame
.
image
.
load
(
'hero4.png'
),
pygame
.
image
.
load
(
'hero5.png'
)]
basic_font
=
pygame
.
font
.
Font
(
'STKAITI.TTF'
,
32
)
index
=
0
index
=
0
y
=
400
jumpStatus
=
'running'
jumpState
=
"runing"
t
=
30
wukong
=
WuKong
(
hero
[
index
])
t
=
40
background_x
=
0
road_x
=
0
road_x
=
0
bg_x
=
0
time
=
0
gamestate
=
True
block_list
=
pygame
.
sprite
.
Group
()
# 创建精灵组
score
=
0
gameState
=
1
speed
=
8
#路和障碍物移动速度
with
open
(
'record.txt'
,
'r'
,
encoding
=
'utf-8'
)
as
f
:
#打开文件读取json数据,转换成字典后索引
jsonData
=
f
.
read
()
text
=
json
.
loads
(
jsonData
)
one
=
str
(
text
[
'第1名'
])
two
=
str
(
text
[
'第2名'
])
three
=
str
(
text
[
'第3名'
])
time
=
0
while
True
:
while
True
:
score_font
=
pygame
.
font
.
Font
(
'STKAITI.TTF'
,
20
)
socre_text
=
score_font
.
render
(
"得分:"
+
str
(
score
),
True
,(
255
,
255
,
255
))
score_one
=
score_font
.
render
(
"第1名:"
+
one
,
True
,(
255
,
255
,
255
))
#渲染1-3名
score_two
=
score_font
.
render
(
"第2名:"
+
two
,
True
,(
255
,
255
,
255
))
score_three
=
score_font
.
render
(
"第3名:"
+
three
,
True
,(
255
,
255
,
255
))
if
background_x
<
-
1000
:
background_x
=
0
if
road_x
<
-
1000
:
road_x
=
0
for
event
in
pygame
.
event
.
get
():
for
event
in
pygame
.
event
.
get
():
if
event
.
type
==
locals
.
QUIT
:
if
event
.
type
==
locals
.
QUIT
:
# 接收到退出事件后退出程序
# 接收到退出事件后退出程序
exit
()
exit
()
if
event
.
type
==
locals
.
KEYDOWN
:
if
event
.
type
==
locals
.
KEYDOWN
and
jumpStatus
==
'running'
:
#键盘按下
if
jumpState
==
"runing"
:
if
event
.
key
==
locals
.
K_SPACE
:
if
event
.
key
==
locals
.
K_SPACE
:
jumpState
=
"up"
jumpStatus
=
'up'
if
gameState
==
1
:
# 悟空造型
if
jumpStatus
==
'up'
:
wukong
=
Player
(
hero
[
index
])
if
t
>
0
:
if
jumpState
==
"runing"
:
# 跑步状态下
wukong
.
rect
.
y
-=
t
index
+=
1
if
index
>=
5
:
index
=
0
if
gamestate
==
True
:
if
jumpState
==
"up"
:
# 起跳状态
if
t
>
0
:
y
-=
t
wukong
.
rect
.
y
=
y
t
-=
2
t
-=
2
else
:
else
:
jumpState
=
"down"
jumpStatus
=
'down'
if
jumpState
==
"down"
:
# 降落状态
if
jumpStatus
==
'down'
:
if
t
<=
30
:
if
t
<=
40
:
y
+=
t
wukong
.
rect
.
y
+=
t
wukong
.
rect
.
y
=
y
t
+=
2
t
+=
2
else
:
else
:
jumpState
=
"runing"
jumpStatus
=
'running'
t
=
30
t
=
40
if
jumpStatus
==
'running'
:
# 将背景图画上去
index
+=
1
bg_x
-=
1
if
index
==
5
:
if
bg_x
<=-
1000
:
index
=
0
bg_x
=
0
screen
.
blit
(
background
,
(
bg_x
,
0
))
# 远景
road_x
-=
8
if
road_x
<=-
1000
:
road_x
=
0
screen
.
blit
(
road
,
(
road_x
,
500
))
# 道路
s
creen
.
blit
(
wukong
.
image
,
(
150
,
y
))
# 悟空
s
peed
=
8
+
score
//
3
background_x
-=
5
road_x
-=
speed
# 将背景图画上去
screen
.
blit
(
background
,
(
background_x
,
0
))
screen
.
blit
(
road
,
(
road_x
,
500
))
screen
.
blit
(
hero
[
index
],
(
150
,
wukong
.
rect
.
y
))
#绘制悟空
screen
.
blit
(
socre_text
,(
850
,
50
))
screen
.
blit
(
score_one
,(
850
,
70
))
#绘制前三名
screen
.
blit
(
score_two
,(
850
,
90
))
screen
.
blit
(
score_three
,(
850
,
110
))
time
+=
1
time
+=
1
if
time
>=
60
:
# 创建障碍物精灵
if
time
>=
60
:
time
=
0
time
=
0
num
=
random
.
randint
(
0
,
50
)
num
=
random
.
randint
(
0
,
60
)
if
num
>
20
:
if
num
>
30
:
obstacle
=
Block
(
bush
,
cacti
,
stone
)
obstacle
=
Block
(
stone
,
cacti
,
apple
)
block_list
.
add
(
obstacle
)
list_group
.
add
(
obstacle
)
for
sprite
in
block_list
:
# 遍历、展示障碍物精灵
for
temp
in
list_group
:
sprite
.
rect
.
x
-=
8
temp
.
rect
.
x
-=
speed
screen
.
blit
(
sprite
.
image
,
(
sprite
.
rect
.
x
,
sprite
.
rect
.
y
))
screen
.
blit
(
temp
.
image
,
(
temp
.
rect
.
x
,
temp
.
rect
.
y
))
if
sprite
.
rect
.
x
<=
0
-
sprite
.
rect
.
width
:
if
(
pygame
.
sprite
.
collide_rect
(
wukong
,
temp
)):
sprite
.
kill
()
screen
.
blit
(
gameover
,
(
350
,
200
))
if
pygame
.
sprite
.
collide_rect
(
wukong
,
sprite
):
# 精灵碰撞检测
gameState
=
0
gameover
=
pygame
.
image
.
load
(
'gameover.png'
)
# 游戏结束
if
temp
.
rect
.
x
<
0
-
temp
.
rect
.
width
:
screen
.
blit
(
gameover
,
(
400
,
200
))
temp
.
kill
()
gamestate
=
False
if
temp
.
rect
.
x
+
temp
.
rect
.
width
<
wukong
.
rect
.
x
:
scoreSurf
=
basic_font
.
render
(
"分数:"
+
str
(
score
),
True
,(
255
,
0
,
0
))
score
+=
temp
.
score
screen
.
blit
(
scoreSurf
,(
850
,
20
))
temp
.
score
=
0
if
temp
.
success
==
0
:
score_bgm
.
play
()
temp
.
success
=
1
# 刷新画面
# 刷新画面
pygame
.
display
.
update
()
pygame
.
display
.
update
()
FPS
.
tick
(
60
)
FPS
.
tick
(
60
)
\ 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