- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章保姆级python教程写个贪吃蛇大冒险由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
贪吃蛇,大家应该都玩过。当初第一次接触贪吃蛇的时候 ,还是我爸的数字手机,考试成绩比较好,就会得到一些小奖励,玩手机游戏肯定也在其中首位,毕竟小孩子天性都喜欢~ 。
当时都能玩的不亦乐乎。今天,我们用Python编程一个贪吃蛇游戏哦~ 。
。
1.将使用两个主要的类(蛇和立方体).
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
|
#Snake Tutorial Python
import
math
import
random
import
pygame
import
tkinter as tk
from
tkinter
import
messagebox
class
cube(
object
):
rows
=
20
w
=
500
def
__init__(
self
,start,dirnx
=
1
,dirny
=
0
,color
=
(
255
,
0
,
0
)):
pass
def
move(
self
, dirnx, dirny):
pass
def
draw(
self
, surface, eyes
=
False
):
pass
class
snake(
object
):
def
__init__(
self
, color, pos):
pass
def
move(
self
):
pass
def
reset(
self
, pos):
pass
def
addCube(
self
):
pass
def
draw(
self
, surface):
pass
def
drawGrid(w, rows, surface):
pass
def
redrawWindow(surface):
pass
def
randomSnack(rows, item):
pass
def
message_box(subject, content):
pass
def
main():
pass
main()
|
2.创造游戏循环:
在所有的游戏中,我们都有一个叫做“主循环”或“游戏循环”的循环。该循环将持续运行,直到游戏退出。它主要负责检查事件,并基于这些事件调用函数和方法.
我们将在main()功能。在函数的顶部声明一些变量,然后进入while循环,这将代表我们的游戏循环.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
def
main():
global
width, rows, s
width
=
500
# Width of our screen
height
=
500
# Height of our screen
rows
=
20
# Amount of rows
win
=
pygame.display.set_mode((width, height))
# Creates our screen object
s
=
snake((
255
,
0
,
0
), (
10
,
10
))
# Creates a snake object which we will code later
clock
=
pygame.time.Clock()
# creating a clock object
flag
=
True
# STARTING MAIN LOOP
while
flag:
pygame.time.delay(
50
)
# This will delay the game so it doesn't run too quickly
clock.tick(
10
)
# Will ensure our game runs at 10 FPS
redrawWindow(win)
# This will refresh our screen
|
3.更新屏幕:通常,在一个函数或方法中绘制所有对象是一种很好的做法。我们将使用重绘窗口函数来更新显示。我们在游戏循环中每一帧调用一次这个函数。稍后我们将向该函数添加更多内容。然而,现在我们将简单地绘制网格线.
1
2
3
4
|
def
redrawWindow(surface):
surface.fill((
0
,
0
,
0
))
# Fills the screen with black
drawGrid(surface)
# Will draw our grid lines
pygame.display.update()
# Updates the screen
|
4.绘制网格:现在将绘制代表20x20网格的线条.
1
2
3
4
5
6
7
8
9
10
11
|
def
drawGrid(w, rows, surface):
sizeBtwn
=
w
/
/
rows
# Gives us the distance between the lines
x
=
0
# Keeps track of the current x
y
=
0
# Keeps track of the current y
for
l
in
range
(rows):
# We will draw one vertical and one horizontal line each loop
x
=
x
+
sizeBtwn
y
=
y
+
sizeBtwn
pygame.draw.line(surface, (
255
,
255
,
255
), (x,
0
),(x,w))
pygame.draw.line(surface, (
255
,
255
,
255
), (
0
,y),(w,y))
|
5.现在当我们运行程序时,我们可以看到网格线被画出来.
6.开始制作贪吃蛇:蛇对象将包含一个代表蛇身体的立方体列表。我们将把这些立方体存储在一个名为body的列表中,它将是一个类变量。我们还将有一个名为turns的类变量。为了开始蛇类,对__init__()方法并添加类变量.
1
2
3
4
5
6
7
8
9
10
11
12
|
class
snake(
object
):
body
=
[]
turns
=
{}
def
__init__(
self
, color, pos):
self
.color
=
color
self
.head
=
cube(pos)
# The head will be the front of the snake
self
.body.append(
self
.head)
# We will add head (which is a cube object)
# to our body list
# These will represent the direction our snake is moving
self
.dirnx
=
0
self
.dirny
=
1
|
7.这款游戏最复杂的部分就是翻蛇。我们需要记住我们把我们的蛇转向了哪里和哪个方向,这样当头部后面的立方体到达那个位置时,我们也可以把它们转向。这就是为什么每当我们转向时,我们会将头部的位置添加到转向字典中,其中值是我们转向的方向。这样,当其他立方体到达这个位置时,我们就知道如何转动它们了.
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
|
class
snake(
object
):
...
def
move(
self
):
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.QUIT:
pygame.quit()
keys
=
pygame.key.get_pressed()
for
key
in
keys:
if
keys[pygame.K_LEFT]:
self
.dirnx
=
-
1
self
.dirny
=
0
self
.turns[
self
.head.pos[:]]
=
[
self
.dirnx,
self
.dirny]
elif
keys[pygame.K_RIGHT]:
self
.dirnx
=
1
self
.dirny
=
0
self
.turns[
self
.head.pos[:]]
=
[
self
.dirnx,
self
.dirny]
elif
keys[pygame.K_UP]:
self
.dirnx
=
0
self
.dirny
=
-
1
self
.turns[
self
.head.pos[:]]
=
[
self
.dirnx,
self
.dirny]
elif
keys[pygame.K_DOWN]:
self
.dirnx
=
0
self
.dirny
=
1
self
.turns[
self
.head.pos[:]]
=
[
self
.dirnx,
self
.dirny]
for
i, c
in
enumerate
(
self
.body):
# Loop through every cube in our body
p
=
c.pos[:]
# This stores the cubes position on the grid
if
p
in
self
.turns:
# If the cubes current position is one where we turned
turn
=
self
.turns[p]
# Get the direction we should turn
c.move(turn[
0
],turn[
1
])
# Move our cube in that direction
if
i
=
=
len
(
self
.body)
-
1
:
# If this is the last cube in our body remove the turn from the dict
self
.turns.pop(p)
else
:
# If we are not turning the cube
# If the cube reaches the edge of the screen we will make it appear on the opposite side
if
c.dirnx
=
=
-
1
and
c.pos[
0
] <
=
0
: c.pos
=
(c.rows
-
1
, c.pos[
1
])
elif
c.dirnx
=
=
1
and
c.pos[
0
] >
=
c.rows
-
1
: c.pos
=
(
0
,c.pos[
1
])
elif
c.dirny
=
=
1
and
c.pos[
1
] >
=
c.rows
-
1
: c.pos
=
(c.pos[
0
],
0
)
elif
c.dirny
=
=
-
1
and
c.pos[
1
] <
=
0
: c.pos
=
(c.pos[
0
],c.rows
-
1
)
else
: c.move(c.dirnx,c.dirny)
# If we haven't reached the edge just move in our current direction
|
8.画蛇:我们只需画出身体中的每个立方体对象。我们将在蛇身上做这个绘制()方法.
1
2
3
4
5
6
7
8
|
class
snake(
object
):
...
def
draw(
self
):
for
i, c
in
enumerate
(
self
.body):
if
i
=
=
0
:
# for the first cube in the list we want to draw eyes
c.draw(surface,
True
)
# adding the true as an argument will tell us to draw eyes
else
:
c.draw(surface)
# otherwise we will just draw a cube
|
9.结束游戏当我们的蛇物体与自己碰撞时,我们就输了。为了检查这一点,我们在main()游戏循环中的功能.
1
2
3
4
5
6
|
for
x
in
range
(
len
(s.body)):
if
s.body[x].pos
in
list
(
map
(
lambda
z:z.pos,s.body[x
+
1
:])):
# This will check if any of the positions in our body list overlap
print
(
'Score: '
,
len
(s.body))
message_box(
'You Lost!'
,
'Play again...'
)
s.reset((
10
,
10
))
break
|
10.蛇类–重置()方法现在我们将对重置()方法。所有这些将会做的是重置蛇,这样我们可以在之后再次玩.
1
2
3
4
5
6
7
8
9
|
class
snake():
...
def
reset(
self
, pos):
self
.head
=
cube(pos)
self
.body
=
[]
self
.body.append(
self
.head)
self
.turns
=
{}
self
.dirnx
=
0
self
.dirny
=
1
|
下面我们先看看效果:
。
。
好了蛇蛇大作战就写完啦! 。
到此这篇关于保姆级python教程写个贪吃蛇大冒险的文章就介绍到这了,更多相关python 贪吃蛇内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我!
原文链接:https://blog.csdn.net/weixin_55822277/article/details/120044335 。
最后此篇关于保姆级python教程写个贪吃蛇大冒险的文章就讲到这里了,如果你想了解更多关于保姆级python教程写个贪吃蛇大冒险的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!