⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 五子棋.txt

📁 数据结构课程设计
💻 TXT
📖 第 1 页 / 共 2 页
字号:
             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 + -