[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脚本语言开发出高扩展性的系统...> ...
随机推荐
- 函数:内嵌函数和闭包 - 零基础入门学习Python020
函数:内嵌函数和闭包 让编程改变世界 Change the world by program 内嵌函数和闭包 接下来这两节课我们谈的话题可能会"比较高级",所以如果是零基础的朋友, ...
- 黑马程序员——读取Plist文件
-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ 读取Plist文件 一:新建一个plist文件,并将plist文件数据填入plist文件中,这里pli ...
- jqGrid添加详细按钮,单击弹出窗体
代码如下: @using WebMap.Framework.UI; @using WebMap.Admin.Models; @using WebMap.Core; @using WebMap.Core ...
- C语言复习--实现栈
C #include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 typedef char TYPE; typed ...
- tessnet2 在vs2010 及以上版本不能调用的解决方案
<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version=&qu ...
- 提高效率的便签By番茄时间管理 win7标签,小功能,大作用
今日待办 把一些重要的事情,列入其中. 着重处理. 活动清单 罗列一些最近需要做的事情,不一定按照紧急重要的程度. 把活动清单中的事情,按照实际情况,安排到今日待办当中. 还有一个我喜欢的'头脑风暴' ...
- hdu3095-Eleven puzzle(双向搜索+哈希)
Partychen invents a new game named “Eleven Puzzle” .Just like the classic game “Eight Puzzle”,but th ...
- Uva227.Puzzle
题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- C++中单链表的建立和操作
准备数据 准备在链表操作中需要用到的变量及数据结构 示例代码如下: struct Data //数据结点类型 { string key; //关键字 string name; int age; }; ...
- Hive 10、Hive的UDF、UDAF、UDTF
Hive自定义函数包括三种UDF.UDAF.UDTF UDF(User-Defined-Function) 一进一出 UDAF(User- Defined Aggregation Funcation) ...