Pygame 蛇食物生成器

2023-12-14

我目前正在创建一个贪吃蛇游戏,我想创建一个食物生成器,根据我的游戏计时器每 10 秒生成一个苹果。计时器从 60 倒数到 0(游戏结束时),我希望每 10 秒生成一个新苹果,保留旧苹果,即使它还没有被吃掉。我不知道如何解决这个问题,需要一些帮助。这是我的完整计划。

编辑:这是一个初学者计算机科学学校项目,所以越基础越好。

import random
import pygame
pygame.init()

#---------------------------------------#
                                        #
# window properties                     # 
width = 640         # 
height = 480                                         
game_window=pygame.display.set_mode((width,height))
black = (  0,  0,  0)                   #                   
#---------------------------------------#

# snake's properties

outline=0                               
body_size = 9
head_size = 10
apple_size = 8                          
speed_x = 8                           
speed_y = 8                         
dir_x = 0                               
dir_y = -speed_y                               
segx = [int(width/2.)]*3                 
segy = [height, height + speed_y, height + 2*speed_y]              
segments = len(segx)
apple_counter = 0
grid_step = 8

regular_font = pygame.font.SysFont("Andina",18)
blue   = [11,  90,  220]
clock = pygame.time.Clock()
time = 60
fps = 25            
time = time + 1.0/fps
text = regular_font.render("Time from start: "+str(int(time)), 1, blue)
text2 = regular_font.render("Score: "+str(int(apple_counter)), 1, blue)

apple_x = random.randrange(0, 640, grid_step)
apple_y = random.randrange(0, 480, grid_step)  
apple_colour = (255,0,0)

def redraw_game_window():               
    game_window.fill(black)             
    for i in range(segments):           
        segment_colour = (random.randint(1,50),random.randint(100,150),random.randint(1,50))
        head_colour = (random.randint(180,220),random.randint(180,220),random.randint(1,15))
        apple_colour = (255,0,0)
        pygame.draw.circle(game_window, segment_colour, (segx[i], segy[i]), body_size, outline)
        pygame.draw.circle(game_window, head_colour, (segx[0], segy[0]), head_size, outline)
    game_window.blit(text, (530, 20))
    game_window.blit(text2, (30, 20)) 
    pygame.draw.circle(game_window, apple_colour, (apple_x, apple_y), apple_size, outline)
    pygame.display.update()

exit_flag = False
print "Use the arrows and the space bar."
print "Hit ESC to end the program."

########################################################## TIMER/CONTROLS

while exit_flag == False:
    redraw_game_window()

    clock.tick(fps)                     
    time = time - 1.00/fps
    text = regular_font.render("Time: "+str(int(time)), 1, blue)
    text2 = regular_font.render("Score: "+str(int(apple_counter)), 1, blue)


    if time < 0.1:
        print "Game Over"
        exit_flag = True


    pygame.event.get()                      
    keys = pygame.key.get_pressed()

    if time == 


    if keys[pygame.K_ESCAPE]:               
        exit_flag = True

    if keys[pygame.K_LEFT] and dir_x != speed_x:
        dir_x = -speed_x
        dir_y = 0                                             
    if keys[pygame.K_RIGHT] and dir_x != -speed_x:                
        dir_x = speed_x                      
        dir_y = 0                           
    if keys[pygame.K_UP] and dir_y != speed_x:                   
        dir_x = 0                           
        dir_y = -speed_y                    
    if keys[pygame.K_DOWN] and dir_y != -speed_x:                 
        dir_x = 0                           
        dir_y = speed_y



############################################################ SNAKE MOVEMENT

    for i in range(segments-1,0,-1):          
        segx[i]=segx[i-1]                   
        segy[i]=segy[i-1]

    segx[0] = segx[0] + dir_x              
    segy[0] = segy[0] + dir_y


############################################################ COLLISION


    for i in range(segments-1, 3, -1):
        if segments > 3:
            if segx[0] == segx[i] and segy[0] == segy[i]:
                print "You have collided into yourself, Game Over."
                exit_flag = True


