网络游戏开发分为:服务器编程、客户端编程、人工智能、数据库管理、游戏策划、美工设计、音乐特效等。
大型游戏往往需要团队合作开发,因此面向对象的编程思想在网络游戏中得到了广泛应用。
游戏开发基本流程:游戏初始化——游戏实现——游戏结束。
游戏初始化:加载游戏内容的缓存,如游戏人物、背景模型、音乐等素材,并初始化相关参数。
游戏实现:用户操作+游戏逻辑过程+游戏内容渲染。
游戏结束:释放游戏初始化时加载的缓存。
注:如果游戏结束时,不释放动态分配的缓存所用的内存空间,系统会弹出内存泄漏警告对话框。
简单的游戏过程模拟程序:
当按下A、D键,人物分别向左向右移动。
enum CHARACTER_STATE{STATE_LIVE=0,STATE_DEAD};//枚举状态生/死
enum CHARACTER_ACTION{ACTION_IDLE=0,ACTION_MOVE};//枚举动作静/动
enum CHARACTER_EVENT{EVENT_EMPTY=0,EVENT_ATTACKED,EVENT_RESTART};//枚举事件空/被攻击/复活
#include <conio.h> //运用getch()
#include <stdio.h> //运用输出函数
void main()
{
int _pos=0; //初始化位置
int _state=STATE_LIVE; //初始化状态
int _action=ACTION_IDLE; //初始化动作
int _event=EVENT_EMPTY; //初始化事件
int _key; //声明按键
while(1)
{
printf("Idel at position:%d\n",_pos);
_action=ACTION_IDLE;
//fflush(stdin);
_key=getch();
//scanf("%c",&_key);
if(_key=='E') //按E键退出
{
break;
}
if(_key=='A') //A键左移
{
_action=ACTION_MOVE;
_pos--;
}
if(_key=='D') //D键右移
{
_action=ACTION_MOVE;
_pos++;
}
switch(_action)
{
case ACTION_IDLE:
printf("Idel at position:%d\n",_pos);
break;
case ACTION_MOVE:
printf("Walk at position:%d\n",_pos);
break;
}
switch(_state)
{
case STATE_LIVE: //存活状态
switch(_event) //事件
{
case EVENT_ATTACKED: //被攻击
_state=STATE_DEAD;
break;
case EVENT_RESTART: //复活
break;
}
break;
case STATE_DEAD: //死亡状态
switch(_event)
{
case EVENT_ATTACKED: //被攻击
break;
case EVENT_RESTART:
_state=STATE_LIVE; //复活
break;
}
break;
}
}
}
以上程序可以拆分为3个文件:
1.Character.h【声明人物类】、Character.cpp【封装成员函数】、GameMain.cpp【整体游戏逻辑】
class Character
{
public:
Character();
~Character();
void Move(int _step);
void Idle();
void AI_Planning();
void Render();
protected:
int _pos;
int _state;
int _action;
int _event;
}
2.Character.cpp
#include "Character.h"
Character::Character()//构造函数
{
int _pos=0; //初始化位置
int _state=STATE_LIVE; //初始化状态
int _action=ACTION_IDLE; //初始化动作
int _event=EVENT_EMPTY; //初始化事件
}
Character::~Character()//析构函数
{
}
void Character::Move(int _step) //移动步数
{
_action=ACTION_MOVE;
_pos+=_step;
}
void Character::Idle() //静止
{
_action=ACTION_IDLE;
}
void Character::AI_Planning() //行为计划
{
switch(_state)
{
case STATE_LIVE: //存活状态
switch(_event) //事件
{
case EVENT_ATTACKED: //被攻击
_state=STATE_DEAD;
break;
case EVENT_RESTART: //复活
break;
}
break;
case STATE_DEAD: //死亡状态
switch(_event)
{
case EVENT_ATTACKED: //被攻击
break;
case EVENT_RESTART:
_state=STATE_LIVE; //复活
break;
}
break;
}
}
void Character::Render() //渲染
{
switch(_action) //动作
{
case ACTION_IDLE: //静止
printf("Idel at position:%d\n",_pos);
break;
case ACTION_MOVE: //移动
printf("Walk at position:%d\n",_pos);
break;
}
}
3.GameMain.cpp
#include "Character.h"
void main()
{
Character player; //定义玩家类
int _key;
while(1)
{
_key=getch(); //获取按键
if(_key=='E') //按E键退出
{
break;
}
player.Idle(); //静止
if(_key=='A') //A键左移
{
player.Move(-1);
}
if(_key=='D') //D键右移
{
player.Move(1);
}
player.AI_Planning(); //行为计划
player.Render(); //渲染
}
}