定义函数
void InitBoard ( char board[ ROW] [ COL] , int row, int col) ;
void DisplayBoard ( char board[ ROW] [ COL] , int row, int col) ;
void player_move ( char board[ ROW] [ COL] , int row, int col) ;
void computer_move ( char board[ ROW] [ COL] , int row, int col) ;
char is_win ( char board[ ROW] [ COL] , int row, int col) ;
菜单
void menu ( )
{
printf ( "********************************\n" ) ;
printf ( "********* 1. play *********\n" ) ;
printf ( "********* 0. exit *********\n" ) ;
printf ( "********************************\n" ) ;
}
逻辑实现
void game ( )
{
char board[ ROW] [ COL] = { 0 } ;
InitBoard ( board, ROW, COL) ;
DisplayBoard ( board, ROW, COL) ;
int num = 0 ;
while ( 1 )
{
player_move ( board, ROW, COL) ;
num++ ;
if ( is_win ( board, ROW, COL) == '*' )
{
printf ( "玩家赢\n" ) ;
DisplayBoard ( board, ROW, COL) ;
break ;
}
if ( num == ROW * COL)
{
DisplayBoard ( board, ROW, COL) ;
printf ( "平局\n" ) ;
break ;
}
computer_move ( board, ROW, COL) ;
num++ ;
DisplayBoard ( board, ROW, COL) ;
if ( is_win ( board, ROW, COL) == '#' )
{
printf ( "你是笨蛋\n" ) ;
break ;
}
}
}
打印棋盘
void DisplayBoard ( char board[ ROW] [ COL] , int row, int col)
{
int i = 0 ;
for ( i = 0 ; i < row; i++ )
{
int j = 0 ;
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 player_move ( char board[ ROW] [ COL] , int row, int col)
{
int x = 0 ;
int y = 0 ;
printf ( "玩家下棋\n" ) ;
while ( 1 )
{
printf ( "请输入坐标:>" ) ;
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 computer_move ( char board[ ROW] [ COL] , int row, int col)
{
while ( 1 ) {
int row = rand ( ) % ROW;
int col = rand ( ) % COL;
if ( board[ row] [ col] == ' ' )
{
board[ row] [ col] = '#' ;
break ;
}
}
}
判断输赢
char is_win ( char board[ ROW] [ COL] , int row, int col)
{
for ( int i = 0 ; i < row; i++ )
{
if ( board[ i] [ 0 ] == board[ i] [ 1 ] && board[ i] [ 1 ] == board[ i] [ 2 ] && board[ i] [ 1 ] != ' ' )
{
return board[ i] [ 0 ] ;
}
}
for ( int i = 0 ; i < row; i++ )
{
if ( board[ 0 ] [ i] == board[ 1 ] [ i] && board[ 1 ] [ i] == board[ 2 ] [ i] && board[ 1 ] [ i] != ' ' )
{
return board[ 0 ] [ i] ;
}
}
if ( board[ 0 ] [ 0 ] == board[ 1 ] [ 1 ] && board[ 1 ] [ 1 ] == board[ 2 ] [ 2 ] && board != ' ' )
{
return board[ 1 ] [ 1 ] ;
}
if ( board[ 0 ] [ 2 ] == board[ 1 ] [ 1 ] && board[ 1 ] [ 1 ] == board[ 2 ] [ 0 ] && board != ' ' )
{
return board[ 1 ] [ 1 ] ;
}
return ' ' ;
}
全部代码:
头文件 game.h
# pragma once
# include <stdio.h>
# include <time.h>
# include <stdlib.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 player_move ( char board[ ROW] [ COL] , int row, int col) ;
void computer_move ( char board[ ROW] [ COL] , int row, int col) ;
char is_win ( char board[ ROW] [ COL] , int row, int col) ;
game.c
# define _CRT_SECURE_NO_WARNINGS 1
# include "game.h"
void InitBoard ( char board[ ROW] [ COL] , int row, int col)
{
int i = 0 ;
for ( i = 0 ; i < row; i++ )
{
int j = 0 ;
for ( j = 0 ; j < col; j++ )
{
board[ i] [ j] = ' ' ;
}
}
}
void DisplayBoard ( char board[ ROW] [ COL] , int row, int col)
{
int i = 0 ;
for ( i = 0 ; i < row; i++ )
{
int j = 0 ;
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 player_move ( char board[ ROW] [ COL] , int row, int col)
{
int x = 0 ;
int y = 0 ;
printf ( "玩家下棋\n" ) ;
while ( 1 )
{
printf ( "请输入坐标:>" ) ;
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 computer_move ( char board[ ROW] [ COL] , int row, int col)
{
while ( 1 ) {
int row = rand ( ) % ROW;
int col = rand ( ) % COL;
if ( board[ row] [ col] == ' ' )
{
board[ row] [ col] = '#' ;
break ;
}
}
}
char is_win ( char board[ ROW] [ COL] , int row, int col)
{
for ( int i = 0 ; i < row; i++ )
{
if ( board[ i] [ 0 ] == board[ i] [ 1 ] && board[ i] [ 1 ] == board[ i] [ 2 ] && board[ i] [ 1 ] != ' ' )
{
return board[ i] [ 0 ] ;
}
}
for ( int i = 0 ; i < row; i++ )
{
if ( board[ 0 ] [ i] == board[ 1 ] [ i] && board[ 1 ] [ i] == board[ 2 ] [ i] && board[ 1 ] [ i] != ' ' )
{
return board[ 0 ] [ i] ;
}
}
if ( board[ 0 ] [ 0 ] == board[ 1 ] [ 1 ] && board[ 1 ] [ 1 ] == board[ 2 ] [ 2 ] && board != ' ' )
{
return board[ 1 ] [ 1 ] ;
}
if ( board[ 0 ] [ 2 ] == board[ 1 ] [ 1 ] && board[ 1 ] [ 1 ] == board[ 2 ] [ 0 ] && board != ' ' )
{
return board[ 1 ] [ 1 ] ;
}
return ' ' ;
}
test.c
# define _CRT_SECURE_NO_WARNINGS 1
# include "game.h"
void menu ( )
{
printf ( "********************************\n" ) ;
printf ( "********* 1. play *********\n" ) ;
printf ( "********* 0. exit *********\n" ) ;
printf ( "********************************\n" ) ;
}
void game ( )
{
char board[ ROW] [ COL] = { 0 } ;
InitBoard ( board, ROW, COL) ;
DisplayBoard ( board, ROW, COL) ;
int num = 0 ;
while ( 1 )
{
player_move ( board, ROW, COL) ;
num++ ;
if ( is_win ( board, ROW, COL) == '*' )
{
printf ( "玩家赢\n" ) ;
DisplayBoard ( board, ROW, COL) ;
break ;
}
if ( num == ROW * COL)
{
DisplayBoard ( board, ROW, COL) ;
printf ( "平局\n" ) ;
break ;
}
computer_move ( board, ROW, COL) ;
num++ ;
DisplayBoard ( board, ROW, COL) ;
if ( is_win ( board, ROW, COL) == '#' )
{
printf ( "你是笨蛋\n" ) ;
break ;
}
}
}
void test ( )
{
int input = 0 ;
do
{
menu ( ) ;
printf ( "请选择:>" ) ;
scanf ( "%d" , & input) ;
switch ( input)
{
case 1 :
game ( ) ;
break ;
case 0 :
printf ( "退出游戏\n" ) ;
break ;
default :
printf ( "选择错误\n" ) ;
break ;
}
} while ( input) ;
}
int main ( )
{
srand ( ( unsigned int ) time ( 0 ) ) ;
test ( ) ;
return 0 ;
}