Understanding Unix/Linux Programming-事件驱动编程:编写一个视频游戏
- 概念与技巧:
- 异步事件驱动编程
- curses库:目标和使用
- 警告和间隔计时器
- 可靠的信号处理
- 可重入代码、临界区
- 异步输入
- 相关的系统调用
- alarm、setitimer、getitimer
- kill、pause
- sigaction、sigprocmask
- fcntl、aio_read
- 视频游戏与操作系统
通过这个例子呢,作者希望我们了解更多的Unix系统服务,一些基本的原则,和操作系统的设计技术
-
- 游戏需求
考虑两人参与的星际旅行视频游戏,车给你需创立行星、流星、飞船和其他物体的影像,并使他们移动。每个物体有自己的移动速度、方向、动力和其他一些属性。物体之间相互作用,可能碰撞。
游戏需要同时响应用户输入。玩家通过按键、鼠标、轨迹球在任何时刻生成输入。程序在很短时间内作出响应。这些输入事件可以改变物体的属性。通过按下按钮,用户可以增加速度或者减小质量。飞船的变化会影响它与其他物体的作用方式。
-
- 如何构写视频游戏:
- 空间:在屏幕特定位置画影像,程序如何控制显示?
- 时间:影像以一个特定的时间改变位置,程序如何获知时间,并且在特定的时间安排事件发生
- 中断:程序在屏幕上平滑移动物体,用户可在任意时刻产生输入
- 同时做几件事情:游戏必须保持物体的移动同时还要响应中断
-
- 操作系统面临类似的问题:
- 内核将程序载入内存空间并维护每个程序在内存中所处的位置
- 在内核的调度下,程序以时间片的间隔方式运行
- 内核也在特定的时刻运行特定的内部事务
- 内核必须在很短的时间内响应用户和外设在任何时刻的输入
- 屏幕管理、时间、信号、共享资源
为了学习这4个基本主题,我们将编写一个字符终端动画游戏!
为什么是字符终端动画游戏?因为专注于系统编程啊。
- 单人弹球游戏
- curses库:展示curses程序的基本逻辑
Opensuse中不自带curses.h,可以安装ncurses-devel,不过好像安装之后,头文件内附带的函数也没有定义,可惜没时间折腾,那就不编游戏了吧,后面有空再说。