已经学了5天python,考虑着写个简单的贪吃蛇。
主要思路就是画方框,脖子跟着头走,吃完食物在屁股上加一节身体。
写的非常粗糙,不过能用就好,哈哈哈~~~
为了显示效果,食物大小为5*5的方块,蛇的宽度是5,长度是5*X。
生成食物:
首先判断随机食物是否和蛇重叠了。如果重叠就重新随即下。
def makeRect():
while True:
a=5*random.randint(2,width/5-3)
b=5*random.randint(2,height/5-3)
rec=pygame.Rect(a,b,5,5)
if rec.collidelist(snacklist)!=-1:
a=random.randint(0,width)
b=random.randint(0,height)
rec=pygame.Rect(a,b,5,5)
else:
break
return rec
主方法:
pygame.init() #初始化
size=width,height=600,400 #屏幕宽高
flag='3'
speed={'0':[0,-5],'1':[5,0],'2':[0,5],'3':[-5,0]} #蛇的4种移动方式
bg=(0,0,0)
screen=pygame.display.set_mode(size)
pygame.display.set_caption("第一个程序")
clock=pygame.time.Clock()
snacklist=list() #初始化一条蛇。初始化的蛇有5段身体
snackx=5*random.randint(5,width/5-5)
snacky=5*random.randint(5,height/5-5)
for i in range(5):
snacklist.append(pygame.Rect(snackx+5*i,snacky,5,5) )
block=makeRect() #第一坨食物
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
if event.type==pygame.KEYDOWN: #按键上下左右,如果当前移动方向是上,则不能直接向下移动,其他情况也是如此。
if event.key==pygame.K_RIGHT:
if flag!='3':
print('右键')
flag='1'
if event.key==pygame.K_LEFT:
if flag!='1':
print('左键')
flag='3'
if event.key==pygame.K_UP:
if flag!='2':
print('上键')
flag='0'
if event.key==pygame.K_DOWN:
if flag!='0':
print('下键')
flag='2'
#载入背景
screen.fill(bg)
for i in range(len(snacklist)-1,-1,-1): #移动先移动屁股,后面的跟着前面的走。
if i==0:
snacklist[i]=snacklist[i].move(speed[flag][0],speed[flag][1])
else:
snacklist[i]=snacklist[i].clamp(snacklist[i-1])
#蛇移动完后进行绘制。
snacklist[i]=pygame.draw.rect(screen,[0,255,0],\
snacklist[i],\
0)
a=random.randint(0,width)
b=random.randint(0,height)
#绘制食物
block=pygame.draw.rect(screen,[255,255,255],\
block,\
0)
#食物被吃,重新随机出现食物,蛇身体+1段
if block.collidelist(snacklist)!=-1:
block=pygame.draw.rect(screen,[255,255,255],\
makeRect(),\
0)
snacklist.append(pygame.Rect(snacklist[len(snacklist)-1].left+5,snacklist[len(snacklist)-1].top,5,5))
#碰到墙
if snacklist[1].left==0 or snacklist[0].right>width or snacklist[1].top==0 or snacklist[0].bottom>height:
print("一头撞死!!")
break;
#碰到自身
if snacklist[0].collidelist(snacklist[2:len(snacklist)-1])!=-1:
print("自杀了!!")
break;
pygame.display.flip() #更新屏幕
clock.tick(8)