基于c++ ege图形库的五子棋游戏

C++五子棋AI实战:EGE图形库与博弈算法实现 图形界面编程是C++从控制台迈向可视化应用的关键一步,其核心原理在于将数据逻辑与渲染显示分离,通过事件驱动模型响应用户交互。在游戏开发领域,这种架构的价值尤为突出,它不仅能提升代码的可维护性,更是实现复杂游戏逻辑的基础。以五子棋这类经典棋类游戏为例,其应用场景完美融合了图形渲染、用户输入处理和核心算法设计。通过EGE这类轻量级图形库,开发者可以快速构建出直观的图形界面。而游戏AI的实现,则引入了博弈树搜索和局面评估等核心概念,例如为棋盘空位设计评估函数,识别活四、冲四等关键棋型,这直接关联到项目的核心热词“ 阅读详情

                                            五子棋小游戏的制作教程

该制作基于ege图像库, 首先需要安装配置ege环境 就可以编写小游戏了. 用到的ege库函数不多 , 主要是基于c++的.

先看界面效果:

输入界面:(就是控制台)

游戏胜利界面:


文档如下:

							关于五子棋的构思:
							实现人人对战的五子棋游戏.使用面向对象的c++ 和 ege库实现.
							ege的安装过程不在说明 , 在添加编译链接时去掉 -mwindows 选项.
							dev c++ 的运行环境设置为 TDM-GCC 4.8.1.32-bit Debug
							为保险起见,编译时选择菜单栏里的  运行-全部重新编译(F12) 
							需要3个对象 : 
							1:棋盘对象
							2:黑方棋手对象
							3:白方棋手对象
							
							需要说明,对五子棋的实现来说,棋子的数据结构和游戏使用界面相互分离.对棋子的操作基于二维数组,棋盘和棋子的显示用单独的方法实现.
							
							棋盘对象名: chessboard  
							属性:
							     1:所有棋子-allchessman  二维数组,用来存放整个棋盘上棋子的分布和选手信息   
								   数组元素值为0 表示该位置无子   值为1表示该位置为白方落子  值为-1表示该位置为黑方落子
									二维数组元素以结构体来表示 , 存X, Y坐标和身份标识.要注意的是 ,标识值为2标识是棋盘边界.不能落子 
								   
							方法:
								 1:添加棋子 - bool  addchessman(int , int , int message)   //message指示落子黑白方身份识别
								 2:画棋盘 - void  drawchessboard() 
								 3:判胜  - int bunko(int , int , int message) 
								 4:void  playchess()  运行代码的总程序 
								 
								 
							黑方对象:
								属性: 
									1: 棋子横向位置  int chessman_X  
									2: 棋子纵向位置  int chessman_Y
									3: 落子总个数    black_chessman_count
									4: 身份标识      int black_chessplayer 
								方法:
									1: 提交棋子  submit_chessman(int , int) 
									
									
							白方对象:
								属性:
									1:棋子横向位置  int chessman_X
									2:棋子纵向位置  int chessman_Y
									3:落子总个数    white_chessman_count 
									4:身份标识      int white_chessplayer 
								方法:
									1: 提交棋子     submit_chessman(int ,int )


三个头文件对应三个对象:

黑棋选手:

#include<iostream>
using namespace std;

class  black 
{
	int  chessman_X;  //横向位置
	int  chessman_Y;  //纵向位置 
	int  black_chessman_count  ; //落子总数
	int  black_chessmanplayer ;
	
	public:
		
	
	black()
	{
		black_chessman_count=0;
		black_chessmanplayer=-1;
	}
	
	
	bool submit_chessman(int chessman_X , int chessman_Y )
	{
		if(chessman_X>15 || chessman_X<1 || chessman_Y>15 ||chessman_Y<1)
		{
			return false;
		}
		else
		{
			this->chessman_X = chessman_X;
			this->chessman_Y = chessman_Y;
			black_chessman_count++;
			return true;
		}
	} 
	
	int  getIdentity()
	{
		return  black_chessmanplayer; 
	}
	int  getChessman_X()
	{
		return chessman_X-1;  //这里设置减一是因为画图从0位置开始 
	}
	
	int getChessman_Y()
	{
		return chessman_Y-1;
	}
	
