Cocos2dx实现注册和登录功能

本地开一个wamp,然后在www目录下放login.php和register.php文件,开启apache服务。

cpp文件:

/*网络相关*/
#include "network\HttpClient.h"
using namespace cocos2d::network;

login_btn->addTouchEventListener(CC_CALLBACK_2(Login::login, this));//按钮监听
register_btn->addTouchEventListener(CC_CALLBACK_2(Login::regist, this));

void Login::login(Ref *pSender, Widget::TouchEventType type) {
	switch (type)
	{
	case Widget::TouchEventType::ENDED:
		string uid;
		string pwd;
		uid = pEditBox_name->getText();
		pwd = pEditBox_password->getText();
		
		string strid("uname=");
		string strpwd("&upass=");


		string url("http://192.168.1.148/login.php?");
		string userid(uid);
		string password(pwd);
		url += strid + userid + strpwd + password;

		HttpClient * client = HttpClient::getInstance();
		HttpRequest * req = new HttpRequest();
		req->setUrl(url.c_str());

		req->setUrl(url.c_str());
		req->setRequestType(HttpRequest::Type::GET);
		req->setResponseCallback(this, httpresponse_selector(Login::httpResponse));
		req->setTag("GET test");
		client->send(req);
		req->release();
		log("denglu!!!");

		break;
	}
}
void Login::httpResponse(HttpClient* client, HttpResponse* response)
{
	if (!response->isSucceed())
	{
		log("Receive from server error and the error code is %s\n", response->getErrorBuffer());
		note_txt->setString("Unable to connect to server");
		return;
	}
	else
	{
		vector<char> * buffer = response->getResponseData();    //...获得返回数据的信息
		char * strtmp = (char *)malloc(sizeof(char)*buffer->size());
		//通过返回值判断是否登录成功
		for (int i = 0; i < buffer->size(); i++)
		{
			strtmp[i] = (*buffer)[i];
			log((*buffer)[i]);
		}
		string analys(strtmp);
		free(strtmp);
		strtmp = NULL;


		if (analys.find("status:ok") < analys.length())
		{
			//登录成功,数据库中查询到用户信息
			//登录到主场景			
			//MessageBox("登录成功", "登录成功!");   //弹出对话框
			log("登录成功");
			note_txt->setString("Login success");
			auto sc = HelloWorld::createScene();
			Director::getInstance()->replaceScene(sc);
		}
		else
		{
			//登录失败,数据库中查找不到信息
			//提示:密码或账户错误
			//MessageBox("登录失败", "登录失败!");
			log("登录失败");
			note_txt->setString("login faild!");
		}
	}
}


void Login::regist(Ref *pSender, Widget::TouchEventType type) {
	switch (type)
	{
	case Widget::TouchEventType::ENDED:
		//auto director = Director::getInstance();
		//auto scene = HelloWorld::createScene();
		//auto transition = TransitionCrossFade::create(1.0f, scene);
		//director->replaceScene(transition);
		savepass_box->setSelectedState(false);
		note_txt->setString("regin");
		string uid;
		string pwd;
		TargetPlatform target = CCApplication::sharedApplication()->getTargetPlatform();
		if (target == kTargetWindows) {
			uid = pEditBox_name->getText();
			pwd = pEditBox_password->getText();
		}
		else {
			uid = user_txt->getString();
			pwd = pass_txt->getString();
		}
		string strid("uname=");
		string strpwd("&upass=");
		string url("http://192.168.1.148/register.php?");
		string userid(uid);
		string password(pwd);
		url += strid + userid + strpwd + password;
		
		note_txt->setString(url.c_str());


		HttpClient * client = HttpClient::getInstance();
		HttpRequest * req = new HttpRequest();
		req->setUrl(url.c_str());


		req->setUrl(url.c_str());
		req->setRequestType(HttpRequest::Type::GET);
		req->setResponseCallback(this, httpresponse_selector(Login::httpResponse2));
		req->setTag("GET test");
		client->send(req);
		req->release();
		break;
	}
}


