Hoy, compartiré un pequeño caso sobre la creación de juegos; un juego de serpiente se implementa en menos de 200 líneas de código. Como el primer artículo de la serie de juegos Python, echemos un vistazo al efecto del programa.
Para la parte de implementación específica del programa, consulte a continuación
Biblioteca de herramientas
Las bibliotecas de Python utilizadas en el programa son:
sys
pygame
time
collection
time
random
La biblioteca principal es pygame ;
Detalles de implementacion
La parte de implementación específica de Snake se divide aproximadamente en tres módulos para introducir: inicialización del juego, ejecución del juego (movimiento de la serpiente, comer comida), finalización del juego.
1. Inicialización del juego
Primero, se inicializa la necesidad de la serpiente del juego , los alimentos, los límites del juego, el atributo de color de cada elemento, la puntuación registrada, la velocidad de grabación y similares, se establece el tamaño de la ventana inicial (600,480), el ancho de la línea negra de la ventana del juego 1 Dividida en varios cuadrados pequeños (el tamaño de cada cuadrado pequeño es (20,20)
)
SCREEN_WIDTH = 600 # 屏幕长
SCREEN_HEIGHT = 480 #屏幕宽
SIZE = 20 # 小方格大小
LINE_WIDTH = 1 #网格线宽度;
#游戏区域的坐标范围
SCOPE_X = (0,SCREEN_WIDTH//SIZE-1)
SCOPE_Y = (0,SCREEN_HEIGHT//SIZE-1)
#食物分值及颜色
FOOD_STYLE_LIST = [(10,(255,100,100)),(20,(100,255,100)),(30,(100,100,255))]
LIGHT = (100,100,100)
DARK = (200,200,200) #蛇的颜色
BLACK = (0,0,0) #网格线颜色,黑色
RED = (200,30,30) # 红色,GAME OVER 字体颜色
BGCOLOR = (40,40,60) #背景色
El tamaño inicial de la serpiente ocupa 3 cuadrados pequeños consecutivos; la comida ocupa 1 cuadrado pequeño y la comida se coloca al azar en una determinada coordenada en la ventana al principio (por supuesto, el área del cuerpo de la serpiente debe excluirse)
# 初始化蛇
def init_snake():
snake = deque()
snake.append((2,SCOPE_Y[0]))
snake.append((1,SCOPE_Y[0]))
snake.append((0,SCOPE_Y[0]))
return snake
# 创建食物
def create_food(snake):
food_x = random.randint(SCOPE_X[0],SCOPE_X[1])
food_y = random.randint(SCOPE_Y[0],SCOPE_Y[1])
while (food_x,food_y) in snake:
# 食物出现在蛇身上,重新生成
food_x = random.randint(SCOPE_X[0],SCOPE_X[1])
food_y = random.randint(SCOPE_Y[0],SCOPE_Y[1])
return food_x,food_y
2. Puntuación del juego
Cuando comienza el juego, la dirección del movimiento de la ** serpiente ** debe establecerse como un parámetro inicial, que se almacena en forma de tupla bidimensional y se asigna a la variable p. Hay cuatro situaciones:
- p = (1,0), a la derecha;
- P = (0, -1), abajo;
- p = (0,1), hacia arriba;
- p = (-1,0), a la izquierda;
En respuesta a los eventos del teclado, cuando el usuario presiona las teclas arriba (w), abajo (s), izquierda (a) y derecha (d), el programa ejecutará la operación correspondiente.
for event in pygame.event.get():#事件刷新
if event.type == QUIT:
sys.exit()#退出
elif event.type == KEYDOWN:
if event.key == K_RETURN:
if game_over:
start = True
game_over = False
b =True
snake = init_snake()
food = create_food(snake)
food_style = get_food_style()
pos = (1,0)#方向
score = 0
last_move_time = time.time()#上次移动时间
elif event.key == K_SPACE:
if not game_over:
pause = not pause
elif event.key in(K_w,K_UP):
#判断防止蛇向上移动时按了向下键,导致Game Over
if b and not pos[1]:
pos = (0,-1)
b = False
elif event.key in (K_s,K_DOWN):
if b and not pos[1]:
pos =(0,1)
b = False
elif event.key in (K_a,K_LEFT):
if b and not pos[0]:
pos = (-1,0)
b =False
elif event.key in (K_d,K_RIGHT):
if b and not pos[0]:
pos =(1,0)
b = False
El cuerpo de la serpiente se mueve
La voluntad programa de serpiente ocupado todos los pequeños coordenadas de cuadrícula almacenados secuencialmente en una cola, moviendo una vez más fuera de la cola para completar la operación: la cola borrar un elemento, la cabeza de la columna para insertar unas nuevas coordenadas de cuadrícula, donde los contrabandistas;
if(SCOPE_X[0]<= next_s[0]<= SCOPE_X[1] and SCOPE_Y[0]<= next_s[1]<= SCOPE_Y[1] and next_s not in snake):
# 下个坐标在范围内
#依次进出元素
snake.appendleft(next_s)
snake.pop()
Comer alimentos
Cada uno come una comida 蛇身多增加一个小方格区域,其队列插入一个新元素、长度加一
,
next_s = (snake[0][0] + pos[0],snake[0][1] +pos[1])#蛇移动
if next_s == food:#吃到了食物
snake.appendleft(next_s)#蛇变大
speed = orispeed - 0.03*(score//100) # 更新速度
food = create_food(snake)
food_style = get_food_style()
3. El juego ha terminado
Hay dos tipos de condiciones límite para la terminación del juego.
1. El área en movimiento excede el límite de la ventana;
2. La cabeza de la serpiente golpea el cuerpo de la serpiente;
El programa usa la variable booleana game_over para identificar si el juego terminó (Verdadero o Falso). El valor predeterminado es Falso antes de actualizar la página. Cuando el juego se ejecuta normalmente, los dos eventos anteriores se establecen en Verdadero. El juego se está ejecutando, de lo contrario, el juego termina.
if game_over:#游戏结束
if start:
print_text(screen,font2,(SCREEN_WIDTH-fwidth)//2,(SCREEN_HEIGHT-fheight)//2,'GAME OVER',RED)
pygame.display.update()#刷新页面
Con el fin de mejorar la experiencia de juego, el programa representa una puntuación por variable de puntuación, velocidad para expresar la velocidad de movimiento, puntuando 100 por cada velocidad de movimiento adicional actualizada cada movimiento, con el paso del tiempo también aumentando la dificultad del juego.
score += food_style[0]
speed = orispeed - 0.03*(score//100) # 更新速度
resumen
La producción del Snake solo tiene algunas funciones básicas, todavía hay mucho margen de mejora, como que el módulo mezclador mediante Pygame agregue algunos efectos de sonido que se disparan en ciertos eventos del juego, agregando una página de inicio de inicialización del juego. , etc.; en general, este pequeño juego solo es apto para aprender y no para jugar. Si quieres jugar, se recomienda pasar a áreas de juego de alta gama como King Glory
Adquisición de código fuente
Para obtener todo el código fuente de este caso, siga la cuenta oficial : Xiao Zhang Python y la palabra clave de respuesta de back-end: 210309 ;