一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符
Jay Chan 用
C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符。
来围观吧
M[16],X=16,W,k;main(){T(system("stty cbreak")
);puts(W&1?
"WIN":"LOSE");}K[]={2,3,1};s(f,d,i
,j,l,P){for(i=4;i--;)for(j=k=l=0;k<4;)j<4?
P=M
[w(d,i,j++)],W|=P>>11,l*P&&(f?M[w(d,i,k)]=l<<
(l==P):0,k++),l=l?P?l-P?P:0:l:P:(f?M[w(d,i,k)
]=l:0,++k,W|=2*!l,l=0);}w(d,i,j){return d?w(d
-1,j,3-i):4*i+j;}T(i){for(i=X+rand()%X;M[i%X]
*i;i--);i?
M[i%X]=2<<rand()%2:0;for(W=i=0;i<4;
)s(0,i++);for(i=X,puts("\e[2J\e[H");i--;i%4||
puts(""))printf(M[i]?"%4d|":" |",M[i]);W-2
||read(0,&k,3)|T(s (1,K[(k>>X)%4]));}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h> #define GRID_LEN 16 int M[GRID_LEN];
int X = GRID_LEN;
int W;
int k;
int K[] = { 2, 3, 1 }; int w (int d, int i, int j)
{
if (d <= 0) {
return 4 * i + j;
} return w (d - 1, j, 3 - i);
} void s (int f, int d)
{
int i = 4, j, l, P; for (; i--;) {
j = k = l = 0; for (; k < 4;) {
if (j < 4) {
P = M[w (d, i, j++)];
W |= P >> 11;
l *P && (f ? M[w (d, i, k)] = l << (l == P) : 0, k++);
l = l ? (P ? (l - P ? P : 0) : l) : P;
}
else {
f ? M[w (d, i, k)] = l : 0;
++k;
W |= 2 * !l;
l = 0;
}
}
}
} void T ()
{
int i = X + rand () % X; for (; M[i % X] * i; i--); i ? M[i % X] = 2 << rand () % 2 : 0;
W = i = 0; for (; i < 4; i++) {
s (0, i);
} // Prints the tiles onto the terminal
i = X;
puts ("\e[2J\e[H"); for (; i--;) {
if (M[i]) {
printf ("%4d|", M[i]);
} else {
printf ("%s", " |");
} // every 4th cell is followed by a line-break
if (0 == (i & 3)) {
putchar ('\n');
}
} // read input from keyboard
if (!(W - 2)) {
read (0, &k, 3);
s (1, K[(k >> X) % 4]);
T ();
}
} int main (void)
{
// Uses stty to clear the screen in preparation for the game
//system ("stty cbreak"); /* Intializes random number generator */
srand ((unsigned) time (NULL)); T (); // Game has finished by this point
// If win, display "WIN". Otherwise, display "LOSE".
puts (W & 1 ? "WIN" : "LOSE"); return 0;
}
一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符的更多相关文章
- Cocos2d-x 3.x版2048游戏开发
Cocos2d-x 3.x版2048游戏开发 本篇博客给大家介绍怎样高速开发2048这样一款休闲游戏,理解整个2048游戏的开发流程.从本篇博客你将能够学习到下面内容: 这里注明一下,本教程来自极客学 ...
- 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...
- Koa源码解析,带你实现一个迷你版的Koa
前言 本文是我在阅读 Koa 源码后,并实现迷你版 Koa 的过程.如果你使用过 Koa 但不知道内部的原理,我想这篇文章应该能够帮助到你,实现一个迷你版的 Koa 不会很难. 本文会循序渐进的解析内 ...
- ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...
- php调用一个c语言写的接口问题
用php调用一个c语言写的soap接口时,遇到一个问题:不管提交的数据正确与否,都无法请求到接口 1.用php标准的soap接口去请求 2.拼接xml数据去请求 以上两种方式都不正确 解决办法:php ...
- 用C语言写一个“事件”的模拟程序
源:用C语言写一个“事件”的模拟程序 Example.c //定义一个函数指针 func int (*func) (void); //调用该函数相当于触发了事件. //该事件触发后,会检查函数指针fu ...
- 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)
[重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...
- 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧拿出来拍啊
花10天时间用C语言做了个小站 http://tieba.yunxunmi.com/index.html 简称: 云贴吧 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧 ...
随机推荐
- 使用回溯法求所有从n个元素中取m个元素的组合
不多说了,直接上代码,代码中有注释,应该不难看懂. #include <stdlib.h> #include <stdio.h> typedef char ELE_TYPE; ...
- Android imageView图片按比例缩放
android:scaleType可控制图片的缩放方式,示例代码如下: <ImageView android:id="@+id/img" android:src=" ...
- IOS开发之UILabel动态高度设置方法
项目中有这样的需求,要显示一本书的概述,默认显示2行,点击展开按钮,显示全部,点击收回,有显示2行. 开始的时候按钮事件中,可能写的是这样一段代码: if (isExpand) { [lblBrief ...
- EF的两种延迟加载
EF的两种延迟加载 EF的延迟加载一: 在一次查询以后得到temp,然后在temp上直接进行查询得到temp2,我们调用temp2的时候,是直接为temp生成sql脚本的,没有生成temp的脚本,也就 ...
- Apple严控Java太不人性化
转自:http://www.cdtarena.com/javapx/201307/9115.html Apple为了在系统安全方面得到更好的声誉,对更容易造成系统漏洞的Java进行着严格的控制,并在自 ...
- Android 讲述Help提示框
Android 讲述Help提示框 XML/HTML代码 <stringname="help_dialog_text"> <i>Author:fonter. ...
- Swift - 设置应用程序图标的提醒个数(右上角小红圈)
使用UILocalNotification除了可以实现本地消息的推送功能(可以设置推送内容,推送时间,提示音),还可以设置应用程序右上角的提醒个数. 下面演示如何设置,效果图如下: --- AppDe ...
- C#中一些易混知识的比较
Equals 和==的区别 C#中有两种不同的相等:引用相等和值相等 ==是比较两个变量的值是否相同或两个引用是不是指向同一个内存地址. Equals ...
- windows live writer插件说明文档(附录网盘地址)
百度云地址:http://pan.baidu.com/s/1hqnjzjY 1.Screen Capture tool 用于直接在WLWriter中进行截图的一个插件,要配合SnagIt 这个软件使用 ...
- How to decompile class file in Java and Eclipse - Javap command example(转)
Ability to decompile a Java class file is quite helpful for any Java developer who wants to look int ...