C/C++ 五子棋游戏

C/C++基础讲解(九十三)之游戏篇(五子棋游戏) 程序主要是基于Turbo C++ 4.0 Windows 7 Windows 8 64Bit Version进行编译完成了,有兴趣的小伙伴可以自己安装下Turbo C++ 4.0 Windows 7 Windows 8 64Bit Version,网上有现成的教程,当然了,如果有问题,也可以和我联系,这里我们主要讲解些源码实例,不多说了,言归正传。 C语言,做为学习其他语言的基础语言,其重要性就不言而喻了.下面我将和大家一起来学习探讨C语言的相关奥秘。 实例1:五子棋游戏 阅读详情

今天分享一篇使用vs2010,配合easy-X图形库编写的五子棋控制台游戏。
自带游戏资源。 且免费下载

下面是百度网盘下载连接:
链接:https://pan.baidu.com/s/1MMJKNDvNJy5UvT9mtM30xw
提取码:4rvv

下载后,根据下图进行操作!
在这里插入图片描述

游戏棋盘是15 * 15 的,应该符合很多大专院校的期末大作业!!!

具体过程就不详细解释了,等哪天心情好就把他完善一下,使用C++的面向对象在搞一遍。

代码中关键地方也有注释,自己去看!!!

代码一共650行,其中很多地方都还可以去优化的,写了很多重复的代码,也写了很多垃圾代码。

不过游戏界面基本完善,游戏功能该有还是会有,比如 音乐, 悔棋等。

游戏还有一个BUG,当棋盘下满棋子也还没有分出胜负,程序是不会做任何操作的,唯有点击重新开始游戏或者退出游戏或者悔棋。我就懒得再加代码了,其实很简单的,有兴趣的小伙也可以自行完善一下!
思路:再写一个函数用于判断数组是否存满了(数组中已经没有0值了),如果满了,就显示“棋盘已满”的字体,然后等待用户点击开始游戏或者退出游戏即可。重新开始游戏后记得回复白棋先出,将悔棋记录删除掉,将数组全部值都赋值0.

或许还有其他的BUG是我没有发现的,有兴趣的也可以找一下!!!

另外代码运行需要的文件可以点击我的头像去下载,免费的!
或者点这里!

对了,代码中有使用到vector容器作为悔棋记录,不懂的点这里!

不说了,上代码:

#include <iostream>
#include <Windows.h>
#include <graphics.h>	// 图形库
#include <vector>		// 动态数组,该地方用于悔棋
#include <mmsystem.h>	// 背景音乐

// 加载 winmm.lid库文件
#pragma comment(lib,"winmm.lib")


using namespace std;

#define GRAPHICS_X 880
#define GRAPHICS_Y 780

// 游戏棋盘
#define PLATE_X	 30				//////
#define PLATE_Y  50				/////	棋盘的矩形的坐标值
#define PLATE_XX 50*14+PLATE_X	////
#define PLATE_YY 50*15			///
// 偏移量
#define	OFFSET   50	// 每个棋盘空格相隔50像素

// 记录悔棋的容器
typedef struct VECTOR {
	vector<int> x;
	vector<int> y;
};
// 悔棋标志
VECTOR pullBack;	// 记录棋盘上一下好的棋子的坐标,好用于悔棋



// 游戏初始化界面
void initgraphGame(void) {
	// 初始化图像界面
	initgraph(1080, 720);

	// 将图片应用于界面中
	loadimage(0, _T("begin-1.jpg"));

	// 设置字体颜色
	settextcolor(RGB(255, 255, 255));

	// 设置字体
	settextstyle(35, 0, _T("微软雅黑"));

	// 设置字体的背景颜色为透明
	setbkmode(TRANSPARENT);

	// 写字
	outtextxy(415, 60, _T("正在加载游戏...")); 

	// 设置画笔粗细
	setlinestyle(PS_SOLID, 5);

	// 画一个空心矩形
	rectangle(220, 195, 820, 305);

	// 设置字体颜色
	settextcolor(RGB(0, 0, 0));

	// 设置字体
	settextstyle(120, 0, _T("微软雅黑"));

	// 写字
	outtextxy(244, 190, _T("编程使我快乐")); 

	// 设置字体颜色
	settextcolor(RGB(255, 200, 88));

	// 写字
	outtextxy(110, 410, _T("欢迎进入五子棋游戏")); 

	Sleep(3000);
	closegraph();
}


