cocos2d-x游戏开发系列教程-中国象棋04-摆棋

2024-02-28 19:59

本文主要是介绍cocos2d-x游戏开发系列教程-中国象棋04-摆棋,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

前情回顾

在之前的学习中,我们已经了解到,下棋主界面是由CCMainMenu类实现的,在它的init函数中,初始化了

主界面需要的各种数据,包括:创建控件,初始化32个棋子,初始化执行变量等等,在这个博文中,我们

主要来学习,32个棋子是如何被初始化并显示在界面上的。这个显示和initCoordinate以及

了解32个棋子显示在界面的目的,是为了让大家更好理解32个棋子的数据结构,这些数据结构在当棋子走动

时,需要改动,所以必须要理解。


initCoordinate

void CCMainMenu::initCoordinate(){ /*std::string str = "../coordinate.txt"; std::ofstream f_output; f_output.open(str.c_str(), std::ios::app);*/ float xSpan  = 48.0f*0.667ffloat ySpan  = 32.0f*0.6ffloat xStart = 1float yStart = xSpan; for (int i = 0, x = 9; i < 10; ++i, --x) {  for (int j = 0, y = 1; j < 9; ++j, ++y)  {   g_chess_coord[i][j] = ccp(xStart + xSpan*y, yStart*x + ySpan);  // 计算象棋坐标点的坐标,把象棋坐标转化成view坐标   /*f_output<< "[" << i << "][" << j <<"]: (" << xStart + xSpan*y << ", " << yStart*x + ySpan << ")" << " ";   if(j == 4 || j == 8)   {    f_output<<std::endl;   }*/  }  /*f_output<<std::endl;*/ } /*f_output.close();*/}

这个函数功能是将象棋的坐标转化成屏幕坐标,并保存在g_chess_coord中。有了这些坐标,为后面的摆棋工作打下基础。

initListImage

initListImage函数,初始化了32个棋子的位置,代码的逻辑很简单,就是调用32次getListSprite,获得32个棋子精灵并保存在m_pChess中

然后调用initChessPosition去设置32个棋子的位置,代码在MainMenu.cpp中

void CCMainMenu::initListImage(){ // red m_pChess[1][0] = this->getListSprite(CHESS_RK); this->addChild(m_pChess[1][0], 0); m_pChess[1][1] = this->getListSprite(CHESS_RA); this->addChild(m_pChess[1][1], 0); m_pChess[1][2] = this->getListSprite(CHESS_RA); this->addChild(m_pChess[1][2], 0); m_pChess[1][3] = this->getListSprite(CHESS_RB); this->addChild(m_pChess[1][3], 0); m_pChess[1][4] = this->getListSprite(CHESS_RB); this->addChild(m_pChess[1][4], 0); m_pChess[1][5] = this->getListSprite(CHESS_RN); this->addChild(m_pChess[1][5], 0); m_pChess[1][6] = this->getListSprite(CHESS_RN); this->addChild(m_pChess[1][6], 0); m_pChess[1][7] = this->getListSprite(CHESS_RR); this->addChild(m_pChess[1][7], 0); m_pChess[1][8] = this->getListSprite(CHESS_RR); this->addChild(m_pChess[1][8], 0); m_pChess[1][9] = this->getListSprite(CHESS_RC); this->addChild(m_pChess[1][9], 0);  m_pChess[1][10] = this->getListSprite(CHESS_RC); this->addChild(m_pChess[1][10], 0); m_pChess[1][11] = this->getListSprite(CHESS_RP); this->addChild(m_pChess[1][11], 0); m_pChess[1][12] = this->getListSprite(CHESS_RP); this->addChild(m_pChess[1][12], 0); m_pChess[1][13] = this->getListSprite(CHESS_RP); this->addChild(m_pChess[1][13], 0); m_pChess[1][14] = this->getListSprite(CHESS_RP); this->addChild(m_pChess[1][14], 0); m_pChess[1][15] = this->getListSprite(CHESS_RP); this->addChild(m_pChess[1][15], 0); //black m_pChess[0][0] = this->getListSprite(CHESS_BK); this->addChild(m_pChess[0][0], 0); m_pChess[0][1] = this->getListSprite(CHESS_BA); this->addChild(m_pChess[0][1], 0); m_pChess[0][2] = this->getListSprite(CHESS_BA); this->addChild(m_pChess[0][2], 0); m_pChess[0][3] = this->getListSprite(CHESS_BB); this->addChild(m_pChess[0][3], 0); m_pChess[0][4] = this->getListSprite(CHESS_BB); this->addChild(m_pChess[0][4], 0); m_pChess[0][5] = this->getListSprite(CHESS_BN); this->addChild(m_pChess[0][5], 0); m_pChess[0][6] = this->getListSprite(CHESS_BN); this->addChild(m_pChess[0][6], 0); m_pChess[0][7] = this->getListSprite(CHESS_BR); this->addChild(m_pChess[0][7], 0); m_pChess[0][8] = this->getListSprite(CHESS_BR); this->addChild(m_pChess[0][8], 0); m_pChess[0][9] = this->getListSprite(CHESS_BC); this->addChild(m_pChess[0][9], 0); m_pChess[0][10] = this->getListSprite(CHESS_BC); this->addChild(m_pChess[0][10], 0); m_pChess[0][11] = this->getListSprite(CHESS_BP); this->addChild(m_pChess[0][11], 0); m_pChess[0][12] = this->getListSprite(CHESS_BP); this->addChild(m_pChess[0][12], 0); m_pChess[0][13] = this->getListSprite(CHESS_BP); this->addChild(m_pChess[0][13], 0); m_pChess[0][14] = this->getListSprite(CHESS_BP); this->addChild(m_pChess[0][14], 0); m_pChess[0][15] = this->getListSprite(CHESS_BP); this->addChild(m_pChess[0][15], 0); this->initChessPosition();}

getListSprite

这个函数负责创建棋子精灵,根据不同的棋子类型,使用不同的图片创建精灵,在你们自己的环境中,尤其注意图片路径

图片路劲不对,那什么都不显示,所以如果有错,先考虑是不是图片路径不对了。

CCSprite* CCMainMenu::getListSprite(CHESS_TYPE nType){ CCSprite* pSprite; switch(nType) { case CHESS_RK:  pSprite = CCSprite::create(RES_PATH"rk.png");  breakcase CHESS_RA:  pSprite = CCSprite::create(RES_PATH"ra.png");  breakcase CHESS_RB:   pSprite = CCSprite::create(RES_PATH"rb.png");  breakcase CHESS_RN:   pSprite = CCSprite::create(RES_PATH"rn.png");  breakcase CHESS_RR:   pSprite = CCSprite::create(RES_PATH"rr.png");  breakcase CHESS_RC:  pSprite = CCSprite::create(RES_PATH"rc.png");  breakcase CHESS_RP:   pSprite = CCSprite::create(RES_PATH"rp.png");  breakcase CHESS_BK:  pSprite = CCSprite::create(RES_PATH"bk.png");  breakcase CHESS_BA:  pSprite = CCSprite::create(RES_PATH"ba.png");  breakcase CHESS_BB:   pSprite = CCSprite::create(RES_PATH"bb.png");  breakcase CHESS_BN:   pSprite = CCSprite::create(RES_PATH"bn.png");  breakcase CHESS_BR:   pSprite = CCSprite::create(RES_PATH"br.png");  breakcase CHESS_BC:  pSprite = CCSprite::create(RES_PATH"bc.png");  breakcase CHESS_BP:  pSprite = CCSprite::create(RES_PATH"bp.png");  break; } pSprite->setScaleX(0.5f); pSprite->setScaleY(0.5f); return pSprite;}

initChessPosition

initListImage最后调用的是initChessPosition,为32个棋子指定位置。这里位置信息用到了g_chess_coord,这个坐标信息是之前函数

void CCMainMenu::initChessPosition(){ m_pChess[1][0]->setPosition(g_chess_coord[9][4]); m_pChess[1][1]->setPosition(g_chess_coord[9][3]); m_pChess[1][2]->setPosition(g_chess_coord[9][5]); m_pChess[1][3]->setPosition(g_chess_coord[9][2]); m_pChess[1][4]->setPosition(g_chess_coord[9][6]); m_pChess[1][5]->setPosition(g_chess_coord[9][1]); m_pChess[1][6]->setPosition(g_chess_coord[9][7]); m_pChess[1][7]->setPosition(g_chess_coord[9][0]); m_pChess[1][8]->setPosition(g_chess_coord[9][8]); m_pChess[1][9]->setPosition(g_chess_coord[7][1]); m_pChess[1][10]->setPosition(g_chess_coord[7][7]); m_pChess[1][11]->setPosition(g_chess_coord[6][0]); m_pChess[1][12]->setPosition(g_chess_coord[6][2]); m_pChess[1][13]->setPosition(g_chess_coord[6][4]); m_pChess[1][14]->setPosition(g_chess_coord[6][6]); m_pChess[1][15]->setPosition(g_chess_coord[6][8]); //black m_pChess[0][0]->setPosition(g_chess_coord[0][4]); m_pChess[0][1]->setPosition(g_chess_coord[0][3]); m_pChess[0][2]->setPosition(g_chess_coord[0][5]); m_pChess[0][3]->setPosition(g_chess_coord[0][2]); m_pChess[0][4]->setPosition(g_chess_coord[0][6]); m_pChess[0][5]->setPosition(g_chess_coord[0][1]); m_pChess[0][6]->setPosition(g_chess_coord[0][7]); m_pChess[0][7]->setPosition(g_chess_coord[0][0]); m_pChess[0][8]->setPosition(g_chess_coord[0][8]); m_pChess[0][9]->setPosition(g_chess_coord[2][1]); m_pChess[0][10]->setPosition(g_chess_coord[2][7]); m_pChess[0][11]->setPosition(g_chess_coord[3][0]); m_pChess[0][12]->setPosition(g_chess_coord[3][2]); m_pChess[0][13]->setPosition(g_chess_coord[3][4]); m_pChess[0][14]->setPosition(g_chess_coord[3][6]); m_pChess[0][15]->setPosition(g_chess_coord[3][8]);}

好,当程序完全执行完这些代码后,就完成了32个棋子的初始化。

下一遍博文我们讲讲述这个象棋是怎么走起来


           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述

这篇关于cocos2d-x游戏开发系列教程-中国象棋04-摆棋的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/756468

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1