当前位置: 首页 > 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.rkmt.cn/news/175644.html

相关文章:

  • 生成式AI在兼容性测试中的创新
  • 2025西南、川渝最新幕墙防火玻璃/防火玻璃/防火隔断/纳米硅防火玻璃/防火窗品牌首要推荐兴三维玻璃:西南玻璃深加工标杆企业,三十载品质护航 - 全局中转站
  • 企业微信外部群消息推送的实现逻辑
  • 企业微信开发:外部群消息推送的“三步走”逻辑
  • 大模型Agent vs Workflow:谁才是程序员的“躺平“救星?99%的人都选错了!
  • 森果云面试经历
  • 【Java毕设全套源码+文档】基于springboot的特殊儿童家长教育能力提升平台设计与实现(丰富项目+远程调试+讲解+定制)
  • 别再只学技术了!AI产品经理转型第一课:用你最强的“需求洞察力”,理解大模型本质!
  • 2025最新!8个AI论文平台测评:本科生毕业论文写作痛点全解析
  • 【Java毕设全套源码+文档】基于springboot的实验室开放管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 大模型核心技术解析:Embedding原理与向量数据库!
  • 2025年绝缘曲臂高空作业车行业应用白皮书:绝缘斗臂高空作业车、绝缘曲臂高空作业车、绝缘直臂高空作业车、绝缘臂高空作业车选择指南 - 优质品牌商家
  • 2025年湖南工程师职称申报服务权威推荐榜:中级职称申报/筑励咨询职称申报/高级职称申报/高级工程师职称申报服务精选 - 品牌推荐官
  • MySQL EXPLAIN 执行计划分析:能否查看 JOIN 关联顺序
  • 2025年防火槽式桥架怎么选?这份优质厂家推荐榜单请收好 - 深度智识库
  • 【Java毕设源码分享】基于springboot+vue的家政预约平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • GitHub Issue模板设计:提高PyTorch项目协作效率
  • 2025角钢厂家权威榜单推荐:镀锌角钢/万能角钢架/冲孔角钢/万能角钢/热镀锌万能角钢源头厂家精选 - 品牌推荐官
  • Disk quota exceeded错误应对:PyTorch训练日志管理
  • Spring Security、Apache Shiro、Sa-Token,主流安全框架如何选择?
  • 怎么建立一套科学的碳排放管理体系?工业制造企业必看
  • AbMole丨Etoposide:从DNA损伤到组蛋白乙酰化调控的研究工具
  • 速卖通卖家必看:自养号测评提升自然流量的秘籍
  • 大模型面试必考题:为什么从单Agent转向Multi-Agent?90%的人都答错了!
  • 如何进行数据比对?好用的数据比对方法介绍!
  • 2026重庆儿童自闭症诊疗指南:重庆市有看自闭症的医院吗?哪个医院看幼儿自闭症好? - 品牌2026
  • 信创生态再添力!EasyCVR适配国产化数据库,全面拥抱国产化
  • 基于MATLAB的SUSAN特征检测算子边缘提取实现
  • Markdown绘制流程图:展示PyTorch训练pipeline
  • 图像处理