IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 无pygame写一个python贪吃蛇 -> 正文阅读

[Python知识库]无pygame写一个python贪吃蛇

无pygame写一个python贪吃蛇

这个贪吃蛇是以pynput来监视键盘,os来刷新屏幕,以此实现的贪吃蛇

蛇的结构

贪吃蛇建立在block组成的二维列表里,block包含两个属性``,自己的身份和指向
身份包括:草地,蛇身,蛇头,蛇尾巴,苹果五种。
指向则是从尾巴一格一格地指向蛇头。
这样蛇的移动其实就是丢掉尾巴,头长长一格。

代码展示

import os
import time
import random
from pynput.keyboard import Listener

def bp (s): #用于输出一个屏幕的内容
    os.system('cls') #本程序只适用于Windows
    if s == 'normal':
        print('#'*(L+2))
        for i in range(L//2):
            print('#',end='')
            for j in range(L):
                if Map[i][j].status == 0:
                    print(' ',end='')
                elif Map[i][j].status == 1:
                    print('*',end='')
                elif Map[i][j].status == 2:
                    print('O',end='')
                elif Map[i][j].status == 3:
                    print('@',end='')
                elif Map[i][j].status == 4:
                    print('$',end='')
            print('#')
        print('#'*(L+2))

    elif s == 'over':
        print(
            '''
##############################################################
#                                                            #
#                                                            #
#                                                            #
#                                                            #
#                                                            #
#     ____    _    __  __ _____    _____     _______ ____    #
#    / ___|  / \  |  \/  | ____|  / _ \ \   / / ____|  _ \   #
#   | |  _  / _ \ | |\/| |  _|   | | | \ \ / /|  _| | |_) |  #
#   | |_| |/ ___ \| |  | | |___  | |_| |\ V / | |___|  _ <   #
#    \____/_/   \_\_|  |_|_____|  \___/  \_/  |_____|_| \_\  #
#                                                            #
#                                                            #
'''
+'#              你吃到了'+str(speed-30)+'\t个苹果,下次加油             #'+
'''
#                                                            #
#                                                            #
#                                                            #
##############################################################                                          
            ''')
    elif s == 'welcome':
        print(
            '''
##############################################################
#                                                            #
#                                                            #
#                                                            #
#                                                            #
#                                                            #
#     __        _______ _     ____ ___  __  __ _____         #
#     \ \      / / ____| |   / ___/ _ \|  \/  | ____|        #
#      \ \ /\ / /|  _| | |  | |  | | | | |\/| |  _|          #
#       \ V  V / | |___| |__| |__| |_| | |  | | |___         #
#        \_/\_/  |_____|_____\____\___/|_|  |_|_____|        #
#                                                            #
#                                                            #
#                                                            #
#     游戏中只能通过按wasd移动,按下其他非字母键游戏直接等死 #
#     游戏难度 a 地狱 s简单 d普通 w困难                      #
#                                                            #
#     按下他们开始游戏                                       #
#                                                            #
#                                                            #
##############################################################                                              
            ''')


def on_press(key):
    global di
    try:
        di = key.char
    except:
        return False

class block ():
    def __init__ (self, status, direction):
        self.status = status
        self.chD(direction)
    def chD (self,b):
        if b == 'w':
            self.direction = (-1,0)
        elif b == 'a':
            self.direction = (0,-1)
        elif b == 's':
            self.direction = (1,0)
        elif b == 'd':
            self.direction = (0,1)
        else:
            self.direction = -1
            return 0
        return 1
    
def gn (a,b):
    temp = Map[a][b].direction
    return a+temp[0],b+temp[1]

di,L,S,Map = 30,30,30,30
if __name__ == '__main__':
    with Listener(on_press=on_press) as listener:
        bp('welcome')
        while not di in {'w','a','s','d'}:
            time.sleep(0.5)

        #初始化数据
        if di == 'w':
            L,S = 20,2
        elif di == 'a':
            L,S = 30,15
        elif di == 's':
            L,S == 30,15
        elif di == 'd':
            L,S == 20,4
        speed = 30
        head = (7,15)
        tail = (7,12)
        Map = [[block(0,0) for __ in range(L)] for _ in range(L//2)]
        print(len(Map),len(Map[0]))
        Map[7][12] = block(1,'d')
        Map[7][13] = block(2,'d')
        Map[7][14] = block(2,'d')
        Map[7][15] = block(3,'d')
        apple = False
        os.system('cls')

        while 1:
            #apple!
            while not apple:
                a = random.randint(0,L//2-1)
                b = random.randint(0,L-1)
                if Map[a][b].status == 0:
                    Map[a][b].status = 4
                    apple = 1
                    break

            time.sleep(S/speed)
            fh = gn(*head)
            if fh[0]>=L//2 or fh[0]<0 or fh[1]>=L or fh[1]<0 or Map[fh[0]][fh[1]].status in {2,1}:
                bp('over')
                listener.join()
                break
            elif Map[fh[0]][fh[1]].status == 4:
                apple = False
                speed+=1

                Map[head[0]][head[1]].status = 2
                head = fh
                Map[head[0]][head[1]].status = 3
                Map[head[0]][head[1]].chD(di)

            elif Map[fh[0]][fh[1]].status == 0:
                Map[head[0]][head[1]].status = 2
                head = fh
                Map[head[0]][head[1]].status = 3
                Map[head[0]][head[1]].chD(di)
                
                Map[tail[0]][tail[1]].status = 0
                temp = gn(*tail)
                Map[tail[0]][tail[1]].direction = 0
                Map[temp[0]][temp[1]].status = 1
                tail = temp

            bp('normal')

效果在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:09:46  更:2021-08-04 11:09:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/11 22:13:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码