C语言 #字棋小游戏 简单入手

文章介绍了一个基于C语言的字棋游戏程序,游戏规则类似于扫雷,但更简单。代码包括游戏初始化、用户交互、棋盘打印、游戏逻辑判断等功能,通过主函数、菜单函数和游戏函数等模块实现。玩家和电脑轮流下棋,直到一方获胜或平局。
摘要由CSDN通过智能技术生成

继上次扫雷游戏后,这次的#字棋游戏来啦,整体跟扫雷游戏差不多,有一些细微差别,但是比扫雷小游戏简单,ok 不废话 上代码。

首先还是头文件跟变量的使用

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3

接着就是主函数的内容,跟扫雷游戏差不多

 int main()
{
    int input;
    srand((unsigned int)time(NULL));
    do{
        menu();
        printf("1 进行游玩\n0 退出游戏\n");
            printf("请您选择:");
            scanf("%d",&input);
            switch(input)
            {
                case 1:
                    game();
                    break;
                case 0:
                    printf("退出游戏\n");
                default :
                    printf("选择错误,请重新选择\n");
                    break; 
            }
    }while(input);
    return 0;
}

main中的menu函数跟game函数


void menu()
{
    printf("----------------\n");
    printf("-----1.PLAY-----\n");
    printf("-----0.EXIT-----\n");
    printf("----------------\n");
}
void game()
{
    char board[ROW][COL];
    CSboard(board,ROW,COL);//初始化棋盘 
    Playboard(board,ROW,COL);//打印棋盘 
    char res;
    while(true)//设计成死循环,知道比赛出现输赢或者平局才跳出循环 
    {
        //既然是我们设计的游戏 肯定是我们先手啦QWQ
        Playermove(board,ROW,COL);
        Playboard(board,ROW,COL);
        //每下一次棋都要判断一次输赢
        res=Orwin(board,ROW,COL);
        if(res!='C')
        break;
        //笨蛋电脑下棋
        Computermove(board,ROW,COL);
        Playboard(board,ROW,COL);
        //同上
        res=Orwin(board,ROW,COL);
        if(res!='C') 
        break;
    }
    if(res=='*')
    printf("玩家胜!!!\n");
    else if(res=='#')
    printf("电脑胜!!!\n");
    else printf("实力相当,平局\n"); 

剩下的就是处理#字棋游戏的各种函数啦,注释都写在代码里咯

 
void CSboard(char board[ROW][COL],int row,int col) 
{
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        board[i][j]=' ';
    }
}
void Playboard(char board[ROW][COL],int row,int col)
{
    for(int i=0;i<row;i++)
    {    //此行打印数据 
        printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
        //此行打印棋盘的分割线 
        if(i<row-1)
        printf("---|---|---\n");
    }
}
void Playermove(char board[ROW][COL],int row,int col)
{
    int x;
    int y;
    printf("请大神下棋:");
    while(true)
    {
        printf("请输入下棋的坐标,中间使用空格");
        scanf("%d %d",&x,&y);
        if(x >= 1 && x <= row && y >= 1 && y <= col)
        {
            if(board[x-1][y-1]==' ')//因为初始化棋盘时 下标是从0开始的 0 1 2 而此时输入的坐标范围是1-3。 
            {
                board[x-1][y-1]='*';
                break;
            }
            else 
            printf("坐标被占用,请重新输入坐标\n");
        }
        else 
        printf("坐标越界,请重新输入");
     } 
}
void Computermove(char board[ROW][COL],int row,int col)
{
    int x;
    int y;
    printf("电脑下棋\n");
    while(true)
    {
        x=rand() % row;//0-2范围内的随机数字 
        y=rand() % col;//同上 
        if(board[x][y]==' ')
        {
            board[x][y]='#';
            break;
        }
    }
}
int Isfull(char board[ROW][COL],int row,int col)
{
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        {
            if(board[i][j]==' ')
            return 0;//棋盘没有被下满 
        }
    }
    return 1;//棋盘被下满了,游戏平局 
}
char Orwin(char board[ROW][COL],int row,int col)
{
    //行赢了 
    for(int i=0;i<row;i++)
    {
        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
        {
            return board[i][0];
        }
    }
    //列赢了 
    for(int j=0;j<col;j++)
    {
        if (board[j][0] == board[j][1] && board[j][1] == board[j][2] && board[j][0] != ' ')
        {
            return board[j][0];
        }
    }
    //对角线赢了
     //对角线
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
        return board[1][1];
    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
        return board[1][1];
        //谁都没赢,平局
         if (Isfull(board, row, col) == 1)
      {
            return 'Q';
      }
      return 'C';//游戏没结束 继续游戏 
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值