############################################################# BORDERS

    if segx[0] > 640 or segx[0] < 0:
        print "Game Over, you left the borders."
        break

    if segy[0] > 480 or segy[0] < 0:
        print "Game Over, you left the borders."
        break

############################################################# APPLE DETECT

    for i in range (0 , 13):
        if segx[0] == apple_x + i  and segy[0] == apple_y + i:
            segments = segments + 1            
            segx.append(segx[-1])               
            segy.append(segy[-1])
            apple_counter = apple_counter + 1


        if segx[0] == apple_x - i  and segy[0] == apple_y - i:
            segments = segments + 1            
            segx.append(segx[-1])               
            segy.append(segy[-1]) 
            apple_counter = apple_counter + 1

#############################################################

pygame.quit()

你要么

A) use pygame.time.set_timer每 10 秒调用一个函数来生成食物,每 60 秒调用一个函数来结束回合。

or

B) 比较 get_ticks()

def new_round(): 最后一个苹果 = pygame.time.get_ticks() + 10*1000

虽然正确: 现在= pygame.time.get_ticks()

if now - last_apple >= 1000:
    spawn_apple()
    last_apple = now


if now - round_start >= 60*1000:
    round_end()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pygame 蛇食物生成器 的相关文章

  • 将yield语句转换为Python中的生成器表达式

    我有一个关于将yield语句转换为生成器表达式的问题 所以我有一个小的yield方法 它获取一个函数和一个起始数字作为其输入 并且基本上为每个先前被调用的数字调用该函数 即 第一次调用返回初始号码 第二次调用返回函数 初始编号 第三次调用返
  • pygame.sprite.Group() 做什么

    我正在关注有关 pygame 的视频 我看到了这段代码 crosshair pygame sprite Group 有人能给我解释一下吗 阅读以下文档pygame sprite Group https www pygame org docs
  • Pygame - 如何使 hitbox 与敌人的移动一起工作?

    我正在用 Pygame 制作一个 Python 游戏 目前正在研究 hitbox 程序应该暂停 设置play False 每当玩家与敌人碰撞时 只有当我注释掉所有敌人的移动 第 56 64 行 时它才 有效 但这显然不是最好的选择 我读过有
  • 如何更改 PyGame 中声音或音乐的音量?

    如何更改 PyGame 中的音量 例如通过设置更改音量 我制作了 UI 元素 只需要知道如何更改音量即可 我知道我说不清楚 但你可以理解我 请帮忙 更改音量取决于您是否正在播放pygame mixer Sound https www pyg
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • Pygame 错误:“pygame”没有属性“init”

    我刚刚下载了 Pygame 但遇到了错误 AttributeError module pygame has no attribute init 我在 stackoverflow 上四处查看 有人通过重命名文件修复了错误 我不知道该怎么做 目
  • @TableGenerator 的初始值属性在 Hibernate 中显示问题,但在 JPA 中则不然

    package com sb firstjpaexample pojo import javax persistence Column import javax persistence Entity import javax persist
  • 用python在pygame中制作一个8*8的棋盘

    我想用 python 在 pygame 中制作一个棋盘 只是带有 for 循环的棋盘 我尝试了多种方法来做到这一点 但我不知道它到底是什么 这是我的代码 import pygame pygame init set color with rg
  • 如何用pygame画一条虚线?

    我需要在坐标系上绘制正弦波和余弦波 就像在this https i stack imgur com DGI8g png图片 除了没能代表以外 我所有的工作都做得很好虚线和曲线与 pygame 一致 我有与我需要的类似的东西 但我怎样才能让它
  • Pygame (Python) - TypeError: 参数必须是 rect 样式对象 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 这非常令人
  • Pygame 玩家精灵没有出现

    我一直在为学校计算机课做这个项目 但无法让玩家精灵出现 有人可以帮忙吗 当我运行主游戏循环时 除了玩家精灵之外 所有内容都正确显示 它应该由于箭头输入而在屏幕上移动并受到重力的影响 当我删除图像并仅使用对象类和矩形时 该代码也有效 impo
  • 在 JavaScript 中将函数映射到生成器上

    我有一个名为generateNumbers在 JavaScript 和另一个生成器中generateLargerNumbers它采用由生成的每个值generateNumbers并应用一个函数addOne对其而言 如下 function ad
  • Python - 为什么这段代码被视为生成器?

    我有一个名为 mb 的列表 其格式为 Company Name Rep Mth 1 Calls Mth 1 Inv Totals Mth 1 Inv Vol Mth 2 等等 在下面的代码中 我只是添加了一个包含 38 个 0 的新列表 这
  • Swift 2.0 版本的 struct GeneratorOf

    看起来struct GeneratorOf
  • Django 查询集和生成器

    出乎意料的是 我想知道以下使用生成器迭代结果集的方式是否会对正常迭代产生任何积极或消极的影响 eg def all items generator for item in Item objects all yield item for it
  • 根据条件生成脚本

    可以使用 SQL Server Management Studio 生成特定表的插入 方法是右键单击数据库 gt 任务 gt 生成脚本 选择表 最后仅选择数据 然而 随着时间的推移 表变得越来越大 我只需要具有特定条件的插入 这只会返回该表
  • 为什么 enumerate、zip、range 类型不属于 types.GeneratorType?

    Python 3 引入了类似生成器的对象 在调用时返回range and zip 返回的对象就像一个生成器 可以迭代一次 但不能很好地 打印 就像enumerate 返回参数 然而 我很困惑地发现它们是不同的对象类型并且不属于types G
  • 在 Mac (Catalina) 上安装 PyGame 时出错 [重复]

    这个问题在这里已经有答案了 我一直在尝试将 PyGame 安装到 Catalina 上的 Mac 上 但不知道如何安装 我收到的错误消息是 SystemExit error command gcc failed with exit stat
  • 是否可以将 ECMAScript 6 生成器重置为其初始状态?

    给定提供的 非常简单 生成器 是否可以将生成器返回到其原始状态以再次使用 var generator function yield 1 yield 2 yield 3 var iterable generator for let x of
  • 如何在 Rails 3 控制器生成器中使用 `--helper` 标志?

    文档来自rails generate controller says helper Indicates when to generate helper Default true 现在 它没有指定如何指示值 因此 由于默认值为 true 这意

