資源簡介
c++小游戲五子棋,帶AI,基于qt寫的,代碼淺顯易懂,分為人人對戰和人機對戰兩種模式

代碼片段和文件信息
#include?
#include?
#include?“GameModel.h“
GameModel::GameModel()
{
}
void?GameModel::startGame(GameType?type)
{
????gameType?=?type;
????//?初始棋盤
????gameMapVec.clear();
????for?(int?i?=?0;?i?????{
????????std::vector?lineBoard;
????????for?(int?j?=?0;?j?????????????lineBoard.push_back(0);
????????gameMapVec.push_back(lineBoard);
????}
????//?如果是AI模式,需要初始化評分數組
????if?(gameType?==?BOT)
????{
????????scoreMapVec.clear();
????????for?(int?i?=?0;?i?????????{
????????????std::vector?lineScores;
????????????for?(int?j?=?0;?j?????????????????lineScores.push_back(0);
????????????scoreMapVec.push_back(lineScores);
????????}
????}
????//?己方下為true對方下位false
????playerFlag?=?true;
}
void?GameModel::updateGameMap(int?row?int?col)
{
????if?(playerFlag)
????????gameMapVec[row][col]?=?1;
????else
????????gameMapVec[row][col]?=?-1;
????//?換手
????playerFlag?=?!playerFlag;
}
void?GameModel::actionByPerson(int?row?int?col)
{
????updateGameMap(row?col);
}
void?GameModel::actionByAI(int?&clickRow?int?&clickCol)
{
????//?計算評分
????calculateScore();
????//?從評分中找出最大分數的位置
????int?maxScore?=?0;
????std::vector>?maxPoints;
????for?(int?row?=?1;?row?????????for?(int?col?=?1;?col?????????{
????????????//?前提是這個坐標是空的
????????????if?(gameMapVec[row][col]?==?0)
????????????{
????????????????if?(scoreMapVec[row][col]?>?maxScore)??????????//?找最大的數和坐標
????????????????{
????????????????????maxPoints.clear();
????????????????????maxScore?=?scoreMapVec[row][col];
????????????????????maxPoints.push_back(std::make_pair(row?col));
????????????????}
????????????????else?if?(scoreMapVec[row][col]?==?maxScore)?????//?如果有多個最大的數,都存起來
????????????????????maxPoints.push_back(std::make_pair(row?col));
????????????}
????????}
????//?隨機落子,如果有多個點的話
????srand((unsigned)time(0));
????int?index?=?rand()?%?maxPoints.size();
????std::pair?pointPair?=?maxPoints.at(index);
????clickRow?=?pointPair.first;?//?記錄落子點
????clickCol?=?pointPair.second;
????updateGameMap(clickRow?clickCol);
}
//?最關鍵的計算評分函數
void?GameModel::calculateScore()
{
????//?統計玩家或者電腦連成的子
????int?personNum?=?0;?//?玩家連成子的個數
????int?botNum?=?0;?//?AI連成子的個數
????int?emptyNum?=?0;?//?各方向空白位的個數
????//?清空評分數組
????scoreMapVec.clear();
????for?(int?i?=?0;?i?????{
????????std::vector?lineScores;
????????for?(int?j?=?0;?j?????????????lineScores.push_back(0);
????????scoreMapVec.push_back(lineScores);
????}
????//?計分(此處是完全遍歷,其實可以用bfs或者dfs加減枝降低復雜度,通過調整權重值,調整AI智能程度以及攻守風格)
????for?(int?row?=?0;?row?????????for?(int?col?=?0;?col?????????{
????????????//?空白點就算
????????????if?(row?>?0?&&?col?>?0?&&
????????????????gameMapVec[row][col]?==
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????????7??2016-12-25?17:38??QtWuziqi\.git\COMMIT_EDITMSG
?????文件????????331??2016-12-25?17:38??QtWuziqi\.git\config
?????文件?????????73??2016-12-24?09:44??QtWuziqi\.git\desc
?????文件?????????99??2016-12-25?17:38??QtWuziqi\.git\FETCH_HEAD
?????文件?????????23??2016-12-24?09:44??QtWuziqi\.git\HEAD
?????文件????????452??2016-12-24?09:44??QtWuziqi\.git\hooks\applypatch-msg.sample
?????文件????????896??2016-12-24?09:44??QtWuziqi\.git\hooks\commit-msg.sample
?????文件????????189??2016-12-24?09:44??QtWuziqi\.git\hooks\post-update.sample
?????文件????????398??2016-12-24?09:44??QtWuziqi\.git\hooks\pre-applypatch.sample
?????文件???????1642??2016-12-24?09:44??QtWuziqi\.git\hooks\pre-commit.sample
?????文件???????1352??2016-12-24?09:44??QtWuziqi\.git\hooks\pre-push.sample
?????文件???????4951??2016-12-24?09:44??QtWuziqi\.git\hooks\pre-reba
?????文件???????1239??2016-12-24?09:44??QtWuziqi\.git\hooks\prepare-commit-msg.sample
?????文件???????3611??2016-12-24?09:44??QtWuziqi\.git\hooks\update.sample
?????文件???????1088??2016-12-25?17:38??QtWuziqi\.git\index
?????文件????????240??2016-12-24?09:44??QtWuziqi\.git\info\exclude
?????文件???????1047??2016-12-25?17:38??QtWuziqi\.git\logs\HEAD
?????文件???????1047??2016-12-25?17:38??QtWuziqi\.git\logs\refs\heads\master
?????文件????????185??2016-12-24?09:44??QtWuziqi\.git\logs\refs\remotes\origin\HEAD
?????文件????????876??2016-12-25?17:38??QtWuziqi\.git\logs\refs\remotes\origin\master
?????文件???????3048??2016-12-24?09:44??QtWuziqi\.git\ob
?????文件????????267??2016-12-24?09:58??QtWuziqi\.git\ob
?????文件????????154??2016-12-24?09:58??QtWuziqi\.git\ob
?????文件???????2133??2016-12-24?20:41??QtWuziqi\.git\ob
?????文件???????2962??2016-12-24?09:58??QtWuziqi\.git\ob
?????文件???????2767??2016-12-25?17:31??QtWuziqi\.git\ob
?????文件???????2962??2016-12-24?21:57??QtWuziqi\.git\ob
?????文件????????360??2016-12-25?17:38??QtWuziqi\.git\ob
?????文件???????1124??2016-12-25?11:41??QtWuziqi\.git\ob
?????文件????????229??2016-12-24?09:44??QtWuziqi\.git\ob
............此處省略136個文件信息
- 上一篇:C語言試題庫共650題,含答案
- 下一篇:C#加載C++\\C的DLL動態鏈接庫
評論
共有 條評論