A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#import <Foundation/Foundation.h>
#import <stdio.h>
#import <string.h>
int main()
{
    int player = 0; //玩家 1 或者 2
    int winner = 0; // 赢家
    int row = 0; // 行
    int rank = 0; // 列
    int choice = 0; //选择
    /**
     *  创建棋盘
     */
    char board[3][3]={
        {'1','2','3'},
        {'4','5','6'},
        {'7','8','9'}
    };

    for (int i = 0;i < 9 && winner == 0 ;i++)
    {   player = (i % 2)+1;
        //打印棋谱
        printf("\n\n");
        printf("+---+---+---+\n");
        printf("| %c | %c | %c |\n",board[0][0],board[0][1],board[0][2]);
        printf("+---+---+---+\n");
        printf("| %c | %c | %c |\n",board[1][0],board[1][1],board[1][2]);
        printf("+---+---+---+\n");
        printf("| %c | %c | %c |\n",board[2][0],board[2][1],board[2][2]);
        printf("+---+---+---+\n");
        printf("现在是玩家%d选择下你的棋子,%c\n",player,player == 1?'X':'O');
//        printf("要下在第几行?");
//        scanf("%d",&row);
//        row--;
//        printf("要下在第几列?");
//        scanf("%d",&rank);
//        rank-- ;
//      选择下棋位置

        printf("请选择下棋位置,位置为盘上的数字:\n");
    there:scanf("%d",&choice);

        //选手的下棋位置
        rank = choice % 3;
        rank--;
        row = choice /3;
        //判断 该位置是否已经落子
        if((board[row][rank]=='X')||(board[row][rank]=='O'))
            {
                printf("该位置已经落子,请从新选择下棋位置\n");
                goto there;
            }
        //判断输入的数字是否在1 - 9 范围内
        if(choice <1 || choice > 9)
        {
            printf("请输入1-9范围内的数字\n");
            goto there;
        }
        //相应的位置落下玩家的棋子
       board[row][rank] = player == 1?'X':'O';
                //判断对角线是否相同
        if ((board[0][0] == board[1][1] && board[0][0] == board[2][2])||(board[0][2]==board[1][1]&& board[0][2] == board[2][0]))
        {
            winner = player;
        }
        //判断每一行 或者每一列是否相同
        else
        {
            for (int line = 0; line <= 2; line++)
            {
                if ((board[line][0]==board[line][1] && board[line][0]==board[line][2])||(board[0][line]==board[1][line] && board[0][line]==board[2][line]))

                    winner = player;

            }
        }

    }

    //游戏结束  打出最后棋谱
    printf("\n\n");
    printf("+---+---+---+\n");
    printf("| %c | %c | %c |\n",board[0][0],board[0][1],board[0][2]);
    printf("+---+---+---+\n");
    printf("| %c | %c | %c |\n",board[1][0],board[1][1],board[1][2]);
    printf("+---+---+---+\n");
    printf("| %c | %c | %c |\n",board[2][0],board[2][1],board[2][2]);
    printf("+---+---+---+\n");
    if (winner == 0)
    {
        printf("平局\n");
    }
    else
        printf("玩家%d获胜\n",winner);
    return 0;
}


PS. 这是在这里面发的第一个帖子   
好神奇 为什么别人的代码可以是彩色的  我的就是黑白的!!
goto 这个关键字  其实老师教的时候说过  最好不要用   会带来意想不到的问题   我为什么会用呢   
  因为任性

6 个回复

倒序浏览
纯手打的么?                           
回复 使用道具 举报
高手呀~~~牛..
回复 使用道具 举报
看着好厉害
回复 使用道具 举报
感谢分享
回复 使用道具 举报
因为没有插入代码格式
回复 使用道具 举报
亲测有用 ! ! !
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马