现在的位置: 首页 > 综合 > 正文

《华清远见学习手记》之 网络五子棋游戏QT类的设计与实现 (3)

2012年06月12日 ⁄ 综合 ⁄ 共 2081字 ⁄ 字号 评论关闭

网络五子棋游戏QT类的设计与实现 (3)

 

   第二版的五子棋游戏确实比第一版玩起来好多了。可是,我怎么越看越觉得不怎么像样,特别是棋子!‘W‘ 表示白棋,‘B’表示黑棋,学过英文的很容易就能分辨出来,可是像我这样连ABC都不会的人怎么办啊?一定要想个办法让棋子变得更漂亮一些。

   我想到了图形字符,见下图,看到'T'和'Y'上面的圆圆的字符了吧?用来做五子棋非常合适。

  关键是怎么把这个图形字符找到并显示出来,直接输进去吧,在ubuntu下是支持UTF-8编码的,而在windows下的UltraEdit /NotePad虽然可以输入'●' ,但是另存为 UTF-8的时候,得到的内码却是 "FF FE CF 25"

,跟另存为 Unicode
得到的编码是一样的,这说明在我现在的window下并没有实现UTF-8的编码。
  找个转换工具来用,找了半天却无功而返,那就先把UFT-8编码搞懂,自己手动来转换吧!
  UTF-8 是Unicode 的实现方式之一,它规定了字符如何在计算机中存储和传输,它是一种变长的编码方式。
  UTF-8 规则一:对于单字节的,字节第一位设为0,后7位为unicode码,所以英语字母中,UTF-8码和ASCII码是相同的。
  UTF-8 规则二:对于n字节(n>1),第一字节前n位都设为1,第n+1 位设为0,后面的字节一律设为10开头,剩下的位属于Unicode码。
  对于'●的Unicode 码 "FF FE CF 25", 

"FF FE ”
是表示
大小
端模式的,这里表示小端,所有实际编码是0x25CF。转化为二进制是:
  0010
0101 11
001111
  按照UTF-8的规则转化出来是1110
0010
10
010111
10
001111,
  即十六进制的0xE2978F,类似地,‘○’ 的UTF-8 编码是




0xE2978B。


  在显示函数中加入棋子的UTF-8编码吧:



  void ChessBoard::dispChessBoard()
{

    const char white[]={0xe2,0x97,0x8b,0};//○ 
用于显示白棋的UTF-8码

    const char black[]={0xe2,0x97,0x8f,0};//●







 
用于
显示黑棋的UTF-8码









    cout<<"  ";






    for(int j=0; j<19;j++)
    {
    printf(" %02d",j);
    }
    cout<<endl<<endl;    

    for(int i=0; i<19;i++)
    {
        printf("%02d",i);           
        for(int j=0; j<19;j++)
        {
            if(j==0)
                {
                 if(board[i][j]=='W')         
                    printf("  %2s ",white);      
                 else if(board[i][j]=='B')               
                   printf("  %2s ",black);
                 else                 
                     printf(" %2c",board[i][j]);
                }
                                   
            //     printf(" %2c",board[i][j]);
               
            else{
                 if(board[i][j]=='W')            
                    printf("-%2s ",white);              
                 else if(board[i][j]=='B')                 
                    printf("-%2s ",black);
                 else
                        printf("-%2c",board[i][j]);
                }
            //    printf("-%2c",board[i][j]);
        }       
        printf(" %02d",i);                 
        cout<<endl;      
        cout<<"  ";
                for(int j=0; j<19;j++)
        {
               if(i!=18)
                printf("  |");
        }
        cout<<endl;
    }   
    cout<<"  ";
    for(int j=0; j<19;j++)
    {
    printf(" %02d",j);
    }
    cout<<endl<<endl;
}





 再来看我的经过UTF-8改良的第三版五子棋游戏:



 




 




抱歉!评论已关闭.