转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html

公司的项目总算告一段落了,年前憋到年后,总算要上线了,所以我也有了时间来搞我自己的游戏项目了,和大多数开发者一样,或许每个做游戏的心里面都有自己的一个世界属于自己的一个梦,这次我还要继续做梦,呵呵。

《仙凡奇缘》官方网站

www.xianfancoco.com

好了,下面我赘述一下这个RPG网游的架构,服务器端由socket+http,语言我用c#,因为以前有了一套比较成熟的后台系统附带了一个tcp通讯协议的轻量级服务监控端。服务端主要还是以HTTP为主,C#的托管机制让我开发服务器变得相当快捷,相当顺当;

有了上图,大家应该知道了做一个网游不易,一个人恐怕撸不起来。确实,这需要非常多的时间精力,和技术支持;但是我们从简化,从策划,服务端,客户端,任何模块我们都从简(从简不等于不做,是少做,而且做精一个就行),毕竟我们有雄心壮志,也难免实现宏伟目标;

回归这次主要正题:注册登录;

服务器端我已经做了提供了如下接口HTTP协议,采用POST协议方式获取客户端的消息:

部分核心代码内容:

 if (!IsPostBack)
{
APIId = Convert.ToInt32(Request.Form["APIId"]);
switch (APIId)
{
//注册
case :
useremail = Request.Form["useremail"];
pwd = Request.Form["pwd"];
phonenumber = Request.Form["phonenumber"];
username = Request.Form["username"];
returnstring = APIId + "|" + C_user.reguser(useremail, pwd, phonenumber, username) + "|";
break;
//登陆
case :
useremail = Request.Form["useremail"];
pwd = Request.Form["pwd"];
returnstring = APIId+ "|" + C_user.userlogin(useremail, pwd)+ "|" ;
break;
//创建角色
case :
gamename = Request.Form["gamename"];
number = Request.Form["number"];
sex = Request.Form["sex"];
zhiye = Request.Form["zhiye"];
returnstring = APIId + "|" + C_user.reguser_passuserinfo(number,gamename,sex,zhiye) + "|";
break;
default:
returnstring = "数据有误";
break;
}
}

目前主要开发了:登录,注册,和创建角色这三个协议,里面都是POST协议;

客户端代码又如何呢?首先我们得有重要的利器(curl)的访问方式,我建立了HttpWebServer.cpp类,并且进行了封装;

核心代码我贴出来:

//回调
size_t HttpWebServer::writehtml(uint8_t* ptr,size_t size,size_t number,void *stream)
{
CCLog("%s",ptr);
string reuturndata = (char*)ptr;
ToDo::showTip(reuturndata);
return size*number;//这里一定要放回实际返回的字节数
} string HttpWebServer::getReadyForPostData(CCArray* arraydata)
{
string datastr = "";
for (int i = ; i < arraydata->count(); i++)
{
CCString* ccdatastr = (CCString*)arraydata->objectAtIndex(i);
if(i==)
{
datastr = ccdatastr->getCString();
}
else
{
datastr = datastr + "&" + ccdatastr->getCString();
}
}
return datastr;
} void HttpWebServer::CurlPost(string url,string postdata)
{
//APIId=10000&useremail=747204@qq.com&pwd=ysj55555&phonenumber=18618169949&username=ysj5555520
//http://www.xianfancoco.com/AListenAPIweb/userComment.aspx CURL *curl;
CURLcode res;
std::string cc;
curl=curl_easy_init();
if(curl)
{
curl_easy_setopt( curl, CURLOPT_URL, url.c_str()); //请求的地址
curl_easy_setopt(curl, CURLOPT_POST, true);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata.c_str());
//启用POST提交
curl_easy_setopt( curl, CURLOPT_FOLLOWLOCATION, 23L);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writehtml); //处理的函数
curl_easy_setopt( curl, CURLOPT_WRITEDATA, &cc); //缓冲的内存
res=curl_easy_perform(curl);
if(res!=CURLE_OK)
{
//CCLog("联网超时 %i",res);
}
curl_easy_cleanup(curl);
}
else
{
//CCLog("curl is null");
return ;
}
}

里面我封装了如何发送包POST方法和如何组合包的方法,这样使用起来就会相当的简便;

如服务器需要传:useremail = Request.Form["useremail"];
那客户端也有对应的POST方式,下面就是我如何发送客户端登录的请求方式:

CCArray * senddata = CCArray::create();
string data;
senddata->addObject(CCString::create("APIId=10001"));
senddata->addObject(CCString::create("useremail=747204@qq.com"));
senddata->addObject(CCString::create("pwd=ysj55555"));
data = HttpWebServer::getReadyForPostData(senddata);
HttpWebServer::CurlPost(SERVICES_NAME_USER,data);
senddata->release();
TipBaseShowText(this,CCString::create("aaa"),CCString::create("SSS"),1.0f,1.0f,UI_TIP,true);

这样的封装将是以后我大量的使用的标本,登录和注册是简单的必要的用户操作行为,用户在么有用户名之前需要点击注册;
注册如下图:

登录界面如下图

输入框,以及登录或注册返回

声明一下这次写这系列博客主要是为了分享游戏制作经验,由于这次是个人项目,和公司无关,是否开源还得看游戏3个月以后的情况而定,本游戏所用资源全部来自于商业内部资源;

