三子棋

来源:互联网 发布:怎么注册淘宝 编辑:程序博客网 时间:2024/06/04 19:29

#define _CRT_SECURE_NO_WARNINGS 1#ifndef __GAME_H__#define __GAME_H__#include<stdlib.h>#include<stdio.h>#include<time.h>#include<string.h>enum OPTION{        EXIT,PLAY};#define COLS 3#define ROWS 3void init_board(char arr[ROWS][COLS], int row, int col);void display(char arr[ROWS][COLS], int row, int col);void player_move(char arr[ROWS][COLS], int row, int col);void computer_move(char arr[ROWS][COLS]);char is_win(char arr[ROWS][COLS], int row, int col);#endif//__GAME_H__

#include"game.h"void menu(){printf("*************************\n");printf("******  0.EXIT  *********\n");    printf("******  1.PLAY0 *********\n");printf("*************************\n");}void game(){   int ret = 0;   char arr[ROWS][COLS] = {0};   init_board(arr,ROWS, COLS);   display(arr,ROWS, COLS);      srand((unsigned int)time(NULL));       while(1)        {          player_move(arr,ROWS,COLS);            if(ret = is_win(arr,ROWS,COLS) !=' ')               break;             display(arr,ROWS,COLS);            computer_move(arr);             if(ret = is_win(arr,ROWS,COLS) !=' ')                break;             display(arr,ROWS,COLS);        }        ret= is_win(arr,ROWS,COLS);            if(ret == 'X')             printf("玩家赢\n");          if(ret == '@')              printf("电脑赢\n");          if(ret == 'f')              printf("平局\n");            display(arr,ROWS,COLS);         }int main(){int input = 0;do{  menu();      scanf("%d",&input);    switch(input)  {     case 1: game();break;     case 0:      break;     default: printf("选择错误\n");break;  }}while(input);   return 0;}

#include"game.h"void init_board(char arr[ROWS][COLS], int row, int col){   memset(arr, ' ', row*col);}void display(char arr[ROWS][COLS], int row, int col){   int i = 0;      for(i=0; i<row; i++)   {      printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]);     if(i!=2) {  printf("---|---|---\n");     }   }}static int is_full( char arr[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(arr[i][j]==' ')  return 0;   }}return 'f';}void player_move(char arr[ROWS][COLS], int row, int col){   int i = 0;   int j = 0;       while(1)    {printf("请输入下子位置:");        scanf("%d%d",&i,&j); if(((i>=1)&&(i<=3))&&((j>=1)&&(j<=3)))      {       if(arr[i-1][j-1] == ' ')   {   arr[i-1][j-1] = 'X';           break;   }       else    {         printf("该位置已落子\n");   } } else  { printf("输入有误\n"); }   }}void computer_move(char arr[ROWS][COLS]){   printf("电脑下子位置:");       while(1)   {    int i = rand()%3;        int j = rand()%3;   if(arr[i][j] == ' ')   {          printf("%d %d\n",i,j);      arr[i][j] = '@';  break;   }   }}char is_win(char arr[ROWS][COLS], 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][1]!= ' '))return arr[i][0];  }  for(i=0;i<col;i++)  { if((arr[0][i]==arr[1][i])&&    (arr[1][i]==arr[2][i])&&(arr[0][i]!= ' '))return arr[0][i];  }   if((arr[0][0]==arr[1][1])&&    (arr[1][1]==arr[2][2])&&(arr[2][2]!= ' '))return arr[0][0];      if((arr[0][2]==arr[1][1])&&    (arr[1][1]==arr[2][0])&&(arr[2][0]!= ' '))return arr[1][1];       if(is_full(arr, row, col))           { return 'f';  }          return ' ';  }

0 0
原创粉丝点击