首页 > 其他 > 详细

三子棋(18)

时间:2019-12-02 22:44:54      阅读:81      评论:0      收藏:0      [点我收藏+]
#include<stdio.h>
#define  _CRT_SECURE_NO_WARNINGS 
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define ROWS 3
#define COLS 3
void menu(){//菜单函数,输出可供选择
  printf("******************\n");
  printf("****1,PLAY********\n");
  printf("****0,EXIT********\n");
  printf("********************\n");
  
 
}
void init_board(char arr[ROWS][COLS], int x, int y){//初始化函数
 int i = 0;
 int j = 0;
 for (i = 0; i < ROWS; i++){
  for (j = 0; j < COLS; j++){
   arr[i][j] = ‘ ‘;//将一个二维数组初始化为一个空字符
  }
  putchar(‘\n‘);
 }
}
void print_board(char arr[ROWS][COLS]){//显示棋盘函数
 int i = 0;
 for (i = 0; i < ROWS; i++){
  if (i < ROWS){//在前两行输出下方的棋盘
   printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]);
  }
  if (i!=ROWS){
  printf("---|---|---\n");
  } 
 }
}
void player_move(char arr[ROWS][COLS]){//玩家下棋函数
 int i = 0;
 int j = 0;
 printf("请输入坐标:");
 while (1){
  scanf("%d %d", &i, &j);
  if ((i >= 1 && i <= ROWS) && (j >= 1 && j >= ROWS)){//判断输入坐标是否正确
   i--;
   j--;
  }
  if (arr[i][j] = ‘ ‘){
   arr[i][j] = ‘x‘;
   break;
  }
  else
   printf("请重新输入坐标:");
 }
}
int full(char arr[ROWS][COLS]){
 int i = 0;
 int j = 0;
 int count = 0;
 for (i = 0; i < ROWS; i++){
  for (j = 0; j < COLS; j++){
   if (arr[i][j] != ‘ ‘){
    count++;
   }
  }
 }
 return count;
}
void com_move(char arr[ROWS][COLS]){//电脑行走函数
 int a = 0;
 int b = 0;
 while (1){
  a = rand() % 3;//对a在区间的随机数
  b = rand() % 3;//对b在区间的随机数
  if (arr[a][b] = ‘ ‘){//电脑选取位置
   arr[a][b] = ‘o‘;
   break;
  }
 }
}
int check_win(char arr[ROWS][COLS], int c){//判断输赢
 int i=0;
 int j;
 for (i = 0; i < ROWS; i++){
  for (j = 0; j < COLS; j++){
   if (arr[i][0] == ‘x‘&&arr[i][1] == ‘x‘&&
   arr[i][2] == ‘x‘&&arr[i][1]!=‘ ‘)
    return 1;
   else if ((arr[0][j] == ‘x‘&&arr[1][j] == ‘x‘&&
    arr[2][j] == ‘x‘)||
    (arr[0][0] == ‘x‘&&arr[1][1] == ‘x‘&&
    arr[2][2] == ‘x‘&&arr[1][1]!=‘ ‘)||
    (arr[0][2] == ‘x‘&&arr[1][1] == ‘x‘&&
    arr[2][0] == ‘x‘&&arr[1][1]!=‘ ‘))
    return 1;
  }
 }
 for (i = 0; i < ROWS; i++){
  for (j = 0; j < COLS; j++)
   if (arr[i][0] == ‘o‘&&arr[i][1] == ‘o‘    
    &&arr[i][2] == ‘0‘&&arr[i][1]!=‘ ‘)
    return 2;
   else if ((arr[0][j] == ‘o‘&&arr[1][j] == ‘o‘
    &&arr[2][j] == ‘o‘&&arr[1][j]!=‘ ‘) ||
    (arr[0][2] == ‘o‘&&arr[1][1] == ‘o‘
    &&arr[2][0] == ‘o‘&&arr[1][1]!=‘ ‘) ||
    (arr[0][0] == ‘o‘&&arr[1][1] == ‘o‘
    &&arr[2][2] == ‘o‘&&arr[1][1]!=‘ ‘))
    return 2;
  }
  if (full == 9)
   return ‘9‘;
  return ‘ ‘;
}
void game(){
 char board[ROWS][COLS];//创建一个符合条件的二维数组
 int i = 0;
 int j = 0;
 int m = 0;
 int ret = 0;
 init_board(board,ROWS,COLS);//初始化一个二维数组
 print_board(board);//显示一个初始化的棋盘
 while (1){
  player_move(board);//玩家先走
  printf("\n");
  print_board(board);//玩家走完显示一次棋盘
  ret = full(board);
  m = check_win(board, ret);
  if (m == 1){
   printf("你赢了!\n\n");
   print_board(board);
   break;
  }
  else{
   if (ret == 9){
    printf("你个菜鸡。平局\n");
    print_board(board);
    break;
   }
   else{
    printf("电脑下:\n\n");
    srand((unsigned)time(NULL));//随机数
    com_move(board);//电脑走
    m = check_win(board, ret);//判输赢
    print_board(board);
    if (m == 2){
     printf("你个菜鸡连电脑都玩不过\n\n");
     break;
    }
    else if (m){
     if (m == 9){
      printf("你个垃圾,平局\n");
      break;
     }
    }
    else
     continue;
   }
  }
 }
}
int main(){
 int input = 0;
 do{
  menu();
  printf("请输入你的选项:");
  scanf("%d", &input);
  switch (input){
  case 1:
   game();
   break;
  case 0:
   exit(0);
  default:
   break;
  }
 } while (input);
 system("pause");
  return 0;
}

三子棋(18)

原文:https://www.cnblogs.com/yuzhenghan/p/11973220.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!