#include <climits>
#include <cstdio>
#include <cstring>
#include <stack>
#include <string>
#include <map>
#include <vector>
#include <cmath> /*
玩法说明:编译运行后,输入一个整数n,表示自己想玩的游戏中是n*n的表格,现在手机上或者电脑上一般都是4*4的,所以我们可以输入4,回车就可以开始游戏了。 游戏开始后a s d w表示方向左 下 右 上四个方向。 正如真实版的2048一样,会输出两个表格,move 表格显示按输入方向平移后的结果,fill 表格显示又随机填充一个格子后的表格
*/
using namespace std; const int MAXX = ; int box[MAXX][MAXX]; void moveLeft(int n, bool &ret){
for (int i = ; i < n; ++i){
for (int j = ; j < n; ++j){
int k;
for (k = j - ; k >= ; --k){
if (box[i][k] != -){
break;
}
}
box[i][k + ] = box[i][j]; if ((k + ) != j){
box[i][j] = -;
ret = true;
}
}
}
} void mergeLeft(int n, bool &ret){
for (int i = ; i < n; ++i){
for (int j = ; j < n - ; ++j){
if (box[i][j] == -)continue; if (box[i][j] == box[i][j + ]){
box[i][j] *= ;
box[i][j + ] = -;
ret = true;
++j;
}
}
}
} bool left(int n){
bool ret = false;
moveLeft(n, ret);
mergeLeft(n, ret);
moveLeft(n, ret);
return ret;
} void moveRight(int n, bool &ret){
for (int i = ; i < n; ++i){
for (int j = n - ; j >= ; --j){
if (box[i][j] == -)continue; int k;
for (k = j + ; k < n; ++k){
if (box[i][k] != -){
break;
}
} box[i][k - ] = box[i][j];
if ((k - ) != j){
box[i][j] = -;
ret = true;
}
}
}
} void mergeRight(int n, bool &ret){
for (int i = ; i < n; ++i){
for (int j = n - ; j >; --j){
if (box[i][j] == -)continue; if (box[i][j] == box[i][j - ]){
box[i][j] *= ;
box[i][j - ] = -;
ret = true;
--j;
}
}
}
} bool right(int n){
bool ret = false;
moveRight(n, ret);
mergeRight(n, ret);
moveRight(n, ret);
return ret;
} void moveUp(int n, bool &ret){
for (int j = ; j < n; ++j){
for (int i = ; i < n; ++i){
int k;
for (k = i - ; k >= ; --k){
if (box[k][j] != -){
break;
}
}
box[k + ][j] = box[i][j]; if ((k + ) != i){
box[i][j] = -;
ret = true;
}
}
}
} void mergeUp(int n, bool &ret){
for (int j = ; j < n; ++j){
for (int i = ; i < n - ; ++i){
if (box[i][j] == -)continue; if (box[i][j] == box[i + ][j]){
box[i][j] *= ;
box[i + ][j] = -;
ret = true;
++i;
}
}
}
} bool up(int n){
bool ret = false;
moveUp(n, ret);
mergeUp(n, ret);
moveUp(n, ret);
return ret;
} void moveDown(int n, bool &ret){
for (int j = ; j < n; ++j){
for (int i = n - ; i >= ; --i){
if (box[i][j] == -)continue; int k;
for (k = i + ; k < n; ++k){
if (box[k][j] != -)break;
} box[k - ][j] = box[i][j]; if ((k - ) != i){
box[i][j] = -;
ret = true;
}
}
}
} void mergeDown(int n, bool &ret){
for (int j = ; j < n; ++j){
for (int i = n - ; i > ; --i){
if (box[i][j] == -)continue; if (box[i][j] == box[i - ][j]){
box[i][j] *= ;
box[i - ][j] = -;
ret = true;
--i;
}
}
}
} bool down(int n){
bool ret = false;
moveDown(n, ret);
mergeDown(n, ret);
moveDown(n, ret);
return ret;
} void line(int n){
for (int i = ; i < n; ++i){
printf("--------");
}
printf("-");
printf("\n");
} void print(int n){
for (int i = ; i < n; ++i){
line(n);
for (int j = ; j < n; ++j){
printf("|");
if (box[i][j] == -){
printf("\t");
continue;
} printf("%2d\t", box[i][j]);
}
printf("|");
printf("\n");
}
line(n);
} bool isFull(int n){
bool mark = true;
for (int i = ; i < n; ++i){
for (int j = ; j < n; ++j){
if (box[i][j] == -){
mark = false;
return mark;
}
}
}
return mark;
} bool isOver(int n){
if (!isFull(n)){
return false;
}
for (int i = ; i < n; ++i){
for (int j = ; j < n; ++j){
if (box[i][j] == box[i][j + ] || box[i][j] == box[i + ][j]){
return false;
}
}
}
return true;
} void fillBox(int n){
int i, j, num; if (isFull(n)){
return;
} while (true){
i = rand() % n;
j = rand() % n;
num = rand() % == ? : ; if (box[i][j] == -){
box[i][j] = num;
break;
}
}
} int main(){
//freopen("in.txt", "r", stdin);
memset(box, -, sizeof(box)); int n;
bool mark;
scanf("%d%*c", &n); fillBox(n);
fillBox(n);
print(n); while (true){
char ch;
scanf("%c%*c", &ch);
if (ch == 'a'){
mark = left(n);
}
else if (ch == 'd'){
mark = right(n);
}
else if (ch == 'w'){
mark = up(n);
}
else if (ch == 's'){
mark = down(n);
}
else{
continue;
}
system("cls");
printf("Move:\n");
print(n);
if (!mark){
continue;
}
fillBox(n);
printf("Fill:\n");
print(n); if (isOver(n)){
printf("\n\nGame Over!\n\n");
break;
}
} return ;
}

