用C语言实现简单的五子棋游戏

c语言初学者

1.创作的目的

        帮助初学者可以更加了解编程,提高对编程的乐趣。当初学者有一定的编程基础,可以通过一些基本的自定义函数实现基本的功能,比如这个五子棋游戏。

2.游戏主要模块及代码

2.1主函数模块

int main()
{
    int input = 0;
    char board[ROW][COL] = { 0 };
    do 
    {
        Menu(input);
        scanf("%d", &input);
        switch (input)
        {
        case 1:Game(board,ROW,COL);
            break;
        case 0:printf("退出游戏\n");
            break;
        default:printf("选择错误,重新选择\n");
            break;
        }
    } while (input);
}

通过while循环以及switch实现功能选择。

2.2 头文件及函数声明

//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//符号的定义
#define ROW 5
#define COL 5
//菜单选项
void Menu(int i);
//游戏
void Game(char board[ROW][COL], int row, int col);
//棋盘界面初始化
void Init_board(char board[ROW][COL], int row, int col);
//显示棋盘界面
void Display_board(char board[ROW][COL], int row, int col);
//玩家下棋
void Player_move(char board[ROW][COL], int row, int col);
//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col);
//判断输赢
char Is_win(char board[ROW][COL], int row, int col);

2.3菜单模块

void Menu(int i)
{
    printf("*****************************************\n");
    printf("**************1.开始游戏*****************\n");
    printf("****************0.退出*******************\n");
    printf("*****************************************\n");
}

通过简单的语法进行输出。

2.4游戏模块

#define _CRT_SECURE_NO_WARNINGS = 1;
#include "game.h"
void Menu(int i)
{
    printf("*****************************************\n");
    printf("**************1.开始游戏*****************\n");
    printf("****************0.退出*******************\n");
    printf("*****************************************\n");
}
void Init_board(char board[ROW][COL], int row, int col)
{
    int i = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        for (j = 0; j < col; j++)
            board[i][j] = ' ';
    }
}

void Display_board(char board[ROW][COL], int row, int col)
{
    int i = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        for (j = 0; j < col; j++)
        {
            printf(" %c ", board[i][j]);
            if(j<col-1)
                printf("|");
        }
        printf("\n");
        if (i < row - 1)
        {
            int j = 0;
            for (j = 0; j < col; j++)
            {
                printf("---");
                if (j < col-1)
                    printf("|");
            }
            printf("\n");
        }
    }
    printf("\n");
}

void Player_move(char board[ROW][COL], int row, int col)
{
    int x = 0;
    int y = 0;
    printf("玩家下棋:\n");
    while (1)
    {
        printf("玩家输入坐标>");
        scanf("%d %d", &x, &y);
        if (x>=1&&x<=row&&y>=1&&y<=col)
        {
            if (board[x - 1][y - 1] == ' ')
            {
                board[x-1][y-1] = '*';
                break;
            }    
            else
            {
                printf("该位置被占用,重新输入\n");
            }
        }
        else
        {
            printf("非法输入,重新输入\n");
        }
    }
}
void Computer_move(char board[ROW][COL], int row, int col)
{
    srand((unsigned int)time(NULL));
    int x = 0;
    int y = 0;
    while (1)
    {
    x = rand() % row;
    y = rand() % col;
        if (board[x][y] == ' ')
        {
            board[x][y] = '#';
            break;
        }
    }
}
char Is_win(char board[ROW][COL], int row, int col)
{
    //玩家赢
    int i = 0;
    int c = 0;
    int d = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        int count = 0;
        int b = 0;

        for (j = 0; j < col; j++)
        {
            if (board[i][j] == '*')//行
                count++;
            if (count == col)
                return '*';
            if (board[j][i] == '*')//列
                b++;
            if (b == col)
                return '*';
            if (i == j && board[i][j] == '*')
                c++;
            if (c == col)
                return '*';
            if (i + j == 4 && board[i][j] == '*')
                d++;
            if (d == col)
                return '*';
        }

    }
    //电脑赢
    c = 0;
    d = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        int count = 0;
        int b = 0;

        for (j = 0; j < col; j++)
        {
            if (board[i][j] == '#')//行
                count++;
            if (count == col)
                return '#';
            if (board[j][i] == '#')//列
                b++;
            if (b == col)
                return '#';
            if (i == j && board[i][j] == '#')
                c++;
            if (c == col)
                return '#';
            if (i + j == 4 && board[i][j] == '#')
                d++;
            if (d == col)
                return '#';
        }

        //继续游戏
        for (i = 0; i < row; i++)
        {
            int j = 0;
            for (j = 0; j < col; j++)
            {
                if (board[i][j] == ' ')
                    return 'c';
            }
        }
        //平局退出
        return 'q';
    }
}

void Game(char board[ROW][COL], int row, int col)
{
        //初始化棋盘界面
        Init_board(board, row, col);
        //显示棋盘界面
        Display_board(board, row, col);
        char ret = 0;
        while (1)
        {
            Player_move(board, row, col);
            Display_board(board, row, col);
            ret = Is_win(board, row, col);
            if (ret != 'c')
                break;
            Computer_move(board, row, col);
            Display_board(board, row, col);
            ret = Is_win(board, row, col);
            if (ret != 'c')
                break;
        }
        if (ret == '*')
            printf("玩家赢\n");
        else if (ret == '#')
            printf("电脑赢\n");
        else
            printf("平局\n");
}

主要是调用一些自定义函数实现游戏功能,包含棋盘初始化,玩家下棋,电脑下棋等。

3.总结

        在编写代码时,遇到一些小问题,还好通过调试一步一步的实现基本功能。初学者可以通过对代码的进行一些调试,可以发现代码的一些问题。

        代码电脑下棋部分,电脑是随机下的,读者可以通过一些算法将电脑下棋这部分代码写的灵活一点。

附录:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值