當前位置:首頁 » 編程語言 » 三子棋c語言

三子棋c語言

發布時間: 2022-12-17 22:40:28

① 用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程序設計》實訓——網路三子棋游戲開發

你要問什麼,發廣告。

③ 怎麼用python寫三子棋並顯示空位

lude<stdio.h>#include<stdlib.h>#include<time.h> char arr[3][3] = { 0 }; //直接定義外部變數所有的函數可以直接使用 因為考慮到棋盤大小是固定的int size = 9; //棋盤大小固定 每下一個子都會使可以下子的容量-1void chessboard() //列印棋盤{ int i = 0, j = 0; printf(" | | /n"); for (i = 0; i < 3; i++) { printf("_%c_|_%c_|_%c_/n", arr[i][0], arr[i][1], arr[i][2]); //棋盤對應位置下棋 if (i < 2) printf(" | | /n"); }}void player() //玩家下棋{ int m = 0, n = 0; printf("player(@):"); //輸入的是對應的坐標 scanf_s("%d%d", &m, &n); //玩家輸入的坐標必須在范圍內並且不能是被下過的地方 if (m<1 || m>3 || n<1 || n>3 || arr[m - 1][n - 1] != ' ') { printf("this place can not play!/n"); //如果不符合要求則繼續調用這個函數 player(); } else { arr[m - 1][n - 1] = '@'; //將棋子放入相應的內容 棋盤容量-1 size--; }}void computer() //電腦下棋{ printf("computer(#):/n"); int m = 0, n = 0; srand(time(NULL)); //電腦的坐標是隨機產生的 以時間為種子 m = rand() % 3; //對3取余產生0-2的隨機數賦給數組下標 n = rand() % 3; while (arr[m][n] != ' ') //如果產生的

熱點內容
常用的外部存儲器包括 發布:2024-05-20 15:43:19 瀏覽:661
有什麼軟體可以修改wife密碼 發布:2024-05-20 15:41:51 瀏覽:649
c語言矩陣求逆 發布:2024-05-20 15:38:09 瀏覽:48
易通文件夾 發布:2024-05-20 15:36:25 瀏覽:996
斗羅大陸斗羅武魂是什麼伺服器 發布:2024-05-20 15:33:38 瀏覽:715
亞馬遜的蘋果和安卓哪個好 發布:2024-05-20 15:32:57 瀏覽:549
彩虹島空中戰場什麼配置 發布:2024-05-20 15:23:31 瀏覽:525
c語言如何把字元串賦給字元數組 發布:2024-05-20 15:23:28 瀏覽:784
java調用返回值 發布:2024-05-20 15:17:32 瀏覽:501
編程函數頭 發布:2024-05-20 15:05:04 瀏覽:401