呵呵!以前做的一课C++程序里一段代码,无事,做成一个GUI界面的!
没什么技术含量。源代码工程与编译后的程序,大家都可以从附件里下载,打包在一起了!
主要是在初始化时,设置一下变量,然后在“生成”时,执行一下随机数的生成,然后在“OK”时,进行一下比较,然后根据设置进行提示信息的输出!
程序的游戏界面如下:
进程进行了一些优化:
[color=#FF0000]1、增加了随机数的生成
2、改进了游戏的规则与提示[/color]
把三个主要的函数帖在这里吧([color=#0000FF]修改后的,呵呵[/color]):
1、初始化函数
void InitialDialog(HWND hDlg){
HICON hIcon=LoadIcon(g_hInst,MAKEINTRESOURCE(IDI_MAIN));
SendMessage(hDlg,WM_SETICON,ICON_BIG,(LPARAM)hIcon);
SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);
SetWindowText(hDlg,TEXT("猜数小游戏"));
SetDlgItemInt(hDlg,IDC_NUM,100,TRUE);
SetDlgItemInt(hDlg,IDC_MIN,0,TRUE);
SetDlgItemInt(hDlg,IDC_MAX,100,TRUE);
TCHAR szTip[]="\
1、当你所猜测的数字距离>=100时,减去20有效分\r\n\
2、当你所猜测的数字距离<100且>=50时,减去10有效分\r\n\
3、当你所猜测的数字距离<50且>=20时,减去5有效分\r\n\
4、当你所猜测的数字距离<20且>=10时,减去3有效分\r\n\
5、当你所猜测的数字距离<10且>=5时,减去2有效分\r\n\
6、当你所猜测的数字距离在范围5之内,减去1有效分\r\n\r\n\
全部猜测的次数最多只是10*(范围/100),即如果你的范围域是200,则是10*200/100=20次。猜中后会弹出一个提示框!\r\n\r\n\
2009-3-9 IaWeN";
SetDlgItemText(hDlg,IDC_TIP,szTip);
g_hStatus=CreateStatusWindow(WS_CHILD|WS_VISIBLE|SBS_SIZEGRIP,NULL,hDlg,IDC_MYSTATUS);
if(g_hStatus==NULL)
MessageBox(NULL,TEXT("status"),TEXT("status"),0);
int pInt[]={250,-1};
SendMessage(g_hStatus,SB_SETPARTS,2,(LPARAM)pInt);
SendMessage(g_hStatus,SB_SETTEXT,0,(LPARAM)TEXT(" Author:iawen 博客:"));
SendMessage(g_hStatus,SB_SETTEXT,1,(LPARAM)TEXT(" 准备就绪……"));
srand((unsigned)time(NULL));
}
2、随机数生成函数
void GenericRandNum(HWND hDlg){
int max,min;
BOOL bFlag;
min=GetDlgItemInt(hDlg,IDC_MIN,&bFlag,FALSE);
max=GetDlgItemInt(hDlg,IDC_MAX,&bFlag,FALSE);
//生成随机数,并传递给控件
int ary[1000];
for(int i=0;i<1000;i++){
ary[i]=(((double) rand() / (double) RAND_MAX) * max + min);
}
int MagNum=ary[(int)(((double) rand() / (double) RAND_MAX) * 1000 + 0)];
SetDlgItemInt(hDlg,IDC_RANDNUM,MagNum,FALSE); //设置此次需要猜测的目标并隐藏
ShowWindow(GetDlgItem(hDlg,IDC_RANDNUM),SW_HIDE);
count=0;
int tmp=max-min;
mid=tmp;
while(tmp/=2) //初始化计数器
++count;
jifen=mid; ////初始化有效分
SetDlgItemInt(hDlg,IDC_NUM,jifen,TRUE);
TCHAR szTip[100];
memset(szTip,0,100);
wsprintf(szTip,TEXT("->:初始化完毕!总次数是:%d,有效分是:%d "),count,jifen);
SendMessage(g_hStatus,SB_SETTEXT,1,(LPARAM)szTip);
HWND hList=GetDlgItem(hDlg,IDC_INFO);
while(SendMessage(hList,LB_GETCOUNT,0,0)){
SendMessage(hList,LB_DELETESTRING,0,0);
}
SendMessage(hList,LB_ADDSTRING,0,(LPARAM)szTip);
}
3、比较函数
void EnterYourNum(HWND hDlg){
int num,MagNum;
BOOL bFlag;
num=GetDlgItemInt(hDlg,IDC_GUESSNUM,&bFlag,FALSE);
MagNum=GetDlgItemInt(hDlg,IDC_RANDNUM,&bFlag,FALSE);
--count; //可用次数减1
int tmp=0;
if(MagNum>num)
tmp=MagNum-num;
else
tmp=num-MagNum;
TCHAR szTip[100];
memset(szTip,0,100);
if(tmp==0){
wsprintf(szTip,"恭喜,你猜中了!\r\n你只用了 %d 次,且积分还剩 %d,非常幸运!",count,jifen);
MessageBox(hDlg,szTip,TEXT("恭喜,你猜中了"),0);
ShowWindow(GetDlgItem(hDlg,IDC_RANDNUM),SW_SHOWNORMAL);
return;
}
if(count<=0 || jifen<=0){
SendMessage(g_hStatus,SB_SETTEXT,1,(LPARAM)(" Sorry,你的猜测次数或者有效分已经用完了!"));
MessageBox(hDlg,TEXT("Sorry,你的猜测次数或者有效分已经用完了"),TEXT("提示信息"),0);
ShowWindow(GetDlgItem(hDlg,IDC_RANDNUM),SW_SHOWNORMAL);
return;
}
int current=mid;
while(current/=2){
if(tmp>=current)
break;
}
jifen-=current;
wsprintf(szTip,TEXT("剩:%d 次,有效分-%d,偏差大于:%d,所猜数为:%d"),count,current,current,num);
SetDlgItemInt(hDlg,IDC_NUM,jifen,TRUE);
HWND hList=GetDlgItem(hDlg,IDC_INFO);
SendMessage(hList,LB_ADDSTRING,0,(LPARAM)szTip);
memset(szTip,0,100);
wsprintf(szTip,TEXT("->:你本次猜测的数字是:%d"),num);
SendMessage(g_hStatus,SB_SETTEXT,1,(LPARAM)szTip);
}
更新后的游戏程序(2009-3-10):
GuessNum.rar
折腾了半天,玩不来