情人节用python写个贪吃蛇安慰自己

  这几天除了吃就是睡(不知道为啥,吃饱就想睡),从大年三十到现在感觉啥都没做,写个代码安慰安慰自己吧哈哈哈哈。给大家分享几部最近看的电影(要学英语的一定要get起来)——《彩虹照耀》《罗宾逊漂流记》《伴我同行》《荒岛余生》《天赐宝贝》,其中,《彩虹照耀》全程感动到哭,看看就知道有多感人了哈哈哈;《天赐宝贝》让我觉得和《我是汤姆》一样感人。接下来写代码趴!

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

在这里插入图片描述

https://blog.csdn.net/hanhanwanghaha欢迎关注这个超级无敌可爱的人鸭,有什么问题留言私信皆可,看见必回!
创作不易,如有转载,请注明出处
盗文章者垃圾人是也,盗者必究!

一、效果

录屏软件和上下键有点冲突,就没有演示上下移动了(自行脑补啦)
在这里插入图片描述

二、代码

# coding:utf-8

import curses
import random

# 初始化屏幕
scr = curses.initscr()
# 设置光标
curses.curs_set(0)

# 设置宽高
sh, sw = scr.getmaxyx()
w = curses.newwin(sh, sw, 0, 0)
w.keypad(1)

# 窗口刷新时间为100毫秒,控制速度的地方
w.timeout(200)

# 蛇
snake_x = int(sw / 4)
snake_y = int(sh / 2)
snake = [
    [snake_y, snake_x],
    [snake_y, snake_x - 1],
    [snake_y, snake_x - 2],
]

# 简写一下
ku = curses.KEY_UP
kd = curses.KEY_DOWN
kr = curses.KEY_RIGHT
kl = curses.KEY_LEFT

# 食物
food = [int(sh / 2), int(sw / 2)]
w.addch(int(food[0]), int(food[1]), curses.ACS_PI)

# 控制蛇的移动

# 首先要给它一个方向
key = kr
while True:
    # 获取玩家的键盘指令
    next_key = w.getch()
    key = key if next_key == -1 else next_key

    # 蛇死的情况:撞到自己,碰到边缘
    if snake[0] in snake[1:] or \
            snake[0][0] in [0, sh] or \
            snake[0][0] in [0, sh]:
        curses.endwin()
        quit()

    # 蛇的移动逻辑
    new_head = [snake[0][0], snake[0][1]]
    if key == curses.KEY_DOWN:
        new_head[0] += 1
    if key == curses.KEY_UP:
        new_head[0] -= 1
    if key == curses.KEY_LEFT:
        new_head[1] -= 1
    if key == curses.KEY_RIGHT:
        new_head[1] += 1
    snake.insert(0,new_head)

    # 当蛇吃到食物
    if snake[0] == food:
        food = None
        while food is None:
            nf = [
                random.randint(1, sh - 1),
                random.randint(1, sw - 1)
            ]
            food = nf if nf not in snake else None
        w.addch(food[0],food[1],curses.ACS_PI)
    else:
        tail = snake.pop()
        w.addch(int(tail[0]), int(tail[1]), ' ')
    w.addch(int(snake[0][0]), int(snake[0][1]), curses.ACS_CKBOARD)

三、可能遇到的报错

3.1报错一

3.1.1原因

如果是windows系统,会出现这样的报错:

SyntaxWarning: list indices must be integers or slices, not tuple; perhaps you missed a comma?
  [snake_y, snake_x]
Traceback (most recent call last):
  File "G:/PythonProject/TD2/game/tanchi.py", line 3, in <module>
    import curses
  File "F:\Anaconda\lib\curses\__init__.py", line 13, in <module>
    from _curses import *
ModuleNotFoundError: No module named '_curses'

如图:

在这里插入图片描述
但导入的时候完全正常
在这里插入图片描述
原因是:curses库不支持Windows

3.1.2解决办法

