Python实现打包贪吃蛇游戏

复制代码
import random
import sys
import time
import msvcrt

WIDTH = 20
HEIGHT = 10
SPEED = 0.2
snake = [(WIDTH // 2, HEIGHT // 2)]
direction = (1, 0)
food = (random.randint(0, WIDTH - 1), random.randint(0, HEIGHT - 1))
score = 0


def draw_game():
    if sys.platform == "win32":
        print("\033[H\033[J", end="")
    else:
        print("\033c", end="")

    print("#" * (WIDTH + 2))

    for y in range(HEIGHT):
        print("#", end="")
        for x in range(WIDTH):
            if (x, y) in snake:
                print("●", end="")
            elif (x, y) == food:
                print("★", end="")
            else:
                print(" ", end="")
        print("#")

    print("#" * (WIDTH + 2))
    print(f"当前得分: {score} | 操作:W(上) S(下) A(左) D(右) | Q(退出)")


def move_snake():
    global snake, food, score

    head_x, head_y = snake[0]
    new_head = (head_x + direction[0], head_y + direction[1])

    if (new_head[0] < 0 or new_head[0] >= WIDTH or
            new_head[1] < 0 or new_head[1] >= HEIGHT or
            new_head in snake):
        print("\n=====================")
        print(f"游戏结束!最终得分: {score}")
        print("=====================")
        time.sleep(3)
        sys.exit()

    snake.insert(0, new_head)

    if new_head == food:
        score += 10
        while food in snake:
            food = (random.randint(0, WIDTH - 1), random.randint(0, HEIGHT - 1))
    else:
        snake.pop()


def get_user_input():
    global direction
    if msvcrt.kbhit():
        try:
            key = msvcrt.getch().decode('utf-8').lower()
        except:
            key = ""

        if key == 'w' and direction != (0, 1):
            direction = (0, -1)
        elif key == 's' and direction != (0, -1):
            direction = (0, 1)
        elif key == 'a' and direction != (1, 0):
            direction = (-1, 0)
        elif key == 'd' and direction != (-1, 0):
            direction = (1, 0)
        elif key == 'q':
            print("\n你选择退出游戏!")
            time.sleep(1)
            sys.exit()


if __name__ == "__main__":
    print("=====================")
    print("  Windows贪吃蛇游戏  ")
    print("=====================")
    print("控制说明:")
    print("W - 向上 | S - 向下")
    print("A - 向左 | D - 向右")
    print("Q - 退出游戏")
    print("\n3秒后游戏开始...")
    time.sleep(3)

    while True:
        get_user_input()
        move_snake()
        draw_game()
        time.sleep(SPEED)

这是一段在控制台实现贪吃蛇的代码,现在我们将这段代码打包成可执行文件。

先按"WIn"+'"R"打开命令,然后输入"cmd"打开命令行。

然后先安装pyinstaller库

bash 复制代码
pip install pyinstaller

然后切换到你Python文件的目录,我的是D盘

再切换到游戏文件夹(替换成你的真实路径)

打包你的游戏(关键:文件名必须和实际一致!)

bash 复制代码
pyinstaller -F 你的真实文件名.py

然后就打包完成了,打开项目文件

游戏就在dist文件夹里

然后就可以启动游戏了

日记

1月30日,星期五

重温《哈利·波特1哈利·波特与魔法石》

昨天晚自习结束,没什么事干,重温了一下《哈利·波特1哈利·波特与魔法石》,我发现还是有很多有意思的地方的。

首先是金妮真漂亮,我真觉得论漂亮赫敏还是差一档的。(我是澳门新普京看到,别喷我)

我说白了,金妮就是比赫敏好看,我记得原著也是,赫敏没有那么漂亮,金妮特别漂亮。

我发现麦格教授还是有点幽默的,第一天哈利和罗恩迟到了,麦格教授吐槽应该把他们变成怀表,他们说:我们迷路了,麦格教授立马吐槽是不是应该把他们变成地图,不过马上好心的麦格教授就给个台阶下:我相信找到你们自己的座位不需要地图吧。真的喜欢麦格教授,既批评了,又照顾面子给哈利他们一个台阶下。

这一段是三只小不小心去惹到了看守魔法石的三头犬,然后赫敏吐槽让两哥们安分点,别害我们送命,或者更糟,被开除。当时赫敏说完有一个离开的镜头,我当时就在吐槽,shi了不应该比被开除更糟吗,然后罗恩就帮我吐槽了,她那个更糟分不清吗?果然,罗恩和我一样是比较正常的人。

OK了,这个电影是昨天看到,毕竟有时候写完日记可能有好玩值得记录的事情发生,那就要等到第二天才能记录下来了。

今天结束了,我要去快乐快乐了。

相关推荐
光影少年2 分钟前
react离线缓存、图片缓存方案
开发语言·前端·javascript·react native·react.js·缓存·前端框架
鸿芯微控科技3 分钟前
MFC关断后还有流量怎么办?零流量、阀门泄漏、压差与Python分析
c++·python·mfc·质量流量控制器·关断泄漏·零流量测试
SomeB1oody7 分钟前
【RustyML入门】3.7. 循环层
开发语言·后端·机器学习·rust·教程
点云-激光雷达-Slam-三维牙齿2 小时前
速度起飞 笔记本电脑6G显卡llama运行Qwen3.6 35BA3B MTP 大模型
人工智能·python·电脑·llama
言乐63 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame
从零开始学习人工智能9 小时前
【踩坑实录】WSL2 解决 onnxruntime\-gpu ImportError: libcudart\.so\.13 无 CUDA13 运行库问题
python
WWJA王文举10 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
卷无止境10 小时前
在 awesome-fastapi 里,哪些库值得一看?
后端·python
zhanghaha131411 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
Python私教11 小时前
API 输出模型怎么设计:从 model_dump() 到显式展示层
python·fastapi