#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. Kruskal-Wallis Test and Friedman test

  2. LDA(latent dirichlet allocation)

    1.LDA介绍 LDA假设生成一份文档的步骤如下: 模型表示: 单词w:词典的长度为v,则单词为长度为v的,只有一个分量是1,其他分量为0的向量         $(0,0,...,0,1,0,... ...

  3. Day1_算法分析方法

    课堂笔记: 程序执行效率影响因子: 输入:评估时使用最坏情况输入 输入大小:考虑n渐进∞ 机器执行效率: 忽略 两种排序算法比较 插入排序n2 归并排序nlgn 递归 技能1:评估多项式的时间级数θ ...

  4. C++ 之再继续

    1C++函数重载,内联函数(for程序性能优化),函数递归

  5. ZOJ3784 String of Infinity 高大上的AC自动机 数据原来这么水啊!不算输入输出只有5-7行

    找给定s集合里面word全部是同一个字符的,这样的word有几个,如果数量<m就yes,否则就no.#include<iostream> #include<cstring> ...

  6. C 运算符与表达式

    运算(操作)是对数据的加工.最基本的运算形式常常可以用一些简洁的符号来记忆,这些符号称为运算符或操作符.被运算的对象-数据称为运算量或操作数.表达式描述了对哪些数据.以什么顺序以及施加什么样的操作.运 ...

  7. EC读书笔记系列之15:条款32、33、34

    条款32 确保你的public继承塑模出is-a关系 记住: ★public继承意味着is-a.适用于base class身上的每一件事情一定也适用于derived class身上,∵每一个deriv ...

  8. QF——iOS通知中心(NotificationCener)

    前面我们讲iOS不同界面间传值的时候,说过可以通过通知中心进行传值.那到底什么是通知中心,他是如何实现传值的呢? NSNotificationCenter是单例的,只提供了一个唯一的实例化入口,在整个 ...

  9. sass和compass安装

    安装Sass和Compass sass基于Ruby语言开发而成,因此安装sass前需要安装Ruby.(注:mac下自带Ruby无需在安装Ruby!) window下安装SASS首先需要安装Ruby,先 ...

  10. 点语法、property、self注意

    1.点语法(找出不合理的地方)#import <Foundation/Foundation.h>@interface Person : NSObject{    int _age;}- ( ...