- SFML Game Development By Example
- Raimondas Pupius
- 331字
- 2021-07-23 14:55:07
Implementing the snake structure
Let's now create the two files we'll be working with: Snake.h
and Snake.cpp
. Prior to actually developing the snake class, a definition of some data types and structures is in order. We can begin by actually defining the structure that our apple eating serpent will be made out of, right in the snake header file:
struct SnakeSegment{ SnakeSegment(int x, int y) : position(x,y){} sf::Vector2i position; };
As you can tell, it's a very simple structure that contains a single member, which is an integer vector representing the position of the segment on the grid. The constructor here is utilized to set the position of the segment through an initializer list.
Tip
Before moving past this point, make sure you're competent with the Standard Template Library and the data containers it provides. We will specifically be using std::vector
for our needs.
We now have the segment type defined, so let's get started on actually storing the snake somewhere. For beginner purposes, std::vector
will do nicely! Before going too far with that, here's a neat little trick for curing our code of "long-line-itus":
using SnakeContainer = std::vector<SnakeSegment>;
As you should already know from your C/C++ background, using
is a neat little keyword that allows the user to define aliases for the known data types. By using our clean new definitions together with the auto
keyword, we're preventing a scenario like the following from ever happening:
std::vector<SnakeSegment>::iterator someIterator = ...
It's a simple matter of convenience and is completely optional to use, however, we will be equipping this useful tool all the way through this book.
One last type we need to define before beginning to really work on the snake class, is the direction enumeration:
enum class Direction{ None, Up, Down, Left, Right };
Once again, it's nothing too fancy. The snake has four directions it can move in. We also have a possibility of it standing still, in which case we can just set the direction to NONE
.
- ASP.NET Core:Cloud-ready,Enterprise Web Application Development
- Visual Studio 2012 Cookbook
- 機器學習系統:設計和實現
- What's New in TensorFlow 2.0
- 架構不再難(全5冊)
- Hands-On Data Structures and Algorithms with JavaScript
- 深入淺出WPF
- Apache Spark Graph Processing
- Eclipse Plug-in Development:Beginner's Guide(Second Edition)
- 零基礎學Python網絡爬蟲案例實戰全流程詳解(高級進階篇)
- RISC-V體系結構編程與實踐(第2版)
- 區塊鏈技術與應用
- Getting Started with React Native
- Python+Tableau數據可視化之美
- Python編程:從入門到實踐(第3版)