上一个猜数游戏,大家过了把干瘾吧,今天再做了个游戏给大家玩玩“四则运算练习器”
我相信大家上学的时候,一定会遇到各种各样的计算吧,为了提高自己的口算而做大量的计算练习,从而买了许多练习书,现在还用买练习书吗?你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);
}