小游戏之---三子棋----

来源:互联网 发布:显卡降频软件 编辑:程序博客网 时间:2024/06/06 20:49

game.h

#ifndef __GAME_H__#define __GAME_H__
#include<string.h>#include<stdlib.h>#include<time.h>
#define ROW 3#define COL 3
void Display_board(char board[ROW][COL],int row,int col);
void Plavermove(char board[ROW][COL],int row,int col);void Computermove(char board[ROW][COL], int row, int col);
char Win(char board[ROW][COL], int row, int col);
#endif //__GAME_H__

youxi.c

#include<stdio.h>#include"game.h"void Menu(){ printf("************************\n"); printf("**** 1.play  2.exit ****\n"); printf("************************\n");}void Game(){ char board[ROW][COL] = {0}; Display_board(board, ROW, COL); while (1) {  char ret = 0;  Plavermove(board,ROW,COL);  Display_board(board, ROW, COL);  ret=Win(board, ROW, COL);  if (ret == 'O')  {   printf("玩家胜!\n");   break;  }  else if (ret == 'X')  {   printf("电脑胜!\n");   break;  }  else if (ret == 'Y')  {   printf("平局!\n");   break;  }  Computermove(board,ROW,COL);  Display_board(board, ROW, COL);  ret=Win(board, ROW, COL);  if (ret == 'O')  {   printf("玩家胜!\n");   break;  }  else if (ret == 'X')  {   printf("电脑胜!\n");   break;  }  else if (ret == 'Y')  {   printf("平局!\n");   break;  } }}void Test(){ int input = 0; do {  Menu();  printf("请选择:>");  scanf("%d", &input);  switch (input)  {  case 1:   printf("开始游戏:\n");   Game();   break;  case 2:   printf("退出游戏:\n");   break;  default:   printf("选择错误!\n");   break;  } } while (input!=2);}int main(){ srand((unsigned int)time(NULL)); Test(); return 0;}

game.c

#include"game.h"void Display_board(char board[ROW][COL], int row, int col){ int i = 0; for (i = 0; i < row; i++) {  printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);  if (i<row-1)   printf("---|---|---\n"); }}void Plavermove(char board[ROW][COL], int row, int col){ int x = 0; int y = 0; while (1) {  printf("请输入坐标!\n");  scanf("%d%d", &x, &y);  if (x >= 1 && x <= col&&y >= 1 && y <= col)  {   if (board[x - 1][y - 1] == 0)   {    board[x - 1][y - 1] = 'O';     break;   }   else   {    printf("坐标已被占用\n");   }  }  else  {   printf("输入坐标错误!\n");  } }}void Computermove(char board[ROW][COL], int row, int col){ int x = 0; int y = 0; printf("电脑:\n"); while (1) {  x = rand() % row;  y = rand() % col;  if (board[x][y] == 0)  {   board[x][y] = 'X';   break;  } }}char Win(char board[ROW][COL], int row, int col){ int i = 0; int j = 0; int count = 0; for (i = 0; i < row; i++) {  if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != 0)  {   if (board[i][0] == 'O')   {    return board[i][0];   }   if (board[i][0] == 'X')   {    return board[i][0];   }  }  else if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != 0)  {
   if (board[0][i] == 'O')   {    return board[0][i];   }   if (board[0][i] == 'X')   {    return board[0][i];   }  } } if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != 0) {
  if (board[0][0] == 'O')  {   return board[0][0];  }  if (board[0][0] == 'X')  {   return board[0][0];  } } else if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != 0) {
  if (board[1][1] == 'O')  {   return board[1][1];  }  if (board[1][1] == 'X')  {   return board[1][1];  } } for (i = 0; i < row; i++) {  for (j = 0; j < col; j++)  {   if (board[i][j] != 0)   {    count++;   }  } } if (count == 9) {  return 'Y'; } return 'N';}