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

初始界面

点击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的使用,参考了百度百科


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

Slimer软工课设日报-2016年6月30日相关推荐

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

    今天主要解决了全屏状态下按钮无法顺利点击的问题 起初我以为是程序运行代码过多导致的卡顿,多点几次才能顺利交互,后来多调试了几次发现是判定区的问题 全屏后本来按钮的判定区是按照窗体比例放大且移动到指定位 ...

  2. 计算机病毒解析与防范结束语,2016年04月30日计算机病毒解析与防范题纲_向必青.doc...

    2016年04月30日计算机病毒解析与防范题纲_向必青 计算机病毒解析与防范 向必青 摘要:计算机病毒被喻为21世纪计算机犯罪的五大手段之一,并排序为第二.计算机病毒的攻击性,在于它能够破坏各种程序并 ...

  3. 2016年8月30日 星期二 --出埃及记 Exodus 16:31

    2016年8月30日 星期二 --出埃及记 Exodus 16:31 The people of Israel called the bread manna. It was white like co ...

  4. 用starUML画的软工课设:外卖点餐管理系统

    软件工程课设:外卖点餐管理系统 一.概述 二.可行性分析 2.1技术的可行性 2.2经济的可行性 2.3操作的可行性 2.4法律的可行性 2.5结论 三.需求分析 3.1功能性需求 3.2非功能性需求 ...

  5. 我的Python成长之路---第五天---Python基础(17)---2016年1月30日(晴)

    常用模块 1.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 模块分为三种 自定义模块 内置标准模块(又称标准库) 开源模块 2.常用模块 time模块 time.time() import t ...

  6. 软考信息系统监理师2016年3月18日作业

    第四章监理单位的组织建设 1.监理单位的体系建设分为哪3部分? 答:1.业务体系,2.质保体系建设,3.管理体系建设 2.监理单位监理服务质量管理的方式有2种,哪2种?优缺点是什么? 答:有2种方式, ...

  7. 2016年10月30日表单标签与样式表分类和选择器

    今天上午讲的表单标签 <form name="表单"method="get" action="Untitled-2.html"> ...

  8. 2016年5月30日上午(传智Bootstrap笔记六(图片样式))

    为了给段落添加强调文本,则可以添加 class="lead",这将得到更大更粗.行高更高的文本,如下面实例所示: <body style="padding:50px ...

  9. 2016年11月30日 angularJS input=file 绑定change事件

    angularJS 之前都没有听说过,刚进公司第一天领导让我自己在网上学习第二天开始帮忙做一点东西,遇到了 第一个问题:angularJS 如何绑定file表单的change 上传图片,我不会用ang ...

最新文章

  1. 阿里云重磅发布云原生裸金属方案 | 云原生生态周报 Vol. 53
  2. SAP ABAP的权限检查跟踪(Authorization trace)工具使用步骤介绍
  3. P4592 [TJOI2018]异或 (可持久化Trie)
  4. 安卓 linux 街机 dc,DC最强的街机模拟器
  5. JAVA本地文本读取---解决中文乱码
  6. linux上NFS性能参数
  7. 接口返回数据太大_Vue实战044:Mockjs模拟服务器Api接口并返回数据详解
  8. 一站式VDI部署教程(4)配置SMB3.0共享
  9. 新闻本身具有数量大、更新快、冗余度高
  10. C++ 学到什么程度可以找工作?
  11. 字符串左斜杠替换成右斜杠
  12. 正态总体统计量的分布
  13. Back键失效的原因分析及解决(基于Android 4.4.3源码分析)
  14. 【寻找最佳小程序】影视评分小工具“豆瓣评分”——产品设计要点及专家评析...
  15. 简单五子棋游戏c语言简单,C语言制作简单五子棋游戏
  16. 50个启发你灵感的黄色系网站设计
  17. 吊打面试官!Spring Boot的35道灵魂拷问面试题,看看你能答对多少?
  18. Android M5 新特性
  19. eclipse小技巧 新建类时自动添加作者与时间信息
  20. 巡风xunfeng代码研究---新建Flask项目模板

热门文章

  1. linux 文件路径操作
  2. shell read
  3. git 应用 cherry-pick
  4. 输变电设备物联网节点设备无线组网协议_AIS-Link-艾森智能的工业物联网连接协议...
  5. Android用外部应用打开文件,Android N 以上使用其他应用打开文件 FileProvider
  6. java 中括号中的语句,Java中是使用大括号括起来的语句块,用于完成一个相对独立的逻辑功能,这种语句被称作()。...
  7. 怎么退出mysql_如何安全地关闭MySQL
  8. 万测试验机软件,万测TestStar®新秀®100kN微机控制电子万能试验机
  9. SQLServer 可更新订阅数据冲突的一个原因
  10. 加密、数字签名和数字证书