python贪吃蛇

已经学了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)

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值