// 游戏背景音乐
void music(void) {
	mciSendString("play Sunburst.mp3 repeat", 0, 0, 0);
}

// 背景音乐标识
bool gameMusicFlag = true;

// 游戏背景音乐开关
void musicFlag(void) {
	if (gameMusicFlag) {
		gameMusicFlag = false;
		mciSendString("pause Sunburst.mp3",NULL,0,NULL);	// 暂停
		//mciSendString("close Sunburst.mp3",NULL,0,NULL);	// 停止
	} else {
		gameMusicFlag = true;
		music();
	}
}



// 棋盘绘制
void plate(void) {
	// 设置画笔粗细
	setlinestyle(PS_SOLID, 2);

	for (int i=0; i<13; i++) {
		//	固定值加上一个偏移量
		line(PLATE_X, PLATE_Y+(OFFSET*(i+1)), PLATE_XX, PLATE_Y+(OFFSET*(i+1)));	// 行
		line(PLATE_X+(OFFSET*(i+1)), PLATE_Y, PLATE_X+(OFFSET*(i+1)), PLATE_YY);	// 纵
	}
}

// 游戏 开始 和 结束 和 悔棋 和 音乐开关 和 五子棋 绘制
void gameButton(void) {
	// 设置画笔粗细
	setlinestyle(PS_SOLID, 2);

	// 设置字体颜色
	settextcolor(RGB(0, 0, 0));

	// 设置字体
	settextstyle(25, 0, _T("微软雅黑"));

	// 字体外的方框
	rectangle(760, 175, 850, 225);
	
	// 写字
	outtextxy(767, 185, _T("音乐开关")); 


	// 字体外的方框
	rectangle(760, 250, 850, 300);
	
	// 写字
	outtextxy(767, PLATE_Y*5+10, _T("开始游戏")); 

	// 字体外的方框
	rectangle(760, 450, 850, 500);

	// 写字
	outtextxy(767, 460, _T("结束游戏")); 

	// 字体外的方框
	rectangle(760, 650, 850, 700);

	// 写字
	outtextxy(785, 662, _T("悔棋")); 


	// 设置字体
	settextstyle(30, 0, _T("微软雅黑"));

	// 五子棋
	outtextxy(700/2, 10, _T("五子棋"));
}

// 开始游戏提示
void gameHints(void) {
	// 设置画笔粗细
	setlinestyle(PS_SOLID, 2);

	// 设置字体颜色
	settextcolor(RGB(0, 0, 0));

	// 设置字体
	settextstyle(28, 0, _T("微软雅黑"));

	// 字体外的方框
	rectangle(760, 50, 850, 150);
	
	// 写字
	outtextxy(775, 65, _T("请点击")); 
	outtextxy(763, 100, _T("开始游戏")); 
}

// 清楚提示
void deleteHints(void) {
	IMAGE image;
	loadimage(&image, _T("cheng.jpg"));
	putimage(758, 48, &image);
}

// 游戏界面
void gameInterface(void) {
	// 初始化图像界面
	initgraph(GRAPHICS_X, GRAPHICS_Y);

	// 设置图像的背景颜色
	setbkcolor(RGB(255,200,88));
	// 应用到图像中
	cleardevice();

	// 设置画笔颜色
	setlinecolor(RGB(0,0,0));

	// 设置画笔粗细
	setlinestyle(PS_SOLID, 3);

	// 画一个空心矩形
	rectangle(PLATE_X, PLATE_Y, PLATE_XX, PLATE_YY);

	// 画棋板
	plate();

	// 游戏按钮
	gameButton();

	// 开始游戏提示
	gameHints();
}

// 游戏选手
typedef struct PLAYER {
	int white;
	int black;
};
PLAYER player;	// 用于左上角提示选手下棋

// frame of reference 坐标
typedef struct FOR {
	int x;
	int y;
};
FOR fofr;	// 用于更新数组

// 鼠标坐标
typedef struct MOUSES {
	int x;
	int y;
};
MOUSES mouses;	// 用于下棋

int Map[15][15] = {		// int Map[15][15] = {0};	<== 可以写成这样
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};


