2048项目开发小游戏(C++)

前言:2048小游戏是我们经常接触的益智小游戏,那么如何完成这个简单游戏的代码操作呢?

代码解析

头文件:
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#define MAX_SIZE 4 //每行格子四个(4*4)
#define GRID_WIDTH 100 //格子宽度100
#define INTERVAL 15 //格子间隔15
#define WIN_SIZE 475 //窗口宽度100×4+15×5

该2048小游戏为4×4框图,在头文件中提前定义格子宽度、格子间的间隔和窗口的总宽度。

视图

以下是我的代码运行视图: 颜色可以自定义

代码

定义视图颜色
Ctrl + Alt + A 在屏幕上选中想要的颜色,在键盘中点击C键进行复制,然后粘贴在代码中。

把颜色和数据建立联系:

enum Color //枚举颜色 2的次方
{//没有数字的地方是0zero    = RGB(209, 229, 239),twoto1  = RGB(238, 228, 218),twoto2  = RGB(238, 224, 200),twoto3  = RGB(181, 127, 242),twoto4  = RGB(208, 226, 236),twoto5  = RGB(216, 166, 192),twoto6  = RGB(29, 40, 51),twoto7  = RGB(230, 27, 8),twoto8  = RGB(239, 220, 168),twoto9  = RGB(255, 214, 97),twoto10 = RGB(177, 171, 171),twoto11 = RGB(239, 241, 242),bk      = RGB(205, 189, 171),
};
//把颜色和数据建立联系
Color arr[13] = { zero,twoto1,twoto2,twoto3,twoto4,twoto5,twoto6,twoto7,twoto8,twoto9,twoto10,twoto11,bk };
int num[12] = { 0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 };
//0 2 4 8 16 32 64 128 256 512 1024 2048

在4×4的框图中随机生成数字

