博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Slimer软工课设日报-2016年7月4日
阅读量:5014 次
发布时间:2019-06-12

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

今天主要解决了登录界面的提示问题

原先在登录界面输入账号密码后,点击注册(Register)后没有任何提示,无论成功或失败,而点击登录(Login)后,如果账号密码正确便直接进入游戏,而错误也没有任何提示,这交互显然不友好。

虽然我一早就想解决这个问题,但是由于我先前只负责客户端的编写,对于消息通信不太了解,不知道他们的发消息机制,也就没第一时间解决。

在咨询了组长之后,我姑且看懂了如何服务端与客户端的信息是如何交换的,也就立马账解决了这个问题。

首先在原本的通信协议中,关于登陆注册的消息,只有客户端发给服务端的账号密码,然后由服务端判断这个账号密码是否正确,正确的话调用initPlayer()函数,然后给客户端发送一个初始化玩家自身信息的消息

void initPlayer(client* c)//参数为线程指针,无返回值,创建线程线程初始化玩家信息{    char buf[MAXSIZE + 1];    sprintf(buf, "I %d %lf %lf %d %d %d %lf %lf", c->p.id, c->p.wx, c->p.wy, c->p.lv, c->p.exp, c->p.maxexp,c->p.hp,c->p.maxhp);        //初始化玩家自身信息    send(c->sclient, buf, MAXSIZE, 0);    c->exist = true;                                                //将玩家状态置为登陆状态}

然而错误的话则未给客户端发送任何信息,于是我在服务端添加了新的通信协议

P 登录相关

P PL 1 登录失败,密码错误
P PL 0 登录失败,账号不存在
P PR 1 注册失败,账号已存在

else if (ch == 'P') {                int sel = 0;                bool b = false;                string username;                string password;                ss >> username >> password;                ifstream infile("datebase.txt");                if (infile) {                    char jl[80];                                        string un, pw;                    while (infile.getline(jl, 80)) {                        stringstream sjl(jl);                        sjl >> un >> pw;                        if (username == un&&password == pw) {                            c->username = username;                            c->password = password;                            sjl >> c->p.wx >> c->p.wy >> c->p.exp >> c->p.hp >> c->p.lv;                            c->p.setlv(c->p.lv);                            c->p.tj.x = c->p.wx;                            c->p.tj.y = c->p.wy;                            b = true;                            break;                        }                        else if (username == un) {        //密码错误                            sel = 1;                            break;                        }                        else if (password == pw) {        //账号不存在                            sel = 0;                            break;                        }                    }                    infile.close();                }                if (b) {            //登陆成功                    initPlayer(c);                    //初始化玩家信息                    waitplayers.erase(waitplayers.begin()+i);                    c->p.initMap(&m);                    c->p.curmap->insertPlayer(c);                }                else {                    if (sel == 1)                         sprintf(buf1, "PL %d", 1);                    else                        sprintf(buf1, "PL %d", 0);                    send(c->sclient, buf1, MAXSIZE, 0);                }            }
登录信息协议
else if (ch == 'R') {                bool b=true;                string username;                string password;                ss >> username >> password;                ifstream infile("datebase.txt");                if (infile) {                    char jl[80];                    string un, pw;                    while (infile.getline(jl, 80)) {                        stringstream sjl(jl);                        sjl >> un >> pw;                        if (username == un) {                            b = false;                            break;                        }                    }                    infile.close();                }                if (b) {                    c->username = username;                    c->password = password;                    ofstream outfile("datebase.txt",ios::app);                    outfile << username << " " << password << " " << c->p.wx << " " << c->p.wy << " " << c->p.exp << " " << c->p.hp << " " << c->p.lv << endl;                    initPlayer(c);    //初始化玩家信息                    waitplayers.erase(waitplayers.begin() + i);                    c->p.initMap(&m);                    c->p.curmap->insertPlayer(c);                    outfile.close();                }                else {                    sprintf(buf1, "PR %d", 1);                    send(c->sclient, buf1, MAXSIZE, 0);                }            }
注册信息协议

在客户端接收消息函数中添加了相应的反馈

else if (c == 'P') {                ss >> c;                if (c == 'R') {                    ss >> temp;                    if (temp == 1)                        MessageBox(NULL,"注册失败,账号已存在", "错误",MB_OK);                }                if (c == 'L') {                    ss >> temp;                    if (temp == 1)                        MessageBox(NULL, "登录失败,密码错误", "错误", MB_OK);                    else                        MessageBox(NULL, "登录失败,账号不存在", "错误", MB_OK);                }            }
登录相关

 

实现了以下的提示功能

测试用账号为w,密码为e

首先测试登录功能,以下为密码输入错误的情况

然后是账号不存在

 最后是在已存在账号的情况下输入重复账号注册

转载于:https://www.cnblogs.com/hesoyamlyf/p/5640564.html

你可能感兴趣的文章
POJ 1860 Currency Exchange(SPFA 判断有无“正”环)
查看>>
广告地址屏蔽
查看>>
收缩SqlServer数据库日记方法
查看>>
每日英语:15 places to find inspiration
查看>>
学习方法--提问
查看>>
【转】每天一个linux命令(3):pwd命令
查看>>
merge-two-sorted-lists
查看>>
MySQL(3)
查看>>
poj1061——扩展gcd水题
查看>>
UVa400.Unix ls
查看>>
POJ 2299 Ultra-QuickSort 归并排序、二叉排序树,求逆序数
查看>>
Educational Codeforces Round 60 (Rated for Div. 2) C. Magic Ship
查看>>
Windows 2008 R2系统开机时如何不让Windows进行磁盘检测?
查看>>
WP7应用开发笔记(18) 本地化与多语言
查看>>
解决 .so文件64与32不兼容问题
查看>>
归并排序法
查看>>
【剑指offer】面试题26:复杂链表的复制
查看>>
spark开发生成EXE
查看>>
Vue 全家桶介绍
查看>>
WPF Bitmap转Imagesource
查看>>