IMAGE imageBlack;	// 黑棋图片存储变量
IMAGE imageWhite;	// 白棋图片存储变量
// 游戏选手显示
void gamePlayerShow(void) {
	// 设置画笔粗细
	setlinestyle(PS_SOLID, 2);

	// 设置字体
	settextstyle(30, 0, _T("微软雅黑"));

	// 字体外的方框
	rectangle(750, 40, 860, 160);
	
	// 清除提示
	deleteHints();

	if (player.white) {
		// 设置字体颜色
		settextcolor(RGB(255, 255, 255));

		// 写字
		outtextxy(780, 52, _T("白方")); 
		outtextxy(780, 80, _T("下棋"));

		// 预先加载图片
		loadimage(&imageWhite, _T("white.jpg"), 30, 30);
		// 显示棋子
		putimage(790, 110, &imageWhite);

	} else if (player.black) {
		// 设置字体颜色
		settextcolor(RGB(0, 0, 0));

		// 写字
		outtextxy(780, 52, _T("黑方")); 
		outtextxy(780, 80, _T("下棋")); 

		// 预先加载图片
		loadimage(&imageBlack, _T("black.jpg"), 30, 30);
		// 显示棋子
		putimage(790, 110, &imageBlack);

	} else {
		outtextxy(780, 52, _T("第三方")); 
		outtextxy(780, 80, _T("下棋")); 
	}
}



// 鼠标事件:点击开始游戏与退出游戏
bool beginGame(void) {
	MOUSEMSG mouse;	// 鼠标变量

	while (1) {
		mouse = GetMouseMsg();	// 调用系统的函数

		// 如果有鼠标左键点击操作
		if (mouse.uMsg == WM_LBUTTONDOWN) {
			if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 250 && mouse.y < 300)) {
				return true;
			} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 450 && mouse.y < 500)) {
				return false;
			} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 175 && mouse.y < 225)) {
				musicFlag();	// 音乐控制
				continue;
			}
		}

		Sleep(10);	// 让CPU休息一下下
	}
}



// 重新开始游戏
void newGame(void) {
	// 重新开始游戏
	gameInterface();	// 初始化地图
	for (int i=0; i<15; i++) {	// 地图全部置为零
		for (int j=0; j<15; j++) {
			Map[i][j] = 0;
		}
	}

	// 重新开始游戏,将悔棋标志清空
	pullBack.x.clear();
	pullBack.y.capacity();

	// 重新开始游戏之后,恢复白棋先出
	player.black = 0;
	player.white = 1;
}



// 鼠标点击操作
int ifbool(void) {
	MOUSEMSG mouse;	// 鼠标变量

	while (1) {
		mouse = GetMouseMsg();	// 调用系统的函数

		// 如果有鼠标左键点击操作
		if (mouse.uMsg == WM_LBUTTONDOWN) {		// 下棋操作
			for (int i=0; i<15; i++) {
				for (int j=0; j<15; j++) {		// 判断鼠标的坐标是否在该区域
					if ((mouse.x >= i*50+PLATE_X-15 && mouse.x <= i*50+PLATE_X+15) &&
						(mouse.y >= j*50+PLATE_Y-15 && mouse.y <= j*50+PLATE_Y+15)) {

							// 等于零,该区域没有棋子
							if (Map[i][j] == 0) {
								fofr.x = i;		// 用于更新数组
								fofr.y = j;

								mouses.x = i*50+PLATE_X;	// 用于下棋
								mouses.y = j*50+PLATE_Y;

								pullBack.x.push_back(i);	// 用于悔棋
								pullBack.y.push_back(j);
								return 1;

							} else {
								return 2;
							}

					} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 250 && mouse.y < 300)) {	// 重新开始游戏
						newGame();	// 重新开始游戏函数
						return 3;

					} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 650 && mouse.y < 700)) {		// 悔棋操作
						if (pullBack.x.size() > 0 && pullBack.y.size() > 0) {	// 大于零,说明有棋子记录,可以悔棋
							int x = pullBack.x[pullBack.x.size()-1];
							int y = pullBack.y[pullBack.y.size()-1];

							// 删除容器上的一个悔棋记录
								pullBack.x.pop_back();
								pullBack.y.pop_back();

				

								Map[x][y] = 0;
								// 重新加载游戏
								gameInterface();	// 初始化地图

	
								for (int i=0; i<15; i++) {	// 将地图上的棋子摆回来
									for (int j=0; j<15; j++) {
										if (Map[i][j] == 1) {
											loadimage(&imageWhite, _T("white.jpg"), 30, 30);
											putimage(i*50+PLATE_X-15, j*50+PLATE_Y-15, &imageWhite);
				
										} else if (Map[i][j] == 2) {
											loadimage(&imageBlack, _T("black.jpg"), 30, 30);
											putimage(i*50+PLATE_X-15, j*50+PLATE_Y-15, &imageBlack);
											
										}
									}
								}

								if (player.black == 1) {
									player.black = 0;
									player.white = 1;
								} else {
									player.black = 1;
									player.white = 0;
								}
								return 4;
						}
						
					} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 450 && mouse.y < 500)) {		// 推出游戏操作
						// 结束程序
						closegraph();
						exit(1);

					} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 175 && mouse.y < 225)) {
						musicFlag();	// 音乐控制
						continue;
					} 
				}
			}
		}

		Sleep(10);
	}
}


