c语言简单实现三子棋

来源:互联网 发布:惠惠助手淘宝不显示 编辑:程序博客网 时间:2024/05/22 13:05

利用3*3的数组,简单实现三子棋

Game.h文件

#ifndef __GAME_H__  #define __GAME_H__  #define ROWS 3  #define COLS 3  #include<stdio.h>  #include<stdlib.h>  #include <time.h>#include<string.h> void init_board(char arr1[ROWS][COLS], int row,int  col);   void display_board(char arr1[ROWS][COLS], int row, int  col);  void player_move(char arr1[ROWS][COLS], int row, int  col);  void computer_move(char arr1[ROWS][COLS], int row, int  col);   char check_win(char arr1[ROWS][COLS], int row, int  col);  #endif 

Game.c文件

#define _CRT_SECURE_NO_WARNINGS 1  #include"game.h"  void display_board(char arr1[COLS][ROWS],int col,int row){  int i = 0;  printf("-------------\n");    for (i=0;i<row;i++)      {          printf("| %c | %c | %c |\n", arr1[i][0], arr1[i][1], arr1[i][2]);          if (i != row - 1)              printf("|---|---|---|\n");        else if (i == row - 1)            printf("-------------\n");    }  }void player_move(char arr1[COLS][ROWS],int col,int row){    int x = 0;      int y = 0;        while (1)      {          printf("请输入你想下的坐标:>");          scanf("%d%d", &x, &y);          x--;          y--;          if ((x>=0) && (x<=row-1) && (y>=0) && (y<=col-1))          {              if (arr1[x][y] == ' ')              {                  arr1[x][y] = 'X';                  break;              }              else              {                  printf("坐标已被占用,请重新输入:>\n");              }          }      }  }void computer_move(char arr1[ROWS][COLS], int row, int  col)  {      int i = 0;    int j = 0;    while (1)      {         for (i = 0; i < row; i++)        {            if ((arr1[i][0] == arr1[i][1]) && (arr1[i][1] == '0') && (arr1[i][2]) == ' ')            {                arr1[i][2] = '0';                goto END;            }            else if ((arr1[i][1] == arr1[i][2]) && (arr1[i][2] == '0') && (arr1[i][0]) == ' ')            {                arr1[i][0] = '0';                goto END;            }            else if ((arr1[i][0] == arr1[i][2]) && (arr1[i][2] == '0')  && (arr1[i][1]) == ' ')            {                arr1[i][1] = '0';                goto END;            }        }        for (i = 0; i < col; i++)        {            if ((arr1[0][i] == arr1[1][i]) && (arr1[1][i] == '0')  && (arr1[2][i]) == ' ')            {                arr1[2][i] = '0';                goto END;            }            else if ((arr1[1][i] == arr1[2][i]) && (arr1[2][i] == '0') && (arr1[0][i]) == ' ')            {                arr1[0][i] = '0';                goto END;            }            else if ((arr1[0][i] == arr1[2][i]) && (arr1[2][i] == '0')  && (arr1[2][i]) == ' ')            {                arr1[1][i] = '0';                goto END;            }        }        if ((arr1[0][0] == arr1[1][1]) && (arr1[1][1] == '0') && (arr1[2][2] == ' '))        {            arr1[2][2] = '0';            break;        }        if ((arr1[1][1] == arr1[2][2]) && (arr1[1][1] == '0') && (arr1[0][0] == ' '))        {            arr1[0][0] = '0';            break;        }        if ((arr1[0][0] == arr1[2][2]) && (arr1[2][2] == '0')  && (arr1[1][1] == ' '))        {            arr1[1][1] = '0';            break;        }        if ((arr1[0][2] == arr1[1][1]) && (arr1[1][1] == '0')  && (arr1[2][0] == ' '))        {            arr1[2][0] = '0';            break;        }        if ((arr1[0][2] == arr1[2][0]) && (arr1[2][0] == '0') && (arr1[1][1] == ' '))        {            arr1[1][1] = '0';            break;        }        if ((arr1[1][1] == arr1[2][0]) && (arr1[1][1] == '0') && (arr1[0][2] == ' '))        {            arr1[0][2] = '0';            break;        }        for (i = 0; i < row; i++)        {            if ((arr1[i][0] == arr1[i][1]) && (arr1[i][1] == 'X') && (arr1[i][2]) == ' ')            {                arr1[i][2] = '0';                goto END;            }            else if ((arr1[i][1] == arr1[i][2]) && (arr1[i][2] == 'X') && (arr1[i][0]) == ' ')            {                arr1[i][0] = '0';                goto END;            }            else if ((arr1[i][0] == arr1[i][2]) && (arr1[i][2] == 'X') && (arr1[i][1]) == ' ')            {                arr1[i][1] = '0';                goto END;            }        }        for (i = 0; i < col; i++)        {            if ((arr1[0][i] == arr1[1][i]) && (arr1[1][i] == 'X') && (arr1[2][i]) == ' ')            {                arr1[2][i] = '0';                goto END;            }            else if ((arr1[1][i] == arr1[2][i]) && (arr1[2][i] == 'X') && (arr1[0][i]) == ' ')            {                arr1[0][i] = '0';                goto END;            }            else if ((arr1[0][i] == arr1[2][i]) && (arr1[2][i] == 'X') && (arr1[2][i]) == ' ')            {                arr1[1][i] = '0';                goto END;            }        }        if ((arr1[0][0] == arr1[1][1]) && (arr1[1][1] == 'X') && (arr1[2][2] == ' '))        {            arr1[2][2] = '0';            break;        }        if ((arr1[1][1] == arr1[2][2]) && (arr1[1][1] == 'X') && (arr1[0][0] == ' '))        {            arr1[0][0] = '0';            break;        }        if ((arr1[0][0] == arr1[2][2]) && (arr1[2][2] == 'X') && (arr1[1][1] == ' '))        {            arr1[1][1] = '0';            break;        }        if ((arr1[0][2] == arr1[1][1]) && (arr1[1][1] == 'X') && (arr1[2][0] == ' '))        {            arr1[2][0] = '0';            break;        }        if ((arr1[0][2] == arr1[2][0]) && (arr1[2][0] == 'X') && (arr1[1][1] == ' '))        {            arr1[1][1] = '0';            break;        }        if ((arr1[1][1] == arr1[2][0]) && (arr1[1][1] == 'X') && (arr1[0][2] == ' '))        {            arr1[0][2] = '0';            break;        }        while (1)        {            int x = rand() % row;            int y = rand() % col;            if (arr1[x][y] == ' ')            {                arr1[x][y] = '0';                break;            }        }    END: break;    }}  void init_board(char arr1[COLS][ROWS],int col,int row){   memset(arr1, ' ', sizeof(arr1[0][0])*row*col);}  static int is_full(char arr1[ROWS][COLS], int row, int  col){      int i = 0;      int j = 0;      for (i = 0; i < row; i++)      {          for (j = 0; j < col; j++)          {              if (arr1[i][j] == ' ')                  return 0;          }      }      return 1; }  char check_win(char arr1[ROWS][COLS],int row,int  col)  {      int i = 0;      for (i = 0; i < row; i++)      {          if ((arr1[i][0] == arr1[i][1]) &&(arr1[i][1] == arr1[i][2]) && (arr1[i][1] != ' '))          {              return arr1[i][2];          }      }      for (i = 0; i < col; i++)      {          if ((arr1[0][i] == arr1[1][i]) && (arr1[1][i] == arr1[2][i]) && (arr1[1][i] != ' '))          {              return arr1[1][i];          }      }      if ((arr1[0][0] == arr1[1][1]) && (arr1[1][1] == arr1[2][2]) && (arr1[1][1] != ' '))      {          return arr1[1][1];      }      if ( (arr1[0][2] == arr1[1][1]) && (arr1[1][1] == arr1[2][0])&& (arr1[2][0] != ' '))      {          return arr1[1][1];      }      if(is_full(arr1, row, col))      {          return 'q';     }      return ' ';  }  

