Home > Article > Backend Development > How to write a Snake game in Python?
Snake Python mini game (source code comments can be pasted and used) This Snake game is very simple and avoids using pygame which is difficult to load. The following is the running diagram:
In drawing game images, we use a database that is more accurate than pygame Light Turtle Graphics
from turtle import * # "*"是引用所有函数 def square(x, y, size, color_name): up() goto(x, y) down() color(color_name) begin_fill() forward(size) left(90) forward(size) left(90) forward(size) left(90) forward(size) left(90) end_fill()
The above is drawing through turtle, advance unit distance and then rotate 90 degrees, and then rotate 90 degrees again until a small square is drawn
Reference the database we just drew
from turtle import * from gamebase import square from random import randrange
Then define the size of the canvas
setup(420,420,0,0) //隐藏乌龟头 emoj.emoj. hideturtle //隐藏轨迹 tracer(False) //绘制 done()
def gameLoop(): //随机生成苹果 apple_x = randrange(-200, 200) apple_y = randrange(-200, 200) //绘制苹果 square(apple_x, apple_y, 10, "red") //刷新画布 update()
Note that we can think of Snake as a queue, and each element in this queue Both contain two variables (the horizontal and vertical coordinates of the element)
def gameLoop(): //随机生成苹果 apple_x = randrange(-200, 200) apple_y = randrange(-200, 200) //绘制蛇 for n in range(len(sanke)): square(snake[n][0],snake[n][1[],10,"black) //绘制苹果 square(apple_x, apple_y, 10, "red") //刷新画布 update()
Principle of the movement of the snake: In order to facilitate the movement of the snake, we have to flip the snake into the queue, when it moves, we will throw out the first element of the snake queue (pop()), and then add an element to the tail of the snake (append())
global apple_x, apple_y, snake, aim_x, aim_y #全局变量申请snake.append([ snake[-1][0] + aim_x, snake[-1][1] + aim_y ])snake.pop(0)global apple_x, apple_y, snake, aim_x, aim_y #全局变量申请 snake.append([ snake[-1][0] + aim_x, snake[-1][1] + aim_y ]) snake.pop(0)
Then, we To add a loop to refresh the running time,
ontimer(gameLoop, 100) # 每100毫秒运行一下gameLoop函数
We need to establish a keyboard monitor, which is very simple for python
listen() #监听 onkey(lambda: change(0, 10), "w") onkey(lambda: change(0, -10), "s") onkey(lambda: change(-10, 0), "a") onkey(lambda: change(10, 0), "d") gameLoop()
This is also very easy. We only need to compare whether the horizontal and vertical coordinates of the snake's head are equal to the horizontal and vertical coordinates of the apple (the snake's head coincides with the apple)
if snake[-1][0] != apple_x or snake[-1][1] != apple_y: snake.pop(0) else: apple_x = randrange(-20, 18) * 10 apple_y = randrange(-19, 19) * 10
This principle is similar to the above principle of whether the snake eats the apple
def bite(): for n in range(len(snake)-1): if snake[-1][0] == snake[n][0] and snake[-1][1] == snake[n][1]: return True return False
def inside(): if -200 <= snake[-1][0] <= 180 and -190 <= snake[-1][1]<=190: return True else : return False
from turtle import * # "*"是引用所有函数 def square(x, y, size, color_name): up() goto(x, y) down() color(color_name) begin_fill() forward(size) left(90) forward(size) left(90) forward(size) left(90) forward(size) left(90) end_fill()
from time import sleep apple_x = randrange(-20, 18) * 10 apple_y = randrange(-19, 19) * 10 snake = [[0, 0], [10, 0], [20, 0], [30, 0], [40, 0], [50, 0]] aim_x = 10 aim_y = 0 def inside(): if -200 <= snake[-1][0] <= 180 and -190 <= snake[-1][1]<=190: return True else : return False def change(x, y): global aim_x, aim_y aim_x = x aim_y = y def bite(): for n in range(len(snake)-1): if snake[-1][0] == snake[n][0] and snake[-1][1] == snake[n][1]: return True return False def gameLoop(): global apple_x, apple_y, snake, aim_x, aim_y #全局变量申请 snake.append([ snake[-1][0] + aim_x, snake[-1][1] + aim_y ]) if snake[-1][0] != apple_x or snake[-1][1] != apple_y: snake.pop(0) else: apple_x = randrange(-20, 18) * 10 apple_y = randrange(-19, 19) * 10 if(not inside()) or bite(): square(snake[-1][0], snake[-1][1], 10,"hotpink") update() sleep(2)# 暂停2秒 apple_x = randrange(-20, 18) * 10 apple_y = randrange(-19, 19) * 10 snake = [[0, 0], [10, 0], [20, 0], [30, 0], [40, 0], [50, 0]] aim_x = 10 aim_y = 0 n = 0 clear() square(-210,-200,410,"black") square(-200,-190,390,"white") square(apple_x, apple_y, 10, "red") for n in range(len(snake)): square(snake[n][0], snake[n][1], 10, 'black') ontimer(gameLoop, 100) # 每300毫秒运行一下gameLoop函数 update() #注意:代码的前后顺序会给游戏带来不同的体感 setup(420, 420, 0, 0) hideturtle() tracer(False) listen() #监听 onkey(lambda: change(0, 10), "w") onkey(lambda: change(0, -10), "s") onkey(lambda: change(-10, 0), "a") onkey(lambda: change(10, 0), "d") gameLoop() done()
The above is the detailed content of How to write a Snake game in Python?. For more information, please follow other related articles on the PHP Chinese website!