简单三子棋(C语言)

game.h

#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
void InitBoard(char arr[ROW][COL], int row, int col);
void DisplayBoard(char arr[ROW][COL], int row, int col);
void PlayerMove(char arr[ROW][COL], int row, int col);
void ComputerMove(char arr[ROW][COL], int row, int col);
char IsWin(char arr[ROW][COL], int row, int col);
#endif

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void game()
{
       char board[ROW][COL] = { 0 };
       char ret = 0;
       InitBoard(board, ROW, COL);  //棋子初始化
       DisplayBoard(board, ROW, COL); //打印棋盘
       while (1)
       {
              PlayerMove(board, ROW, COL);
              ret = IsWin(board, ROW, COL);//判断游戏是否结束返回X(玩家赢),O(电脑赢),Q(平局),‘ ’(游戏继续)
              if (ret != ' ')
              {
                     break;
              }
              DisplayBoard(board, ROW, COL);
              ComputerMove(board, ROW, COL);
              ret = IsWin(board, ROW, COL);
              if (ret != ' ')
              {
                     break;
              }
              DisplayBoard(board, ROW, COL);
       }
       DisplayBoard(board, ROW, COL);
       if (ret == 'X')
       {
              printf("Player wins!\n");
       }
       else if (ret == 'O')
       {
              printf("Computer wins!\n");
       }
       else if (ret == 'Q')
       {
              printf("Dogfall!\n");
       }
       
}
void menu()
{
       printf("***************************\n");
       printf("********  1. play  ********\n");
       printf("********  0. exit  ********\n");
       printf("***************************\n");
}
void test()
{
       int choose = 0;
       srand((unsigned int)time(NULL));
       do {
              menu();
              printf("Please select: ");
              scanf("%d", &choose);
              switch (choose)
              {
              case 1:
                     game();
                     break;
              case 0:
                     break;
              default:
                     printf("Input error.Please re-enter!\n");
                     break;
              }
       } while (choose);
}
int main()
{
       test();
       return 0;
}

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void InitBoard(char arr[ROW][COL], int row, int col)
{
       int i = 0;
       int j = 0;
       for (i = 0; i < row; i++)
       {
              for (j = 0; j < col; j++)
              {
                     arr[i][j] = ' ';
              }
       }
}
void DisplayBoard(char arr[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 ",arr[i][j]);
                     if (j < col - 1)
                     {
                           printf("|");
                     }
              }
              printf("\n");
              if (i < row - 1)
              {
                     for (j = 0; j < col; j++)
                     {
                           printf("---");
                           if (j < col - 1)
                           {
                                  printf("|");
                           }
                     }
              }
              printf("\n");
       }
}
void PlayerMove(char arr[ROW][COL], int row, int col)
{
       int x = 0;
       int y = 0;
       printf("Player step:\n");
       while (1)
       {
              printf("Please enter coordinates: ");
              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] = 'X';
                           break;
                     }
                     else
                     {
                           printf("Coordinates occupied!\n");
                     }
              }
              else
              {
                     printf("Invalid coordinates!\n");
              }
       }
}
void ComputerMove(char arr[ROW][COL], int row, int col)
{
       int x = 0;
       int y = 0;
       printf("Computer step:\n");
       while (1)
       {
              x = rand() % 3;
              y = rand() % 3;
              if (arr[x][y] == ' ')
              {
                     arr[x][y] = 'O';
                     break;
              }
       }
}
static int IsFull(char arr[ROW][COL], int row, int col)
{
       int i = 0;
       int j = 0;
       for (i = 0; i < row; i++)
       {
              for (j = 0; j < col; j++)
              {
                     if (arr[i][j] == ' ')
                           return 0;
              }
       }
       return 1;
}
char IsWin(char arr[ROW][COL], int row, int col)
{
       //横
       int i = 0;
       for (i = 0; i < row; i++)
       {
              if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] !=  ' ')
              {
                     return arr[i][0];
              }
       }
       //竖
       for (i = 0; i < col; i++)
       {
              if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] !=  ' ')
              {
                     return arr[1][i];
              }
       }
       //斜
       if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
       {
              return arr[1][1];
       }
       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 'Q';
       }
       return ' ';//游戏继续
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值