// 下棋
void playChess(void) {
	
	if (player.black) { // 如果为真
		// 预先加载图片
		loadimage(&imageBlack, _T("black.jpg"), 30, 30);
		// 将棋子下到棋板上面
		putimage(mouses.x-15, mouses.y-15, &imageBlack);
		player.black = 0;	// 下棋顺序标志
		player.white = 1;	// 下棋顺序标志
		Map[fofr.x][fofr.y] = 2;	// 更新数组
	} else {
		// 预先加载图片
		loadimage(&imageWhite, _T("white.jpg"), 30, 30);
		// 将棋子下到棋板上面
		putimage(mouses.x-15, mouses.y-15, &imageWhite);
		player.black = 1;
		player.white = 0;
		Map[fofr.x][fofr.y] = 1;
	}
}

// 提示该处已有棋子
void hint(void) {
	// 清除提示
	deleteHints();

	// 设置画笔粗细
	setlinestyle(PS_SOLID, 2);

	// 设置字体颜色
	settextcolor(RGB(0, 0, 0));

	// 设置字体
	settextstyle(25, 0, _T("微软雅黑"));

	// 字体外的方框
	rectangle(760, 50, 850, 150);
	
	// 写字
	outtextxy(788, 52, _T("此处")); 
	outtextxy(768, 80, _T("已有棋子")); 


	// 确认 字体外的方框
	rectangle(765, 110, 845, 145);
	// 设置字体
	settextstyle(25, 0, _T("微软雅黑"));
	// 写字
	outtextxy(790, 115, _T("确认")); 


	MOUSEMSG mouse;	// 鼠标变量

	while (1) {
		mouse = GetMouseMsg();	// 调用系统的函数

		// 如果有鼠标左键点击操作
		if (mouse.uMsg == WM_LBUTTONDOWN) {
			if ((mouse.x > 765 && mouse.x < 845) && (mouse.y > 90 && mouse.y < 145)) {
				// 清除提示
				deleteHints();
				break;

			} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 250 && mouse.y < 300)) {
						newGame();	// 重新开始游戏函数
						break;

					} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 450 && mouse.y < 500)) {
						// 结束程序
						closegraph();
						exit(1);

					} else if ((mouse.x > 760 && mouse.x < 850) && (mouse.y > 175 && mouse.y < 225)) {
						musicFlag();	// 音乐控制
						continue;
					}
		}

		Sleep(10);
	}
}


void playGames(void);
// 执行胜利界面
void Victory(int victory) {
	Sleep(300);
	//closegraph();
	//initgraph(680, 417);

	//IMAGE image;

	//// 加载图片
	//loadimage(&image, _T("timg.jpg"));
	//putimage(0, 0, &image);

	settextstyle(77, 0, _T("微软雅黑"));

	// 设置字体的背景颜色为透明
	setbkmode(TRANSPARENT);

	if (victory == 1) {
		settextcolor(RGB(255, 255, 255));
		outtextxy(180, 150, _T("恭喜白棋获胜"));

	} else if (victory == 2) {
		settextcolor(RGB(0, 0, 0));
		outtextxy(180, 150, _T("恭喜黑棋获胜"));

	} else {
		outtextxy(200, 150, _T("参数有问题!"));
	}


	// 点击开始游戏
	if (beginGame()) {
		newGame();	// 重新加载游戏

		// 玩游戏
		playGames();
	} else {
		closegraph();
		exit(1);
	}

	/*system("pause");
	closegraph();
	exit(1);*/
}

