欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

写一个简单的小游戏 ——五子棋

程序员文章站 2022-05-25 11:47:17
...

写一个简单的小游戏 ——五子棋

  • emmmmmmm,这只是一个简单的五子棋,电脑的落子也只是单纯的只用随机数产生,并没有多的逻辑处理,因此,游戏的难点在于让电脑赢,完毕。
  • 代码很简单,主要的问题就是判断输入的坐标合法性,修改坐标处的显示,判断游戏的状态(也就是胜利,流局和游戏继续三个的状态),判断方法也很简单,只需要对二维数组遍历就好。
  • 话不多说先上图:
    • 选择界面:
      写一个简单的小游戏 ——五子棋
    • 游戏界面:
      在游戏界面我设置了可以动态设置棋盘的大小( 棋盘的大小只需要在#define那里修改就可以。不过因为是在6*6棋盘下设计的界面(虽然很丑),所以6*6下效果最好。),所以它可能是这样的:
      写一个简单的小游戏 ——五子棋
      这样的:
      写一个简单的小游戏 ——五子棋
      和这样的:
      写一个简单的小游戏 ——五子棋
    • 游戏结束后输出:
      写一个简单的小游戏 ——五子棋
  • 最后附上代码:
    代码分为三部分 game.h game.c 和 text.c
    • game.h
#ifndef __GAME_H__
#define __GAME_H__

#define R 6                       //行
#define C 6                       //列

void game_menu(const char a[R][C]);   //  游戏界面
void choose_menu(char a[R][C]);     //选择界面
void initialize_game(char a[R][C]);     //初始化游戏
void player_game(char a[R][C]);      //玩家落子
void computer_game(char a[R][C]);   //电脑落子
char judgment(const char a[R][C]);    // 判断游戏状态
void game(char a[R][C]);    //游戏过程
void end_print(char game_status);   //输出游戏情况

#endif // _GAME_H__
  • game.c
#include"game.h"

void initialize_game(char a[R][C])     //初始化游戏
{
    int i, j;
    for (i = 0; i < R; i++)
        for (j = 0; j < C; j++)
            a[i][j] = 32;
}
void game_menu(const char a[R][C])     //游戏界面
{
    /*system("cls");*/   //清屏 
    int i = 0, j = 0;
    printf("\n\n\t-----游戏棋盘为5X5,玩家需要在下面输入要落子的位置,先行后列,中间以空格隔开!!!-----\n");
    printf("\n\t\t----- 玩家落子为“    X    ”        电脑落子为“    O    ”    -----\n");
    printf("\n\n\t\t     | ̄%d ̄ ̄ ̄ ̄", 1);
    for (i = 2; i <= C - 1; i++)
    {
        printf("%d ̄ ̄ ̄ ̄", i );

    }
    printf("%d ̄| \n", C);
    for (i = 0; i < R - 1; i++)
    {
            printf("\t\t     %d  %c", i + 1, a[i][0]);
            for (j = 1; j <= C - 1; j++)
            {
                printf("--------%c", a[i][j]);

            }
            printf("  %d\n", i + 1);
            printf("\t\t     |  |");
            for (j = 1; j <= C - 1; j++)
            {
                printf("        |");

            }
            printf("  |\n");
            printf("\t\t     |  |");
            for (j = 1; j <= C - 1; j++)
            {
                printf("        |");

            }
            printf("  |\n");
    }
    printf("\t\t     %d  %c", i + 1, a[i][0]);
    for (j = 1; j <= C - 1; j++)
    {
        printf("--------%c", a[i][j]);

    }
    printf("  %d\n", i + 1);
    printf("\t\t     |__%d________", 1);
    for (i = 2; i <= C - 1; i++)
    {
        printf("%d________", i);

    }
    printf("%d__| \n", R);
}
void player_game(char a[R][C])      //玩家落子
{
    int x = 1, y = 1;
    game_menu(a);
    while (1)
    {
        printf("请玩家输入落子位置:");
        scanf("%d  %d", &x, &y);
        if ((x <= R) + (x >= 1) + (y <= C) + (x >= 1) + ((a[x - 1][y - 1]) == 32) == 5)
        {
            a[x - 1][y - 1] = 'X';
            break;
        }
        else
        {
            printf("\n\t\t\t输入错误,请重新输入!!!\n\n");
        }
    }
    game_menu(a);
}
void computer_game(char a[R][C])   //电脑落子
{
    srand((int)time(0));
    int x = 1, y = 1;
    game_menu(a);
    while (1)
    {
        x = rand() % (R + 1);
        y = rand() % (C + 1);
        if ((x <= R) + (x >= 1) + (y <= C) + (x >= 1) + ((a[x - 1][y - 1]) == 32) == 5)
        {
            a[x - 1][y - 1] = 'O';
            break;
        }
    }
    game_menu(a);
}
char judgment(const char a[R][C])     // 判断游戏状态    返回具体胜方
{
    int i = 0, j = 0;
    for (i = 0; i <= R - 5; i++)
    {
        for (j = 0; j <= C - 5; j++)
        {

            //行
            if ((a[i][j] != ' ') + (a[i][j] == a[i][j + 1]) + (a[i][j + 1] == a[i][j + 2]) + (a[i][j + 2] == a[i][j + 3]) + (a[i][j + 3] == a[i][j + 4]) == 5)
                return a[i][j];
            //列
            if ((a[i][j] != ' ') + (a[i][j] == a[i + 1][j]) + (a[i + 1][j] == a[i + 2][j]) + (a[i + 2][j] == a[i + 3][j]) + (a[i + 3][j] == a[i + 4][j]) == 5)
                return a[i][j];
            //正对角线
            if ((a[i][j] != ' ') + (a[i][j] == a[i + 1][j + 1]) + (a[i + 1][j + 1] == a[i + 2][j + 2]) + (a[i + 2][j + 2] == a[i + 3][j + 3]) + (a[i + 3][j + 3] == a[i + 4][j + 4]) == 5)
                return a[i][j];
            //反对角线
            if ((a[i][j + 4] != ' ') + (a[i][j + 4] == a[i + 1][j + 3]) + (a[i + 1][j + 3] == a[i + 2][j + 2]) + (a[i + 2][j + 2] == a[i + 3][j + 1]) + (a[i + 3][j + 1] == a[i + 4][j]) == 5)
                return a[i][j + 4];
        }
    }
    for (i = 0; i < R; i++)
    {
        for (j = 0; j < R; j++)
        {
            if (a[i][j] == ' ')
                return ' ';
        }
    }
    return 'Q';
}
void game(char a[R][C])    //游戏过程   根据judgment 返回值判断游戏是否结束
{
    char game_status = ' ';
    while(1)
    {
        game_status = judgment(a);
        if (game_status != ' ')
        {
            break;
        }
        player_game(a);
        game_status = judgment(a);
        if (game_status != ' ')
        {
            break;
        }
        computer_game(a);
        game_status = judgment(a);
        if (game_status != ' ')
        {
            break;
        }
    }
    game_menu(a);
    end_print(game_status);
}
void end_print(char game_status)   //输出游戏情况
{
    if (game_status == 'X')
    {
        printf("\n\n\t\t\t     游戏结束,玩家获胜!!!\n");
    }
    if (game_status == 'O')
    {
        printf("\n\n\t\t\t     游戏结束,电脑获胜!!!\n");
    }
    if (game_status == 'Q')
    {
        printf("\n\n\t\t\t     游戏结束,流局!!!\n");
    }
}
void choose_menu(char a[R][C])        //选择菜单
{
    int c = 1;
    //system("cls");
    while (c)
    {
        //system("CLS");
        printf("\n\n\t\t     ====================================================\n");
        printf("\t\t     ====================================================\n\n");
        printf("\t\t     ==  请选择功能:                                  ==\n");
        printf("\t\t     ==\t 1.开始新游戏          0.结束游戏              ==");
        printf("\n\n\t\t     ====================================================\n");
        printf("\t\t     ====================================================\n");
        printf("\t\t     请输入选项:");
        scanf("%d", &c);
        switch (c)
        {
            case 1: initialize_game(a); game(a); break;
            case 0: printf("\n\n\t\t\t      游戏结束,请按任意键退出!!!\n\n"); break;
            default: printf("\n\n\t\t\t     选择错误,请重新选择!!!\n\n"); break;
        }
    }
}
  • text.c

//五子棋

#include"game.h"
void play()
{
    char a[R][C];
    choose_menu(a);
}
int main()
{
    play();
    return 0;
}

以上为代码全部分,不足之处还望指正。

相关标签: 五子棋