第四十一章 试着进行Score面板的显示吧

>>点此回到教程目录

本章中我们试着进行右侧面板的显示吧。

本章的重点在于,使用图像进行多位数的显示。

虽然普通的数字的显示我们用%d来表示的话不用考虑位数就可以显示了,但是本章中我们将要组合0-9的10种图片来表示多位数。

在这里“余数”的概念就很重要了。只要我们表示出用10去除那个数得到的余数就能够表示出那1位数字了。

假如现在我们有“29”这个数字,同时0-9分别对应第0-9号的图像编号。

首先我们绘制第1位数字。

考虑

int score = 29;

那么29 % 10就是9了呢。那么我们就显示编号为9的图像。

稍微将显示坐标往左挪挪,之后

score /= 10;

然后,由于

socre % 10 相当于

2 % 10 因此我们在这里显示编号为2的图像。

这样一看,我们就可以显示29了。

就像这样,用10去除然后显示余数,再用10去除显示余数,再用10去除……

直至数归零为止,就可以完成显示了。

我们试着在graph.cpp中进行这个处理吧。

另外,由于从现在开始我们使用了颜色,因此我们定义颜色的变量。

我们标上(41),用以表示这个处理是在第41章中追加的。

—-在 GV.h 中进行以下追加 —-

GLOBAL int img_num[3][12];//数字的图像(41)

//其它变量
GLOBAL int color[20];//颜色(41)

—-在 struct.cpp 中进行红字部分变更 —-

//与角色相关的结构体
typedef struct{
        int flag;               //flag
        int cnt;                //计数器
        int power;              //power
        int point;              //point
        int score;              //score
        int num;                //残机数
        int mutekicnt;          //无敌状态与计数器
        int shot_mode;          //射击模式
        int money;              //钱
        int img;
        int slow;               //是否缓慢移动
        double x,y;             //坐标
        int shot_cnt;           //射击计数

        /***修改请注意***/
        int graze;              //擦弹 (41)
        /***修改请注意***/

}ch_t;

—-在 ini.cpp 的 ini() 函数中进行以下变更/追加 —-

        /***修改请注意***/
        ch.power=0;//初始化power(41)
        ch.num=5;//初始化残机数(41)
        /***修改请注意***/

—-在 load.cpp 的load函数中进行以下追加 —-

        LoadDivGraph( "../dat/img/num/2.png" , 10 , 10 , 1 , 16 , 18 , img_num[0] ) ;//(41)

        //(41)
        color[0] = GetColor(255,255,255);//白色
        color[1] = GetColor(  0,  0,  0);//黑色
        color[2] = GetColor(255,  0,  0);//红色
        color[3] = GetColor(  0,255,  0);//绿色
        color[4] = GetColor(  0,  0,255);//蓝色
        color[5] = GetColor(255,255,  0);//黄色
        color[6] = GetColor(  0,255,255);//蓝绿色
        color[7] = GetColor(255,  0,255);//紫色

—-在 graph.cpp 中追加以下红字部分 —-

//显示Score面板(41)

/***修改请注意***/
void graph_board_states(){
        int i;
        int score=ch.score;
        int power=ch.power;
        int graze=ch.graze;
        int point=ch.point;
        int money=ch.money;

        for(i=0;i<9;i++){//显示Score
                DrawRotaGraph(625-15*i,30,1.0f,0.0f,img_num[0][score%10],TRUE);
                DrawRotaGraph(625-15*i,50,1.0f,0.0f,img_num[0][score%10],TRUE);
                score/=10;
        }

        for(i=0;i<ch.num;i++)//显示残机数
                DrawGraph(499+12*i,63,img_etc[8],TRUE);
        DrawRotaGraph(547,91,0.9f,0.0f,img_num[0][power%10],TRUE);power/=10;
        DrawRotaGraph(536,91,0.9f,0.0f,img_num[0][power%10],TRUE);power/=10;
        DrawRotaGraph(513,91,1.0f,0.0f,img_num[0][power%10],TRUE);
        DrawString(522,82,".",color[0]);//チョン

        for(i=0;i<6;i++){//擦弹显示
                DrawRotaGraph(578-14*i,111,1.0f,0.0f,img_num[0][graze%10],TRUE);
                graze/=10;
        }

        for(i=0;i<4;i++){//point表示
                DrawRotaGraph(550-14*i,131,1.0f,0.0f,img_num[0][point%10],TRUE);
                point/=10;
        }

        for(i=0;i<6;i++){//金钱显示
                DrawRotaGraph(578-14*i,154,1.0f,0.0f,img_num[0][money%10],TRUE);
                money/=10;
        }
}
/***修改请注意***/

//面板绘制
void graph_board(){
        DrawGraph(      0,      0,img_board[10],FALSE);
        DrawGraph(      0, 16,img_board[11],FALSE);
        DrawGraph(      0,464,img_board[12],FALSE);
        DrawGraph(416,  0,img_board[20],FALSE);

        /***修改请注意***/
        graph_board_states();//(41)
        /***修改请注意***/

}

在前面的章节中决定的上限就是在这里所能显示的最大值呢。


运行结果


>>点此回到教程目录

results matching ""

    No results matching ""