#include "algorithm" #include "windows.h" #include "iostream" #include "stdlib.h" #include "string.h" #include "stdio.h" #include "vector" #include "math.h" #include "time.h" #include "string" #include "map" using namespace std; // 去光标 void qgb ( ) { HANDLE handle = GetStdHandle ( STD_OUTPUT_HANDLE ); CONSOLE_CURSOR_INFO CursorInfo; GetConsoleCursorInfo ( handle, &CursorInfo ); CursorInfo.bVisible = false; SetConsoleCursorInfo ( handle, &CursorInfo ); } // 判断所选位置是否可下 不可下返回-1 可以下返回0 int IsNULL ( int array[3][3], int x, int y ) { if ( array[x][y] == 0 ) return 0; return -1; } // 打印棋盘 void Print ( int array[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 ( array[i][j] == 0 ) printf( " " ); if ( array[i][j] == 1 ) printf( "X" ); if ( array[i][j] == -1 ) printf( "O" ); printf( "|" ); } } printf ( "\n\t+-+-+-+\n\n" ); } // 电脑下子 int GO ( int array[3][3] ) { int i, t; int k; for ( i = 0; i < 3; i ++ ) { t = array[i][0] + array[i][1] + array[i][2]; if ( t == -2 ) { for ( k = 0; k < 3; k ++ ) { if ( array[i][k] == 0 ) { array[i][k] = -1; return 0; } } } } for ( i = 0; i < 3; i ++ ) { t = array[0][i] + array[1][i] + array[2][i]; if ( t == -2 ) { for ( k = 0; k < 3; k ++ ) { if ( array[k][i] == 0 ) { array[k][i] = -1; return 0; } } } } int j = 0; t = 0; for ( i = 0; i < 3; i ++ ) { j += array[i][i]; t += array[i][2-i]; } if ( t == -2 ) { for ( k = 0; k < 3; k ++ ) { if ( array[k][2-k] == 0 ) { array[k][2-k] = -1; return 0; } } } if ( j == -2 ) { for ( k = 0; k < 3; k ++ ) { if ( array[k][k] == 0 ) { array[k][k] = -1; return 0; } } } for ( i = 0; i < 3; i ++ ) { t = array[i][0] + array[i][1] + array[i][2]; if ( t == 2 ) { for ( k = 0; k < 3; k ++ ) { if ( array[i][k] == 0 ) { array[i][k] = -1; return 0; } } } } for ( i = 0; i < 3; i ++ ) { t = array[0][i] + array[1][i] + array[2][i]; if ( t == 2 ) { for ( k = 0; k < 3; k ++ ) { if ( array[k][i] == 0 ) { array[k][i] = -1; return 0; } } } } j = 0; t = 0; for ( i = 0; i < 3; i ++ ) { j += array[i][i]; t += array[i][2-i]; } if ( t == 2 ) { for ( k = 0; k < 3; k ++ ) { if ( array[k][2-k] == 0 ) { array[k][2-k] = -1; return 0; } } } if ( j == 2 ) { for ( k = 0; k < 3; k ++ ) { if ( array[k][k] == 0 ) { array[k][k] = -1; return 0; } } } while ( 1 ) { srand ( time ( 0 ) ); i = rand ( ) % 3; j = rand ( ) % 3; if ( IsNULL ( array, i, j ) == 0 ) { array[i][j] = -1; break; } } return 0; } // 平局返回0;正方胜返回1;负反胜利返回-1;否则返回6; int Check ( int array[3][3] ) { int i, t; for ( i = 0; i < 3; i ++ ) { t = array[i][0] + array[i][1] + array[i][2]; if ( t == -3 ) return -1; if ( t == 3 ) return 1; } for ( i = 0; i < 3; i ++ ) { t = array[0][i] + array[1][i] + array[2][i]; if ( t == -3 ) return -1; if ( t == 3 ) return 1; } int j = 0; t = 0; for ( i = 0; i < 3; i ++ ) { j += array[i][i]; t += array[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 ( array[i][j] == 0 ) return 6; } } return 0; } int CP ( int array[3][3] ) { int t = Check ( array ); Print ( array ); 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 ( "title 井字棋小游戏" ); qgb ( ); int array[3][3]; memset ( array, 0, sizeof ( array ) ); Print ( array ); int x, y, t; while ( 1 ) { scanf ( "%d %d", &x, &y ); x --; y --; if ( x > 2 || y > 2 || x < 0 || y < 0 ) { printf( "\t输入范围: 1-3! " ); continue; } if ( IsNULL ( array, x, y ) == -1 ) { printf ( "所选位置已存在! " ); continue; } array[x][y] = 1; t = CP ( array ); if ( t == 0 ) return 0; GO ( array ); t = CP ( array ); if ( t == 0 ) return 0; } return 0; }