前言
偶然在网上看到一个很巧妙用C语言实现的2048游戏,只有487个字符,简直被作者的代码震撼到:原来c还能这么写。
源代码来自于Jay Chan的Github。
1 | M[16],X=16,W,k;main(){T(system("stty cbreak") |
看到这么一大堆东西是不是很头疼,那么就格式规范化后仔细看一下。
重新格式化
这部分参考了 catull 的代码,原地址:https://gist.github.com/justecorruptio/9967738#
1 | /* |
运行
现在在 linux 下运行一下,结果如下图:
游戏开始时界面:
游戏运行中界面:
游戏结束时界面:
解析
作者充分利用了C语言的一些语法,比如大量用到了
&&和||在条件判断过程中的顺序来代替if判断。比如:
1
i % 4 || puts("")
代替了:
1
2if(i % 4 == 0)
printf('\n');这里提一下
puts()和printf()的区别:puts()会在结尾输出\n,printf()不会换行。
作者利用
puts("\e[2J\e[H");作为清屏。作者利用
read(0, &k, 3);读取键盘输入,read()在头文件#include <unistd.h>中,函数定义为:1
size_t read(int fildes, void *buf, size_t nbytes);
其中
fildes为0, 1, 2时分别表示standard input、standard output和standard error。