当前位置: 首页 > news >正文

贵阳网站seowordpress开发用什么软件

贵阳网站seo,wordpress开发用什么软件,网站设计制作报价图片,成都关键词优化一、前言 前面我们学习了SimpleCG的游戏开发框架,从本篇开始,我们用一系列小游戏的开发来加深对框架的了解.我们先以windows的经典游戏--扫雷,作为首个例子。游戏预览如下 二、框架搭建 因为游戏程序的大体框架差不多#xff0c;所以我们可以搭建一个通用的主程序。如下所示所以我们可以搭建一个通用的主程序。如下所示 // GameMine.cpp : 定义控制台应用程序的入口点。 //#include ../import/include/SimpleCG.h#define C_IMAGE_WIDTH 640 #define C_IMAGE_HEIGHT 480#ifdef _DEBUG #pragma comment(lib,../import/lib/SimpleCG_MDd.lib) #else #ifdef _WIN64 #pragma comment(lib,../import/lib/x64/MTRelease/SimpleCG_MT64.lib) #else #pragma comment(lib,../import/lib/SimpleCG_MT.lib) #endif #endifLRESULT OnKeyDown(HWND hWnd, WPARAM wParam, LPARAM lParam);//绘制游戏 void RenderGame() {} //更新游戏状态 void UpdateGame( UINT nElapse ) {static int s_nLastTick 0;if( ( nElapse - s_nLastTick )120 )return;s_nLastTick nElapse;} //按键消息响应函数 LRESULT OnKeyDown(HWND hWnd, WPARAM wParam, LPARAM lParam) {switch( wParam ){case VK_SPACE:break;case VK_UP:break;case VK_DOWN:break;case VK_LEFT:break;case VK_RIGHT:break;}return 0; } LRESULT OnLButtonDown( HWND hWnd, WPARAM wParam, int nX, int nY ) {return false; } LRESULT OnLButtonUp( HWND hWnd, WPARAM wParam, int nX, int nY ) {return false; } LRESULT OnRButtonDown( HWND hWnd, WPARAM wParam, int nX, int nY ) {return false; } LRESULT OnRButtonUp( HWND hWnd, WPARAM wParam, int nX, int nY ) {return false; } LRESULT OnMouseMove( HWND hWnd, WPARAM wParam, int nX, int nY ) {return false; } //初始化游戏 void InitGame(HWND hWnd) {int i0;int j0;srand(GetTickCount());GetKeyboardInput()-onKeyDown OnKeyDown;GetMouseInput()-onMouseDownLeft OnLButtonDown;GetMouseInput()-onMouseDownRight OnRButtonDown;GetMouseInput()-onMouseUpLeft OnLButtonUp;GetMouseInput()-onMouseUpRight OnRButtonUp;GetMouseInput()-onMouseMove OnMouseMove; }int _tmain(int argc, _TCHAR* argv[]) {SCG_GameLoopInfo info;info.nFPS 60;info.nHeight C_IMAGE_BLOCK*g_nMapHeightC_IMAGE_BLOCK;//C_IMAGE_HEIGHT;info.nWidth C_IMAGE_BLOCK*g_nMapWidth;//C_IMAGE_WIDTH;info.pFunDrawProcess RenderGame;info.pFunFrameUpdate UpdateGame;info.pFunInitGame InitGame;info.pFunInput NULL;if( !StartGameLoopEx( info ))return 1;return 0; }这个框架基本上就是前面文章所介绍的游戏开发框架。然后有了这个主框架我们根据我们要开发的扫雷游戏我们分别建立游戏逻辑的实现文件mine.cpp以及头文件mine.h文件。在这两个文件中我们实现扫雷的相关逻辑然后再把相关代码接入主程序即可。 三、游戏逻辑实现mine.cpp及mine.h文件 mine.h头文件 #ifndef _MINE_H #define _MINE_H#include ../import/include/SimpleCG.h #define C_IMAGE_BLOCK 20 enum ENUM_MAPTYPE {enumMAPTYPE_BACK, enumMAPTYPE_OPEN, enumMAPTYPE_BACKLIGHT, enumMAPTYPE_BACKDOWN }; enum ENUM_MAPFLAG {enumMAPFLAG_NULL, enumMAPFLAG_FLAG, enumMAPFLAG_QUESTION }; enum ENUM_MAPTEXT {enumMAPTEXT_NULL, enumMAPTEXT_NUMBER1, enumMAPTEXT_NUMBER2, enumMAPTEXT_NUMBER3, enumMAPTEXT_NUMBER4, enumMAPTEXT_NUMBER5, enumMAPTEXT_NUMBER6, enumMAPTEXT_NUMBER7, enumMAPTEXT_NUMBER8, enumMAPTEXT_NUMBER9, enumMAPTEXT_BOMB };extern int g_nMapWidth; extern int g_nMapHeight; //绘制内容 void Init( int nBomb, int nX, int nY ); //计算炸弹数量 int CalBoombCount( int nX, int nY ); //绘制内容 void DrawMap( ); //绘制界面 void DrawUI( ); //绘制单个方块绝对坐标 void DrawBlockPos( int nX, int nY, int nType ); //绘制单个方块 void DrawBlock( int nX, int nY, int nType ); //是否在地图上 bool IsOnMap( int nX, int nY ); //坐标转化 int ScreenToMapX( int nX ); int ScreenToMapY( int nY ); //鼠标消息 LRESULT MapOnLButtonDown( WPARAM wParam, int nX, int nY ); LRESULT MapOnLButtonUp( WPARAM wParam, int nX, int nY ); LRESULT MapOnRButtonDown( WPARAM wParam, int nX, int nY ); LRESULT MapOnRButtonUp( WPARAM wParam, int nX, int nY ); LRESULT MapOnMouseMove( WPARAM wParam, int nX, int nY ); //打开操作 void DoOpen( int nX, int nY ); //设置标记 void SetFlag( int nX, int nY, int nFlag ); //设置标记 void AddFlag( int nX, int nY ); #endif mine.cpp实现文件 /**\ |简介 扫雷 |功能 扫雷 |作者 Bill |主页: http://simplecg.qqpet.com |博客: https://blog.csdn.net/b2b160 |贴吧: https://tieba.baidu.com/f?kwsimplecg |日期 2023-09-15 \**/ #include Mine.hint g_nMapWidth 9; int g_nMapHeight 9; int g_nMap[ 10 * 10] {0}; int g_nMapText[ 10 * 10] {0}; int g_nXMapPos 0; int g_nYMapPos C_IMAGE_BLOCK; int g_nBomb 10; int g_nLeftBomb g_nBomb;int g_nCurX -1; int g_nCurY -1;int g_nCurDownX -1; int g_nCurDownY -1; int g_nOpended 0; UINT g_nStartTime 0; UINT g_nGameRunning 0; //绘制内容 void Init( int nBomb, int nX, int nY ) {int i0;int j0;memset(g_nMap,0, sizeof(g_nMapText));memset(g_nMapText,0, sizeof(g_nMapText));int nTotal nX*nY;if( nBombnTotal )nBomb nTotal;g_nBomb nBomb;g_nLeftBomb g_nBomb;g_nMapWidth nX;g_nMapHeight nY;g_nOpended 0;for(i0;inBomb;i){int nBombIndex rand() % (nX*nY);if( g_nMapText[nBombIndex]!enumMAPTEXT_BOMB){g_nMapText[nBombIndex]enumMAPTEXT_BOMB;}else{int nStop nBombIndex;while( nBombIndex ! nStop ){if( g_nMapText[nBombIndex]!enumMAPTEXT_BOMB ){g_nMapText[nBombIndex]enumMAPTEXT_BOMB;break;}nBombIndex;if(nBombIndexnTotal )nBombIndex 0;}}}for(j0;jg_nMapHeight;j){for(i0;ig_nMapWidth;i){g_nMap[j*g_nMapWidthi]enumMAPTYPE_BACK;if(g_nMapText[j*g_nMapWidthi] ! enumMAPTEXT_BOMB )g_nMapText[j*g_nMapWidthi]CalBoombCount(i,j);}}g_nStartTime GetTickCount();g_nGameRunning TRUE; } //计算炸弹数量 int IsBoomb( int nX, int nY ) {if( nX0 || nXg_nMapWidth )return 0;if( nY0 || nYg_nMapHeight )return 0;if( g_nMapText[nY*g_nMapWidthnX]enumMAPTEXT_BOMB )return 1;return 0; } //计算炸弹数量 int CalBoombCount( int nX, int nY ) {int nCount 0;if( IsBoomb(nX-1,nY-1 ) )nCount;if( IsBoomb(nX,nY-1 ) )nCount;if( IsBoomb(nX1,nY-1 ) )nCount;if( IsBoomb(nX-1,nY ) )nCount;if( IsBoomb(nX1,nY ) )nCount;if( IsBoomb(nX-1,nY1 ) )nCount;if( IsBoomb(nX,nY1 ) )nCount;if( IsBoomb(nX1,nY1 ) )nCount;return nCount; } //绘制内容 void DrawOpen( int nX, int nY ) {static COLORREF s_nColor[3]{RGB(200,0x0,0x0),RGB(0x0,0x0,200),RGB(22,122,11)};int nXPos g_nXMapPos nX*C_IMAGE_BLOCK;int nYPos g_nYMapPos nY*C_IMAGE_BLOCK;settextcolor(s_nColor[g_nMapText[nY*g_nMapWidthnX]%3]);if( g_nMapText[nY*g_nMapWidthnX]enumMAPTEXT_BOMB)printfRectEx( nXPos, nYPos, C_IMAGE_BLOCK, C_IMAGE_BLOCK, DT_CENTER, _T(X));else if(g_nMapText[nY*g_nMapWidthnX]0)printfRectEx( nXPos, nYPos, C_IMAGE_BLOCK, C_IMAGE_BLOCK, DT_CENTER, _T(%d), g_nMapText[nY*g_nMapWidthnX]); } //绘制内容 void DrawMap( ) {int i0;int j0;for(j0;jg_nMapHeight;j){for(i0;ig_nMapWidth;i){switch( g_nMap[j*g_nMapWidthi] 0xFFFF ){case enumMAPTYPE_OPEN:DrawBlock( i, j, g_nMap[j*g_nMapWidthi] );DrawOpen( i, j );break;case enumMAPTYPE_BACK:if( g_nCurDownXi g_nCurDownYj )DrawBlock( i, j, enumMAPTYPE_BACKDOWN);else if( g_nCurXi g_nCurYj )DrawBlock( i, j, enumMAPTYPE_BACKLIGHT | (g_nMap[j*g_nMapWidthi]0xFFFF0000) );elseDrawBlock( i, j, g_nMap[j*g_nMapWidthi] );break;}}} } //绘制界面 void DrawUI( ) {int nOld;if( FALSE g_nGameRunning )return;UINT nTime GetTickCount()-g_nStartTime;clearrectangle(g_nXMapPos, g_nYMapPos-C_IMAGE_BLOCK, g_nXMapPos C_IMAGE_BLOCK*g_nMapWidth, g_nYMapPos);nOld settextcolor(SCG_RGB(0,0,0xFF));printfRectEx( g_nXMapPos, g_nYMapPos-C_IMAGE_BLOCK, C_IMAGE_BLOCK*g_nMapWidth, C_IMAGE_BLOCK, DT_VCENTER, _T(时间%d.%d), nTime/1000,nTime%1000);printfRectEx( g_nXMapPos, g_nYMapPos-C_IMAGE_BLOCK, C_IMAGE_BLOCK*g_nMapWidth, C_IMAGE_BLOCK, DT_RIGHT|DT_VCENTER, _T(炸%d), g_nLeftBomb);settextcolor(nOld); } //绘制单个方块绝对坐标 void DrawBlockPos( int nX, int nY, int nType ) {int nFlag (nType16) 0xFFFF;switch( nType 0xFFFF ){case enumMAPTYPE_OPEN:setlinewidth(1);setfillcolor(RGB(194,194,194));setlinecolor(RGB(125,125,125));fillrectangle( nX, nY, nX C_IMAGE_BLOCK, nY C_IMAGE_BLOCK);break;case enumMAPTYPE_BACK:setlinewidth(3);setfillcolor(RGB(194,194,194));setlinecolor(RGB(125,125,125));fillrectangle( nX1, nY1, nX C_IMAGE_BLOCK-1, nY C_IMAGE_BLOCK-1);setlinecolor(RGB(231,231,231));line(nX2, nY1, nX-3 C_IMAGE_BLOCK,nY1);line(nX1, nY2, nX1,nY-3 C_IMAGE_BLOCK);break;case enumMAPTYPE_BACKDOWN:setlinewidth(1);setfillcolor(RGB(194,194,194));setlinecolor(RGB(125,125,125));fillrectangle( nX, nY, nX C_IMAGE_BLOCK, nY C_IMAGE_BLOCK);break;case enumMAPTYPE_BACKLIGHT:setlinewidth(3);setfillcolor(RGB(221,221,221));setlinecolor(RGB(125,125,125));fillrectangle( nX1, nY1, nX C_IMAGE_BLOCK-1, nY C_IMAGE_BLOCK-1);setlinecolor(RGB(231,231,231));line(nX2, nY1, nX-3 C_IMAGE_BLOCK,nY1);line(nX1, nY2, nX1,nY-3 C_IMAGE_BLOCK);break;}if( nFlag ){switch( nFlag ){case enumMAPFLAG_FLAG:{POINT pt[]{{nX14,nY2},{nX6,nY12},{nX14,nY12}};setlinewidth(1);setfillcolor(RGB(255,0,0));solidpolygon( pt, sizeof(pt)/sizeof(pt[0]) );setfillcolor(0);solidrectangle( nX13, nY4, nX 16, nY C_IMAGE_BLOCK-1);}break;case enumMAPFLAG_QUESTION:settextcolor(0);printfRectEx( nX, nY, C_IMAGE_BLOCK, C_IMAGE_BLOCK, DT_CENTER, _T(?));break;}} } //绘制单个方块,地图坐标 void DrawBlock( int nX, int nY, int nType ) {int nXPos g_nXMapPos nX*C_IMAGE_BLOCK;int nYPos g_nYMapPos nY*C_IMAGE_BLOCK;DrawBlockPos(nXPos, nYPos, nType); } //是否在地图上 bool IsOnMap( int nX, int nY ) {if(nXg_nXMapPos nXg_nXMapPos g_nMapWidth*C_IMAGE_BLOCK nYg_nYMapPos nYg_nYMapPos g_nMapHeight*C_IMAGE_BLOCK )return true;return false; } //坐标转化 int ScreenToMapX( int nX ) {int nRet -1;if(nXg_nXMapPos nXg_nXMapPos g_nMapWidth*C_IMAGE_BLOCK ){nRet ( nX-g_nXMapPos)/C_IMAGE_BLOCK;}return nRet; } int ScreenToMapY( int nY ) {int nRet -1;if(nYg_nYMapPos nYg_nYMapPos g_nMapHeight*C_IMAGE_BLOCK ){nRet ( nY-g_nYMapPos)/C_IMAGE_BLOCK;}return nRet; } //鼠标消息 LRESULT MapOnLButtonDown( WPARAM wParam, int nX, int nY ) {int nMapX ScreenToMapX(nX);int nMapY ScreenToMapY(nY);if( g_nCurDownX ! nMapX || g_nCurDownY ! nMapY ){ g_nCurDownX nMapX;g_nCurDownY nMapY;return true;}return false; } LRESULT MapOnLButtonUp( WPARAM wParam, int nX, int nY ) {if( g_nCurDownX 0 g_nCurDownXg_nMapWidth g_nCurDownY 0 g_nCurDownYg_nMapHeight){DoOpen( g_nCurDownX, g_nCurDownY );g_nCurDownX -1;g_nCurDownY -1;return true;}return false; } LRESULT MapOnRButtonDown( WPARAM wParam, int nX, int nY ) {return false; } LRESULT MapOnRButtonUp( WPARAM wParam, int nX, int nY ) {int nMapX ScreenToMapX(nX);int nMapY ScreenToMapY(nY);AddFlag( nMapX, nMapY );return false; } LRESULT MapOnMouseMove( WPARAM wParam, int nX, int nY ) {int nMapX ScreenToMapX(nX);int nMapY ScreenToMapY(nY);if( g_nCurX ! nMapX || g_nCurY ! nMapY ){g_nCurX nMapX;g_nCurY nMapY;return true;}return false; } void MarkOpen(int nX, int nY) {g_nMap[nY*g_nMapWidthnX] enumMAPTYPE_OPEN;g_nOpended;if(g_nOpendedg_nMapWidth*g_nMapHeight-g_nBomb){TCHAR pText[256];UINT nTime GetTickCount()-g_nStartTime;wsprintf(pText, _T(You Win!用时%d.%d秒!是否重新开始), nTime/1000,nTime%1000);if( MessageBox(NULL,pText,_T(),MB_YESNO) IDYES )Init(g_nBomb, g_nMapWidth, g_nMapHeight);elseg_nGameRunning FALSE;} } //打开操作 void DoOpenLoop( int nX, int nY ) {if(g_nMap[nY*g_nMapWidthnX] enumMAPTYPE_OPEN)return;MarkOpen(nX, nY);int i0;int j0;for(j-1;j1;j){for(i-1;i1;i){if((inX)0||(inX)g_nMapWidth)continue;if((jnY)0||(jnY)g_nMapHeight)continue;if(g_nMap[(jnY)*g_nMapWidth(inX)] enumMAPTYPE_BACK){if(g_nMapText[(jnY)*g_nMapWidth(inX)] enumMAPTEXT_NULL){DoOpenLoop( inX, jnY );}else if(g_nMapText[(jnY)*g_nMapWidth(inX)] ! enumMAPTEXT_BOMB){MarkOpen(inX, (jnY));}}}} } void DoOpen( int nX, int nY ) {if(g_nMapText[nY*g_nMapWidthnX] enumMAPTEXT_BOMB ){g_nMap[nY*g_nMapWidthnX] enumMAPTYPE_OPEN;if( MessageBox(NULL,_T(游戏结束是否重新开始),_T(),MB_YESNO) IDYES ){Init(g_nBomb, g_nMapWidth, g_nMapHeight);return;}else{g_nGameRunning FALSE;return;}}else if(g_nMapText[nY*g_nMapWidthnX] enumMAPTEXT_NULL){DoOpenLoop( nX, nY );}if(g_nMap[nY*g_nMapWidthnX] ! enumMAPTYPE_OPEN ){MarkOpen(nX, nY);} } //设置标记 void SetFlag( int nX, int nY, int nFlag ) {int nOld g_nMap[nY*g_nMapWidthnX];g_nMap[nY*g_nMapWidthnX] (nOld 0xFFFF) | (nFlag16); } //设置标记 void AddFlag( int nX, int nY ) {if((g_nMap[nY*g_nMapWidthnX] 0xFFFF)enumMAPTYPE_OPEN)return;int nOld g_nMap[nY*g_nMapWidthnX];int nOldFlag (nOld16)0xFFFF;nOldFlag;if(nOldFlag enumMAPFLAG_FLAG )--g_nLeftBomb;else if(nOldFlag enumMAPFLAG_QUESTION )g_nLeftBomb;if(nOldFlagenumMAPFLAG_QUESTION){nOldFlag 0;}g_nMap[nY*g_nMapWidthnX] (nOld 0xFFFF) | (nOldFlag16); } 四、逻辑接入主程序 在主程序中做以下几个修改就将扫雷的逻辑接入主程序并将画面展现出来同时接收用户的输入操作并反应。首先当然是包含逻辑头文件Mine.h #include Mine.h 然后绘制画面 //绘制游戏 void RenderGame() {setbackmode(enumBKM_TRANSPARENT);DrawMap();setbackmode(enumBKM_OPAQUE);//绘制界面DrawUI( ); } 我们没有在更新函数中做任何更新所以不需要改变UpdateGame 然后在鼠标输入操作中我们需要判断是否在地图上并根据输入进行状态改变 LRESULT OnLButtonDown( HWND hWnd, WPARAM wParam, int nX, int nY ) {if( IsOnMap(nX,nY))return MapOnLButtonDown( wParam, nX, nY );return false; } LRESULT OnLButtonUp( HWND hWnd, WPARAM wParam, int nX, int nY ) {if( IsOnMap(nX,nY))return MapOnLButtonUp( wParam, nX, nY );return false; } LRESULT OnRButtonDown( HWND hWnd, WPARAM wParam, int nX, int nY ) {if( IsOnMap(nX,nY))return MapOnRButtonDown( wParam, nX, nY );return false; } LRESULT OnRButtonUp( HWND hWnd, WPARAM wParam, int nX, int nY ) {if( IsOnMap(nX,nY))return MapOnRButtonUp( wParam, nX, nY );return false; } LRESULT OnMouseMove( HWND hWnd, WPARAM wParam, int nX, int nY ) {if( IsOnMap(nX,nY))return MapOnMouseMove( wParam, nX, nY );return false; } 最后在初始化阶段进行游戏初始化即可此处初始化10个炸弹9x9地图 Init( 10, 9, 9 ); 四、代码下载 所有代码可在以下地址察看或下载 gamemine · master · b2b160 / SimpleCG_Demo · GitCode 编译此程序需安装SimpleCG库安装方法如下  SimpleCG库安装方法 如果只想执行程序可在如下地址下载 扫雷exe压缩文件
http://www.zqtcl.cn/news/142178/

