HGE-6 两千只兔子

  1 /*
  2 ** Haaf's Game Engine 1.8
  3 ** Copyright (C) 2003-2007, Relish Games
  4 ** hge.relishgames.com
  5 **
  6 ** hge_tut07 - Thousand of Hares
  7 */
  8 
  9 
 10 // 复制"font2.fnt", "font2.png","bg2.png","zazaka.png"
 11 
 12 
 13 #include <hge.h>
 14 #include <hgefont.h>
 15 #pragma comment(lib,"hge.lib")
 16 #pragma comment(lib,"hgehelp.lib")
 17 
 18 #define SCREEN_WIDTH  800
 19 #define SCREEN_HEIGHT 600
 20 
 21 #define MIN_OBJECTS    100
 22 #define MAX_OBJECTS 2000
 23 
 24 // 本例程中此结构用于表示一只兔子的各方面属性
 25 struct sprObject
 26 {
 27     float x,y;
 28     float dx,dy;
 29     float scale,rot;
 30     float dscale,drot;
 31     DWORD color;
 32 };
 33 
 34 sprObject*    pObjects;
 35 int            nObjects;
 36 int            nBlend;
 37 
 38 
 39 HGE *hge=0;
 40 
 41 
 42 HTEXTURE            tex, bgtex;
 43 hgeSprite            *spr, *bgspr;
 44 hgeFont                *fnt;
 45 
 46 // 这个函数用于快速的设置融合模式
 47 void SetBlend(int blend)
 48 {
 49     static int sprBlend[5]=
 50     {
 51         BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE,
 52         BLEND_COLORADD | BLEND_ALPHABLEND | BLEND_NOZWRITE,
 53         BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE,
 54         BLEND_COLORMUL | BLEND_ALPHAADD   | BLEND_NOZWRITE,
 55         BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE
 56     };
 57 
 58     static DWORD fntColor[5]=
 59     {
 60         0xFFFFFFFF, 0xFF000000, 0xFFFFFFFF, 0xFF000000, 0xFFFFFFFF
 61     };
 62 
 63     static DWORD sprColors[5][5]=
 64     {
 65         { 0xFFFFFFFF, 0xFFFFE080, 0xFF80A0FF, 0xFFA0FF80, 0xFFFF80A0 },
 66         { 0xFF000000, 0xFF303000, 0xFF000060, 0xFF006000, 0xFF600000 },
 67         { 0x80FFFFFF, 0x80FFE080, 0x8080A0FF, 0x80A0FF80, 0x80FF80A0 },
 68         { 0x80FFFFFF, 0x80FFE080, 0x8080A0FF, 0x80A0FF80, 0x80FF80A0 },
 69         { 0x40202020, 0x40302010, 0x40102030, 0x40203010, 0x40102030 }
 70     };
 71 
 72     if(blend>4) blend=0;
 73     nBlend=blend;
 74 
 75     spr->SetBlendMode(sprBlend[blend]);
 76     fnt->SetColor(fntColor[blend]);
 77     //设置MAX_OBJECTS只兔子的属性
 78     for(int i=0;i<MAX_OBJECTS;i++) pObjects[i].color=sprColors[blend][hge->Random_Int(0,4)];
 79 }
 80 
 81 bool FrameFunc()
 82 {
 83     float dt=hge->Timer_GetDelta();
 84     int i;
 85 
 86 
 87     switch(hge->Input_GetKey())
 88     {
 89         case HGEK_UP:        if(nObjects<MAX_OBJECTS) nObjects+=100; break;
 90         case HGEK_DOWN:        if(nObjects>MIN_OBJECTS) nObjects-=100; break;
 91         case HGEK_SPACE:    SetBlend(++nBlend); break;
 92         case HGEK_ESCAPE:    return true;
 93     }
 94 
 95     // 更新每只兔子的属性(位置,旋转等信息)
 96     for(i=0;i<nObjects;i++)
 97     {
 98         pObjects[i].x+=pObjects[i].dx*dt;
 99         if(pObjects[i].x>SCREEN_WIDTH || pObjects[i].x<0) pObjects[i].dx=-pObjects[i].dx;
100         pObjects[i].y+=pObjects[i].dy*dt;
101         if(pObjects[i].y>SCREEN_HEIGHT || pObjects[i].y<0) pObjects[i].dy=-pObjects[i].dy;
102         pObjects[i].scale+=pObjects[i].dscale*dt;
103         if(pObjects[i].scale>2 || pObjects[i].scale<0.5) pObjects[i].dscale=-pObjects[i].dscale;
104         pObjects[i].rot+=pObjects[i].drot*dt;
105     }
106 
107     return false;
108 }
109 
110 
111 bool RenderFunc()
112 {
113     int i;
114 
115     hge->Gfx_BeginScene();
116     bgspr->Render(0,0);
117 
118     // 绘制满屏幕的兔子
119     for(i=0;i<nObjects;i++)
120     {
121         spr->SetColor(pObjects[i].color); 
122         spr->RenderEx(pObjects[i].x, pObjects[i].y, pObjects[i].rot, pObjects[i].scale);
123     }
124 
125     fnt->printf(7, 7, HGETEXT_LEFT, "UP and DOWN to adjust number of hares: %d\nSPACE to change blending mode: %d\nFPS: %d", nObjects, nBlend, hge->Timer_GetFPS());
126     hge->Gfx_EndScene();
127 
128     return false;
129 }
130 
131 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
132 {
133     int i;
134 
135     hge = hgeCreate(HGE_VERSION);
136 
137     hge->System_SetState(HGE_LOGFILE, "hge_tut07.log");
138     hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
139     hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
140     hge->System_SetState(HGE_TITLE, "HGE Tutorial 07 - Thousand of Hares");
141     hge->System_SetState(HGE_USESOUND, false);
142     hge->System_SetState(HGE_WINDOWED, true);
143     hge->System_SetState(HGE_SCREENWIDTH, SCREEN_WIDTH);
144     hge->System_SetState(HGE_SCREENHEIGHT, SCREEN_HEIGHT);
145     hge->System_SetState(HGE_SCREENBPP, 32);
146 
147     if(hge->System_Initiate())
148     {
149 
150         // 加载纹理
151         bgtex=hge->Texture_Load("bg2.png");
152         tex=hge->Texture_Load("zazaka.png");
153         if(!bgtex || !tex)
154         {
155             MessageBox(NULL, "Can't load BG2.PNG or ZAZAKA.PNG", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
156             hge->System_Shutdown();
157             hge->Release();
158             return 0;
159         }
160 
161         // 加载字体,创建精灵(兔子)
162         fnt=new hgeFont("font2.fnt");
163         spr=new hgeSprite(tex,0,0,64,64);
164         spr->SetHotSpot(32,32);
165 
166         bgspr=new hgeSprite(bgtex,0,0,800,600);
167         bgspr->SetBlendMode(BLEND_COLORADD | BLEND_ALPHABLEND | BLEND_NOZWRITE);
168         bgspr->SetColor(0xFF000000,0);
169         bgspr->SetColor(0xFF000000,1);
170         bgspr->SetColor(0xFF000040,2);
171         bgspr->SetColor(0xFF000040,3);
172 
173         // 创建MAX_OBJECTS个对象(兔子)
174         pObjects=new sprObject[MAX_OBJECTS];
175         nObjects=1000;
176 
177         for(i=0;i<MAX_OBJECTS;i++)
178         {
179             pObjects[i].x=hge->Random_Float(0,SCREEN_WIDTH);
180             pObjects[i].y=hge->Random_Float(0,SCREEN_HEIGHT);
181             pObjects[i].dx=hge->Random_Float(-200,200);
182             pObjects[i].dy=hge->Random_Float(-200,200);
183             pObjects[i].scale=hge->Random_Float(0.5f,2.0f);
184             pObjects[i].dscale=hge->Random_Float(-1.0f,1.0f);
185             pObjects[i].rot=hge->Random_Float(0,M_PI*2);
186             pObjects[i].drot=hge->Random_Float(-1.0f,1.0f);
187         }
188         
189         SetBlend(0);
190 
191 
192         hge->System_Start();
193 
194 
195         delete[] pObjects;
196         delete fnt;
197         delete spr;
198         delete bgspr;
199         hge->Texture_Free(tex);
200         hge->Texture_Free(bgtex);
201     }
202 
203     hge->System_Shutdown();
204     hge->Release();
205     return 0;
206 }


 

转载于:https://www.cnblogs.com/nightfire/articles/2618511.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值