據說有一個能保證不敗的算法,明天看看先再寫個PVC版的。
正題,今天無聊寫了個井字棋游戲,順便逐漸讓自己習慣良好的代碼風格,放上來給新手學習學習。
jzq2.cpp
/* N字棋游戲PVP版,DOS版 本棋盤可擴充,只需調整檢測條件即可,其他接口不需改變。 非人機對戰型,PVP類型; @author:天下無雙 @date:2014-5-25 @version:1.0 */ #include#include #define INVALIDINDEX -1 #define FULL -2 #define OK 0 #define WIN 1 #define ISIN -3 using namespace std; struct box{ //用box代表棋盤上每一個格子 int chess;//用一種顏色代表棋子,black和white int status;//0代表該格子沒有棋子,1代表已經有了棋子 }; enum COLOR{black,white}; class chessBoard { private: static const int MAXROW=10; static const int MAXCOLUMN=10; int row; int column; int blackBox;//剩余棋盤格子數,即可落棋點 box arr[MAXROW][MAXCOLUMN]; void setRow(int r){row=r;}; void setCol(int c){column=c;}; int GetRow()const{return row;}; int GetCol()const{return column;}; public: chessBoard(int r,int col){ if(r>MAXROW||col>MAXCOLUMN){ cerr<<"棋盤大小超出范圍"< =r||j>=col) return INVALIDINDEX; //if(c!=black&&c!=white) //return INVALIDINDEX; if(arr[i][j].status==0){//將棋子落入棋盤 arr[i][j].chess=c; arr[i][j].status=1;//標識此格 flush();//刷新 blackBox--; if(isGameOver()) return WIN; if(isFull()) return FULL; return OK; } return ISIN; } protected: void creat(){//初始化棋盤 int r=chessBoard::GetRow(); int col=chessBoard::GetCol(); for(int i=0;i =0&&j main.cpp #include#include "jzq2.cpp" using namespace std; int main() { //3,3代表棋盤為3*3,並且是指三個一排即為勝利 //同樣的,5,5代表5字棋,但是棋盤大小也是5*5 //擴展棋盤將在下一版本推出 chessBoard cb(3,3); int status; COLOR c=black;//記錄下一步輪到誰走 int x,y; bool falg=false;//用於記錄是否成功落棋 bool isExit=false;//用於記錄游戲是否結束 while(!isExit) { cout<<"\n\"0\"代表white,\"*\"代表black"< >x>>y; /* if(falg) c=c==black?white:black;//換人走 */ status=cb.insertChess(x,y,c); switch(status){ //超出范圍,返回 INVALIDINDEX -1 //已經贏了,返回 WIN 1 //棋盤滿了,返回 FULL -2 //正常落棋 返回 OK 0 case 0:falg=true; c=c==black?white:black;//如果成功落棋,換人走下一步棋 break; case -1:cout<<"\n\n輸入坐標不對,超出范圍"<
已經測試過了3*3的無BUG,當然前提是你輸入的是數字。你要是輸入字母的話,果斷崩!先放到PVP的來玩玩,哈哈哈。
今天跑去多益網絡機試,回來的途中居然想起來最後一道題少寫了一個判斷,郁悶。
還有一道回來的途中才大概想了出來。
郁悶ing......
好了,睡了,各位晚安。