c++制作小游戏2048

这篇具有很好参考价值的文章主要介绍了c++制作小游戏2048。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完整代码来自于爱编程的柚子《【C语言/C++游戏项目】:2048小游戏,超详细教程教会你写这个小游戏。》

#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#define MAX_GRID 4
#define GRID_WIDTH 100 
#define INTERVAL 15
using namespace std;

enum Color {

	zero = RGB(205, 193, 180),
	two1 = RGB(238, 228, 218),
	two2 = RGB(237, 224, 200),
	two3 = RGB(242, 177, 121),
	two4 = RGB(245, 149, 99),
	two5 = RGB(246, 124, 95),
	two6 = RGB(246, 94, 59),
	two7 = RGB(242, 177, 121),
	two8 = RGB(237, 204, 97),
	two9 = RGB(255, 0, 128),
	two10 = RGB(145, 0, 72),
	two11 = RGB(242, 17, 158),
	back = RGB(187, 173, 160),
};

Color arr[13] = { zero,two1,two2, two3, two4, two5, two6, two7, two8, two9, two10,two11,back };
int num[12] = { 0,2,4,8,16,32,64,128,256,512,1024,2048 };
int map[MAX_GRID][MAX_GRID];
POINT pos[MAX_GRID][MAX_GRID];
bool flag = false;
//游戏初始界面,随机产生2或者4
int twoorfour() {
	if (rand() % 10 == 1) {
		return 4;
	}
	else {
		return 2;
	}

}
//随机位置,把数放在数组里面

void CreateNumber() {

	while (1) {
		int x=rand()%MAX_GRID;
		int y=rand()%MAX_GRID;
		if (map[x][y] == 0) {


			map[x][y] = twoorfour();
			break;
		}
	}
}

void GameInit() {
	//设置随机数种子
	srand(GetTickCount());
	for (int i = 0;i < MAX_GRID;i++)
	{
		for (int k = 0;k < MAX_GRID;k++)
		{
			pos[i][k].x = k * GRID_WIDTH + (k + 1) * INTERVAL;
			pos[i][k].y = i * GRID_WIDTH + (i + 1) * INTERVAL;
		}
	}
	CreateNumber();
	CreateNumber();

}


void GameDraw() {
	
	//计算格子坐标
	for (int i = 0;i < MAX_GRID;i++)
	{
		for (int k = 0;k < MAX_GRID;k++)
		{
			for (int q = 0;q < 12;q++) {
				if (map[i][k] == num[q]) {
					setfillcolor(arr[q]);
					solidrectangle(pos[i][k].x, pos[i][k].y, pos[i][k].x + GRID_WIDTH, pos[i][k].y + GRID_WIDTH);
				
					if (map[i][k] != 0)
					{
						char number[5] = " ";
						settextcolor(RGB(119, 110, 101));
						settextstyle(50, 0, "楷体");
						setbkmode(TRANSPARENT);//背景颜色透明
						sprintf(number, "%d", map[i][k]);
						int tempx = textwidth(number);
						tempx = GRID_WIDTH / 2 - tempx / 2;
						int tempy = textheight(number);
						tempy = GRID_WIDTH / 2 - tempy / 2;//文字居中
						outtextxy(pos[i][k].x+tempx, pos[i][k].y+tempy, number);
					}
				}
			}
					
		}
	}

}

//键盘操作数字移动

void moveup() {
	for (int i = 0;i < MAX_GRID;i++)
	{
		int temp = 0;
		for (int k = 1;k < MAX_GRID;k++) {
			if (map[k][i] != 0) {

				if (map[temp][i] == 0) {
					map[temp][i] = map[k][i];
					map[k][i] = 0;

				}
				else if (map[temp][i] == map[k][i]) {
					map[temp][i] += map[k][i];
					map[k][i] = 0;
				}

				else {
					map[temp + 1][i] = map[k][i];
					if (temp + 1 != k) {
						map[k][i] = 0;
					}

				}
				temp++;
				flag = true;
			}

		}
	}

}
void movedown() {

	for (int i = 0;i < MAX_GRID;i++)
	{
		int temp = 3;
		for (int k = MAX_GRID - 2;k >=0;k--) {
			if (map[k][i] != 0) {

				if (map[temp][i] == 0) {
					map[temp][i] = map[k][i];
					map[k][i] = 0;

				}
				else if (map[temp][i] == map[k][i]) {
					map[temp][i] += map[k][i];
					map[k][i] = 0;
				}

				else {
					map[temp - 1][i] = map[k][i];
					if (temp - 1 != k) {
						map[k][i] = 0;
					}

				}
				temp--;
				flag = true;
			}

		}
	}

}
void moveright() {
	for (int i = 0;i < MAX_GRID;i++)
	{
		int temp = 3;
		for (int k = 2;k >=0;k--) {
			if (map[i][k] != 0) {

				if (map[i][temp] == 0) {
					map[i][temp] = map[i][k];
					map[i][k] = 0;

				}
				else if (map[i][temp] == map[i][k]) {
					map[i][temp] += map[i][k];
					map[i][k] = 0;
				}

				else {
					map[i][temp - 1] = map[i][k];
					if (temp - 1 != k) {
						map[i][k] = 0;
					}

				}
				temp--;
				flag = true;
			}

		}
	}

}



void moveleft() {
	for (int i = 0;i < MAX_GRID;i++)
	{
		int temp = 0;
		for (int k = 1;k < MAX_GRID;k++) {
			if (map[i][k] != 0) {

				if (map[i][temp] == 0) {
					map[i][temp] = map[i][k];
					map[i][k] = 0;

				}
				else if (map[i][temp] == map[i][k]) {
					map[i][temp] += map[i][k];
					map[i][k] = 0;
				}

				else {
					map[i][temp+1] = map[i][k];
					if (temp + 1 != k) {
						map[i][k] = 0;
					}

				}
				temp++;
				flag = true;
			}

		}
	}

}