2014扬帆起航...

【cocos2d-x 仙凡奇缘-网游研发(1) 登录&注册】的更多相关文章

  1. 【cocos2d-x 仙凡奇缘-网游研发(2) 角色换线系统】

    转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html 做一款游戏就先得制作好策划文档,和基本的人物世界构架的设计,然后架空在这样一个虚拟的世界中每 ...

  2. 【cocos2d-x 手游研发小技巧(6)聊天系统+字体高亮】

    转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-6.html 聊天系统在手机网游中是最常见的交互工具,大家在一起边玩游戏边聊天岂不乐哉: 废话不多了 ...

  3. (转)火溶CEO王伟峰:Unity3D手机网游开发

    今天看到这篇文章,感觉很不错,尤其是那句“Unity3D的坑我觉得最严重的坑就是没有懂3D的程序员,把Unity当成Office用”. 转自http://blog.csdn.net/wwwang891 ...

  4. 【cocos2d-x 手游研发----研发思路及感想】

          我半年前进入了目前的这家做教育行业的公司(在此之前一直从事原生态开发手游的迷茫之路),学习是一件很快乐的事情,来到这家公司我有了很多时间去学习,不管是公司业务,还是其他技术相关的.于是开始 ...

  5. 【cocos2d-x 手游研发----地图活起来了】

    谈到地图不少人都说要做地图编辑器了,但是我暂时绕过这一步,如果不用寻路地图就不能移动?寻路就是会绕过障碍物的算法. 我做了一个简单的地图的思想,就是地图分层3层:背景层.可行区域层.遮罩层,但是地图就 ...

  6. 手机网游开发指南 - 需要多NB的技术

    Agent`K 似乎在三天打鱼N天晒网.只能呵呵了,懒散的家伙. 移动互联网越来越火,其中的网络游戏更是火,熊熊大火. 作为攻城师的你,作为小投资者的你,作为满脑子创意想要实现的你,肯定在四处打听:手 ...

  7. 网游中的网络编程系列1:UDP vs. TCP

    原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...

  8. 【cocos2d-x 手游研发----目录】

    感谢大家一直支持我写这样一系列的博客,从中我自己也获益良多,cocos2d-x这样一款非常棒的引擎,是值得我们去学习和分享的,谈到分享,那我就把这套写了差不多一两个月的框架给大家开源下载,写的很一般, ...

  9. 网游中的网络编程3:在UDP上建立虚拟连接

    目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网络编程3:在UDP上建立虚拟连接 TODO 二.在UDP上建立虚拟连接 介绍 UDP是无连接的,一 ...

随机推荐

  1. 利用redis完成自动补全搜索功能(二)

    前面介绍了自动完成的大致思路,现在把搜索次数的功能也结合上去.我采用的是hash表来做的,当然也可以在生成分词的时候,另外一个有序集合来维护排序, 然后2个有序集合取交集即可.这里介绍hash的方式来 ...

  2. Halcon中数据的四舍五入、取整、有效数字以及和字符串之间的转换

    *此代码可直接复制到HDevelop中运行 a:= 3.456 *取整.取最近的整数 int_a := int(a) //取整数部分,结果是3 round_a := round(a) //将输入元组转 ...

  3. 模板练习(LUOGU)

    1:并查集 P3183食物链 #define man 300050 ; int find(int x){ if(fa[x]==x) return fa[x]; return fa[x]=find(fa ...

  4. 通过BeanShell获取UUID并将参数传递给Jmeter

    有些HTTPS请求报文的报文体中包含由客户端生成的UUID,在用Jmeter做接口自动化测试的时候,因为越过了客户端,直接向服务器端发送报文,所以,需要在Jmeter中通过beanshell获取UUI ...

  5. 在命令提示符(cmd)下怎样复制粘贴

      我们把鼠标放在面板的上方,右击,界面显示如下:   我们选择“属性”,单击,界面显示如下:   我们点选“快速编辑模式”,再点击“确定”,这样设置就完成了,界面显示如下:   我们在面板中随意选择 ...

  6. a标签的四个伪类

    A标签的css样式   CSS为一些特殊效果准备了特定的工具,我们称之为“伪类”.其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是: :link    :v ...

  7. AJAX初尝试——ACM/ICPC类比赛气球管理系统

    很早之前做过一个,白板没界面,20秒暴力刷新,数据库每个team一个n列的对应n个题目的标记项,只能对单个比赛暴力把全部user_id导入单独的气球表(也就是cid=1000用这个表的话,cid100 ...

  8. 201.09.22 除虫药水(线性dp)

    描述 在十年前,除虫是十分艰苦的工作.那时,使用普通药水进行除虫的效果极差,在一片苹果 林中使用后除掉的虫仅为极小一部分. 比如说,Bugs 镇共有 N 片苹果林,对第i 片使用普通药水可以除掉 ai ...

  9. Java生成HTML文件

    实例HTML文件<html> <head> <title>###title###</title> <meta http-equiv="C ...

  10. 'org.springframework.web.filter.CharacterEncodingFilter' is not assignable to 'javax.servlet.Filter,This inspection lets you spot the following problems that might occur in descriptors that are used t

    1.jar包导入错误,因为maven下载的原因: 删除这样的包,然后让maven重新下载,问题就会解决