[C入门 - 游戏编程系列] 贪吃蛇篇(二) - 食物定义
游戏中的食物没有那么多复杂属性,特别是贪吃蛇游戏中,我把食物看待的很简单:
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入门 - 游戏编程系列] 贪吃蛇篇(二) - 食物定义的更多相关文章
- [C入门 - 游戏编程系列] 贪吃蛇篇(一) - 世界定义
每个游戏都有一个很明确的目的或者说游戏主题,贪吃蛇的目的很明确:蛇找到并吃掉食物.只有目的是很无聊的,算不上一个好游戏.所以设计者增加了创意:1. 吃掉食物后蛇会增长:2. 吃掉食物后分数会增加.有些 ...
- [C入门 - 游戏编程系列] 贪吃蛇篇(四) - 食物实现
由于食物是贪吃蛇游戏中最简单的一部分,而且和其他部分关联性不强,基本上是一个独立的部分,所以我打算先实现它. 我的想法是食物必须在世界中才能被创造出来,也就是说,先有世界再有食物,所以我得先判断世界是 ...
- [C入门 - 游戏编程系列] 贪吃蛇篇(六) - 蛇实现
这一篇是关于设置蛇的属性的,接上一篇(五). 设置蛇的速度,很简单,只要不是负数就行了. void SNK_SetSnakeSpeed(Snake *snake, int speed) { ) sna ...
- [C入门 - 游戏编程系列] 贪吃蛇篇(三) - 蛇定义
蛇是这个游戏的主角,要实现的功能也是最复杂的一个.因为蛇不止有属性,还有行为.它会动,还会吃东西,还会长大!而且还会死!这是很要命的.我一向看不懂复杂的代码,也写不出复杂的代码.所以对于蛇,我很纠结, ...
- [C入门 - 游戏编程系列] 贪吃蛇篇(五) - 蛇实现
因为已经写了食物的实现,所以我不知道到底是该先写世界的实现还是蛇的实现.因为世界就是一个窗口,可以立刻在世界中看到食物的样子,对于大多数人来说,如果写完代码立刻就能看到效果,那就再好不过了.可是,我最 ...
- [C入门 - 游戏编程系列] 序言篇
记得学习C语言的时候,看着别人能写各种各样的小游戏和小软件,甚是羡慕.而自己,虽然说语法都会,但是真正上手写个几百行的代码,就显得力不从心.曾经一度很是郁闷,看过一些书,大都处于教语法的层面,有些涉及 ...
- [C入门 - 游戏编程系列] 环境篇
这一系列笔记的代码都是在Ubuntu 14.04下编码并测试的,原因无他,因为我笔记本电脑只装了一个Ubuntu系统,其中唯一使用的第三方库SDL也是开源并且跨平台的.所以即使你用的是Windows或 ...
- Love2D游戏引擎制作贪吃蛇游戏
代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windows下的生成方法请查 ...
- 控制台游戏引擎CGE——贪吃蛇
今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...
随机推荐
- ubuntu配置android开发环境和编译源码遇到的一些问题
---------------------------------------------环境变量设置--------------------------------------------- 1.设 ...
- <转>十分钟学会javascript
本文转自国外知名网站Learn X in Y minutes. 由于格式的限制无法直接将Markdown转贴过来,所以只能用Iframe的方式. 本文适合有一定编程基础又对Javascript感兴趣的 ...
- PYTHON线程知识再研习E---条件变量同步Condition
Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的 acquire和release方法外,还提供了wait和notify ...
- android Handler及消息处理机制的简单介绍
学习android线程时,直接在UI线程中使用子线程来更新TextView显示的内容,会有如下错误:android.view.ViewRoot$CalledFromWrongThreadExcepti ...
- bzoj4005[JLOI2015]骗我呢
http://www.lydsy.com/JudgeOnline/problem.php?id=4005 神题~远距离orz 膜拜PoPoQQQ大神 #include<cstdio> #i ...
- JS控制菜单样式切换
$('#subtabs a').each(function (i, ele) { var href = $(ele).attr("href"); if (location.href ...
- <php>上传文件的程序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- myeclipse实现Servlet实例(3) 通过继承HttpServlet接口实现
(1) 在软件公司 90%都是通过该方法开发. //在HttpServlet 中,设计者对post 提交和 get提交分别处理 //回忆 <form action="提交给?&qu ...
- java_IO流小结
字符流和字节流的主要区别: 1.字节流读取的时候,读到一个字节就返回一个字节: 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时.先去查指定的编码表,将 ...
- mysql 存储过程 计算报表
把用例执行情况mysql表汇总起来 proc_write_report 汇总执行用例表中的测试数据 写入report 表,report表包括字段 report_id(自增)execution_flag ...