第四十一章 试着进行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)
/***修改请注意***/
}
在前面的章节中决定的上限就是在这里所能显示的最大值呢。
运行结果