[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

 

你可能感兴趣的:(贪吃蛇)