2048小游戏(C语言版)
#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语言版)的更多相关文章
- 2048小游戏4X4C语言
*/ #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> v ...
- 2048小游戏代码解析 C语言版
2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图: 游 ...
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- 基于jQuery的2048小游戏设计(网页版)
上周模仿一个2048小游戏,总结一下自己在编写代码的时候遇到的一些坑. 游戏规则:省略,我想大部分人都玩过,不写了 源码地址:https://github.com/xinhua6/2048game.g ...
- c#撸的控制台版2048小游戏
1.分析 最近心血来潮,突然想写一个2048小游戏.于是搜索了一个在线2048玩玩,熟悉熟悉规则. 只谈核心规则:(以左移为例) 1.1合并 以行为单位,忽略0位,每列依次向左进行合并,且每列只能合并 ...
- 如何在CentOS上安装一个2048小游戏
如何在centos上安装一个2048小游戏 最近在学习CentOS系统,就琢磨着玩点什么,然后我看到有人在玩2048小游戏,所有我就在想,为啥不装一个2048小游戏搞一下嘞,于是乎,我就开始工作啦 由 ...
- Swift实战之2048小游戏
上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完 ...
- js、jQuery实现2048小游戏
2048小游戏 一.游戏简介: 2048是一款休闲益智类的数字叠加小游戏 二. 游戏玩法: 在4*4的16宫格中,您可以选择上.下.左.右四个方向进行操作,数字会按方向移动,相邻的两个数字相同就会合 ...
- .NET手撸2048小游戏
.NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEng ...
- C# 开发2048小游戏
这应该是几个月前,闲的手痒,敲了一上午代码搞出来的,随之就把它丢弃了,当时让别人玩过,提过几条更改建议,但是时至今日,我也没有进行过优化和更改(本人只会作案,不会收场,嘎嘎),下面的建议要给代码爱好的 ...
随机推荐
- js获得url内的参数
/** * js获得url内的参数 * 返回值: string or undefined * 使用方法:$_GET['from'] */ var $_GET = (function() { var s ...
- 【HDU】1717 小数化分数2 ——计数原理
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- libiconv_百度百科
libiconv_百度百科 由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码.目录 1libiconv历史简介 2libiconv编码简介 3libico ...
- 剖析magento中关于Email模板的设置
public function send() { $emailTemplate = Mage::getModel('core/email_template'); // ...
- linux内核源码阅读之facebook硬盘加速flashcache之六
其实到目前为止,如果对读流程已经能轻松地看懂了,那么写流程不需要太多脑细胞.我觉得再写下去没有太大的必要了,后面想想为了保持flashcache完整性,还是写出来吧.接着到写流程: 1530stati ...
- MAC COCOA call command 调用终端控制台程序
MAC COCOA call command 调用终端控制台程序 STEP 1 先写一个C++ DOS程序 STEP2 使用NSTask来运行,然后用NSPipe和 NSData来接受运行的结果字符串 ...
- 折叠Collapse插件
实例 折叠(Collapse)插件可以很容易地让页面区域折叠起来.无论您用它来创建折叠导航还是内容面板,它都允许很多内容选项. .collapse 隐藏内容. .collapse.in 显示内容. . ...
- R语言初涉
R语言简单的函数的使用: “<-”表示赋值,也可以用“=”. c()为连接函数,连接中间的数据表示向量,连接中间的数据表示向量,X1 <- c()表示用一组数据为变量X1赋值. mean( ...
- 在 PL/SQL Developer 中执行SQL文件的方法
打开 command Window SQL> @'D:\My Documents\Downloads\bde_chk_cbo.sql'; 整个路径及文件两边要有单引号哦!
- 求一个int型整数的两种递减数之和(华为2015笔试题及答案)
给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同 ...