去官网下载curses库对应你python版本的whl文件:https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses
比如我是python38,64位
在这里插入图片描述
下载到python安装目录中下的Script文件夹下即可(Python\Scripts)

不知道自己python目录在哪的小伙伴别慌

直接在命令行行窗口输入 where python
在这里插入图片描述

接下来
把whl文件放入Script文件夹后,进入Script文件夹(我是用的Anaconda)
在这里插入图片描述

鼠标单击图上文件位置栏——输入cmd ——然后回车
在这里插入图片描述
变为

然后用pip安装whl文件即可

输入
pip install "curses-2.2.1+utf8-cp38-cp38-win_amd64.whl"(小技巧:whl文件名输入前几个字母按TAB键能自动补全)
在这里插入图片描述

3.2报错二

3.2.1原因

Redirection is not supported.

如图
在这里插入图片描述
Redirection isnot supported. 翻译过来是不支持重定向

3.2.2解决办法

首先点击如图所示的倒立三角形符号,选Edit Configurations,勾选 “Emulate terminal in output console”,应用并确定即可
在这里插入图片描述
在这里插入图片描述
借鉴:https://www.youtube.com/watch?v=rbasThWVb-c&t=0s

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

  • 39
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
当然可以!以下是一个简单的贪吃蛇游戏示例代码: ```python import pygame import random # 初始化 Pygame pygame.init() # 定义游戏窗口的尺寸 WINDOW_WIDTH = 640 WINDOW_HEIGHT = 480 # 定义游戏窗口的标题 pygame.display.set_caption("贪吃蛇") # 定义游戏窗口对象 window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) # 定义游戏时钟对象 clock = pygame.time.Clock() # 定义贪吃蛇的初始位置和大小 snake_x = 100 snake_y = 100 snake_width = 20 snake_height = 20 # 定义蛇移动的速度 snake_speed = 5 # 定义贪吃蛇的身体,初始只有一个身体 snake_body = [(snake_x, snake_y)] # 定义食物的初始位置和大小 food_x = random.randint(0, WINDOW_WIDTH - snake_width) food_y = random.randint(0, WINDOW_HEIGHT - snake_height) food_width = 20 food_height = 20 # 定义游戏是否结束的标志 game_over = False # 游戏循环 while not game_over: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True # 处理键盘输入,控制贪吃蛇移动 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: snake_x -= snake_speed elif keys[pygame.K_RIGHT]: snake_x += snake_speed elif keys[pygame.K_UP]: snake_y -= snake_speed elif keys[pygame.K_DOWN]: snake_y += snake_speed # 判断贪吃蛇是否碰到边界 if snake_x < 0 or snake_x > WINDOW_WIDTH - snake_width or snake_y < 0 or snake_y > WINDOW_HEIGHT - snake_height: game_over = True # 判断贪吃蛇是否碰到自己的身体 for body_part in snake_body[1:]: if snake_x == body_part[0] and snake_y == body_part[1]: game_over = True # 判断贪吃蛇是否吃到了食物 if snake_x == food_x and snake_y == food_y: # 更新贪吃蛇的身体 snake_body.append((snake_x, snake_y)) # 更新食物的位置 food_x = random.randint(0, WINDOW_WIDTH - snake_width) food_y = random.randint(0, WINDOW_HEIGHT - snake_height) # 更新贪吃蛇的身体 snake_body.insert(0, (snake_x, snake_y)) snake_body.pop() # 绘制游戏画面 window.fill((255, 255, 255)) pygame.draw.rect(window, (0, 255, 0), (food_x, food_y, food_width, food_height)) for body_part in snake_body: pygame.draw.rect(window, (0, 0, 255), (body_part[0], body_part[1], snake_width, snake_height)) pygame.display.update() # 控制游戏帧率 clock.tick(30) # 退出 Pygame pygame.quit() ``` 以上代码实现了一个简单的贪吃蛇游戏,具体实现细节可以参考代码注释。在代码中,我们使用 Pygame 模块来实现游戏窗口的创建、事件处理、图形绘制等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值