热门游戏 2048 C++ 源代码分享
/*By Reason*/
#include<iostream>
#include <iomanip>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include <conio.h> //为了读取方向键
#include<windows.h>
using namespace std;
//srand( (unsigned)time( NULL ) ); //随机数种子 不能用在这里
int pane[][]; //棋盘
int N=; //2的n次方
void showpane() //显示棋盘
{
cout<<setw()<<"X2048 by Reason"<<endl;
cout<<setw()<<" |-----------------------|"<<endl;
for(int i=;i<=;i++)
{
cout<<setw()<<"";
for(int j=;j<=;j++)
{
//SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
cout<<setw()<<"|"<<setw()<<pane[i][j]; if(j==)
{
cout<<setw()<<"|"<<endl;
cout<<setw()<<" |-----------------------|"<<endl;
}
}
}
}
void newgame() //开始游戏
{
N=;
for(int i=;i<=;i++) //初始化棋盘
for(int j=;j<=;j++)
pane[i][j]=;
srand( (unsigned)time( NULL ) );
int m=rand()%;
int n=rand()%;
int p=rand()%;
int q=rand()%;
pane[m][n]=pane[p][q]=;
showpane();
}
int if2n(int x) //判断x是否是2的n次方
{
int flag=;
for(int n=;n<=;n++)
{
if(x==pow(,n))
{
flag=;
if(n>N)
N=n;
return flag;
}
}
return flag;
}
int upmove() //上移
{
int flag=;
for(int j=;j<=;j++)
for(int i=;i<;i++)
{
if(if2n(pane[i][j]+pane[i+][j])==)
{
pane[i][j]=pane[i][j]+pane[i+][j];
pane[i+][j]=;
flag=;
}
}
return flag;
}
int downmove() //下移
{
int flag=;
for(int j=;j<=;j++)
for(int i=;i>;i--)
{
if(if2n(pane[i][j]+pane[i-][j])==)
{
pane[i][j]=pane[i][j]+pane[i-][j];
pane[i-][j]=;
flag=;
}
}
return flag;
}
int leftmove() //左移
{
int flag=;
for(int i=;i<=;i++)
for(int j=;j<;j++)
{
if(if2n(pane[i][j]+pane[i][j+])==)
{
pane[i][j]=pane[i][j]+pane[i][j+];
pane[i][j+]=;
flag=;
}
}
return flag;
}
int rightmove() //右移
{
int flag=;
for(int i=;i<=;i++)
for(int j=;j>;j--)
{
if(if2n(pane[i][j]+pane[i][j-])==)
{
pane[i][j]=pane[i][j]+pane[i][j-];
pane[i][j-]=;
flag=;
}
}
return flag;
}
int testup() //能否上移测试
{
int flag=;
for(int j=;j<=;j++)
for(int i=;i<;i++)
{
if(if2n(pane[i][j]+pane[i+][j])==)
{
flag=;
}
}
return flag;
}
int testdown() //测试能否下移
{
int flag=;
for(int j=;j<=;j++)
for(int i=;i>;i--)
{
if(if2n(pane[i][j]+pane[i-][j])==)
{
flag=;
}
}
return flag;
}
int testleft() //测试能否左移
{
int flag=;
for(int i=;i<=;i++)
for(int j=;j<;j++)
{
if(if2n(pane[i][j]+pane[i][j+])==)
{
flag=;
}
}
return flag;
}
int testright() //测试能否右移
{
int flag=;
for(int i=;i<=;i++)
for(int j=;j>;j--)
{
if(if2n(pane[i][j]+pane[i][j-])==)
{
flag=;
}
}
return flag;
}
int panemax() //棋盘最大数
{
int max=pane[][];
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(pane[i][j]>max)
max=pane[i][j];
return max;
}
int ifwin() //判断是否胜利
{
int flag=;
if(panemax()==)
{
cout<<setw()<<"You Win!"<<endl;
flag=;
}
return flag;
}
int ifGameOver() //判断是否游戏结束
{
int flag=;
if(testup()+ testdown() + testleft() + testright() ==)
{
cout<<setw()<<"Game Over!"<<endl;
flag=;
}
return flag;
}
void addnewnumberup() //上移后添加新数
{
srand( (unsigned)time( NULL ) );
int n;
if(N==)
n=;
else
n=(rand()%(N)+);
int newnumber=pow(,n);
for(int i=;i>=;i--)
for(int j=;j<=;j++)
if(pane[i][j]==)
{
pane[i][j]=newnumber;
return;
}
}
void addnewnumberdown() //下移后添加新数
{
srand( (unsigned)time( NULL ) );
int n;
if(N==)
n=;
else
n=(rand()%(N)+); int newnumber=pow(,n);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(pane[i][j]==)
{
pane[i][j]=newnumber;
return;
}
}
void addnewnumberleft() //左移后添加新数
{
srand( (unsigned)time( NULL ) );
int n;
if(N==)
n=;
else
n=(rand()%(N)+);
int newnumber=pow(,n);
for(int j=;j>=;j--)
for(int i=;i<=;i++)
if(pane[i][j]==)
{
pane[i][j]=newnumber;
return;
}
}
void addnewnumberright() //右移后添加新数
{
srand( (unsigned)time( NULL ) );
int n;
if(N==)
n=;
else
n=(rand()%(N)+);
int newnumber=pow(,n);
for(int j=;j<=;j++)
for(int i=;i<=;i++)
if(pane[i][j]==)
{
pane[i][j]=newnumber;
return;
}
}
int GetDirection() //读取方向
{
int ret = ; do
{
int ch = _getch();
if(isascii(ch))
continue; ch = _getch();
switch(ch)
{
case :
ret = ; // top
break;
case :
ret = ; // left
break;
case :
ret = ; // right
break;
case :
ret = ; // down
break;
default:
break;
}
} while (ret == ); return ret;
}
int main() //主函数
{
system("color f9");
int makesure=;
while(makesure)
{
system("cls");
newgame();
while(ifwin()+ifGameOver()==)
{
int c=GetDirection();
switch(c)
{
case :
upmove();
addnewnumberup();
system("cls");
showpane();
break;
case :
downmove();
addnewnumberdown();
system("cls");
showpane();
break;
case :
leftmove();
addnewnumberleft();
system("cls");
showpane();
break;
case :
rightmove();
addnewnumberright();
system("cls");
showpane();
break;
default:
break;
}
}
cout<<setw()<<"你的最后成绩为:"<<panemax()<<endl;
cout<<setw()<<"若要重新开始游戏请输入1,若要结束请输入0。"<<endl;
cin>>makesure;
while(makesure!=&&makesure!=)
{
cout<<"输入不正确,请重新输入!"<<endl;
cin>>makesure;
}
}
cout<<"再见!"<<endl;
system("pause"); }
热门游戏 2048 C++ 源代码分享的更多相关文章
- cocos2d-x开发的《派对小游戏》-github源代码分享
这是博主非常久曾经写的一个cocos2d-x跨平台小游戏,我称它为<派对小游戏>,如今分享给大家.希望对大家有所帮助的话. 项目源代码地址:https://github.com/xieba ...
- C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!
中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 它是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规 ...
- Android 带你玩转实现游戏2048 其实2048只是个普通的控件(转)
1.概述 博主本想踏入游戏开放行业,无奈水太深,不会游泳:于是乎,只能继续开发应用,但是原生Android也能开发游戏么,2048.像素鸟.别踩什么来着:今天给大家带来一篇2048的开发篇,别怕不分上 ...
- Android 带你玩转实现游戏2048 其实2048只是个普通的控件
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40020137,本文出自:[张鸿洋的博客] 1.概述 博主本想踏入游戏开放行业,无 ...
- C语言小游戏: 2048.c
概要:2048.c是一个C语言编写的2048游戏,本文将详细分析它的源码和实现.C语言是一种经典实用的编程语言,本身也不复杂,但是学会C语言和能够编写实用的程序还是有一道鸿沟的.本文试图通过一个例子展 ...
- 开源游戏“2048”IOS移植版
简介: 这个游戏是我在今年(2014/05)课余时闲着无聊做的一个益智类小游戏,总共花了4个工作日才完成,为了游戏的效率,做了很多优化,目前在IE5以上浏览器能够流畅运行,运行时如果屏幕分辨率不兼容, ...
- 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery ...
- STM32F051 IAP源代码分享
STM32F051 IAP源代码分享 假设不懂IAP的请自己主动脑补或者怒戳这里 http://www.openedv.com/posts/list/11494.htm 然后STM32F051的IAP ...
- 使用Jquery+EasyUI 进行框架项目开发案例解说之二---用户管理源代码分享
使用Jquery+EasyUI 进行框架项目开发案例解说之二 用户管理源代码分享 在上一篇文章<使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享> ...
随机推荐
- 再理解 as3.0接口
As3.0 接口的理解与运用 1.把接口当作"类"来理解.你easy接受她. 我们看她的标准结构: package 包路径{ public interface 接口名称{ func ...
- 在Linux下搭建Git服务器步骤
环境: 服务器 CentOS6.6 + git(version 1.7.1) 客户端 Windows10 + git(version 2.8.4.windows.1) ① 安装 Git Linux ...
- swagger api 文档框架
<其他教程:https://www.cnblogs.com/FlyAway2013/p/7510279.html> 先看看swagger的生态使用图: 其中,红颜色的是swaggger官网 ...
- 【BZOJ4269】再见Xor 高斯消元
[BZOJ4269]再见Xor Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整 ...
- 学习Sharding JDBC 从入门到出门-1
感觉大神已经写好了,自己膜拜下下, 送上大神地址:http://www.cnblogs.com/zhongxinWang/p/4262650.html 这篇博客主要是理论的说明了什么是分库分表,路由等 ...
- 智能家居DIY-空气质量检测篇-获取温度和湿度篇
目录 智能家居DIY-空气质量检测篇-获取空气污染指数 前言 话说楼主终于升级当爸了,宝宝现在5个月了,宝宝出生的时候是冬天,正是魔都空气污染严重的时候,当时就想搞个自动开启空气净化器,由于种种原因一 ...
- 我的Android进阶之旅------>Android之动画之Frame Animation实例
============================首先看看官网上关于Frame animation的介绍================================ 地址:http://de ...
- Js编写的菜单树
只需要提供这种JSON格式就ok了 其他的都可以直接引用这个代码进去 var testMenu=[ { "name": "一级菜单", "submen ...
- linux c编程:进程控制(一)
一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同 ...
- Android底部菜单栏+顶部菜单
底部菜单栏+顶部菜单(wechat)demo http://blog.csdn.net/evankaka/article/details/44121457 底部菜单demo http://blog.c ...