利用c++编写简易版2048小游戏

 更新时间:2021年09月08日 10:33:33   作者:诗一样的代码  
这篇文章主要介绍了如何让利用c++编写简易版的2048小游戏,感兴趣的小伙伴请参考下面文章的具体内容

别的不多说,先上效果图

我们都知道2048是个4 4的方格,为了方便数组下表我们生成5 5的数组,只用到1~4的下标。

初始化时候先随便生成两个目标

1、程序初始化

// 程序初始化
void init()
{
 score = 0;
 memset(a, 0, sizeof(a));
 int x1 = rand() % 4 + 1, y1 = rand() % 4 + 1, x2 = rand() % 4 + 1, y2 = rand() % 4 + 1; // 随机生成两个初始点
 a[x1][y1] = a[x2][y2] = 2;    // 初始点初始化为 2
}

2、画图操作

画图操作,就是把有数组都打印出来,数字为0的就打印空字符,数字不为0的,就打印数字。

void drawmap()
{
 system("cls");
 
 for (int i = 1; i <= 4; i++)
 {
  for (int j = 1; j <= 4; j++)
  {
   if (a[i][j])   // 如果该位置没有数字,则不绘制
   {
    if(a[i][j]>1000)
     cout<<a[i][j]<<" ";
    else if(a[i][j]>100)
     cout<<a[i][j]<<"  ";
    else if(a[i][j]>10)
     cout<<" "<<a[i][j]<<"  ";
    else
     cout<<"  "<<a[i][j]<<"  ";
   }
   else
   {
    cout<<"     ";
   }
  }
  cout<<"\n";
   
 }
   
 
}

3、字符控制

然后就是移动了,我这里用输入字符控制,用wsad,控制上下左右。

// 玩家操作
void move()
{
 memcpy(b, a, sizeof(a));   // 将 a 备份至 b
 memset(mov, false, sizeof(mov)); // 初始化 mov 为 false(所有点均未移动)
 char c;
 cin>>c;

 if(c=='w') //向上
 {
  for (j = 1; j <= 4; j++)
   for (i = 2; i <= 4; i++)
   {
    if (!a[i][j])continue;
    int k = i;
    while (!a[k - 1][j] && k >= 2)
    {
     a[k - 1][j] = a[k][j];
     a[k][j] = 0;
     k--;
    }
    if (a[k][j] == a[k - 1][j] && !mov[k - 1][j])
    {
     a[k - 1][j] = 2 * a[k][j];
     a[k][j] = 0;
     mov[k - 1][j] = true;
     score += a[k - 1][j];
    }
   }
 }
 else if(c=='s') //向下 
 {
  //。。。
 } 
 else if(c=='a') //向左
 {
  //。。。
 } 
 else if(c=='d')
 {
 }
}

4、判断游戏结束和游戏胜利

// 判断游戏结束,对于任意一个位置,该位置为空 或 四周有位置上的数字与该位置上数字相等,说明可继续移动(游戏可继续),否则游戏结束

// 判断胜利,有任意一个位置达到 2048,则胜利

bool gameover()
{

 for (i = 1; i <= 4; i++)
  for ( j = 1; j <= 4; j++)
   if (!a[i][j] || a[i][j] == a[i + 1][j] || a[i][j] == a[i - 1][j] || a[i][j] == a[i][j + 1] || a[i][j] == a[i][j - 1])return false;
 
 return true;
}


bool win()
{
 for ( i = 1; i <= 4; i++)
  for ( j = 1; j <= 4; j++)
   if (a[i][j] == 256)return true;
 return false;
}

到此这篇关于利用c++编写简易版2048小游戏的文章就介绍到这了,更多相关c++编写简易版2048小游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++临时性对象的生命周期详细解析

    C++临时性对象的生命周期详细解析

    临时性对象的被摧毁,应该是对完整表达式(full-expression)求值过程中的最后一个步骤。该完整表达式造成临时对象的产生
    2013-09-09
  • C++数据结构深入探究栈与队列

    C++数据结构深入探究栈与队列

    栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,本章讲解分别用队列实现栈与用栈实现队列
    2022-05-05
  • 详细讲解C语言中的数据以及位运算

    详细讲解C语言中的数据以及位运算

    这篇文章主要为大家详细介绍了C语言中数据表示方法以及位运算的相关知识点,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • C语言的数组学习入门之对数组初始化的操作

    C语言的数组学习入门之对数组初始化的操作

    这篇文章主要介绍了C语言的数组学习入门之数组初始化的操作,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-12-12
  • 详解C++中类的六大默认成员函数

    详解C++中类的六大默认成员函数

    这篇文章主要介绍了C++类中的六大默认成员函数的原理雨使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • C语言修炼之路函数篇真题训练上

    C语言修炼之路函数篇真题训练上

    函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数
    2022-03-03
  • C语言 从根本上理解数组

    C语言 从根本上理解数组

    数组是一组有序的数据的集合,数组中元素类型相同,由数组名和下标唯一地确定,数组中数据不仅数据类型相同,而且在计算机内存里连续存放,地址编号最低的存储单元存放数组的起始元素,地址编号最高的存储单元存放数组的最后一个元素
    2022-04-04
  • C语言版三子棋小游戏

    C语言版三子棋小游戏

    这篇文章主要为大家详细介绍了C语言版三子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++ auto自动类型推导规则和使用详解

    C++ auto自动类型推导规则和使用详解

    C++11 赋予 auto 关键字新的含义,使用它来做自动类型推导。也就是说,使用了 auto 关键字以后,编译器会在编译期间自动推导出变量的类型,这样我们就不用手动指明变量的数据类型了
    2022-08-08
  • C/C++通过SQLite SDK实现数据库增删改查操作

    C/C++通过SQLite SDK实现数据库增删改查操作

    SQLite,作为一款嵌入式关系型数据库管理系统,一直以其轻量级、零配置以及跨平台等特性而备受青睐,本文主要介绍了C++如何通过SQLite SDK实现数据库增删改查操作,感兴趣的可以了解下
    2023-11-11

最新评论