	int getChessmanCount()
	{
		return black_chessman_count  ;
	}
};

白棋选手:

#include<iostream>
using namespace std;

class  white
{
	int  chessman_X;  //横向位置
	int  chessman_Y;  //纵向位置 
	int  white_chessman_count; //落子总数
	int  white_chessmanplayer;
	
	public:
	
	white()
	{
		white_chessman_count=0;
		white_chessmanplayer=1;
	}
	
	bool submit_chessman(int chessman_X , int chessman_Y )
	{
		if(chessman_X>15 || chessman_X<1  || chessman_Y>15 || chessman_Y<1)
		{
			return false;
		}
		else
	    {
	    	this->chessman_X = chessman_X;
			this->chessman_Y = chessman_Y;
			white_chessman_count++;
			return true;
		}
	} 
	
	int  getIdentity()
	{
		return  white_chessmanplayer; 
	}
	
	int  getChessman_X()
	{
		return chessman_X-1;
	}
	
	int getChessman_Y()
	{
		return chessman_Y-1;
	}
	
	int getChessmanCount()
	{
		return white_chessman_count  ;
	}
};

棋盘对象:

#include<iostream>
#include "graphics.h"
#include"black.h"
#include"white.h"
#include <process.h>
#define singleGirdSize 40
#define girdLength  15

using namespace std;
class  chessboard
{
	//int allchessman[girdLength][girdLength] = {{0 ,0}};
	struct allchessman
	{
		int point_X;   //记录棋子X轴位置 
		int point_Y;  //记录棋子Y轴位置
		int message;  //识别棋子身份  (黑方? 白方 ? 空子? ) 
	}allchessman[girdLength][girdLength];
	
	
public :	bool win =false;  //玩家输赢的标记 
			black b;  //定义黑方对象 
			white w;  //定义白方对象 
			//这里b , w 是全局的  ,局部的话会对black_chessman_count这种属性的变化有影响 
	
	public:
		
		//在构造方法中初始化所有棋子
		chessboard()
		{
			int x=100 , y=100;  //棋盘左上端点100 ,100 
			for(int i=0 ; i<15 ; i++ , y+=singleGirdSize)
			{
				for(int u=0; u<15 ; u++ , x+=singleGirdSize)
				{
					allchessman[i][u].point_X = x;
					allchessman[i][u].point_Y = y;
					if(allchessman[i][u].point_X == 100  || allchessman[i][u].point_X == 660 || allchessman[i][u].point_Y == 100 || allchessman[i][u].point_Y == 660)
					{
						allchessman[i][u].message =2; //棋盘边界标识记为2 , 不能落子 
					}
					else
					{
						allchessman[i][u].message =0;  //初始化为空子 
					}
				}
				x=100;  //让X重新回到端点位置 
			}
		} 
		
		
		
