该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
#include
#include"graphics.h"
using namespace std;
#define wordnum 12//单词个数
char words[40][40] = { "const", "string", "true", "new", "delete", "static", "sort", "define", "stack", "queue", "namespace", "inline" };
void Welcome()
{
setcolor(YELLOW);
setfont(32, 0, "黑体");//设置字体大小和字体样式(字号 风格 字体)
outtextxy(230, 200, "欢迎来到打字母游戏");
int color = 255;
setfont(18, 0, "华文行楷");
while (true)
{
setcolor(RGB(color, 0, 0));
color -= 10;//颜色越来越暗 出现闪烁效果
if (color<0)
color = 255;//红色
outtextxy(300, 380, "按任意键进入游戏");
Sleep(20);
if (_kbhit())//有按键
{
getch();//接收按键 否则会留在缓冲区
cleardevice();//清屏 准备进入游戏界面
return;
}
}
}
#define MAXSTRING 1024
void PlayGame()
{
int x = 0, y = 0;
short target;//目标单词序号
char str_target[MAXSTRING];//目标单词
srand(time(0));//设置时间种子
int score = 0;
int level = 1;
int miss = 0;
setcolor(WHITE);
while (true)
{
target = rand() % wordnum;//随机生成单词序号
strcpy(str_target , words[target]);
x = rand() % 670 + 2;//随机生成产生单词的位置
setfillcolor(getbkcolor());//以背景色填充
//setfillstyle(EMPTY_FILL);//以背景色填充
//setfillstyle(SOLID_FILL,0);//用这个设置填充颜色并不行 只会出现白色
//让该字母从最顶上面往下落
short i = 0;
for (y = 1; y<520; y += level)
{
int flag = 0;
setfont(18, 0, "无衬线");
outtextxy(x, y, str_target);//string->char * ...char *p=str.data()
Sleep(20);
//bar画一个填充矩形 setfillstyle决定填充颜色
if (_kbhit())//一直有按键
{
int ch = _getch();
if (ch == 27)//'esc'--> exit
{
return;
}
if (ch == str_target[i] || ch == (str_target[i] + 32))//字母大小写
{
++i;
if (i == strlen(str_target))//这个单词打对了
{
bar(x, y, x + 10 * strlen(str_target), y + 16);//擦除刚写出来的
score++;
if (score % 10 == 0)
{
level++;
}
flag = 1;
break;
}
}
else
i = 0;//一旦打错 必须从头开始打这个单词
}
setfont(16, 0, "无衬线");
outtextxy(10, 10, "当前分数:");
char strscore[20];
sprintf(strscore, "%d", score);//swprintf_s(strscore,L"当前分数:%d",score);
//swprintf可以处理任意类型数据 而sprintf只能处理字符 字符串 整型数据
outtextxy(100, 10, strscore);
outtextxy(10, 30, "出错次数:");
char strmiss[20];
sprintf(strmiss, "%d", miss);//swprintf_s(strscore,L"当前分数:%d",score);
//swprintf可以处理任意类型数据 而sprintf只能处理字符 字符串 整型数据
outtextxy(100, 30, strmiss);
outtextxy(10, 50, "难度等级:");
char strlevel[20];
sprintf(strlevel, "%d", level);//swprintf_s(strscore,L"当前分数:%d",score);
//swprintf可以处理任意类型数据 而sprintf只能处理字符 字符串 整型数据
outtextxy(100, 50, strlevel);
if (flag == 1)
break;
}
if (y >= 520)
{
miss++;
}
Sleep(180);
bar(x, y, x + 10 * strlen(str_target), y + 20);//擦除刚写出来的 到等级4的时候就会出现白色轨迹.....
}
}
int main()
{
initgraph(720, 520);//640*480 basic
Welcome();//欢迎界面
PlayGame();//游戏界面
closegraph();
cout << "游戏结束 玩的开心否?" << endl;
system("pause");
return 0;
}