Jay Chan 用
C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符。

来围观吧

  1. M[16],X=16,W,k;main(){T(system("stty cbreak")
  2. );puts(W&1?
  3.  
  4. "WIN":"LOSE");}K[]={2,3,1};s(f,d,i
  5. ,j,l,P){for(i=4;i--;)for(j=k=l=0;k<4;)j<4?
  6.  
  7. P=M
  8. [w(d,i,j++)],W|=P>>11,l*P&&(f?M[w(d,i,k)]=l<<
  9. (l==P):0,k++),l=l?P?l-P?P:0:l:P:(f?M[w(d,i,k)
  10. ]=l:0,++k,W|=2*!l,l=0);}w(d,i,j){return d?w(d
  11. -1,j,3-i):4*i+j;}T(i){for(i=X+rand()%X;M[i%X]
  12. *i;i--);i?
  13.  
  14. M[i%X]=2<<rand()%2:0;for(W=i=0;i<4;
  15. )s(0,i++);for(i=X,puts("\e[2J\e[H");i--;i%4||
  16. puts(""))printf(M[i]?"%4d|":" |",M[i]);W-2
  17. ||read(0,&k,3)|T(s (1,K[(k>>X)%4]));}
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <time.h>
  5.  
  6. #define GRID_LEN 16
  7.  
  8. int M[GRID_LEN];
  9. int X = GRID_LEN;
  10. int W;
  11. int k;
  12. int K[] = { 2, 3, 1 };
  13.  
  14. int w (int d, int i, int j)
  15. {
  16. if (d <= 0) {
  17. return 4 * i + j;
  18. }
  19.  
  20. return w (d - 1, j, 3 - i);
  21. }
  22.  
  23. void s (int f, int d)
  24. {
  25. int i = 4, j, l, P;
  26.  
  27. for (; i--;) {
  28. j = k = l = 0;
  29.  
  30. for (; k < 4;) {
  31. if (j < 4) {
  32. P = M[w (d, i, j++)];
  33. W |= P >> 11;
  34. l *P && (f ? M[w (d, i, k)] = l << (l == P) : 0, k++);
  35. l = l ? (P ? (l - P ?
  36.  
  37. P : 0) : l) : P;
  38. }
  39. else {
  40. f ? M[w (d, i, k)] = l : 0;
  41. ++k;
  42. W |= 2 * !l;
  43. l = 0;
  44. }
  45. }
  46. }
  47. }
  48.  
  49. void T ()
  50. {
  51. int i = X + rand () % X;
  52.  
  53. for (; M[i % X] * i; i--);
  54.  
  55. i ? M[i % X] = 2 << rand () % 2 : 0;
  56. W = i = 0;
  57.  
  58. for (; i < 4; i++) {
  59. s (0, i);
  60. }
  61.  
  62. // Prints the tiles onto the terminal
  63. i = X;
  64. puts ("\e[2J\e[H");
  65.  
  66. for (; i--;) {
  67. if (M[i]) {
  68. printf ("%4d|", M[i]);
  69. } else {
  70. printf ("%s", " |");
  71. }
  72.  
  73. // every 4th cell is followed by a line-break
  74. if (0 == (i & 3)) {
  75. putchar ('\n');
  76. }
  77. }
  78.  
  79. // read input from keyboard
  80. if (!(W - 2)) {
  81. read (0, &k, 3);
  82. s (1, K[(k >> X) % 4]);
  83. T ();
  84. }
  85. }
  86.  
  87. int main (void)
  88. {
  89. // Uses stty to clear the screen in preparation for the game
  90. //system ("stty cbreak");
  91.  
  92. /* Intializes random number generator */
  93. srand ((unsigned) time (NULL));
  94.  
  95. T ();
  96.  
  97. // Game has finished by this point
  98. // If win, display "WIN". Otherwise, display "LOSE".
  99. puts (W & 1 ? "WIN" : "LOSE");
  100.  
  101. return 0;
  102. }

一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符的更多相关文章

  1. Cocos2d-x 3.x版2048游戏开发

    Cocos2d-x 3.x版2048游戏开发 本篇博客给大家介绍怎样高速开发2048这样一款休闲游戏,理解整个2048游戏的开发流程.从本篇博客你将能够学习到下面内容: 这里注明一下,本教程来自极客学 ...

  2. 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  3. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  4. Koa源码解析,带你实现一个迷你版的Koa

    前言 本文是我在阅读 Koa 源码后,并实现迷你版 Koa 的过程.如果你使用过 Koa 但不知道内部的原理,我想这篇文章应该能够帮助到你,实现一个迷你版的 Koa 不会很难. 本文会循序渐进的解析内 ...

  5. ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程

    从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...

  6. php调用一个c语言写的接口问题

    用php调用一个c语言写的soap接口时,遇到一个问题:不管提交的数据正确与否,都无法请求到接口 1.用php标准的soap接口去请求 2.拼接xml数据去请求 以上两种方式都不正确 解决办法:php ...

  7. 用C语言写一个“事件”的模拟程序

    源:用C语言写一个“事件”的模拟程序 Example.c //定义一个函数指针 func int (*func) (void); //调用该函数相当于触发了事件. //该事件触发后,会检查函数指针fu ...

  8. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)

    [重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...

  9. 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧拿出来拍啊

    花10天时间用C语言做了个小站 http://tieba.yunxunmi.com/index.html 简称: 云贴吧 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧 ...

随机推荐

  1. 基于Qt的FreeType字体轮廓解析

    一.本文目的 以前的文档中.详细的介绍了FreeType开源字体引擎库的基础知识.基本用法.但并未详细的阐明在TurboCG中.是如何解析出一个文字的轮廓的,本文集中阐述.怎么样使用FreeType开 ...

  2. CSS实现强制换行-------Day 78

    事实上最早的时候也考虑过这个问题,当时还在想须要判定文字的长度么,实在是傻到极点了,原来CSS中本来就有这个样式设置的.而今天正好看到了有这么一篇介绍.细致看了下,感觉还不错,这里也把实验的结果记录下 ...

  3. 【Cocos2d-x游戏引擎开发笔记(25)】XML解析

    原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...

  4. windows api 梳理

    PathMatchSpec Function Searches a string using a Microsoft MS-DOS wild card match type. Syntax BOOL  ...

  5. Android 系统api实现定位及使用百度提供的api来实现定位

    目前在国内使用定位的方法主要是 1. Android系统提供的 LocationManager locationManager = (LocationManager) getSystemService ...

  6. EasyUI - 一般处理程序 返回 Json值

    使用 一般处理程序(ashx)返回Json值. 原始Json数组的格式: [ { ", "name":"张三", "sex":&q ...

  7. Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码

    主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: #include <stdio.h> #include <sys/types. ...

  8. iTextSharp使用字体设置摘录

    用iTextSharp做pdf转换的时候,需要添加水印.文字水印的时候,需要设置字体,查了下文档.摘录下解决方案. iText中输出中文,有三种方式: 1.使用iTextAsian.jar中的字体   ...

  9. 我是如何同时拿到阿里和腾讯offer的

    前言 三月真是一个忙碌的季节,刚刚开学就需要准备各种面试和笔试(鄙视).幸运的是,在长达一个月的面试内推季之后,终于同时拿到了阿里和腾讯的offer,还是挺开心的.突而想起久未更新的博客,就冒昧学一学 ...

  10. android.graphics.Color

    该类定义的都是些static常量和函数,这些函数都是为了创建和转化成int型的color.颜色是由int型的数表示,由4个字节组成,分别是A R  G  B,这个int型的值是确定的,透明度的值只能存 ...