	//添加棋子 
	bool   addchessman(int chessman_X , int  chessman_Y , int message)
	{
		if(message == -1)  //黑方落子 
		{
			if(allchessman[chessman_X][chessman_Y].message== 0)  //预落子位置无子
			{
				allchessman[chessman_X][chessman_Y].message = -1;  //落子 
				setfillcolor(RED);
				fillellipse(allchessman[chessman_X][chessman_Y].point_X , allchessman[chessman_X][chessman_Y].point_Y  ,  20 , 20); //界面上显示落子 .半径20 
				if(is_run()) delay_fps(10);
				return true;   //落子成功 
			} 
			else  return false;  //添加棋子失败  重复落子的处理 
		}
		else   
		{
		
			if (message == 1)
			{
				if(allchessman[chessman_X][chessman_Y].message == 0 )  
				{
					allchessman[chessman_X][chessman_Y].message  =1;
					setfillcolor(WHITE);
					fillellipse(allchessman[chessman_X][chessman_Y].point_X , allchessman[chessman_X][chessman_Y].point_Y  ,  20 , 20); //界面上显示落子 .半径20 
					if(is_run()) delay_fps(10);
					return true; //落子成功 
				}
				else  return false;
			}
			else
			{
				return false; //应对意外情况 --message身份出错时 
			}
		}
	} //addchessman
	
	
	
	
	void  drawchessboard()
	{
		 setinitmode(INIT_WITHLOGO, CW_USEDEFAULT,  CW_USEDEFAULT);
		//画布大小暂定800 ,800
		initgraph(800 , 800);
	
		setfont(50 ,0 ,"宋体");
		outtextxy(250 , 0 , "简易五子棋");
		setfont(20 , 0 , "宋体");
		//画出棋盘 
		//预定棋盘左上端点是100 ,100 像素点
		int startpoint_X =100  , startpoint_Y =100 ;
		char str[10];
		for(int i=0; i<15 ; i++)
		{
			sprintf(str , "%d" , i+1);
			outtextxy(startpoint_X-20 , startpoint_Y-7, str);
			line(startpoint_X , startpoint_Y  , startpoint_X+( girdLength*singleGirdSize-singleGirdSize) , startpoint_Y);  //线段画出屏幕会出错:什么也画不出来 
			startpoint_Y+=singleGirdSize;
		} 
		
		startpoint_Y = 100;  //重置起始点Y
		
		for(int i=0 ; i<15 ; i++)
		{
			sprintf(str , "%d" , i+1);
			outtextxy(startpoint_X-7, startpoint_Y-20 , str);
			line(startpoint_X , startpoint_Y  , startpoint_X , startpoint_Y+(girdLength*singleGirdSize-singleGirdSize) );
			startpoint_X+=singleGirdSize;
		} 
		
		
		/* 
		for(int i=0 ; i<15 ; i++)
		{
			for(int u=0 ; u<15 ; u++)
			{
				if(allchessman[i][u].message == 2) {}
				else
				{
					circle(allchessman[i][u].point_X , allchessman[i][u].point_Y , 20);
				}
			}
		}
		*/ 
			
	}//drawchessboard 
	
	
	
	
	void  playchess()
	{
		if(is_run()) delay_fps(10);
		int x ,y ; //接收落子的位置 
		int identity=1; // 标识黑方 白方身份   identity取余不为0 则是黑方
		
		do
		{
			cout<<"                           *************先输入竖列 再输入横列***************  "<<endl;
		 	black_entry(x ,y);
			if(is_run()) delay_fps(10);
		 	if(!win)
		 	{
		 		white_entry(x ,y);
		 	}
		 	system("cls");
		} while(!win);
		getch();
	}
	
	void black_entry(int &x , int &y)
	{
		//bool addchessman(int chessman_X , int chessman_Y , int message);
		cout<<"                           请黑方落子(您的棋子颜色是红色):"<<endl;
		cout<<"                           请输入横向位置:"<<endl;
		cout<<"                            ";
		cin>>x;
		cout<<"                           请输入纵向位置:"<<endl;
		cout<<"                            ";
		cin>>y; 	
	
		if( ! b.submit_chessman(x ,y) )
		{
			cout<<"                       输入位置超出棋盘大小或不合法,请重新输入"<<endl;
			black_entry(x ,y);
		}
		
		if( !addchessman(b.getChessman_X(), b.getChessman_Y() , b.getIdentity()) )
		{
			cout<<"                       落子失败! 该位置已有棋子或棋盘边界不能落子! 请重新输入~~~"<<endl; 
			black_entry( x ,y);
		}
		else
		{
			 if(bunko( b.getChessman_X(), b.getChessman_Y() , b.getIdentity()) )   
			 {
			 	setfont(50 , 0 ,"宋体");
			 	setfontbkcolor(GREEN);
			 	outtextxy(300 ,300 ,"黑方胜!");
			 	setfont(20 ,0 ,"宋体");
				outtextxy(300 ,750 ,"按任意键退出!"); 
			 	win = true;
			 }
		}
		cout<<"                           当前黑方落子总数:"<<b.getChessmanCount()<<endl;
		cout<<"                           当前白方落子总数:"<<w.getChessmanCount()<<endl;  
	}
	
	
	void white_entry(int &x , int &y)
	{
	//	bool addchessman(int chessman_X , int chessman_Y , int message);
		cout<<endl<<endl<<endl;
		cout<<"                          请白方落子(您的棋子颜色是白色):"<<endl;
		cout<<"                          请输入横向位置:"<<endl;
		cout<<"                            ";
		cin>>x;
		cout<<"                          请输入纵向位置:"<<endl;
		cout<<"                            ";
		cin>>y; 	
		
		if( ! w.submit_chessman(x ,y) )
		{
			cout<<"                      输入位置超出棋盘大小或不合法,请重新输入"<<endl;
			black_entry(x ,y);
		}
		
		if( !addchessman(w.getChessman_X() ,w.getChessman_Y() ,w.getIdentity()) )
		{
			cout<<"                     落子失败! 该位置已有棋子或棋盘边界不能落子! 请重新输入~~~"<<endl;
			white_entry(x ,y);
		}
		else
		{
			 if(bunko( w.getChessman_X(), w.getChessman_Y() , w.getIdentity()) )   
			 {
			 	setfont(50 , 0 ,"宋体");
			 	setfontbkcolor(LIGHTGRAY);
			 	outtextxy(300 ,300 ,"白方胜!");
			 	setfont(20 ,0 ,"宋体");
				outtextxy(300 ,720 ,"按任意键退出!"); 
			 	win = true;
			 }
		} 
	}
	
