當前位置:編程學習大全網 - 編程語言 - 用C語言設計壹個“三子棋”的遊戲,要求用上下左右光標控制。要程序源代碼!

用C語言設計壹個“三子棋”的遊戲,要求用上下左右光標控制。要程序源代碼!

#include <iostream>

#include <string>

using namespace std;

class CGobang //棋子類

{

private:

char chSort; //棋子的類別

int nWin; //贏棋的次數

int nLose; //輸棋的次數

static int nDraw; //平局次數

static char achBoard[3][3]; //棋盤

static int nSize; //棋盤的尺寸 nSize X nSize

public:

CGobang(char chsort) //構造函數,決定壹方棋子的類別

{

chSort=chsort;

nWin=nLose=nDraw=0;

}

void PlayTurn(void); //走1步棋

int Judge(); //判斷是否連成壹線,是則返回1,否則返回0

void Win(void); //贏棋

void Lose(void); //輸棋

static void Draw(void); //平局

void PrintInfo(void); //輸出總體情況

static void PrintBoard(void); //輸出棋盤

static int GetFull(void); //判斷棋盤是否已布滿棋子

static void InitialBoard(void); //初始化棋盤

};

char CGobang::achBoard[3][3];

int CGobang::nSize = 3;

int CGobang::nDraw = 0;

void CGobang::Draw()

{

cout << "\n\n\t\t平局!\n\n";

nDraw++;

}

void CGobang::InitialBoard() //初始化棋盤

{

for(int i=0;i<nSize;i++)

for(int j=0;j<nSize;j++)

achBoard[i][j]=' ';

}

void CGobang::PrintBoard() //輸出棋盤

{

cout << endl;

cout << " 1 2 3 " << endl;

cout << "1 " << achBoard[0][0] << " | " << achBoard[0][1] << " | " << achBoard[0][2] << endl;

cout << " ---|---|---" << endl;

cout << "2 " << achBoard[1][0] << " | " << achBoard[1][1] << " | " << achBoard[1][2] << endl;

cout << " ---|---|---" << endl;

cout << "3 " << achBoard[2][0] << " | " << achBoard[2][1] << " | " << achBoard[2][2] << endl;

cout << endl;

cout << endl;

}

int CGobang::GetFull() //判斷棋盤是否布滿棋子,若是返回1

{

for(int i=0;i<nSize;i++)

for(int j=0;j<nSize;j++)

if(achBoard[i][j]!=' ')

return 0;

return 1;

}

void CGobang::Win() //贏棋

{

cout << "\n\n\t\t"<<chSort<<"方獲勝!\n\n";

nWin++;

}

void CGobang::Lose() //輸棋

{

nLose++;

}

void CGobang::PlayTurn(void) //走1步棋

{

int nRow,nCol;

cout <<"現在該 "<<chSort<<" 方下棋,請輸入棋盤坐標(x,y):";

do

{

cin >> nRow >> nCol; //輸入坐標

if(nRow>nSize || nCol>nSize) //判斷坐標越界

cout <<"輸入的坐標越界,x與y的範圍應小於等於"<<nSize<<",請重新輸入\n";

else if(achBoard[nRow-1][nCol-1]!=' ') //判斷坐標合理

cout <<"棋盤("<<nRow <<" ,"<<nCol <<")處已有棋子,請重新輸入\n";

else

{

achBoard[nRow-1][nCol-1]=chSort; //在坐標處放上棋子

break; //退出循環

}

}while(1);

}

int CGobang::Judge() //判斷是否棋子連成壹線,若是返回1

{//以下是各種可能連成壹線的情況

if(achBoard[0][0]==chSort && achBoard[1][1]==chSort && achBoard[2][2]==chSort)

return 1;

else if(achBoard[2][0]==chSort && achBoard[1][1]==chSort && achBoard[0][2]==chSort)

return 1;

else if(achBoard[0][0]==chSort && achBoard[1][0]==chSort && achBoard[2][0]==chSort)

return 1;

else if(achBoard[0][1]==chSort && achBoard[1][1]==chSort && achBoard[2][1]==chSort)

return 1;

else if(achBoard[0][2]==chSort && achBoard[1][2]==chSort && achBoard[2][2]==chSort)

return 1;

else if(achBoard[0][0]==chSort && achBoard[0][1]==chSort && achBoard[0][2]==chSort)

return 1;

else if(achBoard[1][0]==chSort && achBoard[1][1]==chSort && achBoard[1][2]==chSort)

return 1;

else if(achBoard[2][0]==chSort && achBoard[2][1]==chSort && achBoard[2][2]==chSort)

return 1;

else

return 0; //沒有連成壹線則返回0

}

void CGobang::PrintInfo(void) //打印總體情況

{

cout <<"Side "<<chSort<<"方***計贏 "<<nWin<<" 局,輸 "<<nLose<<" 局,平 "<<nDraw<<" 局。"<<endl;

}

void PrintRule(void) //打印規則

{

cout << "\t\t歡迎使用三子連珠遊戲!" << endl << endl;

cout << "\t遊戲規則:" << endl;

cout << "\t1.每1步輸入要下棋的格子的x,y坐標,按Enter鍵\n";

cout << "\t2.有1方首先3個棋子連成壹線即判獲勝\n";

cout << "\t3.當棋子布滿棋盤但仍無獲勝方即為平局\n";

cout << "\t4.X方先行\n";

cout << "\n\n\t\t請按任意鍵開始下棋!\n\n";

}

int JudgePlay(CGobang & SideX,CGobang & SideO) //每下1步要進行輸贏的判斷,有結果則返回1

{

if(SideX.Judge()) //X方獲勝

{

SideX.Win();

SideO.Lose();

return 1;

}

else if(SideO.Judge()) //O方獲勝

{

SideO.Win();

SideX.Lose();

return 1;

}

else

return 0;

}

void Play(CGobang & SideX,CGobang & SideO) //開始壹局遊戲

{

while(1)

{

CGobang::PrintBoard(); //輸出棋盤

SideX.PlayTurn(); //X方下棋

if(JudgePlay(SideX,SideO)) //判斷輸贏

break;

if(CGobang::GetFull()) //判斷是否平局

{

CGobang::Draw();

break;

}

CGobang::PrintBoard(); //輸出棋盤

SideO.PlayTurn(); //O方下棋

if(JudgePlay(SideX,SideO)) //判斷輸贏

break;

if(CGobang::GetFull()) //判斷是否平局

{

CGobang::Draw();

break;

}

}

}

int main(void)

{

CGobang SideX('X'),SideO('O'); //定義兩個棋子類對象,分別代表X方與O方

PrintRule();

cin.get();

string strChoice;

do

{

CGobang::InitialBoard(); //初始化棋盤

Play(SideX,SideO); //開始下壹局

cout << "是否繼續(Y/N)?";

cin >> strChoice;

}while(strChoice == "Y" || strChoice == "y");

SideX.PrintInfo();

SideO.PrintInfo();

cout << "\n\n\t歡迎再次使用三子連珠遊戲!" << endl << endl;

return 0;

}

  • 上一篇:雲南java培訓學校告訴妳最有前途的職業是什麽?
  • 下一篇:HTML5是什麽東西?
  • copyright 2024編程學習大全網