2048小游戏(C语言版)的更多相关文章

  1. 2048小游戏4X4C语言

    */ #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> v ...

  2. 2048小游戏代码解析 C语言版

    2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图:  游 ...

  3. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  4. 基于jQuery的2048小游戏设计(网页版)

    上周模仿一个2048小游戏,总结一下自己在编写代码的时候遇到的一些坑. 游戏规则:省略,我想大部分人都玩过,不写了 源码地址:https://github.com/xinhua6/2048game.g ...

  5. c#撸的控制台版2048小游戏

    1.分析 最近心血来潮,突然想写一个2048小游戏.于是搜索了一个在线2048玩玩,熟悉熟悉规则. 只谈核心规则:(以左移为例) 1.1合并 以行为单位,忽略0位,每列依次向左进行合并,且每列只能合并 ...

  6. 如何在CentOS上安装一个2048小游戏

    如何在centos上安装一个2048小游戏 最近在学习CentOS系统,就琢磨着玩点什么,然后我看到有人在玩2048小游戏,所有我就在想,为啥不装一个2048小游戏搞一下嘞,于是乎,我就开始工作啦 由 ...

  7. Swift实战之2048小游戏

    上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完 ...

  8. js、jQuery实现2048小游戏

    2048小游戏 一.游戏简介:  2048是一款休闲益智类的数字叠加小游戏 二. 游戏玩法: 在4*4的16宫格中,您可以选择上.下.左.右四个方向进行操作,数字会按方向移动,相邻的两个数字相同就会合 ...

  9. .NET手撸2048小游戏

    .NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEng ...

  10. C# 开发2048小游戏

    这应该是几个月前,闲的手痒,敲了一上午代码搞出来的,随之就把它丢弃了,当时让别人玩过,提过几条更改建议,但是时至今日,我也没有进行过优化和更改(本人只会作案,不会收场,嘎嘎),下面的建议要给代码爱好的 ...

随机推荐

  1. TCP/IP Checksum 吐槽

    算法原理: 假定 output[2] 为输出结果,input[n]为待计算校验和的内存块. 1)所有奇数位[0,2,4……] byte 累加进 结果的奇数位内存 output[0],如果溢出,则进位给 ...

  2. poj3673---双重for循环

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 int main ...

  3. 普林斯顿大学算法课 Algorithm Part I Week 3 求第K大数 Selection

    问题 给定N个元素的数组,求第k大的数. 特例当k=0时,就是求最大值,当k=N-1时,就是求最小值. 应用顺序统计求top N排行榜 基本思想 使用快速排序方法中的分区思想,使得a[k]左侧没有更小 ...

  4. wchar_t 、UTF-8、UTF-16的转换方法 - luketty的专栏 - 博客频道 - CSDN.NET

    wchar_t .UTF-8.UTF-16的转换方法 - luketty的专栏 - 博客频道 - CSDN.NET wchar_t .UTF-8.UTF-16的转换方法

  5. Visual Studio使用技巧

    编程部分: 1.TODO:书签 打开之后返回上次工作的位置.让我们不再用脑子去记忆,去回顾刚刚工作到的部分. 操作非常easy.例如以下代码所看到的: public DataTable SelectB ...

  6. 从头开始-01.C语言环境测试

    在Mac下编写C程序需要以下几步: 编写代码 a>编译:把C语言编译成0和1 b>工具:clang编译器 c>指令:cc -c 文件名.c      编译成功会生成一个. o目标文件 ...

  7. html系列教程--ol ul li

    <li> 标签:配合ol,ul实现有序,无序列表以及导航实现. demo: <ol>    <li>Coffee</li>    <li>T ...

  8. 关于表格动态添加行并处理相关表单元素的一些修改----优化for重用(2)

    功能介绍: 1.处理了动态行与表单的设值问题 2.添加了行的向上或向下排序 3.添加了可以在当前行的下边或上边增加新行的功能 4.添加了可以单选或勾选多项删除不需要的行的功能 5.添加了新增的行的高亮 ...

  9. jQuery报错:

    jQuery报错:Uncaught ReferenceError: $ is not defined 在使用jQuery的时候,发现有如下报错: Uncaught ReferenceError: $ ...

  10. c/c++实现混合编程

    在开发中大家经常会使用到c与c++混合编程,这样能够更好的实现功能模块.刚学习了一下c和c++的混合编程,参考了网上的相关知识,在这里留下要点,方便以后进行查阅. 1.extern关键字 extern ...