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

0332-Tetris-封装显示窗口

环境

  • Time 2023-08-22
  • Zig 0.11.0
  • WSL-Ubuntu 22.04.3 LTS

前言

说明

参考资料:

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

目标

将游戏显示窗口的逻辑,封装到一起。

c.zig

pub usingnamespace @cImport({@cInclude("SDL.h");@cInclude("SDL_ttf.h");
});const self = @This();
const std = @import("std");pub fn sdlPanic() noreturn {const str = @as(?[*:0]const u8, self.SDL_GetError());@panic(std.mem.sliceTo(str orelse "unknown error", 0));
}

display.zig

游戏的大小为宽 10,高 20。

const c = @import("c.zig");pub const WIDTH = 10;
pub const HEIGHT = 20;pub const Screen = struct {buffer: [WIDTH][HEIGHT]u32 = undefined,window: *c.SDL_Window = undefined,renderer: *c.SDL_Renderer = undefined,pub fn init(self: *Screen) void {if (c.SDL_Init(c.SDL_INIT_EVERYTHING) < 0) c.sdlPanic();const center = c.SDL_WINDOWPOS_CENTERED;self.window = c.SDL_CreateWindow("俄罗斯方块", center, center, //400, 800,  c.SDL_WINDOW_SHOWN) orelse c.sdlPanic();self.renderer = c.SDL_CreateRenderer(self.window, -1, 0) //orelse c.sdlPanic();}pub fn deinit(self: *Screen) void {c.SDL_DestroyRenderer(self.renderer);c.SDL_DestroyWindow(self.window);c.SDL_Quit();}
};

main.zig

const c = @import("c.zig");
const display = @import("display.zig");pub fn main() !void {var screen = display.Screen{};screen.init();defer screen.deinit();mainLoop: while (true) {var event: c.SDL_Event = undefined;while (c.SDL_PollEvent(&event) != 0) {if (event.type == c.SDL_QUIT)break :mainLoop;}_ = c.SDL_SetRenderDrawColor(screen.renderer, 0x3B, 0x3B, 0x3B, 0xFF);_ = c.SDL_RenderClear(screen.renderer);c.SDL_RenderPresent(screen.renderer);}
}

将游戏的显示逻辑封装到了 display.zig 文件中,不改变原有的显示逻辑。

效果

显示 SDL2 窗口

总结

将其中的显示逻辑进行了封装,没有改变原有的显示逻辑。

附录

http://www.gsyq.cn/news/175607.html

相关文章:

  • AI for Science技术解析:从方法论到前沿应用的全视角洞察
  • Docker Compose编排PyTorch服务集群
  • 2025年扭蛋机合作/联营/加盟厂家推荐:杭州心动潮玩科技,智能扭蛋机全系运营方案 - 品牌推荐官
  • 2025垃圾渗滤液运维服务TOP5企业权威推荐:达泽环保行业地位高 - mypinpai
  • 【Java毕设全套源码+文档】基于springboot的家政预约平台的设计与实现(丰富项目+远程调试+讲解+定制)
  • 2025最新全车型充电桩厂家十大品牌推荐:覆盖重卡/汽车/电动车补能全场景 - 深度智识库
  • 【Java毕设全套源码+文档】基于springboot的大学生志愿者信息管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 震惊!Multi-Agent没有调度器就像“幼儿园乱作一团“,大厂面试必考!90%的人都答错了!
  • 为什么说巧手智心STEM特别适合尝试做科技特色教育的幼儿园?
  • AI智能体与大模型:从认知到执行的跃迁,技术架构与应用场景深度解析(必藏)
  • Markdown表格展示PyTorch模型训练指标对比
  • 计算机毕业设计springboot基于微信小程序的网络文学管理平台 基于微信小程序的网络文学管理平台设计与实现 微信小程序环境下网络文学管理系统的开发与应用
  • 2025寻找优质刀塔?附近工厂综合评测出炉,尾顶机/46排刀机/插补Y/四轴机/直Y/数控4+4/36排刀机/数控车床/Y轴刀塔定制找哪家 - 品牌推荐师
  • 2025年遗产继承应对能力强律师推荐,遗产继承专注律师与杰出律师全解析 - 工业品网
  • 实时数据有哪些特点?企业该如何管理好实时数据?
  • 2025年陶瓷筷品牌推荐:陶瓷筷十大品牌排名 - myqiye
  • 流量重构下,GEO优化有哪些新挑战? - 源码云科技
  • 避免Installing torch超时:推荐使用国内加速镜像源
  • 什么是数据标准?数据标准有什么作用?
  • 汽车制造:DeepSeek辅助设备故障预测与停机时间降低方案
  • Transformer架构详解:基于PyTorch-CUDA环境实现
  • 2026年滤芯完整性测试仪实力厂家大盘点:生产商/供应商/制造商推荐 - 品牌推荐大师1
  • 港大团队提出 DeepCode ,让 Agent 真能“读论文写可运行代码”
  • DeepSeek教育科技应用:智能生成个性化学习规划与知识点拆解教程
  • Anaconda替换方案:Docker+PyTorch镜像成新趋势
  • 飞书多维表格——也是一个在线文档平台-类似腾讯文档和金山文档——可以用短信验证码登入,
  • 2025年安全门窗制造商品牌商推荐:靠谱的安全门窗个性化定制品牌商有哪些? - myqiye
  • 【Linux命令大全】001.文件管理之mtools命令(实操篇)
  • Java 架构师高频面试题:集合 +JVM+Redis+ 并发 + 算法 + 框架等
  • 从Anaconda迁移到Docker镜像:PyTorch环境升级之路