休闲游戏《开心农场》 设计思路

来源:互联网 发布:火车头采集数据导出 编辑:程序博客网 时间:2024/04/27 16:09

开心农场是一个游戏逻辑相对简单的小游戏。

在C++中实现起来,要解决两个关键的问题:时间计算和事件。


在开心农场中,我主要需要两个类:

一个是CGameController(游戏控制类)

另一个是CLandElement(地皮类)


CGameController我推荐所有游戏都写这个类,可以统筹所有的元素,减轻CGame类的负担。

CGame主要负责状态的切换,有任何事件,都可以转发给不同的类处理。


CGameController类主要负责的任务是:

每30分钟(当然这个时间可以更长)随机转换一次天气的状态,比如下雨,刮风。

与CLandElement类进行交互

比如让CLandElement进行锄地,除虫,浇水等等。


CLandElement类可以实现的是,这个地皮里面,究竟有什么东西,他们的状态又是什么。

下面是CLandElement的部分代码:

enum LandState{
DISABLE,//不可用ABLE,//可用DRY,//干燥NORMAL,//正常WET//潮湿};enum PlantState{SEED,//种子阶段SEEDING,//发芽LITTLELEAF,//小叶子BIGLEAF,//大叶子FLOWER,//开花GROWN//成熟};enum PlantId{PLANTID_STRAWBERRY,//草莓丶PLANTID_WHITERADISH,//白萝卜PLANTID_POTATO,//土豆PLANTID_TOMATO,//西红柿};struct TheLandElement{int m_LandId;//土地idint m_LandState;//土地状态int m_PlantId;//植物idint m_PlantState;//植物状态bool m_IsBug;//是否长虫子bool m_IsNeedWater;//是否缺水int m_ExpectantYeild;//预期产量int m_AllYeild;//所有产量int m_NowYeild;//当前剩余产量PlantDateAndTime Grown;//成熟截止时间};


这里就可以包括了植物所在的所有的属性。当然,植物的属性不止这些。

其他的各种修改函数,就不再赘述。一般有get有set即可。


至于时间,我在网上找了很多GetLocateTime不是很实用。

我推荐WinBase里面的一个结构体,方便你对时间进行各类运算。


下面是C++控制台的源代码,可以参考一下放到Win32中。

#include <iostream>#include <time.h>#include <windows.h> using namespace std;struct PlantDateAndTime{int Year;int Mon;int Day;int Hur;int Min;int Sec;};PlantDateAndTime Grown;void CalculateGrowTime(int Hours,int Minute){SYSTEMTIME st = {0};GetLocalTime(&st);Grown.Sec=st.wSecond;Grown.Min=st.wMinute+Minute;Grown.Hur=st.wHour+Hours%24;Grown.Day=st.wDay+Hours/24;Grown.Mon=st.wMonth;Grown.Year=st.wYear;}void  main(){CalculateGrowTime(24,20);//可以设置任何值cout << "目标时间:"<<Grown.Year<<"年"<<Grown.Mon<<"月"<<Grown.Day<<"日 "<<Grown.Hur<<"点"<<Grown.Min<<"分"<<Grown.Sec<<"秒";}


在游戏中,实时保存到一个Dat文件中去,就可以保证每一次打开,游戏的植物时间都会自动减少,

至于除虫除草这些,那么就是纹理的操作了。不再赘述。

原创粉丝点击