签到

06月21日
尚未签到

共有回帖数 0

    做月子

    等级:
    //就是那个打字游戏,只是增加了一些效果,还有很多不足之处
    //比如还没有字母下落速度的控制,有待改善
    //一次只能落下一个字母,有待改善
    //用了较多的goto语句,有待改善
    //欢迎界面里难度的选择,难度跟生命值、速度、字母数量相挂钩,有待改善
    //下面贴上代码

    #includegraphics.h
    #includeconio.h
    #includetime.h
    #define LIVE 10             //设置生命值(1-999)


    //**欢迎界面函数*****************************************************
    void welcome()
    {
        cleardevice();//*************************************************清空屏幕

        setcolor(GREEN);//***********************************************设置前景色
        setfont(64,0,"黑体");//******************************************设置字体格式
        outtextxy(165,50,"打字游戏");//**********************************输出文字

        setcolor(RED);
        setfont(32,0,"宋体");
        outtextxy(70,150,"操作方法:");
       
        //*************游戏说明***************************************************
        setcolor(WHITE);
        setfont(16,0,"黑体");
        outtextxy(130,210,"游戏开始时会从屏幕上方落下英文字母");
        outtextxy(130,240,"根据你所看到的字母从键盘上敲入相同的字母");
        outtextxy(130,270,"如果敲入的字母相同则消去并得一分");
        outtextxy(130,300,"如果字母落到屏幕底部则扣掉一生命");
        outtextxy(130,330,"生命扣完游戏结束");
        outtextxy(130,360,"想提前结束请按ESC退出游戏");

        setfont(16,0,"宋体");

        //*************实现文字闪烁***********************************************
        int c=255;
        while(!kbhit())//*************************************************判定按键动作
        {
            setcolor(RGB(c,0,0));
            outtextxy(500,430,"按任意键继续");
            c-=8;
            if(c=0)
                c=255;
            Sleep(10);
        }
    }

    //**结束界面函数**********************************************************
    void goodbye(char * score)
    {
        cleardevice();//清空屏幕

    //*************打出分数***************************************************
        setcolor(LIGHTRED);
        setfont(64,0,"Arial");
        outtextxy(100,190,"score:");

        setcolor(GREEN);
    outtextxy(290,195,score);

        //********提示按键****************************************************
        int c=255;
        while(!kbhit())
        {
            setfont(16,0,"宋体");
            setcolor(RGB(0,c,c));
            outtextxy(500,400,"按 R 键重玩");
            outtextxy(500,430,"按其他键退出");
            c-=8;
            if(c=0)
                c=255;
            Sleep(10);
        }
    }

    //**将整形数转换成字符串的函数*********************************************
    void change(int x,char * p)
    {
        int i,j=0;
        int num[7];
        if(x==0)
        {
            p[j]=48;
            j++;
        }
        for(i=0;x0;x/=10,i++)
        {
            num=x%10;
        }
        for(i--;i=0;i--,j++)
        {
            p[j]=num+48;
        }
        p[j]='';
    }

    //**生命值耗完界面函数******************************************
    void lose()
    {
        setcolor(LIGHTRED);
        setfont(64,0,"Arial");
        outtextxy(185,190,"GAME OVER!");
        int c=255;
        while(!kbhit())
        {
            setcolor(RGB(c,0,c));
            setfont(16,0,"黑体");
            outtextxy(480,350,"按任意键继续");
            Sleep(10);
            c-=8;
            if(c=0)
                c=255;
        }
    }    

    void main()         //主函数
    {
    //****界面初始化*******************************************************
        initgraph(640,480);         //初始化图形界面
        welcome();                 //欢迎界面
    replay:         //重启点

    setfont(32,0,"Arial");     //字体设置

    //****变量初始化*******************************************************
        srand(time(NULL));         //初始化随机数
        char ch[2]=" ";         //随机字母接收字符串
        char key;         //按键接收变量
        char live[3]=" ";         //输出用生命值字符串
        char score[8]="0";         //输出用分数字符串
        int liv=LIVE;         //生命值
        int sco=0;     //分数
        BeginBatchDraw();     //批量画图开始

    //****循环开始*********************************************************
        while(true)
        {
            change(liv,live);     //生命值转换成字符串用于输出
    again:     //遇到正确字母,从此处从新开始
            ch[0]=65+rand()%26;     //得到随机大写字母
            int x=20+rand()%600;//字母落下点的X轴坐标
            setcolor(WHITE);

            for(int y=0;y414;y++)
            {    
                outtextxy(x,y,ch);     //画字母
                setcolor(LIGHTGREEN);
                line(0,440,640,440);//画底线
                outtextxy(500,445,"LIVE:");     //输出LIVE
                outtextxy(580,445,live);     //输出生命值字符串
                setcolor(LIGHTRED);
                outtextxy(15,445,"SCORE:");     //输出SCORE
                outtextxy(107,445,score);     //输出分数值字符串
                setcolor(WHITE);
                if(liv==0)     //判断生命值是否为零
                {
                    EndBatchDraw();//结束批量画图
              lose();     //调用GAME OVER界面
                    BeginBatchDraw();//开始批量画图
                    getch();//按键继续
                    goto exit;//转到游戏结束界面
                }
                if(kbhit())//判断按键字母正确与否
                {
                    key=getch();//捕获按键
                    if((key==ch[0])||(key==ch[0]+32))
                    {
                        sco++;//分数值计数
                        change(sco,score);//分数值转化分数值字符串
                        FlushBatchDraw();//批量画图
                        cleardevice();//清空屏幕
                        goto again;//按键正确,转去下一个字母
                    }
                    else if(key==27)//遇到ESC转去结束界面
                        goto exit;
                }
                FlushBatchDraw();//批量画图
                Sleep(10);//画面驻留10毫秒
                cleardevice();//清空屏幕
            }
            liv--;//生命值计数
        }


    exit:
        EndBatchDraw();         //结束批量画图
        goodbye(score);         //结束界面
        if(kbhit())
            key=getch();
            if(key=='r'||key=='R')     //按R键重启游戏
                goto replay;
            else
                closegraph();         //关闭图形界面
    }

    楼主 2015-12-17 16:18 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知