g.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
void InitBoard ( char board[ ROW] [ COL] , int row, int col) ;
void DisplayBoard ( char board[ ROW] [ COL] , int row, int col) ;
void playermove ( char board[ ROW] [ COL] , int row, int col) ;
void computermove ( char board[ ROW] [ COL] , int row, int col) ;
char IsWin ( char board[ ROW] [ COL] , int row, int col) ;
g.c
#include "G.h"
void InitBoard ( char board[ ROW] [ COL] , int row, int col)
{
int i = 0 ;
int j = 0 ;
for ( i = 0 ; i < row; i++ )
{
for ( j = 0 ; j < col; j++ )
{
board[ i] [ j] = ' ' ;
}
}
}
void DisplayBoard ( char board[ ROW] [ COL] , int row, int col)
{
int i = 0 ;
int j = 0 ;
for ( i = 0 ; i < row; i++ )
{
for ( j = 0 ; j < col; j++ )
{
printf ( " %c " , board[ 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 board[ ROW] [ COL] , int row, int col)
{
int x = 0 ;
int y = 0 ;
printf ( "玩家走 " ) ;
while ( 1 )
{
printf ( "请输入你要走的坐标(1,3):> " ) ;
scanf ( "%d%d" , & x, & y) ;
if ( x >= 1 && x <= row && y >= 1 && y <= col)
{
if ( board[ x - 1 ] [ y - 1 ] == ' ' )
{
board[ x - 1 ] [ y - 1 ] = '*' ;
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] == ' ' )
{
board[ x] [ y] = '#' ;
break ;
}
}
}
static int IsFull ( char board[ ROW] [ COL] , int row, int col)
{
int i = 0 ;
int j = 0 ;
for ( i = 0 ; i < col; i++ )
{
for ( j = 0 ; j < col; j++ )
{
if ( board[ i] [ j] == ' ' )
{
return 0 ;
}
}
}
return 1 ;
}
char IsWin ( char board[ ROW] [ COL] , int row, int col)
{
int i = 0 ;
for ( i = 0 ; i < row; i++ )
{
if ( board[ i] [ 0 ] == board[ i] [ 1 ] && board[ i] [ 1 ] == board[ i] [ 2 ] && board[ i] [ 0 ] != ' ' )
{
return board[ i] [ 0 ] ;
}
}
for ( i = 0 ; i < row; i++ )
{
if ( board[ 0 ] [ i] == board[ 1 ] [ i] && board[ 0 ] [ i] == board[ 2 ] [ i] && board[ 0 ] [ i] != ' ' )
{
return board[ 0 ] [ i] ;
}
}
if ( board[ 0 ] [ 0 ] == board[ 1 ] [ 1 ] && board[ 0 ] [ 0 ] == board[ 2 ] [ 2 ] && board[ 1 ] [ 1 ] != ' ' )
{
return board[ 1 ] [ 1 ] ;
}
if ( board[ 0 ] [ 2 ] == board[ 1 ] [ 1 ] && board[ 0 ] [ 2 ] == board[ 2 ] [ 0 ] && board[ 1 ] [ 1 ] != ' ' )
{
return board[ 1 ] [ 1 ] ;
}
if ( IsFull ( board, ROW, COL) == 1 )
{
return 'P' ;
}
return 'C' ;
}
t.c
#include "G.h"
void menu ( )
{
printf ( "*********************************\n" ) ;
printf ( "******** 1 .进入游戏 ********\n" ) ;
printf ( "******** 0 .退出游戏 ********\n" ) ;
printf ( "*********************************\n" ) ;
}
void game ( )
{
char board[ ROW] [ COL] = { 0 } ;
char ret = 0 ;
InitBoard ( board, ROW, COL) ;
DisplayBoard ( board, ROW, COL) ;
while ( 1 )
{
playermove ( board, ROW, COL) ;
DisplayBoard ( board, ROW, COL) ;
ret = IsWin ( board, ROW, COL) ;
if ( ret != 'C' )
{
break ;
}
computermove ( board, ROW, COL) ;
DisplayBoard ( board, ROW, COL) ;
ret = IsWin ( board, ROW, COL) ;
if ( ret != 'C' )
{
break ;
}
}
if ( ret == '*' )
{
printf ( "玩家赢!\n" ) ;
}
else if ( ret == '#' )
{
printf ( "电脑赢!\n" ) ;
}
else if ( ret == 'P' )
{
printf ( "平局!\n" ) ;
}
}
void test ( )
{
int input = 0 ;
srand ( ( unsigned int ) time ( NULL ) ) ;
do {
menu ( ) ;
printf ( "请选择:" ) ;
scanf ( "%d" , & input) ;
switch ( input)
{
case 0 :
printf ( "退出游戏!\n" ) ;
break ;
case 1 :
printf ( "开始游戏!\n" ) ;
game ( ) ;
break ;
default :
printf ( "选择错误,请重新选择!\n" ) ;
break ;
}
} while ( input) ;
}
int main ( )
{
test ( ) ;
return 0 ;
}