You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
252 lines
3.5 KiB
252 lines
3.5 KiB
#include "stdlib.h"
|
|
#include "string.h"
|
|
#include "stdio.h"
|
|
#include "math.h"
|
|
#include "time.h"
|
|
// 判断所选位置是否可下 不能下返回-1 可以下返回0
|
|
int IsNULL ( int a[3][3], int x, int y )
|
|
{
|
|
if ( a[x][y] == 0 ) return 0;
|
|
return -1;
|
|
}
|
|
// 打印棋盘
|
|
void Print ( int a[3][3] )
|
|
{
|
|
system( "cls" );
|
|
int i, j;
|
|
printf ( "\n\n\t井 字 棋 游 戏\n" );
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
printf ( "\n\t+-+-+-+\n\t|" );
|
|
for ( j = 0; j < 3; j ++ )
|
|
{
|
|
if ( a[i][j] == 0 ) printf( " " );
|
|
if ( a[i][j] == 1 ) printf( "X" );
|
|
if ( a[i][j] == -1 ) printf( "O" );
|
|
printf( "|" );
|
|
}
|
|
}
|
|
printf ( "\n\t+-+-+-+\n\n" );
|
|
}
|
|
|
|
// 电脑下子
|
|
int GO ( int a[3][3] )
|
|
{
|
|
int i, t;
|
|
int k;
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
t = a[i][0] + a[i][1] + a[i][2];
|
|
if ( t == -2 )
|
|
{
|
|
for ( k = 0; k < 3; k ++ )
|
|
{
|
|
if ( a[i][k] == 0 )
|
|
{
|
|
a[i][k] = -1;
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
t = a[0][i] + a[1][i] + a[2][i];
|
|
if ( t == -2 )
|
|
{
|
|
for ( k = 0; k < 3; k ++ )
|
|
{
|
|
if ( a[k][i] == 0 )
|
|
{
|
|
a[k][i] = -1;
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int j = 0; t = 0;
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
j += a[i][i];
|
|
t += a[i][2-i];
|
|
}
|
|
if ( t == -2 )
|
|
{
|
|
for ( k = 0; k < 3; k ++ )
|
|
{
|
|
if ( a[k][2-k] == 0 )
|
|
{
|
|
a[k][2-k] = -1;
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
if ( j == -2 )
|
|
{
|
|
for ( k = 0; k < 3; k ++ )
|
|
{
|
|
if ( a[k][k] == 0 )
|
|
{
|
|
a[k][k] = -1;
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
t = a[i][0] + a[i][1] + a[i][2];
|
|
if ( t == 2 )
|
|
{
|
|
for ( k = 0; k < 3; k ++ )
|
|
{
|
|
if ( a[i][k] == 0 )
|
|
{
|
|
a[i][k] = -1;
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
t = a[0][i] + a[1][i] + a[2][i];
|
|
if ( t == 2 )
|
|
{
|
|
for ( k = 0; k < 3; k ++ )
|
|
{
|
|
if ( a[k][i] == 0 )
|
|
{
|
|
a[k][i] = -1;
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
j = 0; t = 0;
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
j += a[i][i];
|
|
t += a[i][2-i];
|
|
}
|
|
if ( t == 2 )
|
|
{
|
|
for ( k = 0; k < 3; k ++ )
|
|
{
|
|
if ( a[k][2-k] == 0 )
|
|
{
|
|
a[k][2-k] = -1;
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
if ( j == 2 )
|
|
{
|
|
for ( k = 0; k < 3; k ++ )
|
|
{
|
|
if ( a[k][k] == 0 )
|
|
{
|
|
a[k][k] = -1;
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
while ( 1 )
|
|
{
|
|
srand ( time ( 0 ) );
|
|
i = rand ( ) % 3;
|
|
j = rand ( ) % 3;
|
|
if ( IsNULL ( a, i, j ) == 0 )
|
|
{
|
|
a[i][j] = -1;
|
|
break;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// 平局返回0;正方胜返回1;负反胜利返回-1;否则返回6;
|
|
int Check ( int a[3][3] )
|
|
{
|
|
int i, t;
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
t = a[i][0] + a[i][1] + a[i][2];
|
|
if ( t == -3 ) return -1;
|
|
if ( t == 3 ) return 1;
|
|
}
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
t = a[0][i] + a[1][i] + a[2][i];
|
|
if ( t == -3 ) return -1;
|
|
if ( t == 3 ) return 1;
|
|
}
|
|
int j = 0; t = 0;
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
j += a[i][i];
|
|
t += a[i][2-i];
|
|
}
|
|
if ( t == -3 || j == -3 ) return -1;
|
|
if ( t == 3 || j == 3 ) return 1;
|
|
for ( i = 0; i < 3; i ++ )
|
|
{
|
|
for ( j = 0; j < 3; j ++ )
|
|
{
|
|
if ( a[i][j] == 0 ) return 6;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int CP ( int a[3][3] )
|
|
{
|
|
int t = Check ( a );
|
|
Print ( a );
|
|
if ( t == 0 )
|
|
{
|
|
printf ( "\t 平局!");
|
|
system ( "pause" );
|
|
return 0;
|
|
}
|
|
if ( t == 1 )
|
|
{
|
|
printf ( "\t 你赢了! ");
|
|
system ( "pause" );
|
|
return 0;
|
|
}
|
|
if ( t == -1 )
|
|
{
|
|
printf ( "\t 你输了! ");
|
|
system ( "pause" );
|
|
return 0;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
int main ( )
|
|
{
|
|
system ( "井字棋游戏设计" );
|
|
|
|
int a[3][3];
|
|
memset ( a, 0, sizeof ( a ) );
|
|
Print ( a );
|
|
int x, y, t;
|
|
while ( 1 )
|
|
{
|
|
scanf ( "%d %d", &x, &y );
|
|
x --;
|
|
y --;
|
|
|
|
a[x][y] = 1;
|
|
t = CP ( a );
|
|
if ( t == 0 ) return 0;
|
|
GO ( a );
|
|
t = CP ( a );
|
|
if ( t == 0 ) return 0;
|
|
}
|
|
return 0;
|
|
}
|