    bool bunko(int  x, int y  , int message) //判胜 
    {
        int xReturnZero =x;
        int yReturnZero =y; 
        int accumulative=0;  //用来记录黑方或白方累计连在一起的 棋子个数 
        
        //先以该子位置为基点,向上(X轴不动 ,Y轴反方向) 逐一判断
        while(allchessman[--x][y].message == message)
        {
            accumulative++;    
            //cout<<"累计的:"<<accumulative<<endl;
        } 
        /* 
        if(accumulative == 5)  
        {
            accumulative=0;  //重置计数为0 
            return true;
        }
        else
        {
            return false;
        }
        */ 
        x = xReturnZero;
        y = yReturnZero;
        //先以该子位置为基点 , 向下( X轴不动 , Y轴正方向) 逐一判断 
        while(allchessman[++x][y].message == message)
        {
            accumulative++;    
            //cout<<"累计的:"<<accumulative<<endl;
        } 
        
        if(accumulative == 5)  
        {
            accumulative=0;  //重置计数为0 
            return true;
        }
        else
        {
        //    return false;
        }
        
        x = xReturnZero;
        y = yReturnZero;
        //先以该子位置为基点 , 向左(Y轴不动 , X轴反方向) 逐一判断
        while(allchessman[x][--y].message == message)
        {
            accumulative++;    
            //cout<<"累计的:"<<accumulative<<endl;
        } 
        
        /*
        if(accumulative == 5)  
        {
            accumulative=0;  //重置计数为0 
            return true;
        }
        else
        {
            return false;
        }
        */
        x = xReturnZero;
        y = yReturnZero;
        //先以该子位置为基点, 向右(Y轴不动 , X轴正方向) 逐一判断
        while(allchessman[x][++y].message == message)
        {
            accumulative++;    
            //cout<<"累计的:"<<accumulative<<endl;
        } 
        
        if(accumulative == 5)  
        {
            accumulative=0;  //重置计数为0 
            return true;
        }
        else
        {
        //    return false;
        }
        
        x = xReturnZero;
        y = yReturnZero;
        //右下方
        while(allchessman[++x][++y].message == message)
        {
            accumulative++;    
            //cout<<"累计的:"<<accumulative<<endl;
        } 
        /* 
        if(accumulative == 5)  
        {
            accumulative=0;  //重置计数为0 
            return true;
        }
        else
        {
            return false;
        }  */ 
        
        x = xReturnZero;
        y = yReturnZero;
        //左上方
        while(allchessman[--x][--y].message == message)
        {
            accumulative++;    
            //cout<<"累计的:"<<accumulative<<endl;
        } 
        
        if(accumulative == 5)  
        {
            accumulative=0;  //重置计数为0 
            return true;
        }
        else
        {
            //return false;
        } 
        
        x = xReturnZero;
        y = yReturnZero;
        //右上方
        while(allchessman[--x][++y].message == message)
        {
            accumulative++;    
            //cout<<"累计的:"<<accumulative<<endl;
        } 
        /* 
        if(accumulative == 5)  
        {
            accumulative=0;  //重置计数为0 
            return true;
        }
        else
        {
            return false;
        }   */ 
        x = xReturnZero;
        y = yReturnZero;
        //左下方
        while(allchessman[++x][--y].message == message)
        {
            accumulative++;    
            //cout<<"累计的:"<<accumulative<<endl;
        } 
        
        if(accumulative == 5)  
        {
            accumulative=0;  //重置计数为0 
            return true;
        }
        else
        {
            return false;
        }  
    } 
    
    
    
