上一个猜数游戏,大家过了把干瘾吧,今天再做了个游戏给大家玩玩“四则运算练习器”
我相信大家上学的时候,一定会遇到各种各样的计算吧,为了提高自己的口算而做大量的计算练习,从而买了许多练习书,现在还用买练习书吗?你OUT了
眼见为实
四则运算练习器界面 选择运算符为加法
选择难度为初级 单击出题
写入答案后单击确定(当答案正确时) 写入答案后单击确定(当答案错误时)
说明:初级(0~10以内) 中级(0~50以内) 高级(0~100以内)
实现过程:
打开VC6.0--->选择Win32 DialogBasedApplication--->工程名命名为“四则运算练习”
搭建图形界面:
在搭建图形姐面前先学习两个控件 :单选按钮 组框
搭建如下图所示的图形界面:
设置单选按钮控件的属性为组:
双击单选按钮—>选择属性
勾上组
设置控件的名字和ID:
控件名 |
控件ID |
加 |
IDC_RADIO1 |
减 |
IDC_RADIO2 |
乘 |
IDC_RADIO3 |
除 |
IDC_RADIO4 |
初级 |
IDC_RADIO5 |
中级 |
IDC_RADIO6 |
高级 |
IDC_RADIO7 |
出题 |
IDC_START |
出题框 |
IDC_EDIT1 |
答案框 |
IDC_EDIT2 |
余数框 |
IDC_EDIT3 |
确认 |
IDC_OK1 |
老规矩:在写代码前先学几个函数
函数名: CheckRadioButton
函数功能:指定一组单选按钮中某一个按钮的状态
函数原型:
BOOL CheckRadioButton(
_In_ HWND hDlg,
_In_ int nIDFirstButton,
_In_ int nIDLastButton,
_In_ int nIDCheckButton
);
参数:
第一个参数:对话框的句柄
第二个参数:指定的该组单选按钮控件中第一个单选按钮的ID
第三个参数:指定该组单选按钮控件中最后一个单选按钮的ID
第四个参数:id
参考文章:CheckRadioButton函数
程序代码:
#include "stdafx.h" #include <windows.h> #include <windowsx.h> #include <time.h> #include "resource.h" #include "MainDlg.h" BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { return TRUE; } int i1 = 0; int i2 = 0; int i3 = 0; int i4 = 0; int isFlag = 0;//标示用户是否选择了除法 //得到随机数 void GetRand(void) { time_t a;//保存时间 //随机数种子 srand((unsigned)time(&a)); i1 = rand(); i2 = rand(); } //加法 void Add(HWND hwnd,int flag) { TCHAR str[256]; GetRand(); if(1==flag)//初级 { i1 = i1 % 10; i2 = i2 % 10; i3 = i1 + i2; } else if(2==flag)//中级 { i1 = i1 % 50; i2 = i2 % 50; i3 = i1 + i2; } else if(3==flag)//高级 { i1 = i1 % 100; i2 = i2 % 100; i3 = i1 + i2; } wsprintf(str,"%d+%d",i1,i2); SetDlgItemText(hwnd,IDC_EDIT1,str); SetDlgItemText(hwnd,IDC_EDIT2,NULL); } //减法 void Sub(HWND hwnd,int flag) { TCHAR str[256]; GetRand(); if(i2>i1)//保证i2<i1 { i1 = i1 ^ i2; i2 = i1 ^ i2; i1 = i1 ^ i2; } if(1==flag)//初级 { i1 = i1 % 10; i2 = i2 % 10; i3 = i1 - i2; } else if(2==flag)//中级 { i1 = i1 % 50; i2 = i2 % 50; i3 = i1 - i2; } else if(3==flag)//高级 { i1 = i1 % 100; i2 = i2 % 100; i3 = i1 - i2; } wsprintf(str,"%d-%d",i1,i2); SetDlgItemText(hwnd,IDC_EDIT1,str); SetDlgItemText(hwnd,IDC_EDIT2,NULL); } //乘法 void Mul(HWND hwnd,int flag) { TCHAR str[256]; GetRand(); if(1==flag)//初级 { i1 = i1 % 10; i2 = i2 % 10; i3 = i1 * i2; } else if(2==flag)//中级 { i1 = i1 % 50; i2 = i2 % 50; i3 = i1 * i2; } else if(3==flag)//高级 { i1 = i1 % 100; i2 = i2 % 100; i3 = i1 * i2; } wsprintf(str,"%d*%d",i1,i2); SetDlgItemText(hwnd,IDC_EDIT1,str); SetDlgItemText(hwnd,IDC_EDIT2,NULL); } //除法 void Div(HWND hwnd,int flag) { isFlag = 1;//表示用户选择了除法 TCHAR str[256]; GetRand(); if(0 == i2)//保证除数不为0 { i2++; } if(1==flag)//初级 { i1 = i1 % 10; i2 = i2 % 10; i3 = i1 / i2; i4 = i1 % i2; } else if(2==flag)//中级 { i1 = i1 % 50; i2 = i2 % 50; i3 = i1 / i2; i4 = i1 % i2; } else if(3==flag)//高级 { i1 = i1 % 100; i2 = i2 % 100; i3 = i1 / i2; i4 = i1 % i2; } wsprintf(str,"%d/%d",i1,i2); SetDlgItemText(hwnd,IDC_EDIT1,str); SetDlgItemText(hwnd,IDC_EDIT2,NULL); SetDlgItemText(hwnd,IDC_EDIT3,NULL); } int Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_RADIO1:/*选择运算符+*/ case IDC_RADIO2:/*选择运算符-*/ case IDC_RADIO3:/*选择运算符**/ case IDC_RADIO4:/*选择运算符/*/ { /*指定一组单选按钮中某一个按钮的选定状态*/ CheckRadioButton(hwnd,IDC_RADIO1,IDC_RADIO4,id); } break; case IDC_RADIO5:/*选择难度:初级*/ case IDC_RADIO6:/*选择难度:中级*/ case IDC_RADIO7:/*选择难度:高级*/ { /*指定一组单选按钮中某一个按钮的选中状态*/ CheckRadioButton(hwnd,IDC_RADIO5,IDC_RADIO7,id); } break; case IDC_START:/*开始*/ { /*定义变量 iOperator 接收选中的运算符的id*/ UINT iOperator = GetCheckRadioButton(hwnd,IDC_RADIO1,IDC_RADIO4); /*定义变量 iDiffcult 接收选中的运算符的id*/ UINT iDiffcult = GetCheckRadioButton(hwnd,IDC_RADIO5,IDC_RADIO7); if(IDC_RADIO1 == iOperator)/*加法*/ { if(IDC_RADIO5 == iDiffcult)/*初级*/ { Add(hwnd,1); } if(IDC_RADIO6 == iDiffcult)/*中级*/ { Add(hwnd,2); } if(IDC_RADIO7 == iDiffcult)/*高级*/ { Add(hwnd,3); } } if(IDC_RADIO2 == iOperator)/*减法*/ { if(IDC_RADIO5 == iDiffcult)/*初级*/ { Sub(hwnd,1); } if(IDC_RADIO6 == iDiffcult)/*中级*/ { Sub(hwnd,2); } if(IDC_RADIO7 == iDiffcult)/*高级*/ { Sub(hwnd,3); } } if(IDC_RADIO3 == iOperator)/*乘法*/ { if(IDC_RADIO5 == iDiffcult)/*初级*/ { Mul(hwnd,1); } if(IDC_RADIO6 == iDiffcult)/*中级*/ { Mul(hwnd,2); } if(IDC_RADIO7 == iDiffcult)/*高级*/ { Mul(hwnd,3); } } if(IDC_RADIO4 == iOperator)/*除法*/ { if(IDC_RADIO5 == iDiffcult)/*易*/ { Div(hwnd,1); } if(IDC_RADIO6 == iDiffcult)/*中*/ { Div(hwnd,2); } if(IDC_RADIO7 == iDiffcult)/*难*/ { Div(hwnd,3); } } } break; case IDC_OK1://确定 { TCHAR str[256]; TCHAR str1[256]; /*得到用户输入的结果*/ GetDlgItemText(hwnd,IDC_EDIT2,str,sizeof(str)); GetDlgItemText(hwnd,IDC_EDIT3,str1,sizeof(str1)); /*将用户输入的结果转换成整数*/ int j = atoi(str); int k = atoi(str1); if(1 == isFlag)//当用户选择了除法 { if(0==i4)//当余数为0时 { if(i3 == j)/*用户输入的结果与标准结果判定*/ { MessageBox(hwnd,TEXT("恭喜你,回答正确"),"",MB_OK); } else { MessageBox(hwnd,TEXT("回答错误"),"",MB_OK | MB_ICONERROR); } } else//余数不为0 { if((i3 == j) && (i4 == k)) { MessageBox(hwnd,TEXT("恭喜你,回答正确"),"",MB_OK); } else { MessageBox(hwnd,TEXT("回答错误"),"",MB_OK | MB_ICONERROR); } } } else { if(i3 == j)/*用户输入的结果与标准结果判定*/ { MessageBox(hwnd,TEXT("恭喜你,回答正确"),"",MB_OK); } else { MessageBox(hwnd,TEXT("回答错误"),"",MB_OK | MB_ICONERROR); } } } break; default: break; } return 0; } /*用于得到单选框选中后的项目的id*/ int GetCheckRadioButton(HWND hwnd, int FirstId, int LastId) { int i; for(i = FirstId ; i <= LastId ; i++) { /*确定某个单选按钮是否选中*/ UINT iChecked = IsDlgButtonChecked(hwnd,i); /*如果某个单选按钮选中,返回该单选按钮的id*/ if(BST_CHECKED == iChecked) { return i; } } return -1;/*如果没选中单选按钮,则返回-1*/ } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); }
原文:http://blog.csdn.net/u010105970/article/details/18413261