简洁版2048

code:

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

可通过gcc编译,在console下玩。

ref: https://gist.github.com/anirudh-chhangani/9989292

modified by catnull

时间: 2024-08-01 11:26:42

简洁版2048的相关文章

从零開始开发Android版2048 (二)获取手势信息

今天是尝试開始Android版2048小游戏的第二天.在今天,我主要学习了怎样获取用户在屏幕滑动的手势,以及对布局进行了一些小小的完好. 获取用户操作的手势(比方向左滑.向右滑等)主要用到了GestureDetector.这个类能够帮助我们获取一些常见的用户对屏幕的操作.比如单击.双击.按压.拖动等.详细的使用说明.大家能够查API也能够去百度,或者看我之前有一篇使用GestureDetector实现的小样例(http://blog.csdn.net/xiapinnong/article/det

从零开始开发Android版2048 (五) 撤销的实现

本篇的内容是,在前一篇的基础上加入了撤销的功能.撤销其实就是将当前的用户界面恢复到这次滑动值前的样子.我实现撤销的主要原理是,将每次滑动后界面上的格子和对应的数字记录下来,当然还有分数,把这些数据写入一个栈中,然后点击撤销操作的时候,将栈顶pop掉,读取下一个栈中的对象,并根据对象中存储的数据重新绘制界面. 下面是我用于存储每次界面情况的类,在这个类中保存了界面中主要的三个数据,空白格.数字格和当前的分数. package com.example.t2048; import java.util.

瀑布流代码,简洁版 带分页

接上一篇   瀑布流代码,简洁版 的功能之上添加分页的功能 Index.cshtml @using PagedList.Mvc @model PagedList.StaticPagedList<int> @{ ViewBag.Title = "瀑布流"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section header{ <script src="~/Scripts/jquery-ui

屌丝也能开发安卓版2048(App Inventor)

想编写安卓游戏,java太难,来试试App Inventor,虽然有人认为他是中学生的玩具,但是也能编写2048这样的火爆游戏,不需要太复杂的算法. 整个游戏有几个模块: 一.游戏初始化 数列转化为图形,使用了canvas和精灵,相对应list,这里注意精灵位置是固定的,只是更改图片,多少分,就对于n.jpg,0分是底色图片.左右移动,使用了flung判断,绝对值判断,水平速度和垂直速度哪个大,用来判断是左右移动还是上下移动. 二.计分模块 一般计分在合并处增加,最高分用了tiny db,游戏结

从零开始开发Android版2048 (三)逻辑判断

最近工作比较忙,所以更新的慢了一点,今天的主要内容是关于Android版2048的逻辑判断,经过本篇的讲解,基本上完成了这个游戏的主体部分. 首先还是看一下,我在实现2048时用到的一些存储的数据结构.我在实现时,为了省事存储游戏过程中的变量主要用到的是List. 比如说:List<Integer> spaceList = new ArrayList<Integer>();这个spaceList主要用于保存,所有空白格的位置,也就是空白格在GridLayout中的位置(从0到15)

从零開始开发Android版2048 (一)初始化界面

自学Android一个月多了,一直在工作之余零零散散地看一些东西.感觉经常使用的东西都有些了解了,可是一開始写代码总会出各种奇葩的问题.感觉还是代码写得太少.这样继续杂乱地学习下去进度也太慢了,并且学一点忘一点,效率太低.所以从今天開始.我打算实际做点小程序.在开发中不断地学习吧. 恰好近期Android上有个游戏2048比較火,所以就那这个练手吧. 由于对Android还没有太深入的了解,所以我写的东西都会比較基础,所以须要看一些高阶开发的朋友能够绕过了,也希望能够有高手们给我一些指导和建议,

一个用 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*

Java 多客户端版 2048 源码

byte包 Calss Byte 1 package Byte; 2 import java.io.*; 3 public class Byte implements Serializable{ 4 public static byte[] int2Byte(int []intValue){ 5 int length=intValue.length; 6 byte[] b=new byte[length*4]; 7 for(int i=0;i<length;i++){ 8 for(int j=0

Android版2048

虽然说2048是好久前比较火的小游戏,但直到最近才有机会去研究下2048实现的源码,这里就简单写一下我(bie)的(ren)思路: 首先2048需要有十六个卡片,这个卡片可以用FrameLayout的子类来实现(继承),里面可以用TextView来实现设置背景颜色,显示的数字等.这样我们就可以简单实现这个卡片啦: public class Card extends FrameLayout { private int num = 0;    private TextView label; publ