[snake] 1.初期設定


概要


期末試験も終わり、やることもなく何をすべきか悩んでいましたが、C++の対象性を正確に知るためにc++でSnakeゲームを作ることにしました.

Snakeゲームとは?



方向キーで操作する簡単なゲーム.ヘビは食べ物(写真ではりんご)を食べ、その長さはますます大きくなります.これでずっと食べ物を食べて自分にぶつかるとゲームは終わります.

実行環境


zsh shellで操作します.c++をg++にコンパイルします.

n/a.ターゲット


対象を学ぶことを目標にしているので、段階的にプロジェクトを育成していきます.
第1段階-一般的なSnakeゲームを作成します.
第2段階-ネット通信を通じて友達のランキングを知る.
第3段階-リアルタイムで友達と競争することができます.

ファイル構成


ファイルは次のように分類されます.
-Maingame//ゲームロジックに関するものが含まれています.
-graphic//コンソールウィンドウでゲームを描画します.
-Info//データが含まれています.
思ったほど多くのファイルが分割されていません.作成するともっと書類が増えるのではないでしょうか.

Info class


Info.h

#ifndef INFO_H
#define INFO_H
class Info {
private : 
	const int Width = 15,Height = 15;
public:
	int ** data;
	Info();
	int getWidth();
	int getHeight();
};
#endif
widthとheightは定数に設定されておらず、後でユーザーが変更できるようにしていません.いつでも機能を追加する道を開きたい.
dataは本来カプセル化すべきであるが,getter処理を用いてもアドレス値を持ち去り,勝手に値を変更するのでpublicに直接削除する.その部分を考えるべきだ.c++はポインタのせいで、思ったよりカプセル化が難しいことがわかりました.

graphic class


graphic.h

#ifndef GRAPHIC_H
#define GRAPHIC_H
#include "../info/info.h"
class graphic {
private :
	Info * UserData;
public:
	graphic(Info * a); 
	void draw();
	void title();
	void clear();
};
#endif
ユーザーデータストレージデータ、drawペイントコンソール、clearパージコンソールウィンドウ、titleペイントタイトル.今考えてみると、なぜgraphicクラスにuserdataがあるべきか分かりません.でもポインタであちこち移動して、どうしても取り除かなければならないので、パラメータで受け入れますか?針の存在でカプセル化が完全に壊れたような気がします.

maingame class


maingame.h

#ifndef MAINGAME_H
#define MAINGAME_H
#include "../info/info.h"
#include "../graphic/graphic.h"
class Maingame {
private:
	graphic * window;
	Info * UserInfo;
public:
	Maingame();
	void init();
	void start();
};
#endif
ゲームロジックのクラスを管理します.私はまだあまり書いていないので、ここまで書きました.😓
書類はダウンジャケットに置いてあります.Master Branchは、最終バージョンのFirst Branchにソースコードをアップロードします.
バニラショートカット