//注册
void Login::httpResponse2(HttpClient* client, HttpResponse* response)
{
	log("register php ");
	if (!response->isSucceed())
	{
		log("Receive from server error and the error code is %s\n", response->getErrorBuffer());
		return;
	}
	else
	{
		vector<char> * buffer = response->getResponseData();    //...获得返回数据的信息
		char * strtmp = (char *)malloc(sizeof(char)*buffer->size());
		//通过返回值判断是否登录成功
		for (int i = 0; i < buffer->size(); i++)
		{
			strtmp[i] = (*buffer)[i];
			log((*buffer)[i]);
		}
		string analys(strtmp);
		free(strtmp);
		strtmp = NULL;


		if (analys.find("status:ok") < analys.length())
		{


			MessageBox("注册成功", "注册成功!");   //弹出对话框


			log("注册成功");


			note_txt->setString("register success");
		}
		else
		{
			//登录失败,数据库中查找不到信息
			//提示:密码或账户错误
			MessageBox("注册失败", "注册失败!");
			log("注册失败");
			note_txt->setString("register failed!");
		}
	}
}




php文件:

数据库TestCocos,没有密码,表user,字段username和password.

register.php

<?php
$abc=$_GET['uname'];
$def=$_GET['upass'];
//1.连接数据库
$conn = mysqli_connect("localhost", "root", "","TestCocos");
$query= mysqli_query($conn,"SELECT count(*) FROM user WHERE username='".$abc."'");
$row=mysqli_fetch_array($query);
//echo $row[0];
if($row[0]==1)
{
	echo "This user exists";
}
else
{
	if($abc=="")
		echo "wrong name";
	else
	{
		$result=mysqli_query($conn,"INSERT Into user(username,password) Values('".$abc."','".$def."')");
		echo "status:ok";
	}
}
?>


login.php

<?php
header("charset=utf-8");
$us=$_GET["uname"];
$ps= $_GET["upass"];
//1.连接数据库
$conn = mysqli_connect("localhost", "root", "","testcocos");
if($conn)
{
	//echo "hello";
}
$conn->set_charset("UTF-8");
//2.打开数据库
//mysqli_select_db($conn,"test");
//3.新建查询
//$sql = 'select * from 123 where "username"='.$us.'';#39;.$us.'and upass = '. $ps .';;
 	
//4.执行这个查询
//$sql="SELECT * FROM abcd";
$result = mysqli_query($conn,"SELECT * FROM User WHERE username='".$us."'");
if($result)
{
	//echo "true";
}
else
{
	die("false".mysqli_error($conn));
}
$n = mysqli_num_rows($result); //返回查到的结果个数

//5. 关闭数据库
mysqli_close($conn);
 
if($n-->0) //如果查到结果个数大于0,即有用户名和密码与传进来的参数一至
{
    session_start();
    $row = mysqli_fetch_array($result);  //取得查询结果那一行
    $_SESSION['uid'] = $row["username"];   //返回数据库中的id

    $usepass=$row["password"];

    if($ps==$usepass)
    {
    	echo "status:ok";
    	//echo 1;    //服务器返回客户端一个1
    }
    else
    	echo "status:failed";
    	//echo 10;
}
else
{
	echo "status:failed";
    //echo 0;  //没查到结果,返回0
}
?>





  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos Creator是一款使用JavaScript或TypeScript进行游戏开发的跨平台游戏引擎。要实现连连看游戏,可以使用Cocos Creator提供的功能和API,结合编写的代码来完成。 连连看是一种消除类的益智游戏,在游戏界面上有一些方块或图标,玩家需要通过连接两个相同的方块或图标来消除它们,直到清空所有的方块为止。 要实现连连看游戏,首先需要创建一个游戏场景并在场景中添加方块或图标。可以使用Cocos Creator提供的节点系统来管理方块或图标的位置、点击事件等。每个方块或图标可以设置一个唯一的标识符,以便在连接时进行匹配。 接下来,需要实现鼠标或触摸事件的监听,以便玩家点击方块或图标进行连接。可以使用Cocos Creator提供的事件系统,通过监听事件来获取玩家点击的方块或图标的信息。 在处理点击事件时,需要将玩家的点击转化为游戏逻辑。可以使用数组或矩阵来保存游戏场景中的方块或图标的状态。当玩家点击两个方块或图标时,可以通过判断它们是否相同来决定它们是否可以连接。如果可以连接,可以使用算法来计算路径是否通畅,如果通畅则可以进行连接,否则提示玩家路径不通。 在连接两个方块或图标时,可以使用Cocos Creator提供的动画系统来实现连接过程的动画效果,使游戏更加生动。 最后,在实现连连看游戏的过程中,可以加入一些额外的功能,例如计分系统、倒计时或限制步数等,以增加游戏的挑战和乐趣。 总之,通过利用Cocos Creator提供的功能和API,结合编写的代码,可以实现一个简单的连连看游戏,并且可以根据个人需求进行扩展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值