[C入门 - 游戏编程系列] 贪吃蛇篇(一) - 世界定义
每个游戏都有一个很明确的目的或者说游戏主题,贪吃蛇的目的很明确:蛇找到并吃掉食物。只有目的是很无聊的,算不上一个好游戏。所以设计者增加了创意:1. 吃掉食物后蛇会增长;2. 吃掉食物后分数会增加。有些还可以增加速度,增加障碍物等,不过我不打算实现这些,我的目的也很明确,实现创意1和2。
仔细分析一下,贪吃蛇游戏其实只涉及三个元素:蛇,食物,界面。这里,便记录下和界面有关的想法和代码。
一. 世界定义
我把游戏中和界面相关的部分统称为世界,蛇和食物都可以属于世界,但是世界却不一定有蛇和食物。就像生活中,学校里可以有学生,也可以没有学生,因为放假了嘛!但是学生既然被称作学生,他就一定属于某个学校。所以世界只含有世界特有的事物,有没有蛇,有没有食物,它都在那里。
因此,我得出世界的定义:
typedef struct World {
int w, h;
SDL_Window *window;
SDL_Renderer *render;
} World;
w、h用于描述世界的大小。
render用于绘制世界中的任何事物。
window用于表示一个具体的世界,即眼睛可以看到的真实存在的世界,而单纯的World是抽象的。
二. 世界方法
作为游戏的设计者,由我们决定着如何创建、改变以及销毁世界,我要让它有光,它就得有光,让它毁灭,它就得毁灭。因此如果描述我们的想法作为函数, 那么贪吃蛇游戏的世界就必须有以下三个函数:
extern World * SNK_CreateWorld(const char *name, int w, int h);
extern void SNK_DestroyWorld(World *world); extern void SNK_ShowWorld(World *world);
有了这些,我们就能操控世界了。至于世界中有什么,管它呢!毁灭了世界,一切都得消失!
下面给出完整的头文件snk-world.h中的内容:
#ifndef SNK_WORLD_H_HEADER
#define SNK_WORLD_H_HEADER #include <SDL2/SDL.h> typedef struct World {
int w, h;
SDL_Window *window;
SDL_Renderer *render;
} World; extern World * SNK_CreateWorld(const char *name, int w, int h);
extern void SNK_DestroyWorld(World *world); extern void SNK_ShowWorld(World *world); #endif
[C入门 - 游戏编程系列] 贪吃蛇篇(一) - 世界定义的更多相关文章
- [C入门 - 游戏编程系列] 贪吃蛇篇(二) - 食物定义
游戏中的食物没有那么多复杂属性,特别是贪吃蛇游戏中,我把食物看待的很简单: 1. 它必须属于世界,才能出现在世界.不可能一个不属于世界的食物,出现在世界中:但是可能存在着一个食物,它属于世界,但是却没 ...
- [C入门 - 游戏编程系列] 贪吃蛇篇(六) - 蛇实现
这一篇是关于设置蛇的属性的,接上一篇(五). 设置蛇的速度,很简单,只要不是负数就行了. void SNK_SetSnakeSpeed(Snake *snake, int speed) { ) sna ...
- [C入门 - 游戏编程系列] 贪吃蛇篇(四) - 食物实现
由于食物是贪吃蛇游戏中最简单的一部分,而且和其他部分关联性不强,基本上是一个独立的部分,所以我打算先实现它. 我的想法是食物必须在世界中才能被创造出来,也就是说,先有世界再有食物,所以我得先判断世界是 ...
- [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脚本语言开发出高扩展性的系统...> ...
随机推荐
- 使用POI插件,提取导出excel的工具类
在网站的不同的模块都需要使用到导入导出excel的功能,我们就需要写一个通用的工具类ExcelUtil. 我的思路:首先,导入和导出的Excel的文件格式固定:主标题,二级标题,数据行(姑且就这么叫) ...
- Truck History--poj1789
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21534 Accepted: 8379 De ...
- DBA 思想天空笔记
/*+leading(t1) use_nl(t2*/这个HINT的含义,其中use_nl表示强制用嵌套循环连接方式.Leading(t1)表示强制先访问t1表,也就是t1表作为驱动表,增加HINT的目 ...
- CS找工作好文章
我的美国CS面试经验分享 -- 转载 怎样花两年时间去面试一个人 上面列出了一些比较好的书单 cs土硕找工作总结(二) 笔试面试准备http://blog.renren.com/blog/221227 ...
- LeetCode_N-Queens
The n-queens puzzle is the problem of placing n queens on an n�n chessboard such that no two queens ...
- LeetCode_Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- C# 通过线程更新UI
摘自:http://msdn.microsoft.com/zh-cn/library/ms171728(en-us,VS.80).aspx 关键代码(form中增加): delegate void S ...
- linux 虚拟机设置IP访问外网
1 设置网络为桥接模式:(Vmware为例,安装过程中也可以设置) 选中当前的操作系统,点击虚拟机-->设置-->硬件-->网络设备器,勾选桥接模式 2 修改网络配置在命令行界面输入 ...
- JavaScript 基础二
JavaScript 事件处理程序就是一组语句,在事件(如点击鼠标或移动鼠标等)发生时执行 ●当事件之间互相影响时,需要有个先后顺序,这时我们声明一个Bool值来做约束 浏览对象: window 对象 ...
- URLConnection的连接、超时、关闭用法总结
Java中可以使用HttpURLConnection来请求WEB资源. 1. URL请求的类别 分为二类,GET与POST请求.二者的区别在于: a:) get请求可以获取静态页面,也可以把 ...