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小游戏
这应该是几个月前,闲的手痒,敲了一上午代码搞出来的,随之就把它丢弃了,当时让别人玩过,提过几条更改建议,但是时至今日,我也没有进行过优化和更改(本人只会作案,不会收场,嘎嘎),下面的建议要给代码爱好的 ...
随机推荐
- 有关UNICODE、ANSI字符集和相关字符串操作
Q UNICODE字符串如何显示 A 如果程序定义了_UNICODE宏直接用 WCHAR *str=L"unicodestring"; TextOut(0,0,str); 否则就需 ...
- LeetCode-001 Two Sum
[题目] Given an array of integers, find two numbers such that they add up to a specific target number. ...
- 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
题目:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0. 解法一:暴力求解.从1开始查找M,然后判断M*N=X这个数字是否只含有0,1. 解法二:由 ...
- 浅谈android的selector,背景选择器
shape和selector的结合使用 (2013-04-07 11:11:00) 转载▼ 分类: android 1.Shape (1)作用:XML中定义的几何形状 (2)位置:res/draw ...
- C++Primer 中间Sales_items.h头文件
#ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include <string> class Sale ...
- 为何与0xff进行与运算
为何与0xff进行与运算 在剖析该问题前请看如下代码 public static String bytes2HexString(byte[] b) { String ret = "" ...
- description方法介绍及重写
- html标签总结。
接触了一段时间的html和css,发现了其中的乐趣.在写代码时一定要仔细,很有可能一个细微的错误便会导致页面的错误 总结了一下html标签. <html></html> 创建一 ...
- html5滑动手势
<div id="divMove" style="height: 100px;"></div> <div id="sli ...
- 详解VB.net编写DLL(动态链接库、应用程序扩展)文件
首先,我们启动VS(Visual-Studio简称),我使用的是VS2008版本. 新建一个项目-选择内裤(额...不好意思)→类库 ,名称就默认吧. 编写类库没有窗体设计,因此我们不能使用工具箱中的 ...