当前位置: 首页 > news >正文

0339-Tetris-方块自动下落

环境

  • Time 2023-08-22
  • Zig 0.12.0-dev.161+6a5463951
  • WSL-Ubuntu 22.04.3 LTS

前言

说明

参考资料:

  1. https://www.youtube.com/watch?v=nF_crEtmpBo
  2. https://github.com/howprice/sdl2-tetris

目标

使用 SDL2 自带的定时器来实现方块的自动下落。

main.zig

const c = @import("c.zig");
const std = @import("std");
const display = @import("display.zig");
const app = @import("app.zig");pub fn main() !void {var screen = display.Screen{};screen.init();defer screen.deinit();var game = app.Game.new();_ = c.SDL_AddTimer(500, tick, null);mainLoop: while (true) {var event: c.SDL_Event = undefined;while (c.SDL_PollEvent(&event) != 0) {if (event.type == c.SDL_QUIT)break :mainLoop;handleInput(&game, &screen, &event);}screen.update();game.drawCurrent(&screen);screen.present();}
}fn handleInput(game: *app.Game, screen: *display.Screen, event: *c.SDL_Event) void {if (event.type != c.SDL_KEYDOWN) return;const code = event.key.keysym.sym;switch (code) {c.SDLK_LEFT => game.moveLeft(screen),c.SDLK_RIGHT => game.moveRight(screen),c.SDLK_UP => game.rotate(screen),c.SDLK_DOWN => game.moveDown(screen),c.SDLK_SPACE => game.rotate(screen),else => return,}
}fn tick(interval: u32, _: ?*anyopaque) callconv(.C) u32 {var event: c.SDL_Event = std.mem.zeroes(c.SDL_Event);event.type = c.SDL_KEYDOWN;event.key.keysym.sym = c.SDLK_DOWN;_ = c.SDL_PushEvent(&event);return interval;
}

只需要修改 main.zig 文件,增加一个 tick 方法,并将其加入到定时器中。

效果

方块自动下落

总结

通过定时器来实现方块的自动下落。

附录

http://www.jsqmd.com/news/160298/

相关文章:

  • Jupyter魔法命令%timeit在PyTorch代码优化中的应用
  • 生成式AI在兼容性测试中的创新
  • 2025-2026年COB显示屏厂家权威推荐:西安慧联光电聚焦医疗场景适配 - 深度智识库
  • Token限流策略设计:保护大模型API不被滥用
  • 企业微信外部群消息推送的实现逻辑
  • 2025年小红书代运营专业公司排行榜,新测评精选小红书代运营团队推荐 - 工业品牌热点
  • 2025西南、川渝最新幕墙防火玻璃/防火玻璃/防火隔断/纳米硅防火玻璃/防火窗品牌首要推荐兴三维玻璃:西南玻璃深加工标杆企业,三十载品质护航 - 全局中转站
  • 代码生成器已上线!大模型让编程小白也能写出神仙代码,真香警告!
  • 记录一次日志告警随着nacos文件动态刷新而失效的问题
  • Safeguard Global名义雇主EOR:2026助力出海企业快速合规雇佣加拿大员工 - 品牌2025
  • 2025-2026权威解析:如何选择LED显示屏厂家?这份推荐榜单值得参考 - 深度智识库
  • 企业微信开发:外部群消息推送的“三步走”逻辑
  • 防脱发洗发水哪个牌子好?十大防脱发洗发水推荐,解决脱发困扰 - 博客万
  • 大模型Agent vs Workflow:谁才是程序员的“躺平“救星?99%的人都选错了!
  • 森果云面试经历
  • 2025-2026兰州钢琴搬运公司TOP3最新推荐报告:甘肃蚂蚁搬家全链条保障 - 深度智识库
  • langchain4j 构建agent工作流
  • 卫星通信与物联网模组融合发展的新趋势
  • 【Java毕设全套源码+文档】基于springboot的特殊儿童家长教育能力提升平台设计与实现(丰富项目+远程调试+讲解+定制)
  • 别再只学技术了!AI产品经理转型第一课:用你最强的“需求洞察力”,理解大模型本质!
  • 普通人能进军网络安全行业吗?过来人手把手支招,帮你躲开这 5 个误区!
  • 2025最新!8个AI论文平台测评:本科生毕业论文写作痛点全解析
  • 2025年质量好的复合井盖公司推荐:双层井盖、变电站室外电缆沟盖板、复合井盖、复合树脂井盖、复合盖板、成品复合电缆沟盖板选择指南 - 优质品牌商家
  • 2026年采购决策:环境噪声自动监测系统推荐工厂/实力厂家推荐,优质供应商哪家好,哪个品牌好 - 品牌推荐大师1
  • 【Java毕设全套源码+文档】基于springboot的实验室开放管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 大模型核心技术解析:Embedding原理与向量数据库!
  • MySQL EXPLAIN 执行计划分析:能否查看 JOIN 关联顺序
  • 2025年湖南工程师职称申报服务权威推荐榜:中级职称申报/筑励咨询职称申报/高级职称申报/高级工程师职称申报服务精选 - 品牌推荐官
  • 2025年绝缘曲臂高空作业车行业应用白皮书:绝缘斗臂高空作业车、绝缘曲臂高空作业车、绝缘直臂高空作业车、绝缘臂高空作业车选择指南 - 优质品牌商家
  • 0335-Tetris-渲染方块