随机推荐

  • 不可能向外界隐藏模板的实现(为了保护知识产权)。我对吗?

    我已阅读为什么模板只能在头文件中实现 and 为什么我不能将模板类的定义与其声明分开并将其放入 cpp 文件中 如果我创建模板 那么我还将提供对其的访问权限cpp 文件附加到他们的h files 或者直接将定义写入头文件中 因此 如果我想允
  • 无法更改图例符号 nvd3 气泡图

    在我的 nvd3 气泡图中 每组点都有不同的符号 但图例全部为圆圈 代码是here 我只遇到过这个 showLegend false 它可以隐藏或显示图例 我无法理解如何更改图例中的符号 nvd3 不允许您直接访问图例的内部结构 但是 您可
  • 如何在纵向应用程序中录制横向视频? (斯威夫特 2、iPhone)

    我需要在我的纵向 iPhone 应用程序中录制横向视频 是否可能 或者是否受到任何硬件限制的阻止 使用 AVCaptureVideoPreviewLayer 我能够更改预览方向 但视频仍然以纵向录制 欢迎任何想法 您应该能够将视频录制的方向
  • 如何将 cmake 与 boost asio 结合使用?

    我不明白boost asio在我的 C 程序中使用 cmake 我实际上已经尝试和谷歌搜索了很多小时 但我无法让它工作 我想包括boost asio在我的 Ubuntu 18 04 下的 c 项目中 带有一个 cmake 文件 所以我安装了
  • 如何从 Eclipse 为 javaCV 或 openCV 项目制作可运行的 jar

    我在 eclipse 中有一个 openCV 项目 现在 我试图使其可运行 Jar 但一旦尝试运行该 Jar 就无法启动它 我尝试遵循 https groups google com forum topic javacv ziqKIb7Pg
  • 如何在servlet中通过ajax获取数据?

    我想将页面上的一些数据发送到servlet 所以我写了下面的jquery来做到这一点 我用所有数据构建一个json字符串 并直接将其发送到servlet 但我不知道如何从servlet中的ajax获取全部数据 save click func
  • 优化 Sql Reporting Services 2005 中大报表的 PDF 导出

    首先 我知道运行非常大 长时间运行的报告是一个可怕的想法 我知道 Microsoft 有一条经验法则 规定 SSRS 报告的执行时间不应超过 30 秒 然而 有时 由于遵守州法律等外部力量 巨额报告是首选的祸害 在我的工作地点 我们有一个
  • Perl从命令行执行的问题

    上周我在 WinXP 上用 Strawberry Perl 替换了 ActivePerl 我发现我必须使用以下命令运行我的 Perl 脚本perl myperl pl 否则我只需要运行myperl pl在安装草莓之前 我怎么只能跑myper
  • Python:尝试使用请求发布表单

    我正在尝试使用 Python 和请求库登录网站进行一些抓取 我正在尝试以下操作 这不起作用 import requests headers User Agent Mozilla 5 0 payload username niceuserna
  • Django Forms 模板设计类

    Django Forms 框架非常出色 只需通过以下内容即可呈现整个表单 form as p 对于注册表 将上面的内容转换为 p p
  • 如何使用openjson递归解析JSON字符串

    我有以下 JSON 数据 set json N Book IssueDate 02 15 2019 Detail Type Any Type Author Name Annie Sex Female Chapter Section 1 1
  • 具有可变数量子视图的动态 UITableViewCell 高度

    我有一个UITableViewCell使用从远程源检索的数据动态填充 它具有基于单元格中表示的项目类型的可变数量的子视图 我通过使用动态计算单元格内容的大小NSMutableAttributedString和boundingRectWith
  • 无法从tomcat中自定义类加载器加载的类获取注释

    鉴于班级org popper example pages Login Page name Login public interface Login 出口到c pos example jar和以下 servlet public class P
  • JSP Servlet 会话 invalidate() 不会使会话为空

    我的 JSP 项目中有三个简单的 Http Servlet 类 LoginServlet Logout Servlet 和 Profile Servlet LoginServlet 通过为会话设置 name 属性来登录用户 LogoutSe
  • Lambda表达式编译方法

    我有几行代码 public void CreateMethod
  • 随机 MapView 强制关闭:NullPointerException com.google.googlenav.map.Tile.getTile

    我真的需要一些帮助 我有一份关于此堆栈跟踪强制关闭的报告 但我找不到任何有关如何防止的信息 也无法复制此类错误 我希望有人能够了解为什么会发生这种情况 com google googlenav map Tile getTile Unknow
  • include、include_once、require 还是 require_once?

    我有 PHP 文件 其中定义了服务器访问变量以及mysql connect and mysql select db 因为这个函数在后端的几乎每个页面中都经常使用 而我正在使用include 这现在对我来说非常有效 你会建议哪种方法或功能 我
  • 不可见元素的延迟加载

    我有一个案例 我有一个gridview listbox 任何类型的项目控件和绑定到控件的项目数量都很大 很容易在 5000 标记左右 其中每个项目都需要具有从各种 Web 服务加载的各种属性 显然 使用 Web 服务来一次性处理这么多元素是
  • 禁用 CURLOPT_SSL_VERIFYPEER (libcurl/openssl) 的安全后果

    我知道从这个线程禁用 CURLOPT SSL VERIFYHOST 时可能发生哪些攻击 我想知道禁用 VERIFYPEER 而不是 VERIFYHOST 时可能发生哪些攻击 使用信用卡付款的风险是否可以接受 我问的原因是因为我的code仅适
  • Pygame 蛇食物生成器

    我目前正在创建一个贪吃蛇游戏 我想创建一个食物生成器 根据我的游戏计时器每 10 秒生成一个苹果 计时器从 60 倒数到 0 游戏结束时 我希望每 10 秒生成一个新苹果 保留旧苹果 即使它还没有被吃掉 我不知道如何解决这个问题 需要一些帮