// 判断是否下完了五个一样的棋子
void ifVictory(void) {
	for (int i=0; i<15; i++) {
		for (int j=0; j<15; j++) {

			// 核心算法,游戏棋子判断
			if ((Map[i][j]==1 && Map[i-1][j-1]==1 && Map[i-2][j-2]==1 && Map[i-3][j-3]==1 && Map[i-4][j-4]==1) ||		// 左上角
				(Map[i][j]==1 && Map[i+1][j-1]==1 && Map[i+2][j-2]==1 && Map[i+3][j-3]==1 && Map[i+4][j-4]==1) ||		// 右上角
				(Map[i][j]==1 && Map[i-1][j+1]==1 && Map[i-2][j+2]==1 && Map[i-3][j+3]==1 && Map[i-4][j+4]==1) ||		// 左下角
				(Map[i][j]==1 && Map[i+1][j+1]==1 && Map[i+2][j+2]==1 && Map[i+3][j+3]==1 && Map[i+4][j+4]==1) ||		// 右下角
				(Map[i][j]==1 && Map[i][j-1]==1 && Map[i][j-2]==1 && Map[i][j-3]==1 && Map[i][j-4]==1) ||				// 上
				(Map[i][j]==1 && Map[i][j+1]==1 && Map[i][j+2]==1 && Map[i][j+3]==1 && Map[i][j+4]==1) ||				// 下
				(Map[i][j]==1 && Map[i-1][j]==1 && Map[i-2][j]==1 && Map[i-3][j]==1 && Map[i-4][j]==1) ||				// 左
				(Map[i][j]==1 && Map[i+1][j]==1 && Map[i+2][j]==1 && Map[i+3][j]==1 && Map[i+4][j]==1)) {				// 右
					Victory(1);	// 执行胜利代码

			} else if ((Map[i][j]==2 && Map[i-1][j-1]==2 && Map[i-2][j-2]==2 && Map[i-3][j-3]==2 && Map[i-4][j-4]==2) ||		// 左上角
					   (Map[i][j]==2 && Map[i+1][j-1]==2 && Map[i+2][j-2]==2 && Map[i+3][j-3]==2 && Map[i+4][j-4]==2) ||		// 右上角
					   (Map[i][j]==2 && Map[i-1][j+1]==2 && Map[i-2][j+2]==2 && Map[i-3][j+3]==2 && Map[i-4][j+4]==2) ||		// 左下角
				   	   (Map[i][j]==2 && Map[i+1][j+1]==2 && Map[i+2][j+2]==2 && Map[i+3][j+3]==2 && Map[i+4][j+4]==2) ||		// 右下角
					   (Map[i][j]==2 && Map[i][j-1]==2 && Map[i][j-2]==2 && Map[i][j-3]==2 && Map[i][j-4]==2) ||				// 上
					   (Map[i][j]==2 && Map[i][j+1]==2 && Map[i][j+2]==2 && Map[i][j+3]==2 && Map[i][j+4]==2) ||				// 下
					   (Map[i][j]==2 && Map[i-1][j]==2 && Map[i-2][j]==2 && Map[i-3][j]==2 && Map[i-4][j]==2) ||				// 左
					   (Map[i][j]==2 && Map[i+1][j]==2 && Map[i+2][j]==2 && Map[i+3][j]==2 && Map[i+4][j]==2)) {				// 右
							Victory(2);	// 执行胜利代码
			}
		}
	}
}

// 玩游戏
void playGames(void) {
	while (1) {
		gamePlayerShow();		// 选手下棋提示	

		int keyword = ifbool();	// 鼠标点击棋盘

		if (keyword == 1) {
			playChess();	// 下棋
			ifVictory();	// 判断是否下完了五个一样的棋子

		} else if (keyword == 2) {
			hint();			// 提示该处已有棋子

		} else if (keyword == 3) {
			// 已执行界面重新加载,清楚开始游戏提示
			deleteHints();
		} else if (keyword == 4) {
			// 已执行界面重新加载,清楚开始游戏提示
			deleteHints();
		}
	}
}