void CreateNumber()
{while (1){int x = rand() % MAX_SIZE;int y = rand() % MAX_SIZE;if (map[x][y] == 0)//如果该框没有数字,则可以随机生成2或4,否则不生成{map[x][y] = RandTwoFour();break;}}
}

在空白框中自动生成2或4
在定义是可以行改动2和4出现的概率,以下代码中4出现的概率为1/10,2出现的概率为9/10.

int RandTwoFour()//随机生成2或4
{if (rand() % 10 == 0)//生成4的概率为1/10{return 4;}else//生成2的概率为9/10{return 2;}
}

视图初始化

void GameInit()
{srand(GetTickCount());for (int i = 0; i < MAX_SIZE; i++){for (int j = 0; j < MAX_SIZE; j++){map[i][j] = 0;}}//初始化每个格子的坐标,左上角int i, j;for (i = 0; i < MAX_SIZE; i++){for (j = 0; j < MAX_SIZE; j++){pos[i][j].x = (j * GRID_WIDTH) + ((j + 1) * INTERVAL);pos[i][j].y = (i * GRID_WIDTH) + ((i + 1) * INTERVAL);} }//产生两个数据CreateNumber();CreateNumber();
}

视图定义

void GameDrw()
{setbkcolor(Color::bk);cleardevice();int i, j;for ( i = 0; i < MAX_SIZE; i++){for (j = 0; j < MAX_SIZE; j++){for (int k = 0; k < 12; k++){if (map[i][j] == num[k]){DWORD tempcolor = arr[k];setfillcolor(tempcolor);solidrectangle(pos[i][j].x, pos[i][j].y, pos[i][j].x + GRID_WIDTH, pos[i][j].y + GRID_WIDTH);if (num[k] != 0){char number[5] = "";sprintf(number, "%d", num[k]);setbkmode(TRANSPARENT);settextcolor(RGB(119, 110, 101));settextstyle(50, 0, "黑体");int temp = textwidth(number);temp = (GRID_WIDTH - temp)/2;outtextxy(pos[i][j].x + temp, pos[i][j].y + 25, number);}}}} }
}

移动

void moveup()
{for (int i = 0; i < MAX_SIZE; i++){int temp = 0;for (int begin = 1; begin < MAX_SIZE; begin++){if (map[begin][i] != 0){if (map[temp][i] == 0){map[temp][i] = map[begin][i];map[begin][i] = 0;}else if (map[temp][i] == map[begin][i]){map[temp][i] += map[begin][i];map[begin][i] = 0;temp++;}else{map[temp + 1][i] = map[begin][i];if (temp + 1 != begin){map[begin][i] = 0;}temp++;}}}}
}
void movedown()
{for (int i = 0; i < MAX_SIZE; i++){int temp = MAX_SIZE-1;for (int begin = MAX_SIZE-2; begin >= 0; begin--){if (map[begin][i] != 0){if (map[temp][i] == 0){map[temp][i] = map[begin][i];map[begin][i] = 0;}else if (map[temp][i] == map[begin][i]){map[temp][i] += map[begin][i];map[begin][i] = 0;temp--;}else{map[temp - 1][i] = map[begin][i];if (temp -1 != begin){map[begin][i] = 0;}temp--;}}}}
}
void moveleft()
{for (int i = 0; i < MAX_SIZE; i++){int temp = 0;for (int begin = 1; begin < MAX_SIZE; begin++){if (map[i][begin] != 0){if (map[i][temp] == 0){map[i][temp] = map[i][begin];map[i][begin] = 0;}else if (map[i][temp] == map[i][begin]){map[i][temp] += map[i][begin];map[i][begin] = 0;temp++;}else{map[i][temp + 1] = map[i][begin];if (temp + 1 != begin){map[i][begin] = 0;}temp++;}}}}
}
void moveright()
{for (int i = 0; i < MAX_SIZE; i++){int temp = MAX_SIZE - 1;for (int begin = MAX_SIZE - 2; begin >= 0; begin--){if (map[i][begin] != 0){if (map[i][temp] == 0){map[i][temp] = map[i][begin];map[i][begin] = 0;}else if (map[i][temp] == map[i][begin]){map[i][temp] += map[i][begin];map[i][begin] = 0;temp--;}else{map[i][temp - 1] = map[i][begin];if (temp - 1 != begin){map[i][begin] = 0;}temp--;}}}}
}

键盘控制定义

void KeyControl()
{usrkey = _getch();switch (usrkey){case 72:case 'w':case 'W':moveup();CreateNumber();break;case 80:case 's':case 'S':movedown();CreateNumber();break; case 75:case 'a':case 'A':moveleft();CreateNumber();break; case 77:case 'd':case 'D':moveright();CreateNumber();break;default:break;}
}

代码解析

主函数:
int main()
{
initgraph(WIN_SIZE,WIN_SIZE,SHOWCONSOLE);
GameInit();
while (1)
{
GameDrw();
KeyControl();
}
while (1);
return 0;
}

2048小游戏项目开发代码相关推荐

  1. 2048小游戏项目总结

    2048小游戏项目总结 最近有在玩2048,所以写了个2048的代码 话不多说,先上截图和代码 游戏截图 HTML代码 <!DOCTYPE html> <html lang=&quo ...

  2. 小程序开发代码_快速学会微信小程序开发,无需懂代码!

    现在想要制作自己的小程序的人越来越多,但大多数都不懂任何代码知识,不知该如何制作.其实随着各种第三方开发工具的出现,无需微信小程序开发源代码,小白也能顺利生成一个自己的小程序了.下面我就跟大家说下该如 ...

  3. 五子棋-单机游戏-微信小游戏项目开发入门

    关于这个文章能看懂的条件,需要读者具备如下三个条件: 熟悉 HTML 熟悉 HTML 中的 Canvas JavaScript基础 以及ES5以上 这是一个五子棋游戏的实现方案,在微信小程序上运行,如 ...

  4. 扫雷-单机游戏-微信小游戏项目开发入门

    关于这个文章能看懂的条件,需要读者具备如下三个条件: 熟悉 HTML 熟悉 HTML 中的 Canvas JavaScript基础 实现扫雷小游戏,它的游戏规则很简单,只要占领完没有问题的方格就可以, ...

  5. c语言2048代码linux,C语言实现2048小游戏(示例代码)

    2048 一.设计思路 1.游戏规则 想要制作游戏,首先需要了解游戏的规则,下面就来介绍2048的游戏规则 2048游戏共有16个格子,初始时初始数字由2或者4构成. 手指向一个方向滑动,所有格子会向 ...

  6. 发语音包红包小程序开发代码解析

    vpackage 发语音包小程序开发182..182..236..96发语音包小程序系统软件6her.jdk1_5; /**  * 该类用于演示泛型数组的创建  *  */ public class ...

  7. 小程序开发代码_企业为什么要选择小程序定制开发?

    随着小程序红利的爆发,越来越多的商家投身小程序的浪潮中,而现在微信小程序的制作方式有两种,一种是模板小程序开发,另一种是定制小程序开发.随着市场竞争激烈程度的升级和商家开发的个性需求,很多商家更多的是 ...

  8. 2048小游戏逻辑代码(易懂)

    2048主要是逻辑清晰,我这个是jQuery写的,但是不管是什么用什么写,其实都是这个逻辑 代码没有删减,复制粘贴即可运行 这就是做好的样子: 样式有点丑,但是问题不大 这个游戏大家应该都玩过,在这我 ...

  9. 2048小游戏项目招标书(简易版)

    小组成员:胡一铭,陈纪新 立项依据: 2048作为火爆一时的益智小游戏,玩法有创意,操作简易而不简单,在移动游戏盛行的时代,这样一个消磨时间.随时随地可享受的小游戏必然会在游戏市场中独树一帜,受到大众 ...

最新文章

  1. 安装Windows Vista
  2. win7卸载java_Win7彻底卸载Oracle 11g图文步骤(靠谱)
  3. 模板方法设计模式(未完待续)
  4. 国家邮政局:除夕和初一包裹量超1.3亿件,同比增长223%
  5. 自己动手写Docker系列 -- 4.2使用AUFS包装busybox
  6. VertrigoServ 2.21配置phpmyadmin
  7. linux 集群服务器设置,Zookeeper集群配置
  8. 2021考研英语备考规划
  9. linux手机 电脑传文件怎么安装,centos7上成功安装iptux,成功实现安卓手机和Linux传送文件...
  10. Android adb脚本文件神器
  11. 《会计学》的简单了解
  12. 西电计算机学院嵌入式所,祝贺计算机科学与技术学院张亮老师团队论文被顶级期刊TNNLS录取...
  13. android 系统重新安装,一招学会安卓手机系统重装教程
  14. 环形10个树洞兔子c语言设计,[阅读打卡]I am a Bunny+提高孩子的欣赏能力我是一只小兔子,我的名字叫尼古拉斯 我住在一个树洞里面 在春天的时候,我喜欢看美丽的花儿,有...
  15. 常用的SQL语句大全-单表操作
  16. 哈希函数(散列函数)详解
  17. php内外边距,CSS 内边距
  18. Ubuntu基本使用指南
  19. h5 div自动排列
  20. heif heic 的区别_什么是HEIF(或HEIC)图像格式?

热门文章

  1. bash中文手册在线pdf
  2. PL2303芯片检测工具v1006绿色版
  3. 【转】lonekight@xmu·ACM/ICPC 回忆录
  4. oracle 存储过程红叉,oracle 存储过程基本语法及问题
  5. 在Linux 里使用IE的方法 - IEs4Linux
  6. js实现bind函数
  7. 优雅关闭consul
  8. 建筑结构设计毕业论文参考范文
  9. 基于ACCESS在线考试自动组卷系统设计
  10. 容错服务器怎么装系统,容错服务器安装手册.doc