【cocos2d-x 仙凡奇缘-网游研发(1) 登录&注册】
发布日期:2021-09-05 08:11:46 浏览次数:1 分类:技术文章

本文共 4422 字,大约阅读时间需要 14 分钟。

转载请注明出处:

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

《仙凡奇缘》官方网站

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

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

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

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

部分核心代码内容:

1 if (!IsPostBack) 2             { 3                 APIId = Convert.ToInt32(Request.Form["APIId"]); 4                 switch (APIId) 5                 { 6                     //注册 7                     case 10000: 8                         useremail = Request.Form["useremail"]; 9                         pwd = Request.Form["pwd"];10                         phonenumber = Request.Form["phonenumber"];11                         username = Request.Form["username"];12                         returnstring = APIId + "|" + C_user.reguser(useremail, pwd, phonenumber, username) + "|";13                         break;14                     //登陆15                     case 10001:16                         useremail = Request.Form["useremail"];17                         pwd = Request.Form["pwd"];18                         returnstring = APIId+ "|" + C_user.userlogin(useremail, pwd)+ "|" ;19                         break;20                     //创建角色21                     case 10002:22                         gamename = Request.Form["gamename"];23                         number = Request.Form["number"];24                         sex = Request.Form["sex"];25                         zhiye = Request.Form["zhiye"];26                         returnstring = APIId + "|" + C_user.reguser_passuserinfo(number,gamename,sex,zhiye) + "|";27                         break;28                     default:29                         returnstring = "数据有误";30                         break;31                 }32             }
View Code

目前主要开发了:登录,注册,和创建角色这三个协议,里面都是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 = 0; i < arraydata->count(); i++)    {        CCString* ccdatastr = (CCString*)arraydata->objectAtIndex(i);         if(i==0)        {            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 ;    }}
View Code

里面我封装了如何发送包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扬帆起航...

 

 

 

转载地址:https://blog.csdn.net/weixin_34235135/article/details/85611429 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C#Light Everywhere
下一篇:WampServer配置

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月10日 20时39分41秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

C++面经总结之《Effective C++》(一) 2021-06-30
C++面经总结之《Effective C++》(二) 2021-06-30
这是什么“虎狼之词”啊!!!程序员的健康问题,看一线老中医怎么说!!! 2021-06-30
打开我的收藏夹 -- Python数据分析杂谈 2021-06-30
上手Pandas,带你玩转数据(1)-- 实例详解pandas数据结构 2021-06-30
上手Pandas,带你玩转数据(2)-- 使用pandas从多种文件中读取数据 2019-04-27
上手Pandas,带你玩转数据(3)-- pandas数据存入文件 2019-04-27
爬虫遇上不让右击、不让F12的网站,该怎么办? 2019-04-27
上手Pandas,带你玩转数据(4)-- 数据清洗 2019-04-27
上手Pandas,带你玩转数据(5)-- 数据转换与数据定位 2019-04-27
上手Pandas,带你玩转数据(6)-- 摆脱对pandas可视化丑图的刻板印象吧 2019-04-27
从零开始,学会Python爬虫不再难!!! -- (1)开篇:初识爬虫,基础铺垫 丨蓄力计划 2019-04-27
从零开始,学会Python爬虫不再难!!! -- (2)承接:解析网页,抓取标签 丨蓄力计划 2019-04-27
AttributeError: module ‘urllib‘ has no attribute ‘quote‘的解决办法 2019-04-27
linux shell — 6.初识 EXT2 文件系统 2019-04-27
Java — String(字符串) 2019-04-27
linux shell — 7.linux 磁盘与文件系统管理 2019-04-27
linux shell — 8.linux 磁盘与文件系统管理(2) 2019-04-27
Java — 事件监听、事件处理 初体验 2019-04-27
linux — Centos 7(第一天) 使用时出现的问题及解决方法 2019-04-27