void gamejudge() {
	if (flag) {
		CreateNumber();
		flag = false;
	}
}

void GameControl() {

	char key = _getch();
	switch (key) {
	case 'w':
		moveup();
		break;
	case 'a':
		moveleft();
		break;
	case 's':
		movedown();
		break;
	case 'd':
		moveright();
		break;

	}
}

int main() {
	initgraph(MAX_GRID*GRID_WIDTH+5*INTERVAL,MAX_GRID*GRID_WIDTH + 5 * INTERVAL);
	setbkcolor(RGB(187, 173, 160));
	cleardevice();
	GameInit();
	while (1) {
		GameDraw();
		GameControl();
		gamejudge();
		
	}
	
	getchar();
	return 0;
}

这个游戏用到了#include <graphics.h>,思路比较简单。

首先做出游戏页面,然后画出4*4的格子,利用map二维数组,依据数字{0,2,4,8,16,32,64,128,256,512,1024,2048}找到对应颜色在固定位置画出方框。

map二维数字中的数值会根据键盘操作使数字大小发生改变,进而使游戏页面发生改变。

做了几个游戏小程序后会发现,游戏程序的制作,本质上都是经过操作后使页面呈现发生变化,操纵游戏的是游戏设计者,而不是玩家,当明白这个思路后,也挺有趣的吧!

c++2048,c++,c++,算法,c语言

 文章来源地址https://www.toymoban.com/news/detail-549321.html

到了这里,关于c++制作小游戏2048的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2048小游戏成品源码

    2048小游戏,可以自选背景颜色,方框颜色,音乐播放。 还可以展示当前玩家的排名,动态排名,及历史玩家的排名。 前期需求: 使用pygame加载目录音乐。MP3文件: 看下运行后的效果图: =========参数设置: =========背景设置: =========方块设置: ==========源码分享:

    2024年02月16日
    浏览(41)
  • Qt--2048小游戏

    2048 1.功能 上下左右控制数字格子的移动 WASD 4*4 格子移动操作,加操作 开始游戏的按钮,重新游戏按钮 得分计算 判断游戏是否结束 2.源程序 代码如下(示例): MainWindow.h Main.cpp MainWindow.cpp 5.结果 以上是今天要讲的内容,练习了2048小游戏。

    2024年01月25日
    浏览(45)
  • 基于C#的2048小游戏

    最近在玩过2048这个小游戏后感觉很有意思,想着正在学C#的winfrom的我能不能自己写一个2048游戏呢?于是就有了这个:   目录 1.实现思路; 2.代码实现; 1.初始化地图表示的数组; 2.绘制游戏的边框; 3.设置每个数值对应的颜色(可省略); 4.添加控件; 5.四个方向的移动;

    2024年02月08日
    浏览(40)
  • python快速实现2048小游戏

    《2048》是一款比较流行的数字游戏,最早于2014年3月20日发行。原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台。这款游戏是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏。 操作指南: 每次可以选择上下左右其中一个方向去滑动,每滑动

    2024年02月11日
    浏览(39)
  • Android期末项目2048小游戏

    Android期末项目2048小游戏。 2048属于益智类小游戏,它做到了娱乐性、趣味性、教育性相统一。益智类的游戏即是需要去开动大脑去思考从而获得游戏的胜利。简单的益智类游戏可以使玩家在娱乐中不断的开发大脑。这样一来就实现了在娱乐中学习。每次可以选择上下左右其中

    2024年02月06日
    浏览(55)
  • 【Android Studio】图形化数字游戏,小游戏2048。

    手机中的小游戏是一种在日常生活中应用广泛的休闲软件,无论是在超市商店,还是在办公室,或是家庭都有着它的身影。随着移动互联网和智能手机的不断发展和进步,当今市场上已经出现了多种简单轻松的小游戏,几乎每一位智能手机的使用者都会在种类繁多的App网站上

    2024年02月03日
    浏览(42)
  • 2048小游戏 java版(代码+注释)

            一个纯纯小白,想写点什么,也想学习一下怎么在这里写东西,就简单的写个2048小游戏。写的不好,大佬就不用看了,希望和大家交流学习,有写的不好或有更好的建议也欢迎提出来。(需要用的可直接粘贴复制)(轻喷) 目录 游戏展示 讲解  代码        

    2024年02月09日
    浏览(46)
  • 用Python做一个2048小游戏

    2048的逻辑无非是操作 4 × 4 4times4 4 × 4 的方格,每个方格中有一个数,这些数可以移动,如果两个相同的数字在移动时相撞了,就可以彼此合并。 而这个 4 × 4 4times4 4 × 4 的方格,无非是一个矩阵。只需设计好移动逻辑,再用PyGame将这个方格表现出来就算大功告成。 2048只有

    2024年01月17日
    浏览(45)
  • QT-QML2048小游戏

    https://download.csdn.net/download/u013083044/88758829

    2024年01月19日
    浏览(40)
  • 用JAVA写一个2048的小游戏。

    如图所示: 使用软件:eclipse2021-12版 JDK版本:JDK15.0.1 链接:https://pan.baidu.com/s/1NVWaklg9K2wRmBOLew6iMQ 提取码:ts08 1. Client.java: 2.Constant.java 3.Block.java 4.BlockLoader.java 5.Drawable.java 6.Moveable.java 7.MyFrame.java 提示:代码写的有些臃肿,其中也有一些BUG,理解源码以后可以修正。 链接:

    2024年02月10日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包