简单小游戏——三子棋

今天分享一个简单的用C语言编写的小游戏:三子棋游戏。

这是头文件 sanziqi.h

#ifndef _Sanziqi_H
#define _Sanziqi_H
#include <time.h>

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

#define row 3
#define col 3
void Inte_qipan(char arr[row][col], int r, int c);
void Display(char arr[row][col], int r, int c);
void Computer_move();
void perople_move();
char Is_win();
int Shengyu_Shu(char arr[row][col], int r, int c);
#endif;xie

游戏功能部分 game.c

#define _CRT_SECURE_NO_WARNINGS 1 
#include "sanziqi.h"
void Inte_qipan(char arr[row][col], int r, int c)//棋盘初始化
{
    int i = 0;
    int j = 0;
    for (i = 0; i<row; i++)
    {
        for (j = 0; j<col; j++)
        {
            arr[i][j] = ' ';
        }
    }
}
void Display(char arr[row][col], int r, int c)//棋盘显示
{
    int i = 0;
    printf("______________\n");
    for (i = 0; i < row; i++)
    {
        printf("%c  |  %c |  %c |\n", arr[i][0], arr[i][1], arr[i][2]);
        printf("______________\n");
    }
}
void Computer_move(char arr[row][col], int r, int c)//电脑走
{ 
    while (1)
    {
        r = rand() % row;
        c = rand() % col;
        if (arr[r][c] == ' ')
        {
            arr[r][c] = 'o';//电脑走一步用o表示
            break;
        }
    }
}
char Is_win(char arr[row][col], int r, int c)//判断输赢或者平局
{
    //一行或一列或一斜是相同的符号,则哪个玩家赢
    int i = 0;
    for (i = 0; i < row; i++)
    {
        if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][1] != ' ')//一行相等
            return arr[i][1];
        if (arr[0][i] == arr[1][i] && arr[0][i] == arr[2][i] && arr[1][i] != ' ')//一列相等
            return arr[0][i];
        if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[1][1] != ' ')//斜相等
            return arr[1][1];
        if (arr[2][0] == arr[1][1] && arr[2][0] == arr[0][2] && arr[1][1] != ' ')//斜相等
            return arr[1][1];
        if (Shengyu_Shu(arr, r, c) == 0)
            return ' ';
        else
            return 'p';
    }
}
void perople_move(char arr[row][col], int r, int c)//人走y
{
    int x = 0;
    int y = 0;
    while (1)
    {
        printf("请输入你的坐标:");
        scanf("%d%d", &x, &y);
        x--;
        y--;
        if ((0 <= x&&x <row) && (0 <= y&&y < col))
        {
            if (arr[x][y] == ' ')
            {
                arr[x][y] = 'x';//人走一步用表示
                break;
            }
            else
                printf("该位置已经被占用!\n");
        }
        else
        {
            printf("输出错误,请重新输入。\n");
        }
    }
}
int Shengyu_Shu(char arr[row][col], int r, int c)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < row; j++)
        {
            if (arr[i][j] == ' ');
            {
                return 0;
            }
        }
    }
    return 1;
}

函数实现部分mian.c

#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>
#include <stdlib.h>
#include "sanziqi.h"
void menu()//菜单
{
    printf("+--------------------------------+\n");
    printf("+          1-play                +\n");
    printf("+          0-exit                +\n");
    printf("+--------------------------------+\n");

}
void game()
{
    int r = row;
    int c = col;
    int x = 0;
    int y = 0;
    char k;//用来判断输赢情况
    char arr[row][col] = {0};
    Inte_qipan(arr, r, c);//棋盘初始化
    do
    {
        Display(arr, r, c);//显示棋盘
        Computer_move(arr, r, c);//电脑走
        k=Is_win(arr, r, c);
        if (k != ' ')
            break;
        Display(arr, r, c);
        perople_move(arr, r, c);//人走
        k=Is_win(arr, r, c);
        if (k != ' ')
            break;
        Display(arr, r, c);
    } while (k==' ');
   Display(arr, r, c);
    if (k == 'p')
    {
        printf("平局!\n");
    }
    else if (k == 'o')
    {
        printf("电脑赢!");
    }
    else if (k == 'x')
    {
        printf("你赢啦!\n");
    }
}
int main()
{
    srand((unsigned)time(NULL));
    menu();
    int num;
    printf("请选择:");
    scanf("%d", &num);
    switch (num)
    {
    case 1:
        printf("进入游戏!\n");
        game();
        break;
    case 0:
        printf("不玩了!\n");
        break;
    default:
        printf("输入格式错误。\n");
        break;
    }

    system("pause");
    return 0;
}

以上就是三子棋游戏的实现啦!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值