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

0338-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

目标

使用上方向键来控制方块的旋转,旋转的过程中,需要保证不旋转到屏幕外。

app.zig

const std = @import("std");
const Screen = @import("display.zig").Screen;
const Tetrimino = @import("block.zig").Tetrimino;pub const Game = struct {current: Tetrimino,prng: std.rand.DefaultPrng,pub fn new() Game {const seed = @as(u64, @intCast(std.time.timestamp()));var rand = std.rand.DefaultPrng.init(seed);return Game{.current = Tetrimino.random(&rand),.prng = rand,};}pub fn drawCurrent(self: *Game, screen: *Screen) void {draw(&self.current, screen);}pub fn moveLeft(self: *Game, screen: *Screen) void {_ = screen;self.move(-1, 0);}pub fn moveRight(self: *Game, screen: *Screen) void {_ = screen;self.move(1, 0);}pub fn moveDown(self: *Game, screen: *Screen) void {_ = screen;self.move(0, 1);}fn move(self: *Game, x: i8, y: i8) void {self.current.x = self.current.x + x;self.current.y = self.current.y + y;self.current.locateIn();}pub fn rotate(self: *Game, screen: *Screen) void {_ = screen;self.current.rotate();self.current.locateIn();}
};fn draw(block: *const Tetrimino, screen: *Screen) void {const value = block.position();var index: usize = 0;while (index < value.len) : (index += 2) {const row: usize = @intCast(block.x + value[index]);const col: usize = @intCast(block.y + value[index + 1]);screen.draw(row, col, block.color);}
}

增加了旋转 rotate 方法。

main.zig

const c = @import("c.zig");
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();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,}
}

增加了键盘控制,可以使用上和空格来进行旋转。

效果

控制方块旋转

总结

通过键盘的上键和空格键,来控制方块的旋转。

附录

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

相关文章:

  • CUDA共享内存使用技巧提升Kernel性能
  • 2025年北京企业搬家服务推荐榜:公司搬家/长途搬家/正规搬家/跨省搬家服务精选 - 品牌推荐官
  • Token压缩算法减少传输成本
  • 2025年模块化搭建太空舱优质厂家权威推荐榜单:旅游太空舱民宿/景观移动太空舱/源头工厂太空舱/移动太空舱定制源头厂家精选 - 品牌推荐官
  • 震惊!大模型缓存技术竟让Token“原地起飞“,成本砍10倍,小白也能秒懂LLM优化黑科技!
  • 2025-2026年COB显示屏厂家权威推荐:西安慧联光电聚焦医疗场景适配 - 深度智识库
  • 2025年小红书代运营专业公司排行榜,新测评精选小红书代运营团队推荐 - 工业品牌热点
  • 2025-2026权威解析:如何选择LED显示屏厂家?这份推荐榜单值得参考 - 深度智识库
  • 2025-2026兰州钢琴搬运公司TOP3最新推荐报告:甘肃蚂蚁搬家全链条保障 - 深度智识库
  • 卫星通信与物联网模组融合发展的新趋势
  • 2026年采购决策:环境噪声自动监测系统推荐工厂/实力厂家推荐,优质供应商哪家好,哪个品牌好 - 品牌推荐大师1
  • 大模型应用工程师的真实薪资曝光:入行门槛、发展路径与2026年招聘趋势全解析!
  • 【Java毕设全套源码+文档】基于springboot的垃圾分类回收管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 2025-2026长途搬家公司最新TOP3推荐出炉!甘肃蚂蚁搬家彰显专业实力 - 深度智识库
  • 2026年宁夏银川GEO AI优化公司最新综合实力调研排行
  • 学习通越过手机客户端限制考试/作业
  • 0332-Tetris-封装显示窗口
  • 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轴刀塔定制找哪家 - 品牌推荐师