📄 五子棋.txt
字号:
ni=ni+1;
x=x-1;
y=y+1;
}
x=col;
y=row;
while(board[x+1][y-1]==c){
ni=ni+1;
x=x+1;
y=y-1;
}
if ( (nh>=5)||(nv>=5)||(nd>=5)||(ni>=5) )
return true ;
else return false;
}
void Five_chess::start(){
cout<<"菜单选择"<<endl;
cout<<"0.退出\n1.人VS人\n2.人VS电脑"<<endl;
cout<<'\n';
cout<<"注意:白色棋子显示的是白方,黑色棋子显示的是黑方"<<endl;
}
void Five_chess::init(){
for( i=1;i<=15;i++)
for(int j=1;j<=15;j++)
board[i][j]=0;
for(int k=0;k<=16;k++){
board[0 ][k]=-1;
board[16][k]=-1;
}
for(int n=1;n<=15;n++){
board[n][0 ]=-1;
board[n][16]=-1;
}
for(i=0;i<572;i++)
{
win1[0][i]=0;
win1[1][i]=0;
}
int count1=0;
//设定水平方向获胜组合
for(int i=1;i<16;i++)
for(j=1;j<12;j++)
{
for(int k=0;k<5;k++)
{
ptab[i][j+k][count1]=true;
ctab[i][j+k][count1]=true;
}
count1++;
}
//设定垂直方向获胜组合
for(i=1;i<16;i++)
for(int j=1;j<12;j++)
{
for(int k=0;k<5;k++)
{
ptab[j+k][i][count1]=true;
ctab[j+k][i][count1]=true;
}
count1++;
}
//设定正对角线获胜组合
for( i=1;i<12;i++)
for(int j=1;j<12;j++)
{
for(int k=0;k<5;k++)
{
ptab[j+k][i+k][count1]=true;
ctab[j+k][i+k][count1]=true;
}
count1++;
}
//设定反对角线获胜组合
for( i=1;i<12;i++)
for(int j=15;j>=5;j--)
{
for(int k=0;k<5;k++)
{
ptab[j-k][i+k][count1]=true;
ctab[j-k][i+k][count1]=true;
}
count1++;
}
}
Five_chess::Five_chess(){
start();
init();
count=0;
}
void Five_chess::display_winner(){
cout<<setw(8)<<"获得胜利的是:";
if(who_now()==1) cout<<"黑方.";
else cout<<"白方.";
again();
}
void Five_chess::again(){
cout<<'\n';
cout<<setw(10)<<"按1再下一盘.!";
int mid;
cin>>mid;
if(mid==1)
{
Five_chess chess1;
int row,column;
int c;
cin>>c;
if(c==1) {
chess1.board_display();
while(true){
cout<<"请输入坐标(请先输入横坐标,再输入纵坐标):"<<'\n';
while(cin>>row){
if(row==0) exit(0);
else if(row==-1) {chess1.menu();}
else if(row<-1||row>15) cout<<"坐标非法,请重新输入.";
else break;
}
while(row>=1&&row<=15&&cin>>column){
if(column<1||column>15) cout<<"坐标非法,请重新输入.";
else break;
}
if (chess1.get_chess(row,column)!=0) {cout<<"此处已经下过了.!" ;continue;}
else if(chess1.Win(row,column,c)) {chess1.display_winner();chess1.board_display();chess1.again();}
else chess1.putin(row,column);
}
}
else if(c==2){
chess1.board_display();
while(true){
if(chess1.who_now()==1) {
cout<<"人下:"<<'\n';
cout<<"请输入坐标(请先输入横坐标,再输入纵坐标):"<<'\n';
while(cin>>row){
if(row==0) exit(0);
else if(row==-1) {chess1.menu();}
else if(row<-1||row>15) cout<<"坐标非法,请重新输入.";
else break;
}
while(row>=1&&row<=15&&cin>>column){
if(column<1||column>15) cout<<"坐标非法,请重新输入.";
else break;
}
if (chess1.get_chess(row,column)!=0) {cout<<"此处已经下过了.!" ;continue;}
else if(chess1.Win(row,column,c)) {chess1.display_winner();chess1.board_display();chess1.again();}
else {chess1.putin(row,column,1);chess1.putin(row,column);}
}
else if(chess1.jiqi()){
chess1.display_winner();chess1.board_display();chess1.again();}
else chess1.board_display();
}
}
}
else exit(0);
}
bool Five_chess::putin(int row,int column){
if(who_now()==1) {
board[row][column]=1;
black.push(chessman(row,column,1));
}
else {
board[row][column]=2;
white.push(chessman(row,column,2));
}
count++;
board_display();
return true;
}
void Five_chess::regret(){
if(count<=6) {cout<<"刚开始,不能悔棋!";cout<<"请继续输入坐标(请先输入横坐标,再输入纵坐标):"<<'\n'; return;}
chessman mid_chess1=black.top();board[mid_chess1.row][mid_chess1.column]=0;black.pop();count--;
chessman mid_chess2=white.top();board[mid_chess2.row][mid_chess2.column]=0;white.pop();count--;
cout<<"悔棋成功."<<'\n';
cout<<"请继续输入坐标(请先输入横坐标,再输入纵坐标):"<<'\n';
board_display();
}
void Five_chess::draw(){
if(who_now()==1) cout<<"黑方请求和棋,您同意吗?Y--同意,N--不同意"<<endl;
else cout<<"白方请求和棋,您同意吗?Y--同意,N--不同意";
char mid;
cin>>mid;
if(mid=='Y') {cout<<" 和棋!";again();}
else cout<<"继续下棋: 请输入坐标(请先输入横坐标,再输入纵坐标):"<<'\n';
}
void Five_chess::menu(){
cout<<"菜单"<<endl;
cout<<"1.悔棋 2.和棋3.认输"<<endl;
int mid;
cin>>mid;
switch(mid){
case 1:regret();break;
case 2:draw();break;
case 3:giveup();break;
}
}
void Five_chess::giveup(){
if(who_now()==1) cout<<setw(10)<<"黑方认输了,白方胜!";
else if(who_now()==2) cout<<setw(10)<<"白方认输了,黑方胜!";
again();
}
//#include "five_chess.h"
int main(){
Five_chess chess1;
int row,column;
int c;
cin>>c;
if(c==1) {
chess1.board_display();
while(true){
cout<<"请输入坐标(请先输入横坐标,再输入纵坐标):"<<'\n';
while(cin>>row){
if(row==0) exit(0);
else if(row==-1) {chess1.menu();}
else if(row<-1||row>15) cout<<"坐标非法,请重新输入.";
else break;
}
while(row>=1&&row<=15&&cin>>column){
if(column<1||column>15) cout<<"坐标非法,请重新输入.";
else break;
}
if (chess1.get_chess(row,column)!=0) {cout<<"此处已经下过了.!" ;continue;}
else if(chess1.Win(row,column,c)) {chess1.display_winner();chess1.board_display();chess1.again();}
else chess1.putin(row,column);
}
}
else if(c==2){
chess1.board_display();
while(true){
if(chess1.who_now()==1) {
cout<<"人下:\n"<<"机器--黑方"<<'\n';
cout<<"请输入坐标(请先输入横坐标,再输入纵坐标):"<<'\n';
while(cin>>row){
if(row==0) exit(0);
else if(row==-1) {chess1.menu();}
else if(row<-1||row>15) cout<<"坐标非法,请重新输入.";
else break;
}
while(row>=1&&row<=15&&cin>>column){
if(column<1||column>15) cout<<"坐标非法,请重新输入.";
else break;
}
if (chess1.get_chess(row,column)!=0) {cout<<"此处已经下过了.!" ;continue;}
else if(chess1.Win(row,column,c)) {chess1.display_winner();chess1.board_display();chess1.again();}
else {chess1.putin(row,column,1);chess1.putin(row,column);}
}
else if(chess1.jiqi()){
chess1.display_winner();chess1.board_display();chess1.again();}
else chess1.board_display();
}
}
system("pause");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -