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

目录
  • 1、程序初始化
  • 2、画图操作
  • 3、字符控制
  • 4、判断游戏结束和游戏胜利

别的不多说,先上效果图

我们都知道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小游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 原生js编写2048小游戏

    效果图: 代码如下: <!DOCTYPE html> <html> <head> <title> 2048-game </title> <meta charset="utf-8" /> <style media="screen"> #game { display: none; position: absolute; left: 0px; top: 0px; right: 0px; b

  • C++基于EasyX图形库实现2048小游戏

    C++ 和 EasyX 图形库,实现2048小游戏,供大家参考,具体内容如下 MainGame2048.cpp /** Name: Game2048CoreClass*/ #include<iostream> #include<graphics.h> #include<stdio.h> #include<windows.h> #include<conio.h> #include<stdio.h> #include"Game2

  • 用VC++6.0的控制台实现2048小游戏的程序

    首先感谢这位大侠的无私分享,仔细学习这个程序以后收获很多,试着添加一些注释 源程序是从开源中国看到的,原作者是 刘地(sir?) 地址为http://www.oschina.net/code/snippet_593413_46040 geek_monkey于2015年3月5日为拜读该程序,受益匪浅 为了方便自己,以及更多初学者阅读,我试着写了写了注释供参考 我是C语言初学者,如有错误希望指正.轻喷 复制代码 代码如下: #include <stdlib.h> #include <stdi

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

    目录 1.程序初始化 2.画图操作 3.字符控制 4.判断游戏结束和游戏胜利 别的不多说,先上效果图 我们都知道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

  • 利用Matlab编写简易版连连看小游戏

    这是一款MATLAB连连看小游戏,基本实现了连连看的功能,不过目前没有写出死局判定的模块,日后可能会对其进行改进. 游戏截图 游戏组装说明 我们的变量path输入的是图像包的相对路径或绝对路径 这里我们由于文件夹名称就叫“图片”所以直接path='图片’是没啥问题的. 文件夹里就是图片素材啦,其名称没有任何要求,形状最好是方的,不过不是的话问题也不大,程序会自动将其拉伸成方的........ 我们这里要求的是读入jpg格式,想要png,jpg都读的话,.....最简单的就是直接读两次 完整代码

  • Python+Pygame制作简易版2048小游戏

    目录 导语 正文 主要代码 效果图 导语 哈喽!大家好,我是栗子,感谢大家的支持! 新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏! 2048小游戏——准确的来说确实是一个简单版本的! 呐呐呐 ,主要是担心很多小伙伴儿直接上界面版本的看不懂,所以做了这款简单的2048,先看这篇简单版本的吧! 正文 为了搞懂这个游戏的规则,小编去直接下载了一款2048的小游戏,上手玩了一波! 然后.........完全停不下来!23333~ 玩法: 用手指或键盘上下左右滑动,将

  • Python制作简易版2048小游戏

    目录 目标效果 设计开始 步骤一 步骤二 步骤三 步骤四 步骤五 今天我们来动手实现一款2048小游戏.这款游戏的精髓就玩家能够在于通过滑动屏幕合并相同数字,直到不能再合并为止.玩法可以说是非常的简单,但挑战性也是十足的.话不多说,让我们从0开始实现! 目标效果 大致要实现的效果如下: 设计开始 首先简单分析一下游戏的逻辑: 输入移动方向,游戏内所有方块都朝指定方向移动 同方向移动的方块,数字相同则合并,然后生成一个合并的方块 合并后生成新的方块,无法生成新方块时游戏结束 用一系列的颜色来区分不

  • jQuery编写网页版2048小游戏

    大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了,但是自己实现起来会遇到各种问题.比如,在最后判断游戏是否结束的时候,我写的语句语法是对的,但就是不执行.最后通过对视频源码的分析对比,发现原作者写的一个setTimeout定时器有额外的意思,本来我以为它就是简单的一个延时动画,其实他是在等待另外一个函数执行完毕.-_-||.最后还是很高兴能写出来,也改进了一些源

  • 利用Python编写简易版德州扑克小游戏

    目录 德州扑克简要介绍 什么是德州扑克 游戏规则简要介绍 德州扑克游戏的python实现过程 游戏初始化 评选赢家 游戏主题函数 游戏体验与展示 模块不足与后续改进 德州扑克简要介绍 什么是德州扑克 德州扑克不知道大家是否玩过,它是起源于美国的得克萨斯州的一种博弈类卡牌游戏,英文名叫做Texas Hold’em Poker.玩法上又分为常规桌(Cash, 现金局),单桌赛(SNG)和多桌锦标赛(MTT).虽然扑克种类繁多,但基本的扑克规则通常保持一致.它是一种考验心态与谋略的游戏. 游戏规则简要

  • 利用Matlab制作一款3D版2048小游戏

    其实逻辑和2维版本完全一样,就不进行详细解说了,直接看效果: 效果: 目前界面还不咋好看,期待大家的优化 还是键盘↑↓←→操作嗷 完整代码: function game20483D global squaremap global colorlist global fontsizelist global baseX baseY baseZ global barHdl textHdl global txtBest txtScore global best fig=figure('units','pi

  • C语言实现简易版扫雷小游戏

    本文实例为大家分享了C语言实现简易版扫雷的具体代码,供大家参考,具体内容如下 声明 本次扫雷小游戏用多文件来编写.首先,要自定义的一个头文件 mine.h,里面有扫雷程序里面所需要的头文件.常量和所有函数的声明.其次,创建主函数 test.c,用自己喜欢的方式构建一个游戏的框架,最后,创建自定义函数 mine.c,编写各项功能. 设计思路 1.先写主函数,理清整个游戏流程. int main() { int quit = 0; do{ int select = 0; Menu(); scanf(

  • C语言开发简易版扫雷小游戏

    前言: 想起来做这个是因为那时候某天知道了原来黑框框里面的光标是可以控制的,而且又经常听人说起这个,就锻炼一下好了. 之前就完成了那1.0的版本,现在想放上来分享却发现有蛮多问题的,而且最重要的是没什么注释[果然那时候太年轻]!现在看了也是被那时候的自己逗笑了,就修改了一些小bug,增加了算是详尽而清楚的注释,嗯,MSDN上面对各种函数的解释很详细的[又锻炼一下英语],顺便让开头和结尾的展示"动"了起来,就当作1.5的版本好了. 这个只是给出了一个实现的思路,其中肯定也有很多不合理的地

  • C语言控制台版2048小游戏

    效果不好,见谅,没事就写了一个!!! /** * @author Routh * @main.c * @date 2014, 4, 26 */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> // console width #define CONSOLE_WIDTH 80 #define BOX_WIDTH 10 int BOX[4][4] = {

随机推荐