welcome to my greedy snake game  

project             name: greedy snake
project               role: leader and main  developer
project     technique: vs 2005 ,c/c++,MFC
project introduction: the pc edition of the popular game on NOKIA cell phone .
project  core    code:

#include"GreedySnakeDlg.h"
#include<iostream>
#include<set>
using namespace std;
enum{RIGHT,UP,LEFT,DOWN};

class CGameObject
{
public:
 virtual bool TestCollision(CGameObject *pObject)=0;//这个函数是用来测试碰撞情况的
 virtual void Update()=0;//此函数是用来更新物体的状态
 virtual void Draw(CDC *pDrawDC)=0;///此函数是用来将物体绘制到屏幕上
 virtual bool IsValid()=0;///判断物体是否有效,无效就不再显示在屏幕上
};
class Knot
{
public:
 int i,j;

public:

 Knot(){}
 Knot(int x,int y)
 {
  i=x;
  j=y;
 }
 bool operator==(const Knot &knot)const
 {
  return knot.i==i&&knot.j==j;
 }
 bool operator<(const Knot &knot)const
 {
  return knot.i>i;
 }
};
class CSnake:public CGameObject
{
private:
 ///这里记录了玩家的信息
 
 Knot m_body[20];///当20节中都有位置时说明玩家过关了
 int m_nKnotsNumber;///等于20时过关,初始为3
 int m_nLifeNumber;//生命的个数,初始为1
 int m_nScores;//玩家的分数,初始为0
 int m_nDirection;///玩家移动的方向,有左右,上下
 int m_nMoveStep[4][2];

public:
 CSnake(){};
 ~CSnake(){}
 void Init();
 bool TestCollision(CGameObject*pObject);///对于蛇主要是测试与地图的边缘以及石头碰撞
 void Update();//更新位置,把蛇向他的方向前进一步
 void Draw(CDC *pDrawDC);///以圆圈相连的形式显示蛇
 bool IsValid();///如果生命为0就无效了
 //////////////
 void KeyControl(UINT nFlags)
 {
  if(nFlags==RIGHT&&m_nDirection!=LEFT)
   m_nDirection=RIGHT;
  else if (nFlags==UP&&m_nDirection!=DOWN)
   m_nDirection=UP;
  else if(nFlags==LEFT&&m_nDirection!=RIGHT)
   m_nDirection=LEFT;
  else if(nFlags==DOWN&&m_nDirection!=UP)
   m_nDirection=DOWN;
 }
 
 void GetSnakeHeadPos(int &x,int &y);
 void AddScore(int score)
 {
  m_nScores+=score;
 }
 void MinusScore(int score)
 {
  m_nScores-=score;
 }
 void AddLife(int life)
 {
  m_nLifeNumber+=life;
 }
 void MinusLife(int life);
 void AddKnots();
 void MinusKnots();
 int GetLife()
 {
  return m_nLifeNumber;
 }
 int GetScore()
 {
  return m_nScores;
 }
 int GetKnots()
 {
  return m_nKnotsNumber;
 }

};

class CStone:public CGameObject
{
private:
 int i,j;
 int m_nScores;///蛇撞到不同的石头减的分数不一样的
 int m_nLevel;///石头的级别,级别分1-5,撞到后减去的分数依次为5,10,20,35,55
public:
 CStone();
 CStone(int x,int y);
 bool TestCollision(CGameObject *pObject);//测试石头与蛇的碰撞
 void Update();
 void Draw(CDC *pDrawDC);
 bool IsValid();
 void SetPos(int x,int y);
};

class CFood :public CGameObject///所有食物的基类
{
protected:
 int i,j;//食物出现的位置
 int m_nLifeTime;//食物的生命时间
public:
 void GetPos(int &x,int &y)///返回食物的位置
 {
  x=i;
  y=j;
 }
 bool IsValid()
 {
  return m_nLifeTime!=0;
 }

};

class CHealthFood :public CFood ///健康食物 玩家吃了加节数
{
private:
 int m_nKnots;//吃了后玩家增加的节数
public:
 CHealthFood(int x,int y);
 bool TestCollision(CGameObject *pObject);
 void Update();
 void Draw(CDC *pDrawDC);
};

class CAddScoreFood:public CFood////加分食物 玩家吃了加分
{
private:
 int m_nScores;
 int m_nLevel;
public:
 CAddScoreFood(int x,int y);
 bool TestCollision(CGameObject *pObject);
 void Update();
 void Draw(CDC *pDrawDC);
 
};

class CAddLifeFood:public CFood////加命食物 玩家吃了加命
{
public:
 CAddLifeFood(int x,int y);
 bool TestCollision(CGameObject *pObject);
 void Update();
 void Draw(CDC *pDrawDC);
};

 

class CPoisonFood:public CFood////有毒食物 玩家吃了减节数
{
private:
 int m_nKnots;
public:
 CPoisonFood(int x,int y);
 bool TestCollision(CGameObject *pObejct);
 void Update();
 void Draw(CDC *pDrawDC);

};

class CMinusScoreFood:public CFood/////减分食物 玩家吃了减分
{
private:
 int m_nScores;
 int m_nLevel;
public:
 CMinusScoreFood(int x,int y);
 bool TestCollision(CGameObject *pObject);
 void Update();
 void Draw(CDC *pDrawDC);
};


class CDealthFood:public CFood/////致命食物 玩家吃了游戏结束
{
public:
 CDealthFood(int x,int y);
 bool TestCollision(CGameObject *pObject);
 void Update();
 void Draw(CDC *pDrawDC);
};

 

class CGameMap/////地图 管理地图上的食物 和记录地图上的布局
{
private:
 CStone m_stones[12];
public:
 CGameMap(){};
 void Init();
 bool TestCollision(CGameObject *pObject);
 void DrawMap(CDC *pDrawDC);
};

 

class CFoodFactory ////食物工厂  负责生产食物 处理垃圾食物
{
private:
 CFood *m_pFoodSlots[100];////用于装食物的生产槽
 bool m_bSlotUsed[100];
 int m_nFoodNumber;
 int m_nHealthFoodNumber;
private:
 CFood *CreateFood(UINT nFlags=0);
public:
 CFoodFactory();
 void Init();
 void Update();
 void DrawAllFoods(CDC *pDrawDC);
 bool TestCollision(CGameObject *pObject);
 void HealthFoodMinus()
 {
  m_nHealthFoodNumber--;
 }
 //////

};

class CGameManagement////游戏管理类,也是游戏的入口 负责玩家 地图 食物的管理
{
private:
 CGameMap m_gameMap;
 CFoodFactory m_foodFactory;
 CSnake m_snake;
 set<Knot> m_knotSet;
 CGreedySnakeDlg *m_pUIDlg;
public:
 set<Knot> * GetKnotSet();
 static CGameManagement * GetGameManagement();
 void InitGame(CGreedySnakeDlg *pDlg);
 void Update();
 void RenderGame(CDC *pDrawDC);
 void WinGame();
 void LoseGame();
 void KeyControl(UINT nFlags)
 {
  m_snake.KeyControl(nFlags);
 }
 bool TestCollision();
 CGreedySnakeDlg *GetDlg()
 {
  return m_pUIDlg;
 }
 CFoodFactory *GetFoodFactory()
 {
  return &m_foodFactory;
 }
private:
 CGameManagement();
 static CGameManagement *m_pGameManagement;
};


 



 
Make a Free Website with Yola.