#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. 习题3.4 & 3.5: 求两链表的交集和并集

    #include<stdio.h> #include<stdlib.h> struct Node; typedef struct Node *PtrToNode; typede ...

  2. dhtmlgrid修改,支持IE10

    因为项目IE升级,导致原来使用的dhtmlgrid无法正常显示,同时通过loadxml接口还有属性不支持. 花了半天时间对dhtmlgrid进行了修改,能够支持IE10正常加载显示. edit by ...

  3. PHP自定义函数与字符串处理

    自定义函数:    1.默认值的函数:    function Main($a=5,$b=6)    {        echo $a*$b;    } 2.可变参数的函数:    function ...

  4. 04737_C++程序设计_第1章_认识C++的对象

    例1.1 演示使用结构对象的示例程序. //功能:将结构对象的两个域值相加,乘以2再加50 #include <iostream>//包含头文件 using namespace std;/ ...

  5. 高性能 TCP &amp; UDP 通信框架 HP-Socket v3.2.3 正式宣布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件.广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

  6. Windows开机登录认证与Gina DLL

    Windows的开机密码认证模块一般是由Gina DLL完成的.在NT/2000中交互式的登陆支持是由WinLogon调用GINA DLL实现的,GINA DLL提供了一个交互式的界面为用户登陆提供认 ...

  7. windows下如何安装配置mysql-5.7-m14-winx64(zip格式的安装)

    win7 64位下如何安装配置mysql-5.7.4-m14-winx64 1.   mysql-5.7.4-m14-winx64.zip下载 官方网站下载地址:http://dev.mysql.co ...

  8. 20160121--Spring

    package com.hanqi; public class HelloWorld { public HelloWorld() { } public HelloWorld(String name) ...

  9. Windows vista以上模拟Alt Ctrl Delete

    之前客户要求我们能够在windows登陆界面能够用指定账户批量控制机器登陆,然后用windows credentials provider(vista以上,xp需要用Gina)实现了这个功能,这期间遇 ...

  10. 浅谈C中的指针和数组(三)

    上一个博客我们得到了一个结论: 指针和数组根本就是两个完全不一样的东西.只是它们都可以“以指针形式”或“以下标形式”进行访问.一个是完全的匿名访问,一个是典型的具名+匿名访问.一定要注意的是这个“以X ...