二果汤 2019-12-22 19:59 采纳率: 80%
浏览 401
已采纳

easyX和vs打字游戏,为何第二关输入的字母显示是空格及如何按ese返回主菜单

#define _CRT_SECURE_NO_WARNINGS
#include
#include //图形库 需要额外安装
#include
#include
#include
#include
#include
#include
#pragma comment(lib,"WinMM.Lib")
#define _CRT_SECURE_NO_WARNINGS
MOUSEMSG m;
IMAGE background;
IMAGE star[2];
int right = 0;
int wrong = 0;
char target;
int x, y;
struct letter//第一关字母结构体
{
int x;
int y;
TCHAR target;//字符

};
struct letter array[5];//每次出现五个字母

struct TARGET//第二关单词结构体
{
int x;
int y;
TCHAR str[20];
};

struct USERKEY//第二关保存用户输入得字母
{
int x;
int y;
TCHAR str[20];
}userkey = { 100, 370, L" " };

void outtextxy_int(int x, int y, const char* format, int num)//输出整数
{
char str[20] = " ";
sprintf_s(str, format, num);
outtextxy(x, y, TCHAR(str));
}

void outtextxy_double(int x, int y, const char* format, double num)//输出浮点数
{
char str[20] = " ";
sprintf_s(str, format, num);
outtextxy(x, y, TCHAR(str));
}
void loadResource()//加载资源,把文字给图片
{
loadimage(&background, L"键盘背景4.jpg", 1000, 650);
loadimage(star + 0, L"星星掩码图.jpg", 80, 80);
loadimage(star + 1, L"星星背景图.jpg", 80, 80);
}

//输出带星星的字母
void outtextimage(int x, int y, char target)
{
setbkmode(TRANSPARENT);
putimage(x, y, star + 0, SRCAND);
putimage(x, y, star + 1, SRCPAINT);
settextstyle(25, 0, _T("宋体"));
outtextxy(x + 35, y + 32, target);
}

//初始化五个坐标
void initArraychar(struct letter array[], int curPos)
{

//srand((unsigned int)time(NULL));
while (array[curPos].target == NULL || array[curPos].target == array[(curPos + 1) % 5].target ||
    array[curPos].target == array[(curPos + 2) % 5].target ||
    array[curPos].target == array[(curPos + 3) % 5].target ||
    array[curPos].target == array[(curPos + 4) % 5].target)
{
    array[curPos].target = rand() % 26 + 65;
}
while (array[curPos].x == array[(curPos + 1)].x ||
    array[curPos].x == array[(curPos + 2)].x ||
    array[curPos].x == array[(curPos + 3)].x ||
    array[curPos].x == array[(curPos + 4)].x)
{
    array[curPos].x = rand() % 800;
}
array[curPos].y = rand() % 80 - 100;

}

void Pause()//按空格键暂停
{

    IMAGE img;  //准备图片
    loadimage(&img, L"f.jpg", 1000, 650);   //加载图片  L"背景.jpg"是图片的相对路径,也可以使用绝对路径
    putimage(0, 0, &img);   //在指定位置贴图  前面的(0,0)是坐标  后面的&img是要贴的图片
    setfillcolor(COLORREF RGB(240, 230, 140));
    fillrectangle(750, 130, 950, 190);
    fillrectangle(750, 210, 950, 270);
    TCHAR ch[] = _T("SNAP____");
    settextstyle(35, 0, ch);
    settextcolor(COLORREF RGB(30, 144, 255));
    TCHAR begin[] = _T("继续游戏");
    TCHAR go[] = _T("返回主菜单");
    setbkmode(TRANSPARENT);
    outtextxy(750 + 10, 130 + 10, begin);
    outtextxy(750 + 10, 210 + 10, go);
    MOUSEMSG m;
    while (1)
    {
        m = GetMouseMsg();
        if (m.x >= 750 && m.x <= 930 && m.y >= 130 && m.y <= 190)//开始游戏
        {
            setlinecolor(RED);
            rectangle(750, 130, 930, 190);
            if (m.uMsg == WM_LBUTTONDOWN)
            {
                break;
            }

        }
        else if (m.x >= 750 && m.x <= 930 && m.y >= 210 && m.y <= 270)//退出游戏
        {
            setlinecolor(RED);
            rectangle(750, 210, 930, 270);
            if (m.uMsg == WM_LBUTTONDOWN)
            {
                exit(0);
            }
        }
        else
        {
            setlinecolor(WHITE);
            rectangle(750, 130, 930, 190);
            rectangle(750, 210, 930, 270);
        }
    }

}