    //要在界面上显示黑方已下棋子个数 
    //这个方法目前没有实现  , 实际运行有bug , 棋子数一直为初始值没有改变 , 所以没有用这个方法 
    char*  showBlackChessmanCount(black b)
    {
        char str[50];
        sprintf(str , "black role chessman count:%d" , b.getChessmanCount());
        return str;
    }
	
	
};

主函数运行:

#include<iostream>
#include"chessboard.h"
using namespace std;
int main()
{
    chessboard chman;
	chman.drawchessboard();
	chman.playchess();
}

用时两天,希望大家喜欢!


大一c语言课设--五子棋(基于easyx库) 首先是各类函数的声明//初始化(正在播放音乐菜单显示)//初始化(音乐暂停菜单显示)//绘制人机对战棋盘//绘制人人对战棋盘//绘制复盘时的棋盘//绘制棋子//悔棋时绘制棋子(去除了落子声音防止出现延迟)/*easyx库内xy轴是原点在左上角,x轴横向且向右为正,y轴竖向且向下为正。与二维数组行和列的对应关系是:x对应列,y对应行所以在下面落子以及之后的AI判断等等函数需要考虑这个关系*///判断是否有棋子,给数组赋值然后落子//复盘时给数组赋值。 阅读详情

相关推荐

基于EGE图形库的C++五子棋人机对战游戏开发实战

