# mygame **Repository Path**: zqwC/mygame ## Basic Information - **Project Name**: mygame - **Description**: c语言写的小游戏 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-30 - **Last Updated**: 2021-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 终端小游戏设计思路 * 控制 * 显示 * 游戏规则 # 控制 游戏玩家通过键盘控制游戏运行,在2D中通常是四个方向加一些其他键。 从标准输入中获取玩家的输入,根据不同的键值进行处理。 对于输入需要注意以下两点: * 不需要每次都按回车键 > ![终端IO的两种工作模式](./doc/终端IO的两种工作模式.png) 在平时使用linux的时候,它怎么知道我们什么时候输入结束? 在执行某个命令的时候,我们先输入命令,然后回车,linux通过回车键知道输入结束了。 规范模式下以行为单位进行处理,在linux内部有一个行缓冲,当用户输入后需要按回车键(换行)来表示输入结束, 然后将输入的内容给到linux处理。 非规范模式下,用户可以输入单个字符,此时linux怎么知道输入结束了? * 设置一个超时时间,超过该时间则认为输入结束了 * 设置一个输入的最小字节数,比如当输入超过5个字节时则认为输入结束了 * 不需要回显(通常按下某个键时会回显到屏幕,但游戏中不需要回显) ```c int tty_cbreak(int fd) { struct termios new; if(tcgetattr(fd, &g_save_termios) < 0) return -1; new = g_save_termios; new.c_lflag &= ~(ECHO | ICANON); // 不需要回显,使用非标准模式 new.c_cc[VMIN] = 1; // 超过一个字节即可结束 new.c_cc[VTIME] = 0; // 输入超时时间为0,立即输入 return (tcsetattr(fd, TCSAFLUSH, &new) < 0) ? (-1) : (0); } ``` # 显示 在终端下只用printf实现所有ui显示 * 隐藏光标 * 光标移动到指定位置 # 游戏规则 * 碰撞检测 # 整体思路 ```c int main() { // 初始化 while(1) { // 显示 // 控制 // 游戏规则 } } ```