gpt4 book ai didi

保姆级python教程写个贪吃蛇大冒险

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 30 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章保姆级python教程写个贪吃蛇大冒险由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

  。

导语 ​

保姆级python教程写个贪吃蛇大冒险

贪吃蛇,大家应该都玩过。当初第一次接触贪吃蛇的时候 ,还是我爸的数字手机,考试成绩比较好,就会得到一些小奖励,玩手机游戏肯定也在其中首位,毕竟小孩子天性都喜欢~ 。

保姆级python教程写个贪吃蛇大冒险

当时都能玩的不亦乐乎。今天,我们用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.现在当我们运行程序时,我们可以看到网格线被画出来.

保姆级python教程写个贪吃蛇大冒险

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教程写个贪吃蛇大冒险的文章就介绍到这了,更多相关python 贪吃蛇内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我!

原文链接:https://blog.csdn.net/weixin_55822277/article/details/120044335 。

最后此篇关于保姆级python教程写个贪吃蛇大冒险的文章就讲到这里了,如果你想了解更多关于保姆级python教程写个贪吃蛇大冒险的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com