Slimer软工课设日报-2016年6月30日

根据上期预告,今天的主要工作是增加了初始界面和设置界面

初始界面

点击start按钮,若在设置中已成功连接服务器,则会进入账号登录界面,否则弹窗报错

void start() {                //开始游戏按钮
    if (connected == 0) {
        MessageBox(NULL,"未连接到服务器,请在设置中输入IP","错误" , MB_OK);
    }
    else {
        form = 1;  //账号登录页面
    }
}   

start按钮

代码中connected变量当设置页面中ip连接成功时置1,Form1表示账号登录界面(Form0为初始界面,Form为游戏操作界面,Form3为设置页面)



设置页面

IP输入框与连接按钮依旧利用了之前的函数,只是由于位置改变,初始化两个控件时的坐标改变了

其中所有的按钮和输入框都是利用原先写的Button和InputBox定义的

Button back_button(changex(0), changey(768 - 666), changex(124 - 0) + 1, changey(707 - 666) + 1, back);
Button connect_button(changex(806), changey(768 - 366), changex(921 - 806) + 1, changey(420 - 366) + 1, connecttoserver);
Button musicon_button(changex(428), changey(768 - 463), changex(664 - 428) + 1, changey(517- 463) + 1, musicon);
Button musicoff_button(changex(658), changey(768 - 463), changex(921 - 658) + 1, changey(517 - 463) + 1, musicoff);
Button fullscreen_button(changex(428), changey(768 - 556), changex(664 - 428) + 1, changey(610 - 556) + 1, fullscreen);
Button window_button(changex(685), changey(768 - 556), changex(921 - 685) + 1, changey(610 - 556) + 1, window);
InputBox ip_inputbox(changex(428), changey(768 - 366), changex(795 - 428) + 1, changey(420 - 366) + 1);

Button对象的最后一个参数是通过鼠标点击响应绑定的对应函数

class Button {
public:
    double x;
    double y;
    double w;
    double h;
    ClickEvent clickevent;            //按钮函数
    Button(double x1, double y1, double w1, double h1,ClickEvent ck) {
        x = x1;
        y = y1;
        w = w1;
        h = h1;
        clickevent = ck;
    }
    void draw() {            //绘制按钮
        glColor3f(0, 0, 0);
        glBegin(GL_QUADS);
            glVertex2f(x+w, y);
             glVertex2f(x, y);
             glVertex2f(x, y-h);
             glVertex2f(x+w, y-h);
        glEnd();
    }
    void click(double x1,double y1) {        //点击响应函数

        if (x1 >= x&&x1 <= x + w&&y1 >= y - h&&y1 <= y) {
            clickevent();
        }
    }
};

Button

具体每个按钮的点击响应函数实现如下:

void connecttoserver() {
    stringstream ss(ip_inputbox.s);
    int a, b, c, d;
    char c1, c2, c3;
    ss >> a >> c1 >> b >> c2 >> c >> c3 >> d;
    if (c1 == ‘.‘&&c2 == ‘.‘&&c3 == ‘.‘&&a <= 255 && a >= 0 && b <= 255 && b >= 0 && c <= 255 && c >= 0 && d <= 255 && d >= 0) {
        SERVIP = ip_inputbox.s.c_str();
        int status = client();
        if (status == 0) {
            MessageBox(NULL, "连接成功", "成功", MB_OK);            //*
            connected = 1;                //*
        }
        else if (status == 1) {
            MessageBox(NULL, "连接失败,请重试", "错误", MB_OK);
        }
        //form = 1;
    }
    else {
        ip_inputbox.s.clear();
        MessageBox(NULL, "IP地址格式输入错误,请重新输入", "错误", MB_OK);
    }
}

Connect

ip输入不符合规范时,会提示如下错误

连接成功时

连接失败时

void musicon() {                //打开音乐按钮*
    PlaySound("res/abc.wav", NULL, SND_FILENAME | SND_ASYNC);
}

Music on

void musicoff() {                //关闭音乐按钮*
    PlaySound(NULL, NULL, NULL);
}

Music off

void fullscreen(){                //全屏按钮*
    glutFullScreen();
}

fullscreen

void window() {                //窗口化按钮*
    glutReshapeWindow(1366, 768);            //改变窗口大小
    int cx = glutGet(GLUT_SCREEN_WIDTH);    //获取屏幕大小
    int cy = glutGet(GLUT_SCREEN_HEIGHT);
    glutPositionWindow((cx - 1366) / 2, (cy - 768) / 2);    //窗口居中
}

window

void back() {                //返回按钮*
    form = 0;    //返回初始界面
}    

back



通过以上工作,我学习了如何使窗口最大化和恢复窗口化,参考了http://www.xuebuyuan.com/1559974.html

以及openGL设置窗口居中的方法,参考了http://www.linuxidc.com/Linux/2012-04/58982.htm

还有MessageBox的使用,参考了百度百科



Slimer软工课设日报-2016年6月30日

时间: 2024-10-24 02:59:30

Slimer软工课设日报-2016年6月30日的相关文章

Slimer软工课设日报-2016年7月5日