//开始画键盘
void keyboard()
{
IMAGE img; //准备图片

loadimage(&img, L"键盘背景4.jpg", 1000, 650);   //加载图片  L"背景.jpg"是图片的相对路径,也可以使用绝对路径
setbkmode(TRANSPARENT);

putimage(0, 0, &img);   //在指定位置贴图  前面的(0,0)是坐标  后面的&img是要贴的图片
int i, j, k, m, n;
char one[] = { 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P' };//第一行
char two[] = { 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L' };//第二行
char three[] = { 'Z', 'X', 'C', 'V', 'B', 'N', 'M' };
char four[] = { '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+' };
char five[] = { '`', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=' };
char oneend[] = { '{', '}', '|' };
char oneend1[] = { '[', ']', '\\' };
char three1[] = { ':', '"' };
char three2[] = { ';', '\'' };
char h1[] = { '<', '>', '?' };
char h2[] = { ',', '.', '/' };
setcolor(WHITE);
rectangle(220 - 100, 600 - 50 - 100, 290 - 100, 640 - 50 - 100);  //Tab(220,550),(290,590)
line(220 - 100, 600 - 150, 220 - 3 - 100, 603 - 150);
line(220 - 3 - 100, 603 - 150, 220 - 100 - 3, 643 - 150);
line(220 - 100, 640 - 150, 220 - 3 - 100, 643 - 150);
line(290 - 100, 640 - 150, 293 - 100, 643 - 150);
line(220 - 3 - 100, 643 - 150, 293 - 100, 643 - 150);
line(290 - 100, 600 - 150, 293 - 100, 603 - 150);
line(293 - 100, 603 - 150, 293 - 100, 643 - 150);
TCHAR ch[] = _T("Arial");
settextstyle(20, 0, ch);
TCHAR tab[] = _T("Tab");
outtextxy(230 - 100, 610 - 150, tab);

rectangle(220 - 100, 650 - 150, 300 - 100, 690 - 150);  //CapsLock   (220,600),(300,640)
line(220 - 100, 650 - 150, 220 - 3 - 100, 653 - 150);
line(220 - 3 - 100, 653 - 150, 220 - 3 - 100, 693 - 150);
line(220 - 100, 690 - 150, 220 - 3 - 100, 693 - 150);
line(300 - 100, 690 - 150, 303 - 100, 693 - 150);
line(220 - 3 - 100, 693 - 150, 303 - 100, 693 - 150);
line(300 - 100, 650 - 150, 303 - 100, 653 - 150);
line(303 - 100, 653 - 150, 303 - 100, 693 - 150);
settextstyle(17, 0, ch);
TCHAR CapsLock[] = _T("CapsLock");
outtextxy(230 - 100, 660 - 150, CapsLock);

rectangle(870 - 100, 550 - 150, 940 - 100, 590 - 150);  //Backspace   (870,500),(940,540)
line(870 - 100, 550 - 150, 870 - 3 - 100, 553 - 150);
line(870 - 3 - 100, 553 - 150, 870 - 3 - 100, 593 - 150);
line(870 - 100, 590 - 150, 870 - 3 - 100, 593 - 150);
line(940 - 100, 590 - 150, 943 - 100, 593 - 150);
line(870 - 3 - 100, 593 - 150, 943 - 100, 593 - 150);
line(940 - 100, 550 - 150, 943 - 100, 553 - 150);
line(943 - 100, 553 - 150, 943 - 100, 593 - 150);
settextstyle(16, 0, ch);
TCHAR Backspace[] = _T("Backspace");
outtextxy(875 - 100, 560 - 150, Backspace);


rectangle(220 - 100, 700 - 150, 330 - 100, 740 - 150);  //Shift   (220,650),(330,690)
line(220 - 100, 700 - 150, 220 - 100 - 3, 703 - 150);
line(220 - 3 - 100, 703 - 150, 220 - 3 - 100, 743 - 150);
line(220 - 100, 740 - 150, 220 - 3 - 100, 743 - 150);
line(330 - 100, 740 - 150, 333 - 100, 743 - 150);
line(220 - 3 - 100, 743 - 150, 333 - 100, 743 - 150);
line(330 - 100, 700 - 150, 333 - 100, 703 - 150);
line(333 - 100, 703 - 150, 333 - 100, 743 - 150);
settextstyle(20, 0, ch);
TCHAR Shift[] = _T("Shift");
outtextxy(230 - 100, 710 - 150, Shift);


for (i = 220 - 100; i < 860 - 100; i = i + 50)      //  键盘第零行13个键
{

    rectangle(i, 550 - 150, i + 40, 590 - 150);    //键盘第一个字母坐标(220,500),(260,540)
    line(i, 550 - 150, i - 3, 553 - 150);
    line(i - 3, 553 - 150, i - 3, 593 - 150);
    line(i, 590 - 150, i - 3, 593 - 150);
    line(i + 40, 590 - 150, i + 43, 593 - 150);
    line(i - 3, 593 - 150, i + 43, 593 - 150);
    line(i + 40, 550 - 150, i + 43, 553 - 150);
    line(i + 43, 553 - 150, i + 43, 593 - 150);
    settextstyle(10, 0, ch);
    k = (i - 220 + 100) / 50;
    outtextxy(i + 5, 555 - 150, four[k]);
    settextstyle(16, 0, ch);
    outtextxy(i + 20, 570 - 150, five[k]);
}

for (i = 300 - 100; i < 800 - 100; i = i + 50)      //  键盘第一行10个键
{
    rectangle(i, 600 - 150, i + 40, 640 - 150);    //键盘第一个字母坐标(300,550),(340,590)
    line(i, 600 - 150, i - 3, 603 - 150);
    line(i - 3, 603 - 150, i - 3, 643 - 150);
    line(i, 640 - 150, i - 3, 643 - 150);
    line(i + 40, 640 - 150, i + 43, 643 - 150);
    line(i - 3, 643 - 150, i + 43, 643 - 150);
    line(i + 40, 600 - 150, i + 43, 603 - 150);
    line(i + 43, 603 - 150, i + 43, 643 - 150);
    TCHAR ch[] = _T("Arial");
    settextstyle(20, 0, ch);
    k = (i - 300 + 100) / 50;
    outtextxy(i + 10, 610 - 150, one[k]);
}


for (i = 800 - 100; i < 940 - 100; i = i + 50)
{
    rectangle(i, 600 - 150, i + 40, 640 - 150);    //键盘第一个字母坐标(800,550),(850,590)
    line(i, 600 - 150, i - 3, 603 - 150);
    line(i - 3, 603 - 150, i - 3, 643 - 150);
    line(i, 640 - 150, i - 3, 643 - 150);
    line(i + 40, 640 - 150, i + 43, 643 - 150);
    line(i - 3, 643 - 150, i + 43, 643 - 150);
    line(i + 40, 600 - 150, i + 43, 603 - 150);
    line(i + 43, 603 - 150, i + 43, 643 - 150);
    settextstyle(15, 0, ch);
    k = (i - 800 + 100) / 50;
    outtextxy(i + 5, 605 - 150, oneend[k]);
    outtextxy(i + 20, 620 - 150, oneend1[k]);
}


for (j = 310 - 100; j < 760 - 100; j = j + 50)
{
    rectangle(j, 650 - 150, j + 40, 690 - 150);    //键盘第一个字母坐标(310,600),(350,640)
    line(j, 650 - 150, j - 3, 653 - 150);
    line(j - 3, 653 - 150, j - 3, 693 - 150);
    line(j, 690 - 150, j - 3, 693 - 150);
    line(j + 40, 690 - 150, j + 43, 693 - 150);
    line(j - 3, 693 - 150, j + 43, 693 - 150);
    line(j + 40, 650 - 150, j + 43, 653 - 150);
    line(j + 43, 653 - 150, j + 43, 693 - 150);
    TCHAR ch[] = _T("Arial");
    settextstyle(20, 0, ch);
    k = (j - 310 + 100) / 50;
    outtextxy(j + 10, 660 - 150, two[k]);
}


for (j = 760 - 100; j < 850 - 100; j = j + 50)
{                                                  //       310,600    350,640
    rectangle(j, 650 - 150, j + 40, 690 - 150);    //键盘第一个字母坐标(760,600),(800,640)
    line(j, 650 - 150, j - 3, 653 - 150);
    line(j - 3, 653 - 150, j - 3, 693 - 150);
    line(j, 690 - 150, j - 3, 693 - 150);
    line(j + 40, 690 - 150, j + 43, 693 - 150);
    line(j - 3, 693 - 150, j + 43, 693 - 150);
    line(j + 40, 650 - 150, j + 43, 653 - 150);
    line(j + 43, 653 - 150, j + 43, 693 - 150);
    settextstyle(20, 0, ch);
    k = (j - 760 + 100) / 50;
    outtextxy(j + 7, 655 - 150, three1[k]);
    outtextxy(j + 20, 669 - 150, three2[k]);
}


rectangle(860 - 100, 650 - 150, 940 - 100, 690 - 150);    //Enter(860,600),(940,640)
line(860 - 100, 650 - 150, 860 - 3 - 100, 653 - 150);
line(860 - 3 - 100, 653 - 150, 860 - 3 - 100, 693 - 150);
line(860 - 100, 690 - 150, 860 - 3 - 100, 693 - 150);
line(940 - 100, 690 - 150, 943 - 100, 693 - 150);
line(860 - 3 - 100, 693 - 150, 943 - 100, 693 - 150);
line(940 - 100, 650 - 150, 943 - 100, 653 - 150);
line(943 - 100, 653 - 150, 943 - 100, 693 - 150);
settextstyle(20, 0, ch);
TCHAR Enter[] = _T("Enter");
settextstyle(20, 0, ch);
outtextxy(870 - 100, 660 - 150, Enter);


for (m = 340 - 100; m < 690 - 100; m = m + 50)
{
    rectangle(m, 700 - 150, m + 40, 740 - 150);    //键盘第一个字母坐标(340,650),(380,690)
    line(m, 700 - 150, m - 3, 703 - 150);
    line(m - 3, 703 - 150, m - 3, 743 - 150);
    line(m, 740 - 150, m - 3, 743 - 150);
    line(m + 40, 740 - 150, m + 43, 743 - 150);
    line(m - 3, 743 - 150, m + 43, 743 - 150);
    line(m + 40, 700 - 150, m + 43, 703 - 150);
    line(m + 43, 703 - 150, m + 43, 743 - 150);
    TCHAR ch[] = _T("Arial");
    settextstyle(20, 0, ch);
    k = (m - 310 + 100) / 50;
    outtextxy(m + 10, 710 - 150, three[k]);
}


for (m = 690 - 100; m < 830 - 100; m = m + 50)
{
    rectangle(m, 700 - 150, m + 40, 740 - 150);    //(690,650),(830,690)
    line(m, 700 - 150, m - 3, 703 - 150);
    line(m - 3, 703 - 150, m - 3, 743 - 150);
    line(m, 740 - 150, m - 3, 743 - 150);
    line(m + 40, 740 - 150, m + 43, 743 - 150);
    line(m - 3, 743 - 150, m + 43, 743 - 150);
    line(m + 40, 700 - 150, m + 43, 703 - 150);
    line(m + 43, 703 - 150, m + 43, 743 - 150);
    settextstyle(20, 0, ch);
    k = (m - 690 + 100) / 50;
    outtextxy(m + 5, 706 - 150, h1[k]);
    outtextxy(m + 23, 717 - 150, h2[k]);
}


rectangle(840 - 100, 700 - 150, 940 - 100, 740 - 150);    // Shift(840,650),(940,690)
line(840 - 100, 700 - 150, 840 - 3 - 100, 703 - 150);
line(840 - 3 - 100, 703 - 150, 840 - 3 - 100, 743 - 150);
line(840 - 100, 740 - 150, 840 - 3 - 100, 743 - 150);
line(940 - 100, 740 - 150, 943 - 100, 743 - 150);
line(840 - 3 - 100, 743 - 150, 943 - 100, 743 - 150);
line(940 - 100, 700 - 150, 943 - 100, 703 - 150);
line(943 - 100, 703 - 150, 943 - 100, 743 - 150);
settextstyle(20, 0, ch);
outtextxy(850 - 100, 710 - 150, Shift);


rectangle(420 - 100, 700 - 100, 690 - 100, 740 - 100);//空格键
line(420 - 100, 700 - 100, 420 - 3 - 100, 700 + 3 - 100);
line(420 - 3 - 100, 700 + 3 - 100, 420 - 3 - 100, 740 + 3 - 100);
line(420 - 3 - 100, 740 + 3 - 100, 420 - 100, 740 - 100);
line(420 - 3 - 100, 740 + 3 - 100, 690 + 3 - 100, 740 + 3 - 100);
line(690 + 3 - 100, 740 + 3 - 100, 690 - 100, 740 - 100);
line(690 - 100, 700 - 100, 690 + 3 - 100, 700 + 3 - 100);
line(690 + 3 - 100, 700 + 3 - 100, 690 + 3 - 100, 740 + 3 - 100);


for (m = 220 - 100; m < 420 - 100; m = m + 50)//空格键左边
{
    rectangle(m, 700 - 100, m + 40, 740 - 100);//ctrl
    line(m, 700 - 100, m - 3, 700 + 3 - 100);
    line(m - 3, 700 + 3 - 100, m - 3, 740 + 3 - 100);
    line(m - 3, 740 + 3 - 100, m, 740 - 100);
    line(m - 3, 740 + 3 - 100, m + 40 + 3, 740 + 3 - 100);
    line(m + 40, 740 - 100, m + 40 + 3, 743 - 100);
    line(m + 40, 700 - 100, m + 40 + 3, 703 - 100);
    line(m + 40 + 3, 703 - 100, m + 40 + 3, 743 - 100);

}


for (n = 700 - 100; n < 950 - 100; n = n + 50)
{
    rectangle(n, 740 - 100, n + 40, 700 - 100);//右箭头键
    line(n, 700 - 100, n - 3, 703 - 100);
    line(n - 3, 703 - 100, n - 3, 743 - 100);
    line(n - 3, 743 - 100, n + 40 + 3, 743 - 100);
    line(n - 3, 743 - 100, n, 740 - 100);
    line(n + 40, 700 - 100, n + 43, 703 - 100);
    line(n + 43, 703 - 100, n + 43, 743 - 100);
    line(n + 40, 740 - 100, n + 43, 743 - 100);

}

settextstyle(17, 0, ch);
TCHAR Ctrl[] = _T("Ctrl");
TCHAR Fn[] = _T("Fn");
TCHAR Win[] = _T("Win");
TCHAR Alt[] = _T("Alt");
TCHAR Home[] = _T("Hom");
TCHAR End[] = _T("End");
TCHAR Up[] = _T("Up");

outtextxy(130, 610, Ctrl);
outtextxy(180, 610, Fn);
outtextxy(230, 610, Win);
outtextxy(280, 610, Alt);
outtextxy(810, 610, End);
outtextxy(760, 610, Up);
outtextxy(705, 610, Home);
outtextxy(660, 610, Ctrl);
outtextxy(610, 610, Alt);

setfillcolor(COLORREF RGB(240, 230, 140));
fillrectangle(30, 30, 240, 80);
TCHAR pause[] = _T("退出游戏请按Ese");
settextstyle(25, 0, _T("宋体"));
setbkmode(TRANSPARENT);
outtextxy(30,45, pause);
//暂停判断

}

//开始菜单
void beginning()
{
IMAGE img; //准备图片

loadimage(&img, L"欢迎界面3.jpg", 1000, 650);   //加载图片  L"背景.jpg"是图片的相对路径,也可以使用绝对路径

putimage(0, 0, &img);   //在指定位置贴图  前面的(0,0)是坐标  后面的&img是要贴的图片
//cleardevice();
setfillcolor(COLORREF RGB(240, 230, 140));
fillrectangle(750, 130, 930, 190);
fillrectangle(750, 210, 930, 270);
TCHAR ch[] = _T("SNAP____");
settextstyle(40, 0, ch);
settextcolor(COLORREF RGB(30, 144, 255));
TCHAR begin[] = _T("开始游戏");
TCHAR go[] = _T("退出游戏");
setbkmode(TRANSPARENT);
outtextxy(750 + 10, 130 + 10, begin);
outtextxy(750 + 10, 210 + 10, go);

}

//开始菜单鼠标交互
void mouse()
{
initgraph(1000, 650);
beginning();
MOUSEMSG m;
while (1)
{
m = GetMouseMsg();
if (m.x >= 750 && m.x <= 930 && m.y >= 130 && m.y <= 190)//开始游戏
{
setlinecolor(RED);
rectangle(750, 130, 930, 190);
if (m.uMsg == WM_LBUTTONDOWN)
{
break;
}

    }
    else if (m.x >= 750 && m.x <= 930 && m.y >= 210 && m.y <= 270)//退出游戏
    {
        setlinecolor(RED);
        rectangle(750, 210, 930, 270);
        if (m.uMsg == WM_LBUTTONDOWN)
        {
            exit(0);
        }
    }
    else
    {
        setlinecolor(WHITE);
        rectangle(750, 130, 930, 190);
        rectangle(750, 210, 930, 270);
    }
}
closegraph();

}

//关卡设置
void level1()
{
mouse();//鼠标交会函数关闭了窗口
initgraph(1000, 650);
IMAGE img; //准备图片
loadimage(&img, L"关卡选择.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径
putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片
setfillcolor(COLORREF RGB(255, 192, 203));
fillrectangle(365, 230, 675, 280);
fillrectangle(365, 300, 675, 350);
fillrectangle(365, 370, 675, 420);
TCHAR ch[] = T("SNAP___");
settextstyle(30, 0, ch);
settextcolor(COLORREF RGB(30, 144, 255));
TCHAR first[] = _T("模式一:轻轻松松");
TCHAR second[] = _T("模式二:小菜一碟");
TCHAR go[] = _T("退出游戏");
setbkmode(TRANSPARENT);
outtextxy(415 - 50 + 30, 230 + 10, first);
outtextxy(415 - 50 + 30, 300 + 10, second);
outtextxy(415 - 50 + 10 + 30 + 50, 370 + 10, go);
MOUSEMSG m;
while (1)
{
m = GetMouseMsg();
if (m.x >= 365 && m.x <= 675 && m.y >= 230 && m.y <= 280)//开始游戏
{
setlinecolor(RED);
rectangle(365, 230, 675, 280);
if (m.uMsg == WM_LBUTTONDOWN)
{
break;
}

    }
    else if (m.x >= 365 && m.x <= 675 && m.y >= 300 && m.y <= 350)//退出游戏
    {
        setlinecolor(RED);
        rectangle(365, 300, 675, 350);
        if (m.uMsg == WM_LBUTTONDOWN)
        {
            break;
        }
    }
    else if (m.x >= 365 && m.x <= 675 && m.y >= 370 && m.y <= 420)//退出游戏
    {
        setlinecolor(RED);
        rectangle(365, 370, 675, 420);
        if (m.uMsg == WM_LBUTTONDOWN)
        {
            exit(0);
        }
    }
    else
    {
        setlinecolor(WHITE);
        rectangle(365, 230, 675, 280);
        rectangle(365, 300, 675, 350);
        rectangle(365, 370, 675, 420);
    }
}
closegraph();

}

//第一关游戏界面
void gamefirst()
{
char s[10] = { 0 };
char f[10] = { 0 };
int score = 0;
int wrong = 0;
//level();//也关闭了屏幕
initgraph(1000, 650);
keyboard();
loadResource();
//outtextimage(200, 200, 'S');
for (int i = 0; i < 5; i++)
{
initArraychar(array, i);
}
initgraph(1000, 650);//要去掉吗?
while (1)//文字下降
{
BeginBatchDraw();
keyboard();
for (int i = 0; i < 5; i++)
{
array[i].y += 10;
if (array[i].y >= 400)
{
initArraychar(array, i);
score -= 10;
wrong++;
}
}
for (int i = 0; i < 5; i++)
{
outtextimage(array[i].x, array[i].y, array[i].target);
}
if (_kbhit())
{
char userkey = _getch();//接收用户输入
for (int i = 0; i < 5; i++)
{
if (array[i].target == userkey || array[i].target == userkey - ('a' - 'A'))
{
score += 10;
initArraychar(array, i);
break;
}
}
if (userkey == 27)
{
break;
}

    } 
    Sleep(100);
    EndBatchDraw();
}
//closegraph();
//initgraph(1000, 650);
beginning();
Sleep(100);

}

void highlight(char c)//高亮
{
keyboard();
if (_kbhit())
{
char c = _getch();//接收用户输入
fillrectangle(x, y, x + 40, y + 40);
Sleep(20);
clearrectangle(x, y, x + 40, y + 40);
}
if (c >= 'A' && c <= 'Z')
{
c = c + 32;
if (c >= 'a' && c <= 'z') //若为小写

        switch (c)
        {
        case 'q':
        {
            fillrectangle(200, 450, 200 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(200, 450, 200 + 40, 450 + 40);
            break;
        }
        case 'w':
        {
            fillrectangle(250, 450, 250 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(250, 450, 250 + 40, 450 + 40);
            break;
        }
        case 'e':
        {
            fillrectangle(300, 450, 300 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(300, 450, 300 + 40, 450 + 40);
            break;
        }
        case 'r':
        {
            fillrectangle(350, 450, 350 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(350, 450, 350 + 40, 450 + 40);
            break;
        }//x = 350; y = 450; break;
        case 't':
        {
            fillrectangle(400, 450, 400 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(400, 450, 400 + 40, 450 + 40);
            break;
        }//x = 400; y = 450; break;
        case 'y':
        {
            fillrectangle(450, 450, 450 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(450, 450, 450 + 40, 450 + 40);
            break;
        }//x = 450; y = 450; break;
        case 'u':
        {
            fillrectangle(500, 450, 500 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(500, 450, 500 + 40, 450 + 40);
            break;
        }//x = 500; y = 450; break;
        case 'i':
        {
            fillrectangle(550, 450, 550 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(550, 450, 550 + 40, 450 + 40);
            break;
        }//x = 550; y = 450; break;
        case 'o':
        {
            fillrectangle(600, 450, 600 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(600, 450, 600 + 40, 450 + 40);
            break;
        }//x = 600; y = 450; break;
        case 'p':
        {
            fillrectangle(650, 450, 650 + 40, 450 + 40);
            Sleep(20);
            clearrectangle(650, 450, 650 + 40, 450 + 40);
            break;
        }//x = 650; y = 450; break;
            //case '[':x = 700; y = 450; break;
            //case '{':x = 700; y = 450; break;
            //case ']':x = 750; y = 450; break;
            //case '}':x = 750; y = 450; break;
            //case '|':x = 800; y = 450; break;
            //case 'Cap':x = 120; y = 500; break;
        case 'a':
        {
            fillrectangle(210, 500, 210 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(210, 500, 210 + 40, 500 + 40);
            break;
        }//x = 210; y = 500; break;
        case 's':
        {
            fillrectangle(260, 500, 260 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(260, 500, 260 + 40, 500 + 40);
            break;
        }//x = 260; y = 500; break;
        case 'd':
        {
            fillrectangle(310, 500, 310 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(310, 500, 310 + 40, 500 + 40);
            break;
        }//x = 310; y = 500; break;
        case 'f':
        {
            fillrectangle(360, 500, 360 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(360, 500, 360 + 40, 500 + 40);
            break;
        }//x = 360; y = 500; break;
        case 'g':
        {
            fillrectangle(410, 500, 410 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(410, 500, 410 + 40, 500 + 40);
            break;
        }//x = 410; y = 500; break;
        case 'h':
        {
            fillrectangle(460, 500, 460 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(460, 500, 460 + 40, 500 + 40);
            break;
        }//x = 460; y = 500; break;
        case 'j':
        {
            fillrectangle(510, 500, 510 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(510, 500, 510 + 40, 500 + 40);
            break;
        }//x = 510; y = 500; break;
        case 'k':
        {
            fillrectangle(560, 500, 560 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(560, 500, 560 + 40, 500 + 40);
            break;
        }//x = 560; y = 500; break;
        case 'l':
        {
            fillrectangle(610, 500, 610 + 40, 500 + 40);
            Sleep(20);
            clearrectangle(610, 500, 610 + 40, 500 + 40);
            break;
        }//x = 610; y = 500; break;
        case 'z':
        {
            fillrectangle(240, 550, 240 + 40, 550 + 40);
            Sleep(20);
            clearrectangle(240, 550, 240 + 40, 550 + 40);
            break;
        }//x = 240; y = 550; break;
        case 'x':
        {
            fillrectangle(290, 550, 290 + 40, 550 + 40);
            Sleep(20);
            clearrectangle(290, 550, 290 + 40, 550 + 40);
            break;
        }//x = 290; y = 550; break;
        case 'c':
        {
            fillrectangle(340, 550, 340 + 40, 550 + 40);
            Sleep(20);
            clearrectangle(340, 550, 340 + 40, 550 + 40);
            break;
        }//x = 340; y = 550; break;
        case 'v':
        {
            fillrectangle(390, 550, 390 + 40, 550 + 40);
            Sleep(20);
            clearrectangle(390, 550, 390 + 40, 550 + 40);
            break;
        }//x = 390; y = 550; break;
        case 'b':
        {
            fillrectangle(440, 550, 440 + 40, 550 + 40);
            Sleep(20);
            clearrectangle(440, 550, 440 + 40, 550 + 40);
            break;
        }//x = 440; y = 550; break;
        case 'n':
        {
            fillrectangle(490, 550, 490 + 40, 550 + 40);
            Sleep(20);
            clearrectangle(490, 550, 490 + 40, 550 + 40);
            break;
        }//x = 490; y = 550; break;
        case 'm': {
            fillrectangle(540, 550, 540 + 40, 550 + 40);
            Sleep(20);
            clearrectangle(540, 550, 540 + 40, 550 + 40);
            break;
        }
        }
}


}

void InitTarget(TARGET words[], int n)//随机产生三个单词
{
settextstyle(20, 0, L"宋体");
TCHAR str[30][30] = { L"main", L"include", L"if", L"switch", L"break", L"char", L"void", L"continue",
L"for", L"while", L"do", L"int", L"unsigned", L"struct", L"static", L"malloc", L"free",
L"else", L"float", L"double", L"short", L"return", L"getchar", L"gets", L"include", L"realloc", L"pointer", L"default", L"long" };
//随机产生
wcscpy(words[n].str, str[rand() % 29]);
//判断重复
while (words[n].str == words[(n + 1) % 3].str || words[n].str == words[(n + 2) % 3].str)
{
wcscpy(words[n].str, str[rand() % 29]);
}
words[n].x = rand() % (900);
words[n].y = -20;
}

//设置分数
void drawscore()
{
settextcolor(RED);
settextstyle(30, 0, L"宋体");
outtextxy(800, 50,L"正确数:");
outtextxy_int(900, 50, "%d", right);
outtextxy(800, 100, L"失误数:");
outtextxy_int(900, 150, "%d", wrong);
outtextxy(800, 150, L"正确率:");
if (right + wrong == 0)
{
outtextxy_double(900, 250, "%.2lf%%", 0.00);
}
else
{
double sum = (right +wrong);
outtextxy_double(900, 250, "%.2lf%%", right/sum*100);
}

}

void gamesecond()//第二关天降单词
{
initgraph(1000, 650);
keyboard();
drawscore();
struct TARGET words[3];
for (int n = 0; n < 3; n++)
{
InitTarget(words, n);
words[n].y = -15 - n * 30;
}
int i=0;
while (1)
{
//cleardevice();
BeginBatchDraw();
keyboard();
drawscore();
int flagerror = 0;
for (int n = 0; n < 3; n++)
{
words[n].y += 2;
if (words[n].y > 400-30)//碰线处理
{
InitTarget(words, n);
}
}
for (int n = 0; n < 3; n++)//字母下落
{
settextcolor(RED);
settextstyle(30, 0, _T("宋体"));
outtextxy(words[n].x, words[n].y, LPCTSTR(words[n].str));
words[n].y += 2;
}
if (_kbhit())
{
//字符串变成字符处理
char target;//接受用户按键
if (target = _getch() != '\r')
{
userkey.str[i++] = target;
highlight(target);
}
else
{
for (i = 0; i < 3; i++)
{
if (wcscmp(userkey.str, words[i].str) == 0)
{
InitTarget(words, i);
right++;
flagerror = 1;
}
}
if (flagerror == 0)
{
wrong++;
}
i = 0;//易错,要重新初始化
userkey.x = 100;
memset(userkey.str, 0, 20);//防止覆盖
}

    }
    outtextxy(userkey.x, userkey.y, userkey.str);
    Sleep(50);
    EndBatchDraw();
}

}

void level()
{
mouse();//鼠标交会函数关闭了窗口
initgraph(1000, 650);
IMAGE img; //准备图片
loadimage(&img, L"关卡选择.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径
putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片
setfillcolor(COLORREF RGB(255, 192, 203));
fillrectangle(365, 230, 675, 280);
fillrectangle(365, 300, 675, 350);
fillrectangle(365, 370, 675, 420);
TCHAR ch[] = T("SNAP___");
settextstyle(30, 0, ch);
settextcolor(COLORREF RGB(30, 144, 255));
TCHAR first[] = _T("模式一:轻轻松松");
TCHAR second[] = _T("模式二:小菜一碟");
TCHAR go[] = _T("退出游戏");
setbkmode(TRANSPARENT);
outtextxy(415 - 50 + 30, 230 + 10, first);
outtextxy(415 - 50 + 30, 300 + 10, second);
outtextxy(415 - 50 + 10 + 30 + 50, 370 + 10, go);
MOUSEMSG m;
while (1)
{
m = GetMouseMsg();
if (m.x >= 365 && m.x <= 675 && m.y >= 230 && m.y <= 280)//模式一
{
setlinecolor(RED);
rectangle(365, 230, 675, 280);
if (m.uMsg == WM_LBUTTONDOWN)
{
gamefirst();
}

    }
    else if (m.x >= 365 && m.x <= 675 && m.y >= 300 && m.y <= 350)//模式二
    {
        setlinecolor(RED);
        rectangle(365, 300, 675, 350);
        if (m.uMsg == WM_LBUTTONDOWN)
        {
            //break;
            gamesecond();
        }
    }
    else if (m.x >= 365 && m.x <= 675 && m.y >= 370 && m.y <= 420)//退出游戏
    {
        setlinecolor(RED);
        rectangle(365, 370, 675, 420);
        if (m.uMsg == WM_LBUTTONDOWN)
        {
            exit(0);
        }
    }
    else
    {
        setlinecolor(WHITE);
        rectangle(365, 230, 675, 280);
        rectangle(365, 300, 675, 350);
        rectangle(365, 370, 675, 420);
    }
}
closegraph();

}

//退出界面
void goodbye(time_t end, time_t start, int flag)
{
time_t timep;
int i = end - start;
char a[10] = { '\0' };
TCHAR s[100] = { 0 };
char ff[10] = { 0 };
TCHAR fff[100] = { 0 };
cleardevice();
setcolor(RED);
IMAGE img;
loadimage(&img, L"结束.jpg", 1000, 650);
putimage(0, 0, &img);
TCHAR style[] = _T("黑体");
settextstyle(40, 0, style);
TCHAR ch[] = _T("游戏时间:");
outtextxy(104, 180, ch);
TCHAR chf[] = _T("失败次数:");
outtextxy(654, 180, chf);
sprintf_s(a, "%d", i);
sprintf_s(ff, "%d", flag);
#ifdef UNICODE

MultiByteToWideChar(CP_ACP, 0, a, -1, s, 100);
#else

strcpy(a, s);
#endif

#ifdef UNICODE

MultiByteToWideChar(CP_ACP, 0, ff, -1, fff, 100);
#else

strcpy(ff, fff);
#endif
outtextxy(200, 220, s);
outtextxy(950, 220, fff);
_getch();
}

int main()
{
srand((unsigned)time(NULL));
initgraph(1000, 650);//新建窗口
setbkcolor(COLORREF RGB(255, 192, 203));
//cleardevice();
beginning();
level();
//gamefirst();
//keyboard();
//gamesecond();
drawscore();
_getch(); // 按任意键继续,千万不要删!!!!!!!
closegraph(); // 关闭绘图窗口

return 0;

}



  • 写回答

1条回答 默认 最新

  • 关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月14日

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序