三子棋


//打印三子棋游戏
// 规则:胜负
//。        横行  竖行  或者  对角线连在一起有三个一样的图案
//            率先完成的即为胜方
//      和棋
//          图案内没有空格时且没有有连到一起的图案
// 1.首先打印一个棋盘
//|   |   |   |
//|---|---|---|
//|   |   |   |
//|---|---|---|
//|   |   |   |
//2.规定电脑在空格处打印O,玩家在空格处打印X.
//3.提醒玩家先输入合法的坐标,来开始游戏
//4.轮到电脑输入,检查规则(胜负还是和棋),如果没有出现以上情况,回到第二步。

#include<stdio.h>
#include<stdlib.h>
#include"math.h"
#define ROW 3
#define COL 3
char ChessBoard[ROW][COL]={};//定义二维数组d来用来打印棋盘
void Menu() { //打印菜单
    printf("*****************************\n");
    printf("*****  欢迎进入三子棋界面  *****\n");
    printf("*****************************\n");
    printf("****    1:开始游戏        ****\n");
    printf("****    0:退出游戏        ****\n");
    printf("*****************************\n");
}

//初始化棋盘
void Init(){
    for(int row = 0; row < ROW;++row){
        for(int col = 0; col < COL; ++col){
            ChessBoard[row][col] =' ';
        }
    }
}

void Print(){
    //打印棋盘
    int row = 0;
    for (row = 0;row < ROW;row++){
        printf("| %c | %c | %c |\n", ChessBoard[row][0],ChessBoard[row][1],ChessBoard[row][2]);
        if(row < 2){
        printf("|---|---|---|\n");
        }
    }
}
//规则:胜负
//。        横行  竖行  或者  对角线连在一起有三个一样的图案
//            率先完成的即为胜方
//      和棋
//          图案内没有空格时且没有有连到一起的图案

//游戏规则
char Winner(){
    int row = 0;
    int col = 0;
    for(row = 0;row < ROW; row++){
        if(ChessBoard[row][0] == ChessBoard[row][1] && ChessBoard[row][0] == ChessBoard[row][2]
           && ChessBoard[row][0]!=' '){
            return 'W';
        }
    }
    for(col = 0;col < COL; col++){
        if(ChessBoard[0][col] == ChessBoard[1][col] && ChessBoard[0][col] == ChessBoard[2][col]
           && ChessBoard[0][col]!=' '){
            return 'W';
        }
    }
    if(ChessBoard[0][0] == ChessBoard[1][1] && ChessBoard[0][0] == ChessBoard[2][2] && ChessBoard[0][0]!=' '){
        return 'W';
        }
    if(ChessBoard[0][2] == ChessBoard[1][1] && ChessBoard[0][2] == ChessBoard[2][0] && ChessBoard[0][0]!=' '){
        return 'W';
        }
    return 0;
}
//玩家移动棋子的函数
void PlayerMove(char ChessBoard[ROW][COL]){
    int row = 0;
    int col = 0;
    while(1){
        printf("请玩家输入落子的位置:");
        scanf("%d %d",&row,&col);
        if(row>2||col>2||row<0||col<0){
            printf("您输入的落子位置不合法,请重新输入");
        }
        if(ChessBoard[row][col]==' '){
            ChessBoard[row][col] = 'X';
            break;
        }
    }
}
//电脑落子函数
//void srand(unsigned seed)随机数发生器的初始化函数
//只需在主程序开始处调用srand((unsigned)time(NULL)); 后面直接用rand就可以了。不要在for等循环放置srand((unsigned)time(NULL));
#include<time.h>
void ComMove2(char ChessBoard[ROW][COL]){
    int row = 0;
    int col = 0;
    srand((unsigned)time(NULL));
    while(1){
        row = rand() % 3;
        col = rand() % 3;
        if(ChessBoard[row][col] ==' '){
            ChessBoard[row][col] = 'O';
            break;
        }
    }

}
//void ComMove1(char ChessBoard[ROW][COL]){
//    int row = 0;
//    int col = 0;
//    
//}

#include<time.h>

int main(int argc, const char * argv[]){
    Menu();
    int i;
    printf("请选择:");
    scanf("%d",&i);
    if(i==1){
        Init();
        while(1){
            Print();//先打印一下棋盘
            PlayerMove(ChessBoard);//玩家先下,判断游戏是否结束。如果结束就退出循环
            if(Winner() == 'W'){
                printf("玩家胜,游戏结束");
                break;
            }
            ComMove2(ChessBoard);//电脑下,顺便判断游戏是否结束。如果循环结束就退出循环

           if(Winner() == 'W'){
                printf("电脑获胜,游戏结束");
                break;
            }
        }
    }
    if(i==0){
        printf("退出游戏");
    }
    return 0;
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值