游戏中的食物没有那么多复杂属性,特别是贪吃蛇游戏中,我把食物看待的很简单:

  1. 它必须属于世界,才能出现在世界。不可能一个不属于世界的食物,出现在世界中;但是可能存在着一个食物,它属于世界,但是却没有出现在世界中(即食物的颜色和世界的颜色相同,因此看不见食物)。这就像鬼一样,它可能存在于这个世界上,但我们看不到它。

  2. 一个属于世界的食物,具有在这个世界中的位置。

  3. 它有颜色和大小。

  因此,食物的结构体定义就显而易见了!

typedef struct Food
{
World *world;
int x, y, size;
SDL_Color color;
} Food;

  有了食物,我要在世界中把它创造出来,就得提供两个基本函数来操控它:

extern Food * SNK_CreateFood(World *world, int size);
extern void SNK_DestroyFood(Food *food);

此时,食物就可以在世界中被创造出来了,世界开始变得缤纷多彩。

  但是,问题来了,创建食物时,只知道要创建多大的食物,在哪儿创建,创建什么颜色,一开始都是不知道的,那么,在食物创建出来后,我们就必须想办法改进它,让食物变得与众不同。所以,我设置了以下两个函数用于改变食物的属性,前提是,食物必须存在:

extern void SNK_SetFoodPosition(Food *food, int x, int y);
extern void SNK_SetFoodColor(Food *food, Uint8 r, Uint8 g, Uint8 b, Uint8 a);

  一开始的设想要的是一个具有颜色、具有大小的食物能在世界中存在,而具有上面的方法后,我足够创建这样的食物了。因此,我现在要让符合我设想的食物显示在世界中:

extern void SNK_DrawFood(Food *food);

  到此,食物的所有方法就定义完了。虽然,只有几个函数,但是在贪吃蛇的世界中够用了。

以下是我的snk-food.h文件中的完整食物定义:

#ifndef SNAKE_FOOD_H_HEADER
#define SNAKE_FOOD_H_HEADER #define FOOD_INIT_COLOR 0, 0xff, 0, 0xff #include "snk-world.h" typedef struct Food
{
World *world;
int x, y, size;
SDL_Color color;
} Food; extern Food * SNK_CreateFood(World *world, int size);
extern void SNK_DestroyFood(Food *food); extern void SNK_DrawFood(Food *food); extern void SNK_SetFoodPosition(Food *food, int x, int y);
extern void SNK_SetFoodColor(Food *food, Uint8 r, Uint8 g, Uint8 b, Uint8 a); #endif

宏FOOD_INIT_COLOR只是为了提供方便,仅为SNK_SetFoodColor函数中使用。

[C入门 - 游戏编程系列] 贪吃蛇篇(二) - 食物定义的更多相关文章

  1. [C入门 - 游戏编程系列] 贪吃蛇篇(一) - 世界定义

    每个游戏都有一个很明确的目的或者说游戏主题,贪吃蛇的目的很明确:蛇找到并吃掉食物.只有目的是很无聊的,算不上一个好游戏.所以设计者增加了创意:1. 吃掉食物后蛇会增长:2. 吃掉食物后分数会增加.有些 ...

  2. [C入门 - 游戏编程系列] 贪吃蛇篇(四) - 食物实现

    由于食物是贪吃蛇游戏中最简单的一部分,而且和其他部分关联性不强,基本上是一个独立的部分,所以我打算先实现它. 我的想法是食物必须在世界中才能被创造出来,也就是说,先有世界再有食物,所以我得先判断世界是 ...

  3. [C入门 - 游戏编程系列] 贪吃蛇篇(六) - 蛇实现

    这一篇是关于设置蛇的属性的,接上一篇(五). 设置蛇的速度,很简单,只要不是负数就行了. void SNK_SetSnakeSpeed(Snake *snake, int speed) { ) sna ...

  4. [C入门 - 游戏编程系列] 贪吃蛇篇(三) - 蛇定义

    蛇是这个游戏的主角,要实现的功能也是最复杂的一个.因为蛇不止有属性,还有行为.它会动,还会吃东西,还会长大!而且还会死!这是很要命的.我一向看不懂复杂的代码,也写不出复杂的代码.所以对于蛇,我很纠结, ...

  5. [C入门 - 游戏编程系列] 贪吃蛇篇(五) - 蛇实现

    因为已经写了食物的实现,所以我不知道到底是该先写世界的实现还是蛇的实现.因为世界就是一个窗口,可以立刻在世界中看到食物的样子,对于大多数人来说,如果写完代码立刻就能看到效果,那就再好不过了.可是,我最 ...

  6. [C入门 - 游戏编程系列] 序言篇

    记得学习C语言的时候,看着别人能写各种各样的小游戏和小软件,甚是羡慕.而自己,虽然说语法都会,但是真正上手写个几百行的代码,就显得力不从心.曾经一度很是郁闷,看过一些书,大都处于教语法的层面,有些涉及 ...

  7. [C入门 - 游戏编程系列] 环境篇

    这一系列笔记的代码都是在Ubuntu 14.04下编码并测试的,原因无他,因为我笔记本电脑只装了一个Ubuntu系统,其中唯一使用的第三方库SDL也是开源并且跨平台的.所以即使你用的是Windows或 ...

  8. Love2D游戏引擎制作贪吃蛇游戏

    代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windows下的生成方法请查 ...

  9. 控制台游戏引擎CGE——贪吃蛇

    今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...

随机推荐

  1. js 发送ajax请求(XMLHttpRequest)

    <!DOCTYPE html><html> <head> <title></title> <script type="tex ...

  2. 记录使用Hibernate查询bean中字段和数据库列类型不匹配问题

    今天在工程中遇到Hibernate查询的时候,bean中的字段和数据库中的字段不符合(bean中有pageTime字段,但是数据库中没有此列)报错问题. 具体问题环境: 在auto_off表中,off ...

  3. 【转】Install SmartGit via PPA in Ubuntu 13.10/13.04/12.04/Linux Mint

    原文网址:http://ubuntuhandbook.org/index.php/2013/09/install-smartgit-via-ppa-ubuntu-linux-mint/ This tu ...

  4. 2015第23周一SVN插件安装

    之前想把eclipse(3.7)的SVN插件版本从1.8.x降到1.6.x,上午折腾了好久没弄好,先是尝试在线安装,按网上说的1.6.x的url安装不成功(可能是网络问题,下载不到资源),然后尝试下载 ...

  5. JavaScript Function 函数深入总结

    整理了JavaScript中函数Function的各种,感觉函数就是一大对象啊,各种知识点都能牵扯进来,不单单是 Function 这个本身原生的引用类型的各种用法,还包含执行环境,作用域,闭包,上下 ...

  6. SpringMVC接收复杂集合参数

    Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是applica ...

  7. Android 体系结构

    Anroid是在Linux基础开发出的一个移动设备开发平台.它自上而下包含四个部分: Application(应用程序) Applicaton Framework(应用程序框架) Libraries& ...

  8. java 读取mysql库表数据

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  9. android推送-PHP(第三方推送:个推)

    在项目初期,就安卓推送功能怎么做,曾经参考过例如XMPP之类的推送方法.但苦于那些是些英文档案,又没太多时间研究,所以打算采用第三方推送(个推,极光推送等),后来在美图技术老大推荐下用采用个推. PS ...

  10. Web Service 初步了解

    Web Service见名之意就是网络上的一些服务,解决的问题就是如何使用这些服务,因为软件的开发有各种各样的语言,利用Java,C#,VB.NET,PHP等等,如何使这些语言编写的程序能够进行互通, ...