int main(void) {
	// 白色为1,白棋先出
	player.black = 0;
	player.white = 1;


	// 加载游戏
	initgraphGame();

	// 背景音乐
	music();

	// 游戏界面
	gameInterface();

	// 开始游戏
	if (beginGame()) {
		// 玩游戏
		playGames();
	}

	return 0;
}

最后附上游戏截图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

C语言实现五子棋(双人对战,单人对战,悔棋等功能).zip 自己写的课程设计 C语言实现五子棋(双人对战,单人对战,悔棋等功能) 立即下载

相关推荐

在摩尔线程 MTT S80 上使用 Ollama 进行 DeepSeek R1 蒸馏版模型推理

本文主要介绍了如何在摩尔线程 MTT S80 上通过 Ollama 快速完成DeepSeek R1 蒸馏系列模型的推理。

摩尔线程blog中心 3595

基于C++实现五子棋

五子棋是我国古代传统的黑白棋种之一,黑白双方依次落子,任意一方在棋盘上形成横向、纵向、斜向的连续相同颜色的五颗棋子的一方为胜。

qq_65672569的博客 3828

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不支持问题

本文详细解析了在国产麒麟系统上部署Kettle时遇到的aarch64架构不支持问题,提供了从获取适配的SWT库、修改启动脚本到生产环境调优的完整解决方案。文章重点解决了ARM架构与Java GUI工具的兼容性挑战,并分享了内存配置、字体显示及Carte服务部署等实战经验,助力用户在国产化环境中稳定运行ETL流程。

weixin_29197835的博客 559

五子棋游戏(C++控制台)

一、控制台版本 1.1 代码 1.2 实现效果 二、存储功能的实现 三、简化下棋的过程

HuanBianCheng27的博客 6519

AU混响终极指南:从‘干声’到‘空间感’,用总音轨和发送技巧打造专业人声

本文详细介绍了如何在Adobe Audition(AU)中使用混响效果器,通过总音轨和发送技巧将‘干声’转化为具有专业‘空间感’的人声。从混响基础原理到总线架构设置,再到精细控制和自动化调整,全面解析了提升音频质量的实用技巧,适用于音乐制作、播客和内容创作。

weixin_30512089的博客 331

Cherry Studio部署MCP服务报错全记录:从零解决‘Connection closed‘问题

本文详细记录了在Cherry Studio中部署MCP服务时遇到‘Connection closed’报错的完整排查与解决过程。文章从环境依赖(UV、Bun)的安装验证、绝对路径配置、网络镜像源设置,到服务端手动调试与Cherry Studio配置检查,提供了一套系统性的解决方案,帮助开发者彻底解决此类连接问题。

g9h0i1的博客 761

基于C++的五子棋项目

C++五子棋

zy1872071381的博客 2806

QuestaSim使用Xilinx库的设置

安装QuestaSim

miracle_eicont的专栏 3406

C++实现五子棋(含步骤 结尾附完整代码)

以上就是使用C++实现五子棋游戏的详细代码教程,包括棋盘和游戏界面的创建、棋子的绘制和落子、胜负判断和游戏结束、悔棋和重新开始功能。如果棋盘已经填满,但仍然没有五子连珠,则游戏结束,双方平局。1.1 创建Qt项目,并在主窗口中添加一个QGraphicsView控件,用于显示游戏界面。在游戏中,玩家需要能够通过鼠标点击来落子,并且需要在棋盘上显示出来。如果游戏结束,则弹出游戏结束信息,并重置游戏。首先,我们需要创建一个棋盘和游戏界面,可以使用Qt框架来实现。在游戏中,玩家需要能够进行悔棋和重新开始游戏。

koomxingkong的博客 1万+

国产HDMI2.0芯片GSV2011怎么选?手把手教你用它设计音视频采集卡(附FPGA/海思对接指南)

本文详细解析国产HDMI2.0芯片GSV2011在音视频采集卡设计中的应用,涵盖芯片选型、硬件设计要点及与FPGA/海思平台的对接指南。GSV2011凭借4K@60Hz支持、音频提取嵌入功能和高集成度,成为音视频设备的核心选择,助力开发者快速实现高性能采集卡设计。

