【四圣龙神录的编程教室】第4章、画个自机形象看看吧

原文地址:

http://dixq.net/rp/4.html


接下来,画个人自机试试吧。

为此,我们首先得定义个结构体,把自机所需的变量都定义好。

自机的结构体,定义成如下这样。

——————————————————————————————————————————————————————————————————————

--struct.h改动--

//自机相关的结构体
typedef struct{
        int flag;      	 //标志
        int cnt;       	 //计数
        int power;    	  //火力
        int point;     	 //点数
        int score;     	 //得分
        int num;       	 //残机数
        int mutekicnt;  //无敌状态的计数
        int shot_mode;//射击模式
        int money;      //金钱
        int img;       	 //图像
        int slow;      	 //是否为慢速模式
        double x,y;     //坐标
}ch_t;
——————————————————————————————————————————————————————————————————————

把这个构造体的定义,写在 struct.h 文件里面。

里面定义的东西有点多,但无需全部记住。

自机有着各种各样的数据呢,火力啊,得分啊,目前的射击模式啊。。。

总之,我们就先把这些都准备好。现在我们只关心坐标,

反正我们先记住,自机的构造体里面有double 型的x 和 y 的变量。


接下来,我们需要读取自机的图片了。我们用img_ch这个变量,来表示图片的句柄(Handler)

自机的图片,是12张一套的。因为龙神录里面有变身,所以这里需要两套图片。

int img_ch[2][12];

像这样,定义好变量后,就可以使用了。把变量在main 文件里面定义好之后,

在下面的load.cpp 用extern 声明一下,然后就可以使用了。

————————————————————————————————————————————————————————————————————

--load.cpp改动--

#include "../include/GV.h"


extern int img_ch[2][12];


void load(){
        LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
—————————————————————————————————————————————————————————————————————

在上面的路径下,确认图片是否存在。上面的函数读入的含义是,

总共是12张图片,横着4张,竖着3张,长宽为 73-73 像素的,存放到 img_ch[0] 里面去。

如果不理解的话,去官方主页的参考手册页面(reference page),确认下这个函数的使用方法吧。

那么,画图的函数  graph.cpp  也需要改动了。

再声明一个 graph_main 函数,方便在 main 文件里整个调用。

——————————————————————————————————————————————————————————————————————

--graph.cpp改动--

#include "../include/GV.h"

extern ch_t ch;
extern int img_ch[2][12];


void graph_ch(){
        DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}


void graph_main(){
        graph_ch();
}

——————————————————————————————————————————————————————————————————————

然后,是最重要的main.cpp文件了。

——————————————————————————————————————————————————————————————

--main.cpp改动--

#define GLOBAL_INSTANCE 
#include "../include/GV.h"


//现在的按键输入的处理
extern int GetHitKeyStateAll_2();
//根据收到的按键序号,返回这个键现在的输入状态
extern int CheckStateKey(unsigned char Handle);


//数据的载入
extern void load();


//主绘制函数
extern void graph_main();


int img_ch[2][12];      //自机的图片12张 X2(变身用)
ch_t ch;                        //自机的结构体


//主循环里必做的三大操作
int ProcessLoop(){
        if(ProcessMessage()!=0)
 		return -1;		//Process 处理出错的话,返回-1  
        if(ClearDrawScreen()!=0)
		return -1;		//清理画面出错的话,返回-1  
        GetHitKeyStateAll_2();		//对现在的按键输入进行处理  
        return 0;
}


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    ChangeWindowMode(TRUE);//窗口模式  
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0)
		 return -1;			/初始化和设置双缓冲


    load();//载入数据


    while(ProcessLoop()==0){	 //主循环  
                
        graph_main();	//绘制函数


        if(CheckStateKey(KEY_INPUT_ESCAPE)==1)
		break;			 //输入ESC的话,break  
        ScreenFlip();	//交换双缓冲画面
    }


    DxLib_End();//DxLib终止  
    return 0;
}

——————————————————————————————————————————————————————————————

运行结果:



显示像上面这样的话,就完成了。在左边可以看到一点点的自机。

哎呀,不要啊。怎么 main函数变得这么难读了 啊~~

不过不要紧,我们在下一章里把它整理的漂亮一些吧。


本人CSDN博客目录:

http://blog.csdn.net/tidus5


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值