飞机大战

由于Web技术这门课要求我们学一门wen技术,然后在课堂上报告~~正好之前我听说过白鹭引擎~~~所以就根据白鹭引擎的教程http://edn.egret.com/cn/index.php/portal/article/index/id/712 ,做了一个html5的一个小游戏,自我发挥了移动、显血等功能~~可以说对白鹭引擎有了初步的了解。

现在已经把它放到了我的网站上:
http://www.zhangshengdong.com/webgl/fighter/
psb2

手机、平板、电脑都可使用哦~~
psb
psb1

10天一个QQ

       我从这个月开始学mfc的嘛~~然后学完后就像编一个东西来看看我的水平到哪了呀~~~于是就用10天编出来了一个可以让不同网络的电脑聊天的QQ~~~(其实就是和正常的QQ功能差不多~~之所以说的这么麻烦,是因为我发现网上有好多人编的只能在局域网用的来挂羊头卖狗肉~~切~~~)

        要说的比较多,代码也有近4000行吧可能~~~所以还是请各位去我的git看好了~~代码都是开源的~~~

        zhangsheng377/ChatRoom
        https://github.com/zhangsheng377/ChatRoom

 

 

char[]与CString互转

       最近在学MFC,正好学到了Socket那里,就想自己编个聊天室(以后再做个纯文字的网游试试~~).但很快就发现,其实MFC的WinSocket封装的极其蛋疼~~比如,发送和接收的时候只能用void*(应该是指针型~一般就用char[]接收~),但众所周知的是,MFC的控件显示什么的还是用CString最方便~~~但问题就出在char[]和CString的转换上~~

       一般来说,提到转换成CString,就会想到赋值转换或是用.Format(...)~~但是,这次我用temp.Format(L"%s",my_szBuffer),结果temp里竟然是乱码~~~后来,从网上找了很多办法来测试,花费了很长时间,终于发现其实方法很简单:

char my_szBuffer[4096];
memset(my_szBuffer, 0, sizeof(my_szBuffer));
my_nLength = Receive(my_szBuffer, sizeof(my_szBuffer));
CString temp;
temp.Format(L"%s", CString(my_szBuffer)); //一定要把char[]用CString强制转换,否则CString temp里会有乱码
pDlg->m_MsgR.InsertString(0, temp);
 
 
 
 
 
 
 
 
for (int i = 0;i < my_SendData.GetLength();i++)
{
my_szBuffer[i] = my_SendData[i]; //CString转成char[]实在没什么好办法,网上的办法转后总会在每个字符之间加一个.(点),不知道怎么回事,所以只好用for了~~但for循环时却没在CString里发现.(点),可能是被mfc的接口给屏蔽了吧~~
}
Send(my_szBuffer, my_SendData.GetLength(), 0);
 
      所以发上来mark一下,顺便帮助一下跟我有同样烦恼的人们~~毕竟,这方法还挺难找的~而且没见过的人估计都想不到可以这样试~~~
 
QQ图片20150716153953
微信截图_20150716154123
 

清华mfc大作业

最近在学堂在线上学mfc~~正好到了交大作业的时候~~觉得这个大作业还不错,可以算是新手级别的mfc集大成者,包括了画图简单的菜单数据库ODBC视频播放等~~所以干脆把代码发到了git上~~也给大家看看~~

Commits · zhangsheng377/-mfc-
https://github.com/zhangsheng377/-mfc-/commits/master

 

 

浮点数输出

浮点数输出

浮点数输出  (100/100 分数)
题目描述
编写一个程序,输入一个浮点数和输出格式要求,按照格式要求将该浮点数输出。给定非负整数m和n,表示输出的浮点数小数点前的宽度为m,若宽度不够则在前面补0,小数点后的宽度为n,若宽度不够则在后面补0(补充说明:当n=0时,只需输出整数部分,当m,n都为0时,则输出0)。

输入描述
每个测例共2行,第一行为两个整数m,n(n >= 0, m >= 0),第二行为一个浮点数。

输出描述
对每个测例输出的浮点数占一行,其小数点前宽度为m,小数点后宽度为n,不足时补零。

样例输入
5 3
12.3456789
2 10
12.34

样例输出
00012.345
12.3400000000

 
 
 
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
using namespace std;
 
int main() {
int m, n;string d;
cin >> m >> n >> d;
//cout << d << endl;
string s;
s = d.substr(0, d.find('.') + n + 1);
//cout << s<< endl;
istringstream is(s);  //创建字符串输入流
double v;
is >> v;    //从字符串输入流中读取变量v
//cout << v << endl;
if (m == 0 && n == 0) cout << 0 << endl;
else { 
if(n==0) cout << setw(m) << setfill('0') << int(v);
else cout << setiosflags(ios_base::fixed) << setw(m + n + 1) << setfill('0') << setprecision(n) << v << endl;
}
 
 
return 0;
}
 
 
 
 
 
这题的难点主要在于:
1.在没有设置过是科学计数法还是浮点数setiosflags(ios_base::fixed)表示之前,设置精度setprecision(n)是有效位数的意思;而在设置了之后,则是小数点后保留多少位的意思~~
2.在设置过浮点数setiosflags(ios_base::fixed)表示后,再设置精度setprecision(n)小数点后保留多少位就会是四舍五入式的保留了,而此题不能是四舍五入,所以我的解决方法是:先把它按字符串输入,然后截取所需要的长度后,再转成double,设置格式输出~~