天天看點

C++制作漢字版國際象棋(3)

前言

今天我們會寫所有的輸出操作.

輸出

color函數

void color(int a)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
    //顔色=背景色*16+字型色 
/*    1    深藍色    2    深綠色    3    深青色     4    深紅色
    5    深粉色    6    黃色    7    深白色    8    灰色
    9    淺藍色    10    淺綠色     11    淺青色     12    淺紅色
    13    淺粉色     14    淺黃色    15    淺白色*/
}
           

棋盤有些複雜

附:_qp_color_(坐标x,坐标y,背景色/棋子色)

void _qp_color_(int i,int j,bool b){
    color(b?15:240);
    if(b==1 || mp[i][j].dui==-1){
        if(mp[i][j].color==1) color(2*16);    //深綠
        else color(10*16);    //淺綠
    }
    else{
        if(mp[i][j].dui==0) color(15*16);    //白
        else color(15);    //黑
    }
}
           

我們首先需要循環每行棋子

for(int j=1;j<=8;j++){
    
}
           

棋子第一行:就是棋盤的顔色

for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"          ";
        }
           

棋子第二行:先棋盤的顔色,再棋子的顔色,最後棋盤的顔色

for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"  ";
            _qp_color_(j,i,0);
            cout<<"      ";
            _qp_color_(j,i,1);
            cout<<"  ";
        }
        cout<<endl;
           

棋子第三行(自己看):

for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"  ";
            _qp_color_(j,i,0);
            cout<<"  ";
            if(mp[j][i].i!=-1){        //是否有棋子
                cout<<qi[mp[j][i].i].name;
            }
            else{
                cout<<"  ";
            }
            cout<<"  ";
            _qp_color_(j,i,1);
            cout<<"  ";
        }
        cout<<endl;
           

棋子第四行:同第二行

棋子第五行:同第一行

完整代碼

void map_out(){
    for(int j=1;j<=8;j++){
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"          ";
        }
        cout<<endl;
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"  ";
            _qp_color_(j,i,0);
            cout<<"      ";
            _qp_color_(j,i,1);
            cout<<"  ";
        }
        cout<<endl;
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"  ";
            _qp_color_(j,i,0);
            cout<<"  ";
            if(mp[j][i].i!=-1){
                cout<<qi[mp[j][i].i].name;
            }
            else{
                cout<<"  ";
            }
            cout<<"  ";
            _qp_color_(j,i,1);
            cout<<"  ";
        }
        cout<<endl;
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"  ";
            _qp_color_(j,i,0);
            cout<<"      ";
            _qp_color_(j,i,1);
            cout<<"  ";
        }
        cout<<endl;
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"          ";
        }
        cout<<endl;
    }
}
           

效果(綠色):

C++制作漢字版國際象棋(3)

那麼我們今天就寫到這裡,再見!

完整代碼

#include<string>
#include<windows.h>
#include<iostream>
using namespace std;
struct MAP{
    int i;
    short dui;
    bool color;
}mp[9][9];
struct Qi{
    string name;
    char id;
    short a[8];
}qi[6];
short ma_zoux[8]={1,1,-1,-1,2,2,-2,-2},ma_zouy[8]={2,-2,2,-2,1,-1,1,-1};
void qi_fuzhi(int ii,string _name,char iid,short a1,short a2,short a3,short a4,short a5,short a6 ,short a7,short a8){
    qi[ii].name=_name;
    qi[ii].id=iid;
    qi[ii].a[0]=a1;qi[ii].a[1]=a2;
    qi[ii].a[2]=a3;qi[ii].a[3]=a3;
    qi[ii].a[4]=a4;qi[ii].a[5]=a5;
    qi[ii].a[6]=a7;qi[ii].a[7]=a8;
}
void csh(){
    qi_fuzhi(0,"兵",' ',1,0,0,0,-1,-1,0,0);        //棋子初始化 
    qi_fuzhi(1,"車",'R',2,2,2,2,0,0,0,0);
    qi_fuzhi(2,"象",'B',0,0,0,0,2,2,2,2);
    qi_fuzhi(3,"馬",'N',-2,-2,-2,-2,-2,-2,-2,-2);
    qi_fuzhi(4,"後",'Q',2,2,2,2,2,2,2,2);
    qi_fuzhi(5,"王",'K',1,1,1,1,1,1,1,1);
    bool _color=0;
    for(int i=1;i<=8;i++){        //棋盤顔色初始化 
        for(int j=1;j<=8;j++){
            mp[i][j].color=_color;
            _color=!_color;
        }
        _color=!_color;
    }
    short _mp[9][9]={{-1,-1,-1,-1,-1,-1,-1,-1},        //棋盤棋子初始化 
                     {-1,1,3,2,4,5,2,3,1},
                     {-1,0,0,0,0,0,0,0,0},
                     {-1,-1,-1,-1,-1,-1,-1,-1,-1},
                     {-1,-1,-1,-1,-1,-1,-1,-1,-1},
                     {-1,-1,-1,-1,-1,-1,-1,-1,-1},
                     {-1,-1,-1,-1,-1,-1,-1,-1,-1},
                     {-1,0,0,0,0,0,0,0,0},
                     {-1,1,3,2,4,5,2,3,1}};
    for(int i=1;i<=8;i++){
        for(int j=1;j<=8;j++){
            mp[i][j].i=_mp[i][j];
        }
    }
    for(int i=1;i<=8;i++){            //隊初始化 
        for(int j=1;j<=8;j++){
            if(i==1||i==2) mp[i][j].dui=1;
            else if(i==7||i==8) mp[i][j].dui=0;
            else mp[i][j].dui=-1;
        }
    }
}

void color(int a)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
    //顔色=背景色*16+字型色 
/*    1    深藍色    2    深綠色    3    深青色     4    深紅色
    5    深粉色    6    黃色    7    深白色    8    灰色
    9    淺藍色    10    淺綠色     11    淺青色     12    淺紅色
    13    淺粉色     14    淺黃色    15    淺白色*/
}
void _qp_color_(int i,int j,bool b){
    color(b?15:240);
    if(b==1 || mp[i][j].dui==-1){
        if(mp[i][j].color==1) color(2*16);    //深綠
        else color(10*16);    //淺綠
    }
    else{
        if(mp[i][j].dui==0) color(15*16);    //白
        else color(15);    //黑
    }
}
void map_out(){
    for(int j=1;j<=8;j++){
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"          ";
        }
        cout<<endl;
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"  ";
            _qp_color_(j,i,0);
            cout<<"      ";
            _qp_color_(j,i,1);
            cout<<"  ";
        }
        cout<<endl;
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"  ";
            _qp_color_(j,i,0);
            cout<<"  ";
            if(mp[j][i].i!=-1){
                cout<<qi[mp[j][i].i].name;
            }
            else{
                cout<<"  ";
            }
            cout<<"  ";
            _qp_color_(j,i,1);
            cout<<"  ";
        }
        cout<<endl;
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"  ";
            _qp_color_(j,i,0);
            cout<<"      ";
            _qp_color_(j,i,1);
            cout<<"  ";
        }
        cout<<endl;
        for(int i=1;i<=8;i++){
            _qp_color_(j,i,1);
            cout<<"          ";
        }
        cout<<endl;
    }
}
int main(){
    csh();
    map_out();
    return 0;
}
           

繼續閱讀