相关文章:

  • 德阳网站优化网络顾问
  • 大淘客可以做几个网站hm网上商城
  • 网站建设分配人员方案呼市网站制作招聘
  • 电商网站建设方案100例用什么做php网站
  • 网站开发设计课程教案南宁网站建设招聘
  • 常州微信网站建设wordpress 中英主题
  • 新零售型网站开发网络营销常用的工具和方法
  • 陕西省建设监理协会网站证书网站建设去哪里找客户
  • 上海网站注销吗如何在wordpress上调用百度地图
  • 网站设计与开发实例网站semseo先做哪个
  • 一个网站做3个关键词够找人建设一个网站多少钱
  • 网站群软件阿里云虚拟主机wordpress
  • 自己做个网站要多少钱温州网站开发平台
  • 北京鑫创网站建设找个网站你知道的
  • 做网站找客户电子商务网站开发与管理
  • 宝安高端网站设计怎么样qq钓鱼网站怎么制作
  • 学习教建网站公众号小程序怎么注销
  • 网站建设或网站优化排名做建筑设计网站
  • 外贸seo外贸推广外贸网站建设外贸网站建设用图片设置网站首页
  • 网站模板安装出入成都通知今天
  • wordpress网站 添加微信网站设计O2O平台佛山总代理
  • 广州网站开发定制方案网站建设应该考虑哪些方面
  • 在线网站建设培训门户类网站图片
  • 佛山乐从网站建设自媒体平台收益排行榜
  • 网站建设项目需求陕西陕煤建设集团有限公司网站
  • 鼓楼网站开发永州做网站tuantaogou
  • ui网站建设站评价文山建设5G网站
  • 深圳 网站设计公司企业网络搭建教程
  • 做网站策划遇到的问题全网营销型网站模版
  • 网站建设费属于无形资产吗广州高铁新建站在哪里