Test.c文件

#define _CRT_SECURE_NO_WARNINGS 1  #include"game.h"void mnue(){   printf("\n");  printf("\t\t\t\t\t***********欢乐三子棋***********\n");  printf("\t\t\t\t\t*                              *\n");  printf("\t\t\t\t\t*                              *\n");  printf("\t\t\t\t\t*                              *\n");  printf("\t\t\t\t\t*       1.开始   0.退出        *\n");  printf("\t\t\t\t\t*                              *\n");  printf("\t\t\t\t\t*                              *\n");  printf("\t\t\t\t\t*                              *\n");  printf("\t\t\t\t\t********************************\n");    }void play_game(){   int ret = 0;   char arr[ROWS][COLS] = { 0 };  init_board(arr, ROWS, COLS);    display_board(arr, ROWS, COLS);  while(1)  {           player_move(arr, ROWS, COLS);          display_board(arr, ROWS, COLS);          ret = check_win(arr, ROWS, COLS);          if (ret != ' ')              break;        printf("电脑输入:>\n");        computer_move(arr, ROWS, COLS);          display_board(arr, ROWS, COLS);          ret = check_win(arr, ROWS, COLS);        if (ret != ' ')              break;      }      if (ret == 'X')        {          printf("玩家赢!\n");      }      else if (ret == '0')      {          printf("电脑赢!\n");      }      else      {          printf("平局!\n");      }  }int  main(){      int input = 0;  srand((unsigned int)time(NULL));    do     {          mnue();       printf("请输入你的选择:>");       scanf("%d",&input);       switch(input)       {         case 1:             play_game();             break;         case  0:             break;         default:             break;                }   }while(input);  return 0;}
原创粉丝点击