SDL农场游戏开发 1.环境搭建

由于我个人受到传统农场类游戏的熏陶,因此萌生出了开发一个类似于QQ农场的游戏。

本次游戏打着SDL的幌子(这么说自己真的好么),其实使用的是SDL_Engine,它是我闲暇时模仿cocos2dx而写的一个游戏框架。个人认为了解下SDL_Engine框架是有点用的(去掉了cocos2dx中精华的部分,然后加上自己写的糟粕-_-),但是不太建议使用这个框架(里面的坑比较多);然后就是SDL_Engine的API等类似cocos2dx,不过尽管如此,他们之间并不兼容,所以代码只能在SDL_Engine下运行,不过开发嘛,重在思想。

好了,废话不多说,我已经完成了大部分的功能,其运行界面大致如下:

 

 

上面是种植界面,不太善于界面,因此种植界面、背包界面和商店界面类似,只不过逻辑不同,比如种植界面是种植作物,而商店主要是购买。

大致说下农场游戏的整个框架吧,如下图:

  • FarmScene:农场游戏的主场景,负责层之间的调度和通信。
  • 土壤层:负责显示整个地图,同时也负责管理土壤,比如增加土壤、土壤的状态的更新等。
  • 作物层:负责管理作物和显示作物。
  • 农场UI层:负责显示一些控件,比如打开商店、打开仓库等。
  • 特效层:负责显示特效,在这里主要负责显示作物的成熟特效。
  • 对话框:目前大致分为两种对话框,一种是滑动条对话框,主要用在出售/购买时确定物品的个数;另一种则是通用的对话框,来确定是否进行某种操作。

本游戏可以认为是MVC框架,View主要交给了SDL_Engine内的Sprite进行渲染;Controller则是FarmScene和上面的几个层以及它们之间的交互;Model则主要分为两个类:StaticData和DynamicData类。顾名思义,StaticData负责静态数据,即在游戏运行过程中不会发生改变的数据,比如作物的种子价钱、成熟时间、预计产量等;DynamicData类则主要负责在游戏过程中时常变化的数据,比如金币,背包内的物品等等。

在此推荐以下两本书,是我个人认为cocos2dx入门比较好的书籍(排名不分先后):

《cocos2dx游戏开发之旅》,这本书是我的入门书籍,里面的内容确实不错。(SDL_Engine中的UI系统就是参考的这本书)

《制作自己的捕鱼达人》:这本书也很不错,前面逐步讲解了相关知识在捕鱼游戏中的应用,后面则是开发实战环节,实战环节让我收益颇丰。

 

本系列托管于github:https://github.com/sky94520/Farm

农场的碎图文件:https://download.csdn.net/download/bull521/10821689

另外,我的开发环境是ubuntu,使用了cmake作为编译工具,如果移植到其他平台可能需要改变编码和行结束字符。

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
#include #include //用键盘控制精灵移动 int main(int argc, char ** argv) { SDL_Surface * screen; //主表面 SDL_Surface * image; //用来放MM-----的图片信息(像素) SDL_Surface * PlayerImage; //用来测试的图片 SDL_Event event; Uint32 BeginTicks, EndTicks; SDL_Rect PRect, BRect; //PRect对应精灵的移动的小图位置(实现动画),BRect对应精灵在屏幕的位置。 unsigned char PlayerStarts = 0; unsigned char PlayerIndex = 0; bool bAppRun = true; //初始化SDL if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) { fprintf(stderr, "SDL_Init %s\n", SDL_GetError()); return -1; } //初始化成功设置退出要调用的函数SDL_Quit atexit(SDL_Quit); //创建一个640X480 16-bit 模式的主表面 16位可以让MM的效果好看一点 screen = SDL_SetVideoMode(230, 230, 16, SDL_SWSURFACE); if (screen == NULL) { fprintf(stderr, "Couldn't set 640x480x8 video mode %s\n", SDL_GetError()); return -1; } //读取MM图片信息,并创建一个表面,并把数据填入该表面中。 image = SDL_LoadBMP("./mm.bmp"); //请在终端里运行该程序 if (image == NULL) { fprintf(stderr, "Couldn't load MM, %s\n", SDL_GetError()); //遗憾你不能显示MM了,不过你可以用图片浏览程序看。 return -1; } //读取player.bmp PlayerImage = SDL_LoadBMP("./player.bmp"); //请在终端里运行该程序 if (image == NULL) { fprintf(stderr, "Couldn't load MM, %s\n", SDL_GetError()); //遗憾你不能显示MM了,不过你可以用图片浏览程序看。 return -1; } //读取第一个像素 Uint8 key = *((Uint8 *)PlayerImage->pixels); //设置色键 SDL_SetColorKey(PlayerImage, SDL_SRCCOLORKEY, key); //有了MM的表面了,就可以显示了。 //将MM的表面画在我们的主表面上,用MM来作为背景 if (SDL_BlitSurface(image, NULL, screen, NULL) < 0) { //解释一下NULL,第一个是按照image的尺寸显示,第二个是默认显示。你也可以指定大小,不过要用到SDL_Rect你可以看一看帮助。 fprintf(stderr, "BlitSurface error: %s\n", SDL_GetError()); //看看提示吧 return -1; } PRect.x = 0; //初始化动画显示的图片。 PRect.y = 0; PRect.w = 32; PRect.h = 48; BRect.x = 0; //初始化精灵的位置。 BRect.y = 0; BRect.w = 32; BRect.h = 48; //贴上测试用的表面 if (SDL_BlitSurface(PlayerImage, &PRect, screen, &BRect) w, image->h); BeginT
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值