黑马程序员技术交流社区

标题: 用c语言学习制作了个井字棋小游戏,分享代码 [打印本页]

作者: qq6937523    时间: 2016-3-29 16:15
标题: 用c语言学习制作了个井字棋小游戏,分享代码
#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 这个关键字  其实老师教的时候说过  最好不要用   会带来意想不到的问题   我为什么会用呢   
  因为任性


作者: 最爱舒儿    时间: 2016-3-30 01:19
纯手打的么?                           
作者: songxuefeng    时间: 2016-3-30 02:04
高手呀~~~牛..
作者: mingli    时间: 2016-3-30 18:57
看着好厉害
作者: ySssssssss    时间: 2016-3-30 22:10
感谢分享
作者: wuqi    时间: 2016-3-31 00:01
因为没有插入代码格式
作者: z276698840    时间: 2016-3-31 12:51
亲测有用 ! ! !




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2