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

  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. mac下 配置tomcat

    第一步: 1.打开你的终端:然后输入  pico .bash_profile   回车 第二步: 2. 然后添加你tomcat放入的路径的path 编辑完后,control+x   (保存)    继 ...

  2. [T]各种字符串Hash函数比较

    常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...

  3. poj 3792 Area of Polycubes

    http://poj.org/problem?id=3792 #include <cstdio> #include <cstring> #include <cmath&g ...

  4. EBS Workfow常用表

    1.Workflow Definition Tables WF_ITEM_TYPES WF_ACTIVITIES WF_MESSAGES WF_ITEM_ATTRIBUTES WF_ACTIVITY_ ...

  5. windows环境下nutch2.x 在eclipse中实现抓取数据存进mysql详细步骤

    nutch2.x 在eclipse中实现抓取数据存进mysql步骤 最近在研究nutch,花了几天时间,也遇到很多问题,最终结果还是成功了,在此记录,并给其他有兴趣的人提供参考,共同进步. 对nutc ...

  6. 关于ionic的一些坑(2)

    如果你通过查阅相关文档,ionic的项目框架已经搭好,下面我来总结一下我在项目中所遇到的坑,给还没踩过的人以方便,给自己以勉励: (1)关于android和ios的适配 因为ionic默认的tabs状 ...

  7. HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之全然具体解释

      HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth究竟指的哪到哪的距离之全然具体解释scrollHeight: 获取对象的滚动高度. scrol ...

  8. 基于注解的Spring MVC

    1.加入�jar 2.web.xml配置: <?xml version="1.0" encoding="UTF-8"?> <web-app v ...

  9. Mysql存储引擎概念特点介绍及不同业务场景选用依据

    目录 MySQL引擎概述 1 MySAM引擎介绍 2 什么是InnoDB引擎? 3 生产环境中如何批量更改MySQL引擎 4 有关MySQL引擎常见企业面试题 MySQL引擎概述 Mysql表存储结构 ...

  10. S2SH简单介绍和理解

    struts2简介 Struts2是由WebWork基础上发展起来的,与struts1比较,选用struts2的理由是:①Struts1要求Action类继承一个抽象基类,而Struts2Action ...