天天看點

C++遊戲執行個體--五子棋

#include<iostream>

#include<iomanip>

using

namespace

std;

const

int

X = 21; 

//棋盤行數

const

int

Y = 21; 

//棋盤列數

char

p[X][Y];  

//定義棋盤

int

m=0;

//定義臨時點,儲存輸入坐标

int

n=0;

void

display()  

//輸出棋盤

{

for

(

int

i=0; i<X; i++)

cout<<setw(3)<<setfill(

' '

)<<i;

cout<<endl;

for

(

int

i=1; i<Y; i++)

{

cout<<setw(3)<<setfill(

' '

)<<i;

for

(

int

j=1;j<X;j++)

cout<<setw(3)<<setfill(

' '

)<<p[i][j];

cout<<endl;

}

}

void

black()  

//黑方落子

{

cout<<

"請黑方輸入落子位置:\n"

<<

"請輸入落子的行數:"

;

cin>>m;

cout<<

"請輸入落子的列數:"

;

cin>>n;

if

(m<=0||m>=X||n>=Y||n<=0)

{

cout<<

"超出棋盤範圍,請重新輸入正确坐标!\n"

;

black();

}

else

if

((p[m][n]==1)||p[m][n]==2)

{

cout<<

"該點已有棋子,請重新選取落子點!\n"

;

black();

}

else

p[m][n]=1; 

//黑方用1來表示

system

(

"cls"

);

display();

}

void

red()  

//紅方落子

{

cout<<

"請紅方輸入落子位置:\n"

<<

"請輸入落子的行數:"

;

cin>>m;

cout<<

"請輸入落子的列數:"

;

cin>>n;

if

(m>=X||m<=0||n<=0||n>=Y)

{

cout<<

"超出棋盤範圍,請重新輸入正确坐标!\n"

;

red();

}

else

if

((p[m][n]==1)||p[m][n]==2)

{

cout<<

"該點已有棋子,請重新選取落子點!\n"

;

red();

}

else

p[m][n]=2; 

//紅方用2來表示

system

(

"cls"

);

display();

}

int

evalue()  

//隻需要判斷落子點為中心的九點“米”字是否連續即可

{

int

k = 0,r = 0;

for

(k=3;k<X-2;k++)  

//兩條,其中的p[k][r]!='-'是排除空子的情況

{

for

(r=3;r<Y-2;r++)

{

if

(p[k][r]!=

'-'

&&p[k-2][r-2]==p[k][r]&&p[k-1][r-1]==p[k][r]&&p[k+1][r+1]==p[k][r]&&p[k+2][r+2]==p[k][r])

return

1;

else

if

(p[k][r]!=

'-'

&&p[k+2][r-2]==p[k][r]&&p[k+1][r-1]==p[k][r]&&p[k-1][r+1]==p[k][r]&&p[k-2][r+2]==p[k][r])

return

1;

}

}

for

(k=1;k<X;k++)  

//p[k][r]!='-'是排除空子的情況

for

(r=3;r<Y-2;r++)

if

(p[k][r]!=

'-'

&&p[k][r-2]==p[k][r]&&p[k][r-1]==p[k][r]&&p[k][r+1]==p[k][r]&&p[k][r+2]==p[k][r])

return

1;

for

(k=3;k<X-2;k++)  

//p[k][r]!='-'是排除空子的情況

for

(r=1;r<Y;r++)

if

(p[k][r]!=

'-'

&&p[k-2][r]==p[k][r]&&p[k-1][r]==p[k][r]&&p[k+1][r]==p[k][r]&&p[k+2][r]==p[k][r])

return

1;

return

0; 

}

int

main()

{

memset

(p,

'-'

,441);  

//初始化為‘-’

cout<<

"歡迎使用簡易雙人對戰五子棋遊戲\n"

<<

"五子棋棋譜如下:\n"

;

display();

while

(1)

{

red();

if

(evalue())

{

cout<<

"紅方赢!\n"

;

break

;

}

black();

if

(evalue())

{

cout<<

"黑方赢!\n"

;

break

;

}  

}

return

0;

}