在实际开发中,我们通常使用int类型来表示每个格点的状态,通过枚举值映射不同含义。定义如下:该声明创建了一个大小为15×15的整型二维数组,共包含225个元素。初始状态下,所有格点应为空位,即未被任何玩家占据。因此,在程序启动或新局开始时必须进行清零操作。标准做法如下:EMPTY = 0,BLACK = 1,WHITE = 2随后将原改为:初始化时仍可用,因为EMPTY=0。但更推荐使用显式赋值:++i) {++j) {优势在于类型安全与可读性增强。

weixin_31459297的博客 477

利用DevC++和EGE图形库写出一款C语言飞机大战小游戏

利用DevC++和EGE图形库写出一款C语言飞机大战小游戏

qq_66026801的博客 6690

C++五子棋双人对战版:我是单脚站立的稻草人 V1.0 BETA

在本章中,我们将开启一个激动人心的项目——使用C++开发一款五子棋双人对战游戏。C++是一种高效、灵活且强大的编程语言,非常适合用来创建游戏,特别是像五子棋这样的策略型游戏。我们的目标不仅仅是创建一个可玩的游戏,还要通过这个项目深入理解游戏开发的各个方面,包括图形用户界面(GUI)设计、游戏逻辑的实现、事件处理机制以及AI算法的研究。EGE图形库(Enhanced Game Engine)是一个为快速开发游戏和图形应用程序而设计的开源库。其最大的特点是拥有简洁的API和较高的运行效率。

weixin_35972981的博客 692

基于ege图形库实现的五子棋小游戏

1、问题要求及任务描述 1.1 问题要求 利用ege库实现一个五子棋游戏。 1.2 任务描述 能实现人人对战 能实现人机对战 2、解决问题的主要思路和方法 2.1 函数实现 点击此处下载文档和源码 ...

demongwc的博客 1667

Dev c 飞机小游戏(ege库).rar

程序设计课的作业,把自己写的部分改了改

c+ege图形库小游戏吃豆子

c语言+ege图形库

C语言——EGE入门图形库实现经典魔塔游戏

个人博客地址:https://www.jdassd.top 该游戏的制作有一些疏漏的地方,目前发现以下几处: 在某些情况下,怪物可能会出现打不死但能够进入决斗界面的问题。 上下楼梯口楼层转换时又回到该楼层或两楼层互相转换的问题。(实际是缓冲区问题) 在某些情况下,人物打怪会出现血量上升的问题。 (如有发现其他问题请在评论区留言,谢谢!) 游戏内容说明: 该游戏内容完全复制于经典魔塔......

jdassd的博客 9531

基于ege图形库的炫酷飞机大战源代码及图片素材.7z

基于ege图形库,用vs2019写的一个飞机大战,键盘操作,可以开火和变身强化,有大招技能,打不过还有充值系统,不充钱还有惩罚(╹ڡ╹ ),运行需要vc运行库需要vc运行库!!!使用代码记得去ege官网下载合适的ege。

ege函数库_基于c++ ege图形库实现五子棋游戏

本文分享的五子棋实例,制作基于ege图像库, 首先需要安装配置ege环境 就可以编写小游戏了. 用到的ege库函数不多 , 主要是基于c++的.先看界面效果:输入界面:(就是控制台)游戏胜利界面:文档如下:关于五子棋的构思:实现人人对战的五子棋游戏.使用面向对象的c++ 和 ege库实现.ege的安装过程不在说明 , 在添加编译链接时去掉 -mwindows 选项.dev c++ 的运行环境设置为...

weixin_39648430的博客 1309

ege实现小游戏maincpp

ege小游戏,用于借鉴和参考游戏开发,游戏内容是黑塔,一个以前很火的游戏

基于EGE图形库的c语言版推箱子游戏

精简版,适合初学者。 EGE安装可直接百度。

基于c++EGE图形库编写的五子棋小游戏

一个基于c++EGE图形库编写的五子棋小游戏

一起学习,一起进步 4155

C语言实现2048游戏(ege图形库版)

主要为大家详细介绍了C语言实现2048游戏,ege图形库版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

基于EGE的C++五子棋人对人小游戏

基于EGE的C++五子棋人对人小游戏 去发现同类优质开源项目:https://gitcode.com/ 项目简介 欢迎来到基于C++语言和EGE(Embedded Graphics Engine)图形库的小型五子棋游戏项目。本项目旨在提供一个简易、直观的人对人对弈平台,让玩家能够在命令行或简单的图形界面中体验五子棋的乐趣。通过此项目,开发者可以学习到如何使用EGE库进行图形界面的开发,以及实现基本...

gitblog_09785的博客 345

从零组装一台会‘看’的无人机:手把手教你配置NUC机载电脑与D435深度相机(环境搭建篇)

本文详细介绍了如何从零开始组装一台具备视觉能力的智能无人机,重点讲解了NUC机载电脑与D435深度相机的配置方法。通过Ubuntu系统安装、ROS环境搭建、深度学习框架配置等步骤,帮助开发者实现无人机的自主避障和目标跟踪功能。文章还提供了性能优化和常见问题解决方案,是无人机视觉系统开发的实用指南。

weixin_30915275的博客 396

汽车诊断服务(UDS——0x11服务解析)

ECU复位服务(0x11)详解:该服务支持硬件/钥匙开关/软件三种复位类型(0x01-0x03),复位前需发送肯定响应。请求格式为11+子功能,响应含51+子功能。典型应用需配合安全访问流程,测试时需监控CAN总线通信及DTC状态。复位后ECU将返回默认会话,期间不处理任何诊断请求。服务在编程会话且安全解锁后执行,硬复位会初始化存储数据。

从事汽车行业 978

探索趣味编程:基于EGE的C++五子棋之旅

探索趣味编程:基于EGE的C++五子棋之旅 去发现同类优质开源项目:https://gitcode.com/ 随着近年来编程与游戏的完美融合,越来越多的开发者开始探索既实用又有趣的项目来提升技能。今日,我们就将目光聚焦在一个特别的小项目上——基于C++及EGE图形库的五子棋人对人小游戏。这款小工具不仅为玩家提供了简明愉快的对弈体验,同时也是初学者了解C++和图形界面开发的绝佳入口。 ???? 项目深入解...

gitblog_09753的博客 458

机械臂电机力矩计算

设计 6 轴机械臂时,电机力矩计算是确保机械臂负载能力、运动精度和安全性的核心环节,需围绕和两大核心展开,结合机械臂结构参数(如关节长度、质量分布)、负载需求(如末端负载重量、惯性)和运动参数(如加速度、角速度)逐步推导。

ZPC8210的博客 1856

使用EGE图形库写的五子棋小游戏,含简单人机对战功能

学完C语言后用ege写的一个五子棋小游戏,包含双人对战和人机对战,可以自动判定哪方获胜。需要说明的是,这里的人机对战只是采用对特定棋型进行评分的方式进行的自动下棋,并不是很智能,确实是能力不够hhh。需要提前配置ege环境,如果嫌配置麻烦的话,十分推荐使用小熊猫c++编辑器。插入不了视频,不好演示。

aimi135的博客 343

system_stm32f10x.c文件分析

配置系统时钟(包括系统时钟源、锁相环(PLL)倍频系数、高级高性能总线(AHB)/ 高级外设总线(APBx)预分频器以及闪存相关设置)。该函数在系统复位后的启动阶段被调用,且调用时机早于跳转到主程序之前。

Jia shuheng的博客 599

手把手教你做基于stm32的红外、语音、按键智能灯光控制(上)

这次项目使用的板子是stm32f103c8t6最小系统板,这个板子在tb上都能够买到,随便一个最小系统板都可以,== 注意在买最小系统板的时候需要买一个stlink下载器来下载程序。显示模块是使用的0.96英寸的OLED屏幕,注意是使用的IIC通信协议的OLED屏幕,不是使用SPI总线协议的。这次写的代码还顺便集成了检测温湿度的功能,所以要使用DHT11温湿度传感器,来采集温度。本文所设计的基于单片机的灯光控制系统主要由模式选择功能、手动模式和自动模式组成。LED灯自然就是要控制的部件了。

nbbskk的博客 6556

c++之五子棋(附ege库安装教程)

4. 配置开发环境:如果您使用的是Code::Blocks等IDE,您需要将ege库的include目录添加到IDE的编译选项中。打开Code::Blocks,点击“设置”->“编译器和调试器”->“搜索目录”,在“编译器”的“附加编译器标志”中添加`-I<ege库的include目录>`。打开计算机的属性设置,点击“高级系统设置”,在弹出的窗口中点击“环境变量”,找到系统变量中的“Path”,点击“编辑”,将ege库的bin目录路径添加到Path变量的末尾。1. 下载ege库:您可以从ege官方网站(

文宇的博客 974

机器学习-深嵌交叉验证(Nested Cross-Validation)

Section I: Code and Analyses 第一部分:代码 from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from...

Santorinisu Blogs 2714

EGE小游戏【预告】

开局会有提示,按ESC开始第二盘,WASD和上下左右键均可控制移动,且红色方块(玩家)不会出现在右下角(出口),到达出口后可自动通往下一关,按Enter键搜索答案,按空格键显示/隐藏答案,按T键可以切换线/方框模式,按0/1键增加/减少迷宫难度。国际象棋(598行),中国象棋(663行),五子棋(201行),围棋(555行),直线碰撞(312行),走迷宫(521行)这一期文章仅仅作为一个预告,以后我会详细讲解TA们的代码和思路,注:文章有可能不会给出源代码,因为编程在于自己。BUG:目前无BUG。

2401_82353457的博客 276

目标检测: yolo26在RK3588上部署

YOLO26发布:端到端目标检测新突破 摘要:Ultralytics最新发布的YOLO26算法采用原生端到端设计,无需NMS后处理,显著提升推理效率。该模型基于三大核心原则: 简洁性:消除NMS步骤,实现直接预测 部署效率:简化集成流程,降低延迟 训练创新:引入MuSGD混合优化器,加速收敛 部署教程显示,YOLO26可适配RK3588等边缘设备,通过ONNX转换和RKNN工具链实现高效部署。其创新架构特别优化了分割、姿态估计等专业任务,标志着目标检测技术的重要革新。 (字数:149)

qianxun 1442

全景相机APP

以下是一款**全景相机APP**的完整源码,支持全景照片拍摄(多帧拼接)、全景预览、鱼眼矫正、图片保存/分享、360°全景查看等核心功能,基于Android原生Camera2 API(替代过时的Camera API) + OpenCV(图像拼接) + GLSurfaceView(全景预览)实现,适配Android 8.0+设备,可直接编译运行。runOnUiThread(() -> tvFrameCount.setText("已拍摄:" + frameCount + "帧"));// X轴旋转(上下)

寒寒豆豆软件公司的博客 179
上一篇: c++知识点总结
下一篇: c++知识点总结(2)
libingbojava
博客等级 码龄9年 64粉丝 111原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值