今天断粮了,饿了一天,到了晚上八点终于买到份四百块钱的水饺。吃撑了,写点东西消化一下。这是一个3D版祖玛小游戏,使用的还是crapell引擎,c++开发,感觉现在还用c++开发游戏的好像不多了,代码比较简单,只有基本的功能,细节就不完善了。
和经典的祖玛游戏玩法类似,发射子弹,三个颜色相同的球连在一起可以消除。小球在路径上推挤前进,路径可以做成架起的铁轨或挖出的河道。有一些想法没做,因为在其它的小游戏中已经实现过,这里就不重复了,比如小球可以由物理引擎驱动,或者加入复杂的地形机关。
暂时写了一个简单的自动挂机算法,没有加入联机功能。
有个直觉,坚持了十几年的游戏开发事业可能快到头了,打算把自己写的一个游戏引擎和二三十个小游戏总结一下。



小球类:
//========================================================
// @Date: 2016.05
// @File: Include/Zuma/ZumaBall.h
// @Brief: ZumaBall
// @Author: LouLei
// @Email: twopointfive@163.com
// @Copyright (Crapell) - All Rights Reserved
//========================================================
#ifndef _ZumaBall_H
#define _ZumaBall_H
#include "General/Pch.h"
#include "Render/Texture.h"
#define ZumaBallRadius 20
#define ZumaBulletSpeed 400
#define ZumaBallFit 7 //万能匹配球
//todov地图上挖沟或建铁轨或随水流 特殊点可以汇聚到轨道上的河或站台上
//
//参考平衡球 管道阻挡 吹起ball ball进入弹跳板 重力
class MiniGameZuma;
class ZumaPath;
class ZumaBallBase
{
public:
ZumaBallBase();
virtual void Render(){};
virtual void Update (float frameTime);
void SetSize(float size);
void SetRot(vec3& axis);
public:
float m_radius;
int m_color;
int m_state;
float m_stateTime;
vec3 m_pos;
vec3 m_speed;
vec3 m_rotAxis;
float m_rot;
ZumaPath* m_path;
};
//祖玛球
class ZumaBall:public ZumaBallBase
{
public:
enum State
{
Inactive=-1,
Running=1,
Exploiding,
};
ZumaBall();
virtual void Render();
virtual void Update(float frameTime);
public:
float m_pathPos;
float m_pathSpeed;
};
#endif
//========================================================
// @Date: 2016.05
// @File: Include/Render/Curve.h
// @Brief: Curve
// @Author: LouLei
// @Email: twopointfive@163.com
// @Copyright (Crapell) - All Rights Reserved
//========================================================
#include "General/Pch.h"
#include "General/Timer.h"
#include "Math/MathLib.h"
#include "Zuma/ZumaBall.h"
#include "Zuma/ZumaBullet.h"
#include "Zuma/MiniGameZuma.h"
#include "Render/RendDriver.h"
#include "Render/Curve.h"
#include "General/Pce.h"
ZumaBallBase::ZumaBallBase()
:m_path(NULL)
,m_color(0)
,m_state(0)
,m_radius(ZumaBallRadius)
{
}
void ZumaBallBase::SetSize(float size)
{
m_radius = size;
}
void ZumaBallBase::SetRot(vec3& axis)
{
m_rotAxis = axis;
m_rot = 0;
}
void ZumaBallBase::Update(float frameTime)
{
if (m_state == false)
{
return;
}
}
ZumaBall::ZumaBall()
:m_pathPos(0)
,m_pathSpeed(0)
{
}
void ZumaBall::Render()
{
if (m_state == Inactive)
{
return;
}
mat4 trans;
trans.FromTranslate(m_pos.x,m_pos.y,m_pos.z);
mat4 rot1;
rot1.FromToDir(vec3(0,1,0),m_rotAxis);
m_rot = m_path->m_curve->Path2Length(m_pathPos)/m_radius;
mat4 rot2;
rot2.FromRotateX(m_rot);
G_RendDriver->PushMatrix();
G_RendDriver->MultMatrix(trans*rot1*rot2);
if (m_state == Exploiding)
{
if (Rand()%2)
{
G_RendDriver->BlendFunc(Blend_Additive);
}
else
{
G_RendDriver->BlendFunc(Blend_Filter);
}
}
else
{
G_RendDriver->BlendFunc(Blend_Filter);
}
G_ZumaGame->m_ballMovie[m_color]->GetMaterial()->Bind();
G_ZumaGame->m_ballMovie[m_color]->GetMesh()->Render();
G_RendDriver->PopMatrix();
}
void ZumaBall::Update(float frameTime)
{
if (m_state == Inactive)
{
return;
}
//ZumaBallBase::Update(frameTime);
if(m_pathPos > m_path->m_curve->GetPointNum())
{
m_state = Inactive;
}
if (m_state == Exploiding)
{
if (m_stateTime>0.7f)
{
m_state = Inactive;
}
m_stateTime += frameTime;
}
////球和球的作用力
//{
// ZumaBall* ball1,*ball2;
// vec3 dif;
// vec3 move;
// vec3 acc;
// float dis;
// float radiusSum;
// for (int j=i+1;j<MaxBallNum;j++)
// {
// ball2 = &m_balls[j];
// dif = m_pos-ball2->m_pos;
// dis = dif.Length();
// radiusSum = m_size+ball2->m_size;
// if (dis<radiusSum)
// {
// //分离
// acc = (m_speed-ball2->m_speed)*0.5f;
// m_speed -= acc;
// ball2->m_speed += acc;
// if (dis>_EPSILON)
// {
// move = dif*((radiusSum-dis)/dis);
// }
// else
// {
// move = vec3(0.5f,0,0)*(radiusSum-dis);
// }
// m_pos += move;//*0.1f;
// ball2->m_pos -= move;//*0.1f;
// }
// else if (dis < radiusSum*2)
// {
// //吸在一起
// move = dif*(60/*10*/*frameTime/dis);
// m_speed -= move;
// ball2->m_speed += move;
// }
// }
//}
}
路径类:
//========================================================
// @Date: 2016.05
// @File: Include/Zuma/ZumaBall.h
// @Brief: ZumaBall
// @Author: LouLei
// @Email: twopointfive@163.com
// @Copyright (Crapell) - All Rights Reserved
//========================================================
#ifndef _ZumaPath_H
#define _ZumaPath_H
#include "General/Pch.h"
#include "Render/Texture.h"
#include "Zuma/ZumaBall.h"
#include <list>
class Curve;
typedef std::list<ZumaBall> ZumaBallList;
class ZumaPath
{
public:
ZumaPath();
bool Start();
bool Stop();
bool Rend

最低0.47元/天 解锁文章
2409

被折叠的 条评论
为什么被折叠?



