python写一个贪吃蛇(自带源码)
大家都玩过游戏吧?看到像原神、王者荣耀等大型游戏,大家虽然会玩,可是不会做(做游戏可以赚钱),今天,我就给大家分享一下用python pygame模块写的简易贪吃蛇吧。
首先,如果你还没有安装pygame的话,在cmd里面输入以下代码:
pip install pygame
然后回车,直到出现安装成功为止。
创建一个空项目,命名为Snake
输入以下代码(要是不懂,抄就完了)
class Point:
row=0
col=0
def __init__(self,row,col):
self.row=row
self.col=col
def copy(self):
return Point(row=self.row,col=self.col)
import pygame
import random
pygame.init()
W = 1900
H = 990
FPS = 30
ROW = 80
COL = 140
size=(W,H)
window=pygame.display.set_mode(size)
pygame.display.set_caption('Snake')
bg_clor=(0,0,0)
snake_color=(250,250,250)
head=Point(row=int(ROW/2),col=int(COL/2))
head_color=(250,250,250)
snakes=[
Point(row=head.row,col=head.col+1),
Point(row=head.row,col=head.col+2),
Point(row=head.row,col=head.col+3)
]
def gen_food():
while 1:
pos=Point(row=random.randint(0,ROW-1),col=random.randint(0,COL-1))
is_coll=False
if head.row==pos.row and head.col==pos.col:
is_coll=True
for snake in snakes:
if snake.row==pos.row and snake.col==pos.col:
is_coll=True
break
if not is_coll:
break
return pos
food=gen_food()
food_color=(250,250,250)
direct='left'
def rect(point,color):
cell_width=W/COL
cell_height=H/ROW
left=point.col*cell_width
top=point.row*cell_height
pygame.draw.rect(
window,color,
(left,top,cell_width,cell_height)
)
QUIT = True
clock=pygame.time.Clock()
while quit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
QUIT = False
elif event.type==pygame.KEYDOWN:
if event.key==1073741906:
if direct=='left' or direct=='right':
direct='up'
elif event.key == 1073741905:
if direct == 'left' or direct == 'right':
direct = 'down'
elif event.key==1073741904:
if direct == 'up' or direct == 'down':
direct='left'
elif event.key==1073741903:
if direct == 'up' or direct == 'down':
direct='right'
eat=(head.row==food.row and head.col==food.col)
if eat:
food = gen_food()
snakes.insert(0,head.copy())
if not eat:
snakes.pop()
if direct=='left':
head.col-=1
elif direct=='right':
head.col+=1
elif direct=='up':
head.row-=1
elif direct=='down':
head.row+=1
dead=False
if head.col<=0 or head.row<0 or head.col>=COL or head.row>=ROW:
dead=True
for snake in snakes:
if head.col==snake.col and head.row==snake.row:
dead
break
if dead:
print('Game Over!')
quit=False
pygame.draw.rect(window,bg_clor,(0,0,W,H))
for snake in snakes:
rect(snake,snake_color)
rect(head,head_color)
rect(food,food_color)
pygame.display.flip()
clock.tick(FPS)