weixin_30181209的博客 331

如何实现MCGS与S7-200SMART PLC以太网多台通信控制?

第九步:(设备工具箱—设备管理—鼠标依次点击通用TCP/IP父设备—西门子_ Smart200到设备窗口里面去)数据类型:第0位(指PLC地址变量小数点后面的位数,例如我地址是M0.0,那么在数据类型应填写通道的第00位)第十步:(鼠标双击打开通用TCPIP父设备0--[通用TCP/IP父设备]进入通信配置)通道地址:0(指小数点前面起始字节的地址,例如我地址是M0.0,那么应在通道地填写0)。第七步:(选择通用TCP/IP父设备,点击新增,右侧选定设备就会自动添加进去。

u010670857的博客 6713

MFC ListControl使用总结 设置背景,双击修改值

前言 现需要使用一个8*5的表格输入参数。 添加控件 如下图所示,使用了一个List control(ID: IDC_LIST_PARAM),一个Edit control(ID: IDC_EDIT_PARAM, 属性中visible改为false)以及一个static text. 其中List control用来显示表格,Edit control用来辅助编辑List control中的内容。 为控件添加变量及事件处理程序 为List control添加control类型变量m_paramList,添加NM

Fourier_1024的博客 2214

告别繁琐!VS Code 下OpenClaw零配置上手秘籍

本文介绍了在VSCode环境下零配置上手OpenClaw开发工具的最佳实践。首先详细说明了VSCode和OpenClaw插件的安装步骤,包括获取安装包、配置环境变量等准备工作。然后重点讲解了核心配置流程:设置OpenClaw路径、调整工作区参数、添加自定义代码片段等优化开发体验的方法。通过创建测试项目验证配置有效性,并针对常见的路径错误、运行报错等问题提供了排查方案。本文旨在帮助开发者快速搭建高效的OpenClaw开发环境,充分发挥VSCode与OpenClaw的组合优势,提升开发效率。无论是新手还是资深开

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 526

C/C++网络五子棋游戏[2024-09-26]

棋盘通常为15x15的网格,也有部分比赛使用19x19的棋盘。黑方先手,双方轮流在棋盘的交叉点上放置棋子(黑棋或白棋)。但你可以根据上述架构,在Qt中创建相应的类和函数来逐步构建你的五子棋游戏。使用单元测试(如Qt的QTest框架)和集成测试(手动测试或自动化测试脚本)来确保软件的稳定性和可靠性。使用Qt Designer设计棋盘、按钮(如“开始”、“退出”)、登录界面等。PLAYER: [玩家标识](如 “Black” 或 “White”)将GUI和网络通信模块整合,实现游戏的完整流程。

code helper 463

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C/C++五子棋游戏[2024-01-17]

②棋子的移动与落子有键盘上按键控制,本程序选取1P按键为W、S、A、D和空格键,2P按键为↑、、一、→和回车键,分别代表上移、下移、左移、右移光标和落子。两人对局,各执一色,轮流下一子。(2)监控键盘输入的函数及各键的ASCII码值:图形方式下的输入、输出及其相关的函数:判定五子成一线的方法,即矩阵中行向、列向、两条对角线方向上是否有连续五子:调用系统提供的声音函数等。③胜负判断模块:实时监测棋盘上棋子,一旦某一色棋子出现五子连线,终止游戏程序,并着色连成一线的五子,弹出该色玩家胜出界面。

code helper 651

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C/C++设计五子棋游戏[2024-07-22]

②棋子的移动与落子有键盘上按键控制,本程序选取1P按键为W、S、A、D和空格键,2P按键为↑、、一、→和回车键,分别代表上移、下移、左移、右移光标和落子。两人对局,各执一色,轮流下一子。(2)监控键盘输入的函数及各键的ASCII码值:图形方式下的输入、输出及其相关的函数:判定五子成一线的方法,即矩阵中行向、列向、两条对角线方向上是否有连续五子:调用系统提供的声音函数等。③胜负判断模块:实时监测棋盘上棋子,一旦某一色棋子出现五子连线,终止游戏程序,并着色连成一线的五子,弹出该色玩家胜出界面。

code helper 488

【数据结构--课设】C/C++五子棋小游戏

为了巩固所学知识并提升编程实践能力,我决定用C语言编写一个简单的五子棋对战小游戏。该项目涉及二维数组的操作、函数模块化编程、流程控制等基础知识。支持自定义棋盘大小(默认15x15);玩家轮流落子(黑子先手);实时判断胜负(横向、纵向、斜向五子连珠);判断平局机制;记录每局比赛结果(黑方/白方胜利次数);支持重新开始游戏或退出程序;菜单界面操作友好。本项目虽然只是一个简单的五子棋小游戏,但它涵盖了C语言和数据结构中的诸多知识点,是一个非常适合初学者进行实战练习的项目。

2401_87144364的博客 842

c++ 小游戏_初学C/C++能做什么?C++简单实现字符界面五子棋小游戏【附源码】

修改说明:之前将代码放Github上,出现了连接超时的问题,所以命令行那里的资源改为了Gitee的,不过不影响大家可以到Github上下载源码,以及点赞⭐---------------------手动分界线先上效果图吧Xshell下的界面Xshell游戏截图Deepin默认终端Windows下用Visual Studio编译windows下界面本人是大一的一名计科新生,大一学的相关科目就是C/C+...

weixin_39630466的博客 338

c语言五子棋卡死,C语言五子棋

代码新手,不足之处请多多指教1.[代码][C/C++]代码#define _CRT_SECURE_NO_WARNING#include#include#include#includevoid startmap(wchar_t a[22][22]);void mapout(wchar_t a[22][22]);void downW(wchar_t a[22][22]);void downB(wcha...

weixin_39758712的博客 196

c++五子棋_C/C++编程笔记:C语言开发经典游戏项目《五子棋》,内含源码

上一节给大家分享了扫雷游戏的源代码,本篇文章当然也不会让大家失望,专门针对C语言入门或者学习了部分知识之后的小伙伴来练手的游戏项目——《五子棋大战》,本期并不是使用的easyX,因为考虑到有些大学的同学没有接触到这个,所以本期就是一个“黑漆漆”的控制台界面,这个就希望大家谅解哈!,话不多说,下面我们正式来看吧!一、构建棋盘首先可以用一个二维数组来构建棋盘,下标表示位置,内容表示黑子白子或者空位。当...

weixin_39874350的博客 488

【项目实战】轻松实现C/C++大作业:五子棋游戏

算法部分想了很久,也参考了网上的其他游戏的。原理主要就是:遍历每个空闲的点,根据下在那个点后连成的棋形来判断其分值,再选出分值最高的位置并返回给游戏函数。

致力于C语言C++知识分享! 2154

c++五子棋源代码_C/C++编程笔记:C语言开发经典游戏项目五子棋,内含源码

上一节给大家分享了扫雷游戏的源代码,本篇文章当然也不会让大家失望,专门针对C语言入门或者学习了部分知识之后的小伙伴来练手的游戏项目——《五子棋大战》,本期并不是使用的easyX,因为考虑到有些大学的同学没有接触到这个,所以本期就是一个“黑漆漆”的控制台界面,这个就希望大家谅解哈!,话不多说,下面我们正式来看吧!一、构建棋盘首先可以用一个二维数组来构建棋盘,下标表示位置,内容表示黑子白子或...

weixin_39892309的博客 906

用C/C++制作经典五子棋游戏,尔虞我诈谁与争锋!?

通过C++语言来实现一个以windows控制台为展示平台的简单版五子棋程序,其中通过键盘输入来控制游戏中的行为(光标移动、落子、确认)。规则要求某一方在横竖斜方向连续存在五个或五个以上本人所执棋子获得为获胜。 二维数组是五子棋实现的基础。二维数组就像一个棋盘,其中0等于空格,1等于黑棋,2等于白棋,这里电脑就好比只能理解0和1的仆人,我们通过映射,使得五子棋变成计算机能够处理的0和1,进而计算机...

python学习+VX:YYQX2209 760
上一篇: C++11 新特性 之 变参模板、完美转发和emplace
下一篇: C++ 容器存储对象时,指针调用析构函数触发的一系列BUG
cpp_learners
博客等级 码龄7年 1526粉丝 274原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值