C语言编写简易三子棋

思路:

1.建立三子棋(用数组实现)

2.初始化三子棋(将数组的值设置为空字符)

3.玩家下棋

4.显示当前三子棋盘

5.判断是否赢,棋盘是否满

6.电脑下棋

7.显示当前三子棋盘

8.判断是否赢,棋盘是否满

代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 3
#define COL 3
#include"game.h"

一、主函数

int main()
{
    srand((unsigned int)time(NULL));//电脑随机下子时使用
    printf("******************\n");
     printf("*****1.paly*******\n");
     printf("*****0.exit*******\n");
     printf("******************\n");
    int input=0;//选择开始游戏或是退出
     do{    
     printf("请选择:");
         scanf("%d",&input);
         switch(input){
             case 1:
                 printf("开始游戏:\n");
                 game();
                 printf("-------------\n");//华丽的分割线
                 break;
             case 0:
                 printf("退出游戏");
                 break;
             default:
                 printf("输入错误,请重新输入:\n");
                 break;
         }
     }while(input);
     return 0;
 }

二、游戏函数

void game()//游戏函数
{
    char ret;
    char arr[ROW][COL]={0};
    Initborad(arr,ROW,COL);//初始化数组
    displaygame(arr,ROW,COL);//展示三子棋面板
    while(1){
    playermove(arr,ROW,COL);//玩家下棋
    displaygame(arr,ROW,COL);//展示三子棋面板
    ret=Iswin(arr,ROW,COL);//判断是否输赢
    if(ret=='*'){
        printf("玩家赢!\n");
        break;
    }
    printf("\n");
    
    computermove(arr,ROW,COL);//电脑下棋
    displaygame(arr,ROW,COL); //展示三子棋面板   
    ret=Iswin(arr,ROW,COL);//判断是否输赢
    if(ret=='#'){
        printf("电脑赢!\n");
        break;
    }
    if(ret=='p'){
        printf("平局!");
        break;
    }
    
    }    
}

三、初始化

void Initborad(char arr[ROW][COL],int row,int col)//初始化数组(三子棋)
{
    int i=0,j=0;
    for(i=0;i<row;i++){
        for(j=0;j<col;j++){
            arr[i][j]=' ';
        }
    }
}

四、展示棋盘

void displaygame(char arr[ROW][COL],int row,int col)//展示三子棋面板
{
    int i=0,j=0;
    for(i=0;i<row;i++){
        for(j=0;j<col;j++){
            printf(" %c ",arr[i][j]);
            if(j<col-1)
            printf("|");
        }
        printf("\n");
        if(i<row-1)
        printf("---|---|---\n");
    }
}

五、玩家下棋

void playermove(char arr[ROW][COL],int row,int col)//玩家下棋
{
    printf("玩家移动:\n");
    int x=0,y=0;
    while(1){    
    scanf("%d%d",&x,&y);
    if(x>=1&&x<=ROW&&y>=1&&y<=COL){
     if(arr[x-1][y-1]==' '){
         arr[x-1][y-1]='*';
         break;
     }
     else{
         printf("坐标被占用!请重新输入:\n");
     }
    }
    else{
     printf("输入的坐标非法!请重新输入:\n");
    }
    if(isfull(arr,ROW,COL))break;
    }
}

六、电脑下棋

void computermove(char arr[ROW][COL],int row,int col)//电脑下棋
{
    int x=0,y=0;
    printf("电脑移动:\n");
    while(1){
     x=rand()%row;
     y=rand()%col;
    if(arr[x][y]==' '){
        arr[x][y]='#';
        break;
    }

七、判断输赢

char Iswin(char arr[ROW][COL],int row,int col)//判断是否输赢
{
    //玩家赢*,电脑赢#,平局p,继续下棋x
    char ret='0';
    int i=0,j=0;
    //行相等
    for(i=0;i<row;i++){
        if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2]&&arr[i][2]!=' '){
        return arr[i][0];    
        }
    }
    //列相等
    for(j=0;j<col;j++){
        if(arr[0][j]==arr[1][j]&&arr[1][j]==arr[2][j]&&arr[2][j]!=' '){
        return arr[0][j];    
        }
    }
    //对角线    
        if(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2]&&arr[2][2]!=' '){
        return arr[0][0];    
        }        
        if(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0]&&arr[1][1]!=' '){
        return arr[1][1];    
        }    
     //平局
     if(isfull(arr,ROW,COL)){
         return 'p';
     }
     //继续
     return 'x';
}

八、判断棋盘是否满

int isfull(char arr[ROW][COL],int row,int col)//判断三子棋是否下满
{
    
    int i=0,j=0;
    for(i=0;i<row;i++){
        for(j=0;j<col;j++){
            if(arr[i][j]==' '){
                return 0;
            }
        }
    }
    return 1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
五子棋是一种相对简单的棋类游戏,可以用C语言来实现人机对战的功能。 首先,我们需要定义一个棋盘的二维数组来表示游戏界面,可以选择一个15×15的大小。用1代表玩家落子的地方,用2代表电脑落子的地方,用0代表空白的地方。 接下来,需要编写一个函数来打印当前的棋盘状态。可以使用循环来遍历棋盘数组,并根据不同的值输出对应的符号,比如打印X表示玩家落子,打印O表示电脑落子,打印空格表示空白的位置。 然后,需要编写一个函数来实现玩家的落子功能。可以通过向控制台读取玩家的输入来确定落子的位置,然后将相应的棋盘数组位置修改为1。 接着,需要编写一个函数来实现电脑的落子功能。可以使用一种简单的算法来确定落子的位置,比如随机选择一个空白位置来落子,并将对应的棋盘数组位置修改为2。 最后,还需要编写一个函数来检查游戏是否结束。可以通过遍历棋盘数组来检查是否有五个相连的棋子。可以编写多个检查函数,分别检查横向、纵向、左上到右下、右上到左下四个方向是否存在五连子。 在主函数中,可以通过循环来控制游戏的进行,每个循环中先打印当前的棋盘状态,然后让玩家落子,再检查游戏是否结束,如果没有结束则让电脑落子,再次检查游戏是否结束。 以上就是用C语言实现简易五子棋人机对战的基本思路,可以根据需要进行进一步的功能扩展和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值