py实现贪吃蛇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

py实现贪吃蛇

1.引入库

代码如下:

import random
import os
from threading import Thread
from time import sleep
from msvcrt import getch

2.初始化地图

用数组存放整个地图:

arr=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]

随机蛇的位置并且使蛇头初始方向为左:

a=random.randint(5,35)
b=random.randint(5,15)
snakeArr=[[a,b],[a+1,b],[a+2,b]]
Where="L"


3. 整体代码

import random
import os
from threading import Thread
from time import sleep
from msvcrt import getch
arr=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
a=random.randint(5,35)
b=random.randint(5,15)
snakeArr=[[a,b],[a+1,b],[a+2,b]]
Where="L"
T=0.16
for i in range(0,3):
    arr[snakeArr[i][1]][snakeArr[i][0]]=1
flage=False
count=0
def InputMD():
    global T
    a=input("请选择难度:(1:简单 2:困难 3:地狱")
    if a=='1':
        T=0.5
    elif a=='2':
        T=0.25
    elif a=='3':
        T==0.16
    else:
        InputMD()
def PlaySnake():
    global Where
    while True:
        a=getch()
        if a==b'a' or a==b'A':
            if Where!='R':
                Where='L'
        elif a==b'd' or a==b'D':
            if Where!='L':
                Where='R'
        elif a==b'w' or a==b'W':
            if Where!='D':
                Where='U'
        elif a==b's' or a==b'S':
            if Where!='U':
                Where='D'
def GetSnakeIndex():
    global arr,count,flage
    if arr[snakeArr[0][1]][snakeArr[0][0]]==2:
        arr[snakeArr[0][1]][snakeArr[0][0]]=1
        count+=1
        flage=False
    elif arr[snakeArr[0][1]][snakeArr[0][0]]==0:
        DelTile()
        snakeArr.pop(snakeArr.__len__()-1)
        arr[snakeArr[0][1]][snakeArr[0][0]]=1
    else:
        Die()
def DelTile():
    global snakeArr,arr
    arr[snakeArr[snakeArr.__len__()-1][1]][snakeArr[snakeArr.__len__()-1][0]]=0

def MoveLeft():
    global snakeArr
    if snakeArr[0][0]-1 !=-1:
        snakeArr.insert(0,[snakeArr[0][0]-1,snakeArr[0][1]])
        GetSnakeIndex()
        PMap()
    else:
        Die()
    sleep(T)
    MoveSnake()

def MoveUp():
    if snakeArr[0][1]-1 !=-1:
        snakeArr.insert(0,[snakeArr[0][0],snakeArr[0][1]-1])
        GetSnakeIndex()
        PMap()
    else:
        Die()
    sleep(T)
    MoveSnake()

def MoveRight():
    if snakeArr[0][0]+1 !=40:
        snakeArr.insert(0,[snakeArr[0][0]+1,snakeArr[0][1]])
        GetSnakeIndex()
        PMap()
    else:
        Die()
    sleep(T)
    MoveSnake()

def MoveDown():
    if snakeArr[0][1]+1 !=20:
        snakeArr.insert(0,[snakeArr[0][0],snakeArr[0][1]+1])
        GetSnakeIndex()
        PMap()
    else:
        Die()
    sleep(T)
    MoveSnake()

def MoveSnake():
    if Where=='L':
        MoveLeft() 
    elif Where=='U':
        MoveUp() 
    elif Where=='R':
        MoveRight()
    elif Where=='D':
        MoveDown()()    
def PMap():
    os.system("cls")
    print("000000000000000000000000000000000000000000")
    for i in range(0,20):
        print('0',end='')
        for j in range(0,40):
            if arr[i][j]==0:
                print(" ",end='')
            elif arr[i][j]==1:
                print("#",end='')
            elif arr[i][j]==2:
                print("*",end='')
        print('0')
    print("000000000000000000000000000000000000000000\n"+"              "+str(count))
def RMap():
    while True:
        PMap()
        sleep(T)
def Foud():
    global arr,flage
    while True:
        if flage==False:
            a=random.randint(0,39)
            b=random.randint(0,19)
            if arr[b][a]!=1:
                arr[b][a]=2
                flage=True
            else:
                Foud()
        else:
            pass
        sleep(T)
def Die():
    os.system("cls")
    print("得分:"+str(count))
    os.system("pause")
    os._exit(1)
InputMD()
Thread(target=PlaySnake,args=()).start()
Thread(target=MoveSnake,args=()).start()
Thread(target=Foud,args=()).start()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值