当前位置: 首页 > 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.jsqmd.com/news/160258/

相关文章:

  • GitHub Issue模板设计:提高PyTorch项目协作效率
  • AI for Science技术解析:从方法论到前沿应用的全视角洞察
  • Docker Compose编排PyTorch服务集群
  • 2025年扭蛋机合作/联营/加盟厂家推荐:杭州心动潮玩科技,智能扭蛋机全系运营方案 - 品牌推荐官
  • 2025垃圾渗滤液运维服务TOP5企业权威推荐:达泽环保行业地位高 - mypinpai
  • 【Java毕设全套源码+文档】基于springboot的个性化推荐影院网站设计与实现(丰富项目+远程调试+讲解+定制)
  • 【Java毕设全套源码+文档】基于springboot的小型民营加油站管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • YOLOv11模型权重文件下载地址汇总
  • 2025角钢厂家权威榜单推荐:镀锌角钢/万能角钢架/冲孔角钢/万能角钢/热镀锌万能角钢源头厂家精选 - 品牌推荐官
  • 【Java毕设全套源码+文档】基于springboot的家政预约平台的设计与实现(丰富项目+远程调试+讲解+定制)
  • 我惊了!别再吹人类独有创造力了!Nature子刊:在这项测试中,LLM已经碾压人类!
  • SSH X11转发显示PyTorch可视化图形
  • Disk quota exceeded错误应对:PyTorch训练日志管理
  • 2025最新全车型充电桩厂家十大品牌推荐:覆盖重卡/汽车/电动车补能全场景 - 深度智识库
  • Spring Security、Apache Shiro、Sa-Token,主流安全框架如何选择?
  • 怎么建立一套科学的碳排放管理体系?工业制造企业必看
  • AbMole丨Etoposide:从DNA损伤到组蛋白乙酰化调控的研究工具
  • SDET vs 测试开发工程师:数字化时代的测试角色进化论
  • 【Java毕设全套源码+文档】基于springboot的大学生志愿者信息管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 为什么说巧手智心STEM特别适合尝试做科技特色教育的幼儿园?
  • 震惊!Multi-Agent没有调度器就像“幼儿园乱作一团“,大厂面试必考!90%的人都答错了!
  • 分龄护肤,以专业水光技术与光电保养,为肌肤注入冬日“热水” - 速递信息
  • AI智能体与大模型:从认知到执行的跃迁,技术架构与应用场景深度解析(必藏)
  • 速卖通卖家必看:自养号测评提升自然流量的秘籍
  • 大模型面试必考题:为什么从单Agent转向Multi-Agent?90%的人都答错了!
  • Markdown表格展示PyTorch模型训练指标对比
  • 计算机毕业设计springboot基于微信小程序的网络文学管理平台 基于微信小程序的网络文学管理平台设计与实现 微信小程序环境下网络文学管理系统的开发与应用
  • 如何进行数据比对?好用的数据比对方法介绍!
  • 2025年遗产继承应对能力强律师推荐,遗产继承专注律师与杰出律师全解析 - 工业品网
  • 2025寻找优质刀塔?附近工厂综合评测出炉,尾顶机/46排刀机/插补Y/四轴机/直Y/数控4+4/36排刀机/数控车床/Y轴刀塔定制找哪家 - 品牌推荐师