#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include <graphics.h>
int r[3][4]={{30,20,130,60},{170,20,220,60},{260,20,310,60}};//三个按钮的二维数组
int guess,num;
char s[3];//输入字符串变量
int button_judge(int x,int y)//按钮判断函数
{
if(x>r[0][0] && x<r[0][2] && y>r[0][1] && y<r[0][3])return 1;
if(x>r[1][0] && x<r[1][2] && y>r[1][1] && y<r[1][3])return 2;
if(x>r[2][0] && x<r[2][2] && y>r[2][1] && y<r[2][3])return 3;
return 0;
}
void user()//用户猜数
{
srand(time(NULL));//时间种子以改变重新开始时guess的值
guess=rand()%100+1;//产生随机数
while(num!=guess)
{
if(num<guess)
{
InputBox(s,30,"低了,请再次输入");
continue;
}
else
{
if(num>guess)
{
InputBox(s,30,"高了,请再次输入");
continue;
}
else
{
closegraph();//关闭绘图环境
exit(0);//正常退出
}
}
}
}
int main()
{
initgraph(480,360);//初始化窗口
setbkcolor(WHITE);
cleardevice();
MOUSEMSG m;//鼠标指针
RECT R1={r[0][0],r[0][1],r[0][2],r[0][3]};
RECT R2={r[1][0],r[1][1],r[1][2],r[1][3]};
RECT R3={r[2][0],r[2][1],r[2][2],r[2][3]};
while(1){//最外层循环,起重新开始作用
//char a;
LOGFONT f;//字体样式指针
gettextstyle(&f); //获取字体样式
_tcscpy(f.lfFaceName,_T("宋体")); //设置字体为宋体
f.lfQuality = ANTIALIASED_QUALITY; // 设置输出效果为抗锯齿
settextstyle(&f); // 设置字体样式
settextcolor(BLACK); //BLACK在graphic.h头文件里面被定义为黑色的颜色常量
drawtext("用户",&R1,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R1内输入文字,水平居中,垂直居中,单行显示
drawtext("计算机",&R2,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R2内输入文字,水平居中,垂直居中,单行显示
drawtext("退出",&R3,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R3内输入文字,水平居中,垂直居中,单行显示
setlinecolor(BLACK);
rectangle(r[0][0],r[0][1],r[0][2],r[0][3]);
rectangle(r[1][0],r[1][1],r[1][2],r[1][3]);
rectangle(r[2][0],r[2][1],r[2][2],r[2][3]);
while(true)
{
MOUSEMSG m = GetMouseMsg();//获取一条鼠标消息
switch(m.uMsg)
{
case WM_MOUSEMOVE:
setrop2(R2_XORPEN);
setlinecolor(LIGHTCYAN);//线条颜色为亮青色
setlinestyle(PS_SOLID, 3);//设置画线样式为实现,10磅
setfillcolor(WHITE);//填充颜色为白色
break;
case WM_LBUTTONDOWN:
setrop2(R2_NOTXORPEN);//二元光栅——NOT(屏幕颜色 XOR 当前颜色)
switch(button_judge(m.x,m.y)) //结构体实现A,B,C三个功能
{
case 1:
{
InputBox(s,30,"请输入一个1-100间的数");
user();
FlushMouseMsgBuffer();//单击事件后清空鼠标消息
};break;
case 2:
{
int max=100;
int min=0;//二分法首先定义一个最大最小值
while(1)
{
InputBox(s,30,"请输入一个1-100间的数");
scanf(s,"%d",&num);//将输入字符串依次扫描到全局变量里面
int c;//定义整形常量C,通过给c赋值,来执行if条件语句,判断高低
// printf("我猜对(1)了吗?是高(0)了还是低(2)了:");
scanf("%d",&c);
if(c>1)
{
min=guess;//根据情况每次小循环改变min max的值
guess=int((min+max)/2);
continue;
}
else if(c<1)
{
max=guess;
guess=int((min+max)/2);
continue;
}
}
};break;
case 3:
closegraph();//关闭绘图环境
exit(0);//正常退出
default:
FlushMouseMsgBuffer();//单击事件后清空鼠标消息
break;
}
getchar();
}
}
}
return 0;
}
举报
用easyx给猜数游戏做图形界面 运行后输入任何数总显示低了重新输入的死循环
举报
错在scanf,这个函数并不能将字符串转为整形。可能你需要sscanf。