C語言是面向過程的童芹,而C++是面向?qū)ο蟮?/p>
C和C++的區(qū)別:
C是一個結(jié)構(gòu)化語言晦闰,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)腹侣。C程序的設(shè)計(jì)首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)巍糯。
C++,首要考慮的是如何構(gòu)造一個對象模型值纱,讓這個模型能夠契合與之對應(yīng)的問題域鳞贷,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣虐唠。之所以說C++比C更先進(jìn)搀愧,是因?yàn)椤?設(shè)計(jì)這個概念已經(jīng)被融入到C++之中 ”。
C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣疆偿。之所以說C++比C更先進(jìn)咱筛,是因?yàn)椤?設(shè)計(jì)這個概念已經(jīng)被融入到C++之中 ”,而就語言本身而言杆故,在C中更多的是算法的概念迅箩。那么是不是C就不重要了,錯处铛!算法是程序設(shè)計(jì)的基礎(chǔ)饲趋,好的設(shè)計(jì)如果沒有好的算法,一樣不行撤蟆。而且奕塑,“C加上好的設(shè)計(jì)”也能寫出非常好的東西。
最初覺得程序的關(guān)鍵應(yīng)該是求解迷宮家肯,后來發(fā)現(xiàn)求解迷宮很簡單龄砰,難點(diǎn)是如何生成迷宮。 這里采用接合圖的深度優(yōu)先遍歷讨衣,生成迷宮的算法换棚,定義了搜索步長以便控制迷宮分支多少和分支深度。 由于程序中多處用到鏈表反镇,所以對于迷宮求解部分也是用鏈表固蚤,沒有用棧。 代碼比較多歹茶,就不出了夕玩,只列舉了C和C++主要全局變量和函數(shù)
///////////////////////////////////////////////////
//C++主要變量和函數(shù)定義
//////////////////maze.h///////////////////////////
//全局變量
#ifndef _GLOBAL_VAR_
#define _GLOBAL_VAR_
#include "MazeClass.h"
class CMaze *game = NULL; //迷宮類對象指針
class CRoom **map; //游戲map指針
HWND hWndMain; //主窗口句柄
HBITMAP h_MemBm = NULL; //內(nèi)存位圖
HDC h_MemDC = NULL; //內(nèi)存DC
RECT rCliRet; //游戲窗口大小
HBRUSH hBrushes[10]; //繪制方塊的畫刷
#endif
//////////////////LinkList.h///////////////////////
#ifndef _LINK_LIST_H
#define _LINK_LIST_H
#include
template
class Node
小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 二六三,六八八辆亏,二七六 】,無論你是大牛還是小白鳖目,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)扮叨!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享领迈!
{
private:
Node *nextptr;
public:
T data;
Node();
~Node();
Node *next() const;
Node(const T &item, Node *ptrnext=NULL);
void setNext(Node *ptrnext=NULL);
};
template
class LinkList
{
private:
Node *head;
Node *tail;
Node *curr;
Node *getNode(const T &item, Node *ptrnext=NULL);
void freeNode(Node *p);
int size;
public:
LinkList();
~LinkList();
Node *next();
Node *current();
Node *first();
Node *last();
Node *findNode(int index);
Node *findNode(const T &item); //此功能需要模板類重載等于運(yùn)算符
void reset();
int getSize();
int insertFront(const T &item);
int insertTail(const T &item);
int insertAfter(const T &item, int index);
int deleteFront(T *item);
int deleteTail(T *item);
int deleteNode(T *item, int index);
void clear();
bool isEmpty();
};
#endif
//////////////MazeClass.h///////////////////////////
#ifndef _MAZE_CLASS_H
#define _MAZE_CLASS_H
#include
#include
#include
#include "LinkList.h"
//引入外部變量
extern HWND hWndMain; // 主窗口句柄
extern HBITMAP h_MemBm; // 內(nèi)存位圖
extern HDC h_MemDC; // 內(nèi)存DC
extern RECT rCliRet; // 窗口大小
extern class CMaze *game; // 迷宮類指針
extern class CRoom **map; //游戲map指針
extern HBRUSH hBrushes[10]; //繪制路徑畫刷
#define RIGHT 0 //向右
#define DOWN 1 //向下
#define LEFT 2 //向左
#define UP 3 //向后
#define NODIR 4
#define LEFT_WALL 0 //左邊墻壁
#define UP_WALL 1 //上面墻壁
#define IS_WALL 0 //有墻壁
#define NO_WALL 1 //沒有墻壁
#define HAS_DEAL 0 //map處理狀態(tài)彻磁,已經(jīng)處理
#define IN_DEAL 1 //正在處理
#define NOT_DEAL 2 //未處理
#define STEP 12 //搜索步長
#define AUTO_MODE 0 //玩家類型電腦自動
#define PLAY_MODE 1 //手動
#define INIT 0 //玩家狀態(tài)初始化
#define GOING 1 //運(yùn)行
#define STOP 2 //暫停
#define OVER 3 //結(jié)束
#define IDT_TIMER1 1 // 定時器編號
#define IDT_TIMER2 2
//坐標(biāo)點(diǎn)類
class point
{
public:
int x;
int y;
point();
~point();
point(int x, int y);
point(const point &p);
point &operator =(const point &p);
bool operator ==(const point &p);
};
//Room類,生成迷宮用到
class CRoom
{
friend class CMaze;
private:
point pos;
int status; //0:未訪問, 1:正在訪問, 2:已訪問
int upstatus; //0:可以通過 1:不可以通過
int leftstatus; //0:可以通過 1:不可以通過
//每個節(jié)點(diǎn)只需判斷up&left是否可以通過即可
};
//迷宮墻壁類
class CWall
{
friend class CMaze;
private:
point pos; //墻壁位置
int dir; //方向 1:橫 0:豎
public:
CWall();
CWall(const point &pos, const int &dir);
CWall(const CWall &p);
~CWall();
CWall &operator =(const CWall &p);
bool operator ==(const CWall &p);
};
class CBoard
小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 二六三碍沐,六八八,二七六 】衷蜓,無論你是大牛還是小白累提,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具磁浇,很多干貨和技術(shù)資料分享斋陪!
{
protected:
HBRUSH hBrush; //繪制背景畫刷
HPEN hPen; //繪制邊框線的畫筆
point m_pos, m_entry, m_exit;
int m_size, m_cell, m_nx, m_ny;
int m_mode, m_speed, m_status;
void fillCell(point pos, int color, int dir);
void displayText(point p, char *text);
public:
CBoard();
~CBoard();
int getCell();
int getMode();
int getSpeed();
int getStatus();
int getSize();
point getPos();
point getEntry();
point getExit();
void messageBox(char *errMsg, char *title, int style);
void setTimer(int id, int time);
void killTimer(int id);
};
//路徑節(jié)點(diǎn)類
class CPathNode
{
friend class CPlayer;
private:
int index; //節(jié)點(diǎn)在鏈表中編號
int indir; //最初進(jìn)去方向
int outdir; //最后一次出去方向
class point pos; //節(jié)點(diǎn)位置
public:
CPathNode();
CPathNode(point pos, int index, int indir, int outdir);
~CPathNode();
CPathNode(const CPathNode &p);
CPathNode &operator =(const CPathNode &p); //重載賦值運(yùn)算符
bool operator ==(const CPathNode &p); //重載等于號
};
//游戲玩家類
class CPlayer: public CBoard
{
private:
int curdir; //當(dāng)前的移動方向
int steps; //當(dāng)前步數(shù)
time_t usedTime, stopTime; //所有時間用時
LinkList path; //保存走過的正確路徑鏈表
LinkList error; //保存走過的錯誤路勁鏈表
LinkList *mazeptr; //指向當(dāng)前迷宮的指針
int canMove();
int doOper();
int autoGo();
void errOut(char *errMsg);
void showInfo();
void drawPath();
public:
CPlayer(CMaze *maze);
~CPlayer();
void onKeyDown(unsigned short key);
void onTimer(int id);
};
class CMaze: public CBoard
{
private:
LinkList wlist; //存放迷宮墻壁數(shù)據(jù)鏈表
class CPlayer *m_player;
void drawWall(class CWall wall);
int createWallList(LinkList *list);
int chgRoomStatus(point pos, LinkList *list, int dir, int depth);
int createMaze();
void drawMaze();
void showTime();
void showHelpInfo();
void initBkGnd();
int newGame();
void gameOver();
public:
CMaze();
~CMaze();
void dialogBox(HINSTANCE hInst, LPCTSTR IDD, DLGPROC myFunc);
int onInit();
void initDlg(HWND hDlg);
void onDlgOk(HWND hDlg);
void onTimer(int id); //游戲主控函數(shù)
void onKeyDown(unsigned short key); //游戲主控函數(shù)
void onPaint(HDC hdc);
LinkList *getWallList();
};
#endif
////////////////////////////////////////////
//C語言主要變量和函數(shù)定義
////////////////maze.h//////////////////////
#include
#include
#include
#include
#include
#include
#define M 50000 /* 迷宮最大墻壁數(shù) */
#define MAX_NODE_NUMBER 50000 /* 最大分配內(nèi)存節(jié)點(diǎn) */
#define MAXGRADE 150 /* 游戲最大難度 */
#define IDT_TIMER1 1 /* 定時器編號 */
#define IDT_TIMER2 2
#define STEP 16 /* 搜索步長 */
#define RIGHT 0
#define DOWN 1
#define LEFT 2
#define UP 3
#define AUTO_MODE 0
#define PLAY_MODE 1
#define UP_WALL 0
#define LEFT_WALL 1
#define INIT 0
#define GOING 1
#define STOP 3
#define OVER 4
struct position
{
int x;
int y;
};
struct GameInfo
{
struct position pos; /* 背景位置坐標(biāo) */
int size; /* 大小 */
int timer;
int nx;
int ny;
int cell;
int mode;
int mazemode;
int speed;
int times;
int status;
}game;
struct MazeWall
{
struct position pos;
int diretcion; /* 方向 0:橫 1:豎 */
};
struct MazeCfg
{
struct MazeWall data[M]; /* 墻壁坐標(biāo)數(shù)據(jù) */
struct position entry, exit; /* 入口和出口位置 */
int num; /* 墻壁個數(shù) */
}maze;
struct MapCfg
{
struct position pos;
int status; /* 0:未訪問, 1:正在訪問, 2:已訪問 */
int upstatus; /* 0:可以通過 1:不可以通過 */
int leftstatus; /* 0:可以通過 1:不可以通過 */
/* 每個節(jié)點(diǎn)只需判斷up&left是否可以通過即可 */
};
struct MapCfg **map;
struct travInfo
{
struct position pos;
struct travInfo *next;
};
struct RoadInfo
{
int index; /* 編號 */
int indir; /* 進(jìn)去方向 */
int outdir; /* 出去方向 */
struct position pos;
struct RoadInfo *next;
};
struct playercfg
{
int direction;
int steps;
time_t usedTime, endTime, stopTime;
struct RoadInfo *RoadPtr, *errPtr;
}play;
HWND hWndMain; /* 主窗口句柄 */
HBITMAP h_MemBm = NULL; /* 內(nèi)存位圖 */
HDC h_MemDC = NULL; /* 內(nèi)存DC */
HBRUSH hBrushes[10]; /* 繪制方塊的畫刷 */
HBRUSH hBrushBkGnd; /* 背景色畫刷 */
HPEN hPenBorder; /* 繪制邊框線的畫筆 */
int initgame(HWND hWnd);
int markpath(int x, int y, int dir, int color);
int drawWall(int x, int y, int dir);
int drawMaze();
int readMazedata(int *num, int id);
char *GetFldStr(char *sFldStr, char *sStr, char sFld);
void initMalloc();
void addMallocNode(char *);
void freeMallocNode();
void *gcCalloc(size_t , size_t);
int initBkGnd();
int createMaze();
int getWallCfg();
int setDirStatus(struct position pos, struct travInfo *head, int dir, int depth);
int createPlayer(int mode);
int destroyPlayer();
int canMove();
int doOperation();
int havePathed(struct RoadInfo node);
int newGame(int type, int mode);
void drawPath();
void showTime();
int gameOver();
int autoGo(int num);
void DisplayText(int posx, int posy, char *text);
int initGameSet(HWND hDlg);
int chgGameStatus();
void showUsedTime();
void showPlayInfo();
void errOut(char *errMsg)
這些是C/C++能做的
服務(wù)器開發(fā)工程師、人工智能置吓、云計(jì)算工程師无虚、信息安全(黑客反黑客)、大數(shù)據(jù) 衍锚、數(shù)據(jù)平臺友题、嵌入式工程師、流媒體服務(wù)器戴质、數(shù)據(jù)控解度宦、圖像處理、音頻視頻開發(fā)工程師告匠、游戲服務(wù)器戈抄、分布式系統(tǒng)、游戲輔助等