今天主要增加了角色创建界面,以及按钮选中高亮 这个界面是在点击登录界面之后出现的,当然有可能改为注册界面后出现,具体看最终版本 在角色选择界面,可以点选自己喜欢的角色,然后点击的角色会被高亮,进入游戏的角色也会随之改变(游戏操作界面的各种头像框和经验条物品栏等等由另一位史皓宇同学负责,我这里的截图还是原始版) 也可以输入玩家姓名,到时自身的姓名将显示在左上角的适当位置,其他玩家的姓名也会显示在各自角色的头顶上 1 class playerform :form //* 2 { 3 public:

Slimer软工课设日报-2016年7月1日

今天主要解决了全屏状态下按钮无法顺利点击的问题 起初我以为是程序运行代码过多导致的卡顿,多点几次才能顺利交互,后来多调试了几次发现是判定区的问题 全屏后本来按钮的判定区是按照窗体比例放大且移动到指定位置范围的,但实际全屏后所有按钮的判定区都向上偏移了,所以才导致点击原来的位置没有反映 原先的按钮的判定区的xy范围是根据背景的像素点加上当前的窗口大小换算的,具体换算函数如下: double changex(int x) { return x*2.0 / WindowWidth -1; } doub

Slimer软工课设日报--第一天

根据之前用户反馈的调整窗口大小后按钮失灵的问题,我设计了如下的解决方案: 由于按钮响应是通过判断是否点击在该按钮相应的xy坐标范围里来判定的,按钮的xy坐标则是通过窗口大小换算的 double changex(int x) { return x*2.0 / WindowWidth - 1; } double changey(int y) { return y*2.0 / WindowHeight - 1; } 换算函数 而原先的游戏窗口大小是固定的,所以当用户改变窗口大小时,按钮还是原来的判定区

软工课设第一周周四报告

姓名 张骁 时间 2016年6月30日 学习内容 今天我对用户反映的另一个问题进行了解决.在最开始的设计阶段,我们为了游戏的整体氛围只设计了一种背景,没有考虑用户对多种背景的需要.针对这个问题,我们主要加入了两种新的风格不同的背景,使色调有所改变, 在加入背景的过程中最大的问题就是如何使各个场景中的背景都跟着改变.由于Unity的载入单位是场景,所以更改当前场景的背景并不会影响下一个场景的背景,而我们的每一个关卡都是存储为了一个场景,这就使得更换背景变得更加困难了.原来的情况是,每一个场景中的背

软工课设第四天 6.30

day  4 姓名 王日 时间 2016年6月30日 小组今日任务 (1)       数据库与服务器——段杰(组长).张鹏 (2)       使用Junit进行单元测试——陶元睿.王日(我) (3)       游戏界面素材加工——杨子彤.于博文 个人学习内容 (1)       昨天花很多时间处理的问题是无用的....因为错误的选择了一个c的项目,所以会提示缺少c的编译器.而我们是用java编写的,那个问题完全不需要管. (2)       编译环境搞定,参照博客 http://blog.

软考中高项学员:2016年3月30日作业

软考中高项学员:2016年3月30日作业 一.采购管理1.采购管理包括哪些过程?(记)2.编制采购计划过程的成果是什么?3.判断:每个采购工作说明书都来自于项目范围基准.4.结合P388页表14-1,工作说明书应该清楚地描述哪些内容?5.编制采购计划过程的技术.方法有哪些?6.工作说明书与范围说明书的区别?(记)7.常见的询价文件有哪些?8.询价的方法和技术有哪些?9.请描述我讲的招标文件.资格预审文件出售日期及常用的一些日期.(根据录屏总结)10.政府采购法规定了哪六种采购方式?每种的前提条件

2016年3月30日作业

软考中高项学员:2016年3月30日作业 一.采购管理1.采购管理包括哪些过程?(记)答:1.编制采购计划.2.编制询价计划.3.询价.招投标.4.供方选择.5.合同管理.6.合同收尾.2.编制采购计划过程的成果是什么?答:1.采购管理计划.2.采购工作说明书.3.判断:每个采购工作说明书都来自于项目范围基准.答:对.4.结合P388页表14-1,工作说明书应该清楚地描述哪些内容?答:1.采购目标的详细描述.2.采购工作范围.3.工作地点.4.产品及服务的供货周期.5.适用标准.6.验收标准.7

软工课设第二天 6.28

day 2 日报内容: 姓名 王日 时间 2016年6月28日 小组会议内容 时间:11:00~11:20 地点:信东101 商定主要工作: (1)       将用户反馈意见统计合并,列出清单 今天系统完善部分: (2)游戏背景切换完善,渐变切换(杨子彤主要负责) (3)增加金币&道具部分,提高可玩性 (4)在助教的提议下,决定使用服务器 学习内容 由于选择java编程,所以有测试工具Junit可以使用. 我负责测试部分,所以需要学习一下 主要看了这两篇博客,还没开始动手实践 http://b

软工课设第一天 6.27

day1 姓名 王日 时间 2016年6月27日 学习内容 1)  选择java编程 2)  人员分工 编写代码: 段杰(组长).于博文.张鹏 测试用例: 陶元睿.王日(我) 美工&文档整理 杨子彤 3)  系统反馈表填写收集 4)  建立微信群,及时发布通知 所遇问题 1)  有组员java环境未搭建好 2)  由用户反馈发现的问题 游戏难度过于简单 缺乏创新点 不能存储成绩 解决方案 1)  增加金币&游戏道具加强游戏性 2)  增加难度选择 3)  添加成绩本地存储,进一步可以联网