【C++ 程序】 井字棋游戏(人 VS Lv3电脑)(战绩统计版)

这是 Lv3 电脑级别,其中的逻辑是1.由我自己推导电脑不败之法,2.当没有变数时,调用 Lv2 函数
此外,此版本可以选择重复游戏,与电脑对战时统计战绩


图形界面(鼠标控制)见我的博客:
【C++ 程序】 井字棋游戏(人 VS Lv3电脑)(战绩统计版)(EasyX 图形界面)


程序

//This program is a simple tic-tac-toe game.

#include <iostream>
#include <string>
#include <cstddef>
#include <stdexcept>
#include <ctime>
#include <vector>
using namespace std;

vector<vector<char>> point_now{
    
     {
    
     ' ', ' ', ' '},{
    
    ' ', ' ', ' '},{
    
     ' ', ' ', ' '} };
const string location_computer[3][3] = {
    
     {
    
    "A1","A2","A3"},{
    
    "B1","B2","B3"},{
    
    "C1","C2","C3"} };
char player = 'X';
char computer_player = 'X';
unsigned step_count = 0;

int win_lose(vector<vector<char>> point, int n)
{
    
    
	if (point[0][0] == point[0][1] && point[0][1] == point[0][2] && point[0][0] == 'X') return 1; // X wins
	if (point[1][0] == point[1][1] && point[1][1] == point[1][2] && point[1][0] == 'X') return 1; // X wins
	if (point[2][0] == point[2][1] && point[2][1] == point[2][2] && point[2][0] == 'X') return 1; // X wins
	if (point[0][0] == point[1][0] && point[1][0] == point[2][0] && point[0][0] == 'X') return 1; // X wins
	if (point[0][1] == point[1][1] && point[1][1] == point[2][1] && point[0][1] == 'X') return 1; // X wins
	if (point[0][2] == point[1][2] && point[1][2] == point[2][2] && point[0][2] == 'X') return 1; // X wins
	if (point[0][0] == point[1][1] && point[1][1] == point[2][2] && point[1][1] == 'X') return 1; // X wins
	if (point[0][2] == point[1][1] && point[1][1] == point[2][0] && point[1][1] == 'X') return 1; // X wins

	if (point[0][0] == point[0][1] && point[0][1] == point[0][2] && point[0][0] == '0') return 2; // 0 wins
	if (point[1][0] == point[1][1] && point[1][1] == point[1][2] && point[1][0] == '0') return 2; // 0 wins
	if (point[2][0] == point[2][1] && point[2][1] == point[2][2] && point[2][0] == '0') return 2; // 0 wins
	if (point[0][0] == point[1][0] && point[1][0] == point[2][0] && point[0][0] == '0') return 2; // 0 wins
	if (point[0][1] == point[1][1] && point[1][1] == point[2][1] && point[0][1] == '0') return 2; // 0 wins
	if (point[0][2] == point[1][2] && point[1][2] == point[2][2] && point[0][2] == '0') return 2; // 0 wins
	if (point[0][0] == point[1][1] && point[1][1] == point[2][2] && point[1][1] == '0') return 2; // 0 wins
	if (point[0][2] == point[1][1] && point[1][1] == point[2][0] && point[1][1] == '0') return 2; // 0 wins

	if (n == 9) return 3; // end up in a draw
	else return 0; // unfinished
}

void game_player_change(char& player)
{
    
    
	if (player == 'X')
		player = '0'; // X -> 0
	else player = 'X';// 0 -> X
}

string computer1(vector<vector<char>> p) // Computer Lv.1
{
    
    
	string ret;

	unsigned available_n = 49;
	for (int c_i = 0; c_i != 3; c_i++)
	{
    
    
		for (int c_j = 0; c_j != 3; c_j++)
		{
    
    
			if ((p[c_i][c_j] != 'X') && (p[c_i][c_j] != '0'))
				p[c_i][c_j] = available_n++; // mark empty places with numbers 1,2,3...
		}
	}
	srand((unsigned)time(NULL));
	int ran = rand() % (available_n - 49) + 49; // generate a random number
	for (int c_i = 0; c_i != 3; c_i++)
	{
    
    
		for (int c_j = 0; c_j != 3; c_j++)
		{
    
    
			if (p[c_i][c_j] == ran)
				ret = location_computer[c_i][c_j]; // the chosen place
		}
	}
	for (int c_i = 0; c_i != 3; c_i++)
	{
    
    
		for (int c_j = 0; c_j != 3; c_j++)
		{
    
    
			if ((p[c_i][c_j] != 'X') && (p[c_i][c_j] != '0'))
				p[c_i][c_j] = ' '; // return to Space
		}
	}
	return ret; // this is the copmuter-chosen location
}

string computer2(vector<vector<char>> p) // Computer Lv.2
{
    
    
	char man_player = (computer_player == 'X') ? '0' : 'X'; // define man_player

	/**/ if (p[0][0] == computer_player && p[0][2] == computer_player && p[0][1] == ' ') return location_computer[0][1];
	else if (p[0][0] == computer_player && p[0][1] == computer_player && p[0][2] == ' ') return location_computer[0][2];
	else if (p[0][1] == computer_player && p[0][2] == computer_player && p[0][0] == ' ') return location_computer[0][0]; // Row A
	else if (p[1][0] == computer_player && p[1][2] == computer_player && p[1][1] == ' ') return location_computer[1][1];
	else if (p[1][0] == computer_player && p[1][1] == computer_player && p[1][2] == ' ') return location_computer[1][2];
	else if (p[1][1] == computer_player && p[1][2] == computer_player && p[1][0] == ' ') return location_computer[1][0]; // Row B
	else if (p[2][0] == computer_player && p[2][2] == computer_player && p[2][1] == ' ') return location_computer[2][1];
	else if (p[2][0] == computer_player && p[2][1] == computer_player && p[2][2] == ' ') return location_computer[2][2];
	else if (p[2][1] == computer_player && p[2][2] == computer_player && p[2][0] == ' ') return location_computer[2][0]; // Row C
	else if (p[0][0] == computer_player && p[2][0] == computer_player && p[1][0] == ' ') return location_computer[1][0];
	else if (p[0][0] == computer_player && p[1][0] == computer_player && p[2][0] == ' ') return location_computer[2][0];
	else if (p[1][0] == computer_player && p[2][0] == computer_player && p[0][0] == ' ') return location_computer[0][0]; // Column 1
	else if (p[0][1] == computer_player && p[2][1] == computer_player && p[1][1] == ' ') return location_computer[1][1];
	else if (p[0][1] == computer_player && p[1][1] == computer_player && p[2][1] == ' ') return location_computer[2][1];
	else if (p[1][1] == computer_player && p[2][1] == computer_player && p[0][1] == ' ') return location_computer[0][1]; // Column 2
	else if (p[0][2] == computer_player && p[2][2] == computer_player && p[1][2] == ' ') return location_computer[1][2];
	else if (p[0][2] == computer_player && p[1][2] == computer_player && p[2][2] == ' ') return location_computer[2][2];
	else if (p[1][2] == computer_player && p[2][2] == computer_player && p[0][2] == ' ') return location_computer[0][2]; // Column 3
	else if (p[0][0] == computer_player && p[2][2] == computer_player && p[1][1] == ' ') return location_computer[1][1];
	else if (p[0][0] == computer_player && p[1][1] == computer_player && p[2][2] == ' ') return location_computer[2][2];
	else if (p[1][1] == computer_player && p[2][2] == computer_player && p[0][0] == ' ') return location_computer[0][0]; // Diagonal 1
	else if (p[0][2] == computer_player && p[2][0] == computer_player && p[1][1] == ' ') return location_computer[1][1];
	else if (p[0][2] == computer_player && p[1][1] == computer_player && p[2][0] == ' ') return location_computer[2][0];
	else if (p[1][1] == computer_player && p[2][0] == computer_player && p[0][2] == ' ') return location_computer[0][2]; // Diagonal 2

	else if (p[0][0] == man_player && p[0][2] == man_player && p[0][1] == ' ') return location_computer[0][1];
	else if (p[0][0] == man_player && p[0][1] == man_player && p[0][2] == ' ') return location_computer[0][2];
	else if (p[0][1] == man_player && p[0][2] == man_player && p[0][0] == ' ') return location_computer[0][0]; // Row A
	else if (p[1][0] == man_player && p[1][2] == man_player && p[1][1] == ' ') return location_computer[1][1];
	else if (p[1][0] == man_player && p[1][1] == man_player && p[1][2] == ' ') return location_computer[1][2];
	else if (p[1][1] == man_player && p[1][2] == man_player && p[1][0] == ' ') return location_computer[1][0]; // Row B
	else if (p[2][0] == man_player && p[2][2] == man_player && p[2][1] == ' ') return location_computer[2][1];
	else if (p[2][0] == man_player && p[2][1] == man_player && p[2][2] == ' ') return location_computer[2][2];
	else if (p[2][1] == man_player && p[2][2] == man_player && p[2][0] == ' ') return location_computer[2][0]; // Row C
	else if (p[0][0] == man_player && p[2][0] == man_player && p[1][0] == ' ') return location_computer[1][0];
	else if (p[0][0] == man_player && p[1][0] == man_player && p[2][0] == ' ') return location_computer[2][0];
	else if (p[1][0] == man_player && p[2][0] == man_player && p[0][0] == ' ') return location_computer[0][0]; // Column 1
	else if (p[0][1] == man_player && p[2][1] == man_player && p[1][1] == ' ') return location_computer[1][1];
	else if (p[0][1] == man_player && p[1][1] == man_player && p[2][1] == ' ') return location_computer[2][1];
	else if (p[1][1] == man_player && p[2][1] == man_player && p[0][1] == ' ') return location_computer[0][1]; // Column 2
	else if (p[0][2] == man_player && p[2][2] == man_player && p[1][2] == ' ') return location_computer[1][2];
	else if (p[0][2] == man_player && p[1][2] == man_player && p[2][2] == ' ') return location_computer[2][2];
	else if (p[1][2] == man_player && p[2][2] == man_player && p[0][2] == ' ') return location_computer[0][2]; // Column 3
	else if (p[0][0] == man_player && p[2][2] == man_player && p[1][1] == ' ') return location_computer[1][1];
	else if (p[0][0] == man_player && p[1][1] == man_player && p[2][2] == ' ') return location_computer[2][2];
	else if (p[1][1] == man_player && p[2][2] == man_player && p[0][0] == ' ') return location_computer[0][0]; // Diagonal 1
	else if (p[0][2] == man_player && p[2][0] == man_player && p[1][1] == ' ') return location_computer[1][1];
	else if (p[0][2] == man_player && p[1][1] == man_player && p[2][0] == ' ') return location_computer[2][0];
	else if (p[1][1] == man_player && p[2][0] == man_player && p[0][2] == ' ') return location_computer[0][2]; // Diagonal 2

	else return computer1(point_now);
}

string computer3(vector<vector<char>> p) // Computer Lv.3
{
    
    
	vector<vector<char>> p001 = {
    
     {
    
    ' ',' ',' '},{
    
    ' ',' ',' '},{
    
    ' ',' ',' '} }; // 0
	vector<vector<char>> p002 = {
    
     {
    
    'X',' ',' '},{
    
    ' ',' ',' '},{
    
    ' ',' ',' '} }; // 1
	vector<vector<char>> p003 = {
    
     {
    
    ' ','X',' '},{
    
    ' ',' ',' '},{
    
    ' ',' ',' '} }; // 1
	vector<vector<char>> p004 = {
    
     {
    
    ' ',' ','X'},{
    
    ' ',' ',' '},{
    
    ' ',' ',' '} }; // 1
	vector<vector<char>> p005 = {
    
     {
    
    ' ',' ',' '},{
    
    'X',' ',' '},{
    
    ' ',' ',' '} }; // 1
	vector<vector<char>> p006 = {
    
     {
    
    ' ',' ',' '},{
    
    ' ',' ','X'},{
    
    ' ',' ',' '} }; // 1
	vector<vector<char>> p007 = {
    
     {
    
    ' ',' ',' '},{
    
    ' ',' ',' '},{
    
    'X',' ',' '} }; // 1
	vector<vector<char>> p008 = {
    
     {
    
    ' ',' ',' '},{
    
    ' ',' ',' '},{
    
    ' ','X',' '} }; // 1
	vector<vector<char>> p009 = {
    
     {
    
    ' ',' ',' '},{
    
    ' ',' ',' '},{
    
    ' ',' ','X'} }; // 1
	vector<vector<char>> p010 = {
    
     {
    
    ' ',' ',' '},{
    
    ' ','X',' '},{
    
    ' ',' ',' '} }; // 1
	vector<vector<char>> p011 = {
    
     {
    
    'X','0',' '},{
    
    ' ',' ',' '},{
    
    ' ',' ',' '} }; // 2
	vector<vector<char>> p012 = {
    
     {
    
    'X',' ','0'},{
    
    ' ',' ',' '},{
    
    ' ',' ',' '} }; // 2
	vector<vector<char>> p013 = {
    
     {
    
    'X',' ',' '},{
    
    '0',' ',' '},{
    
    ' ',' ',' '} }; // 2
	vector<vector<char>> p014 = {
    
     {
    
    'X',' ',' '},{
    
    ' ','0',' '},{
    
    ' ',' ',' '} }; // 2
	vector<vector<char>> p015 = {
    
     {
    
    'X',' ',' '},{
    
    ' ',' ','0'},{
    
    ' ',' ',' '} }; // 2
	vector<vector<char>> p016 = {
    
     {
    
    'X',' ',' '},{
    
    ' ',' ',' '},{
    
    '0',' ',' '} }; // 2
	vector<vector<char>> p017 = {
    
     {
    
    'X',' ',' '},{
    
    ' ',' ',' '},{
    
    ' ','0',' '} }; // 2
	vector<vector<char>> p018 = {
    
     {
    
    'X',' ',' '},{
    
    ' ',' ',' '},{
    
    ' ',' ','0'} }; // 2
	vector<vector<char>> p019 = {
    
     {
    
    'X',' ',' '},{
    
    ' ','0','X'},{
    
    ' ',' ',' '} }; // 3
	vector<vector<char>> p020 = {
    
     {
    
    'X',' ',' '},{
    
    ' ','0',' '},{
    
    ' ','X',' '} }; // 3
	vector<vector<char>> p021 = {
    
     {
    
    'X',' ',' '},{
    
    ' ','0',' '},{
    
    ' ',' ','X'} }; // 3
	vector<vector<char>> p022 = {
    
     {
    
    ' ',' ','X'},{
    
    ' ','0',' '},{
    
    'X',' ',' '} }; // 3
	vector<vector<char>> p023 = {
    
     {
    
    ' ',' ','X'},{
    
    ' ','0',' '},{
    
    ' ','X',' '} }; // 3
	vector<vector<char>> p024 = {
    
     {
    
    ' ',' ','X'},{
    
    'X','0',' '},{
    
    ' ',' ',' '} }; // 3
	vector<vector<char>> p025 = {
    
     {
    
    ' ',' ',' '},{
    
    'X','0',' '},{
    
    ' ',' ','X'} }; // 3
	vector<vector<char>> p026 = {
    
     {
    
    ' ','X',' '},{
    
    ' ','0',' '},{
    
    ' ',' ','X'} }; // 3
	vector<vector<char>> p027 = {
    
     {
    
    ' ','X',' '},{
    
    ' ','0',' '},{
    
    'X',' ',' '} }; // 3
	vector<vector<char>> p028 = {
    
     {
    
    ' ',' ',' '},{
    
    ' ','0','X'},{
    
    'X',' ',' '} }; // 3
	vector<vector<char>> p029 = {
    
     {
    
    ' ','X',' '},{
    
    'X','0',' '},{
    
    ' ',' ',' '} }; // 3
	vector<vector<char>> p030 = {
    
     {
    
    ' ','X',' '},{
    
    ' ','0','X'},{
    
    ' ',' ',' '} }; // 3
	vector<vector<char>> p031 = {
    
     {
    
    ' ',' ',' '},{
    
    ' ','0','X'},{
    
    ' ','X',' '} }; // 3
	vector<vector<char>> p032 = {
    
     {
    
    ' ',' ',' '},{
    
    'X','0',' '},{
    
    ' ','X',' '} }; // 3
	vector<vector<char>> p033 = {
    
     {
    
    ' ','X',' '},{
    
    ' ','0',' '},{
    
    ' ','X',' '} }; // 3
	vector<vector<char>> p034 = {
    
     {
    
    ' ',' ',' '},{
    
    'X','0','X'},{
    
    ' ',' ',' '} }; // 3
	vector<vector<char>> p035 = {
    
     {
    
    '0',' ',' '},{
    
    ' ','X',' '},{
    
    ' ',' ','X'} }; // 3
	vector<vector<char>> p036 = {
    
     {
    
    'X','0',' '},{
    
    ' ','X',' '},{
    
    ' ',' ','0'} }; // 4
	vector<vector<char>> p037 = {
    
     {
    
    'X',' ',' '},{
    
    '0','X',' '},{
    
    ' ',' ','0'} }; // 4
	vector<vector<char>> p038 = {
    
     {
    
    'X','0','X'},{
    
    ' ',' ',' '},{
    
    '0',' ','X'} }; // 4
	vector<vector<char>> p039 = {
    
     {
    
    'X',' ','0'},{
    
    '0',' ',' '},{
    
    'X',' ',' '} }; // 4
	vector<vector<char>> p040 = {
    
     {
    
    'X',' ',' '},{
    
    ' ','0','X'},{
    
    ' ','X','0'} }; // 5
	vector<vector<char>> p041 = {
    
     {
    
    ' ',' ','X'},{
    
    'X','0',' '},{
    
    '0','X',' '} }; // 5
	vector<vector<char>> p042 = {
    
     {
    
    '0','X',' '},{
    
    'X','0',' '},{
    
    ' ',' ','X'} }; // 5
	vector<vector<char>> p043 = {
    
     {
    
    ' ','X','0'},{
    
    ' ','0','X'},{
    
    'X',' ',' '} }; // 5

	/**/ if (p == p001 || p == p010 || p == p025 || p == p026 || p == p029 || p == p041 || p == p043) return "A1";
	else if (p == p034) return "A2";
	else if (p == p016 || p == p018 || p == p027 || p == p028 || p == p030 || p == p037 || p == p040) return "A3";
	else if (p == p002 || p == p003 || p == p004 || p == p005 || p == p006 || p == p007 || p == p008 ||
		/* */p == p009 || p == p011 || p == p013 || p == p015 || p == p017) return "B2";
	else if (p == p033) return "B3";
	else if (p == p012 || p == p023 || p == p024 || p == p032 || p == p035 || p == p036 || p == p042) return "C1";
	else if (p == p021 || p == p022) return "C2";
	else if (p == p014 || p == p019 || p == p020 || p == p031 || p == p038 || p == p039) return "C3";
	else return computer2(p);
}

int main()
{
    
    
	string play_again("Y");
	unsigned com_win = 0, man_win = 0, draw = 0;
	std::cout << "This program is a simple tic-tac-toe game.\nProgrammer:Teddy van Jerry\n" << endl;
	std::cout << "Please choose 'Man VS Man'(1) or 'Man VS Computer'(2): ";
	char Man_or_Computer;
	cin >> Man_or_Computer;

	while (play_again[0] == 'Y' || play_again[0] == 'y')
	{
    
    
		std::cout << endl;
		char difficulty = '3'; // default setup
		if (Man_or_Computer == '2') // for Man VS Computer
		{
    
    
			std::cout << "Please choose Difficulty: 'Lv.1 (Easy)'(1) or 'Lv.2 (Medium)'(2) or 'Lv.3 (Difficult)'(3): ";
			cin >> difficulty;
			std::cout << endl;
			std::cout << "You go first or the computer? You(1), Computer(2): ";
			char You_or_Computer;
			cin >> You_or_Computer;
			std::cout << endl;
			if (You_or_Computer == '1')
				computer_player = '0';
			else computer_player = 'X';
		}

		// Print an empty board.
		std::cout << "| |1|2|3|" << endl;
		std::cout << "|A| | | |" << endl;
		std::cout << "|B| | | |" << endl;
		std::cout << "|C| | | |\n" << endl;

		while (win_lose(point_now, step_count) == 0)
		{
    
    
			string location;
			unsigned location_letter = 0; // A/B/C
			unsigned location_number = 0; // 1/2/3

		begin: // a label

			std::cout << "Player " << player << ", make your move: ";
			if (Man_or_Computer == '1')
				cin >> location; // input the location (e.g. B2)
			else
			{
    
    
				if (player != computer_player)
					cin >> location; // input the location (e.g. B2)
				else
				{
    
    
					if (difficulty == '1')
						location = computer1(point_now);
					if (difficulty == '2')
						location = computer2(point_now);
					if (difficulty == '3')
						location = computer3(point_now);
					std::cout << location << endl;
				}
				std::cout << endl;
			}

			switch (location[0])
			{
    
    
			case 'a': case 'A':
				location_letter = 0;
				break;
			case 'b': case 'B':
				location_letter = 1;
				break;
			case 'c': case 'C':
				location_letter = 2;
				break;
			default: // illegal input
				location_letter = 100; // indicate an error
				break;
			}

			switch (location[1])
			{
    
    
			case '1':
				location_number = 0;
				break;
			case '2':
				location_number = 1;
				break;
			case '3':
				location_number = 2;
				break;
			default: // illegal input
				location_number = 100; // indicate an error
				break;
			}

			try
			{
    
    
				if (location_letter != 100 && location_number != 100 && point_now[location_letter][location_number] == ' ')
					point_now[location_letter][location_number] = player;
				else throw runtime_error("Illegal input!");
			}
			catch (runtime_error err)
			{
    
    
				std::cout << err.what() << "\nTry Again? Enter Y or N." << endl;
				char decision;
				cin >> decision;
				if (!cin || decision == 'n' || decision == 'N')
					break;
				else
				{
    
    
					std::cout << endl;
					goto begin; // go back to the label 'begin'
				}
			}

			// Print the board
			std::cout << "| |1|2|3|" << endl;
			std::cout << "|A|" << point_now[0][0] << "|" << point_now[0][1] << "|" << point_now[0][2] << "|" << endl;
			std::cout << "|B|" << point_now[1][0] << "|" << point_now[1][1] << "|" << point_now[1][2] << "|" << endl;
			std::cout << "|C|" << point_now[2][0] << "|" << point_now[2][1] << "|" << point_now[2][2] << "|" << endl;

			game_player_change(player); // change the player
			++step_count; // count one more time
			std::cout << endl;
		}

		int final_result = win_lose(point_now, step_count);
		char winner = 'N';
		switch (final_result)
		{
    
    
		case 1:
			winner = 'X';
			std::cout << "Congratulations! The winner is X." << endl;
			break;
		case 2:
			winner = '0';
			std::cout << "Congratulations! The winner is 0." << endl;
			break;
		case 3:
			std::cout << "The game ended in a draw." << endl;
			++draw; // draw count
			break;
		}

		if (Man_or_Computer == '2')
		{
    
    
			if (winner == computer_player)
			{
    
     
				std::cout << "Computer won!" << endl;
				++com_win;
			}
			else
			{
    
    
				if (winner != 'N')
				{
    
    
					std::cout << "You won!!!" << endl;
					++man_win;
				}
			}
		}
		std::cout << endl;
		if (Man_or_Computer == '2')
		{
    
    
			std::cout << "RESULT TILL NOW:" << endl;
			std::cout << "MAN:\nWin:" << man_win << " Lose:" << com_win << " Draw:" << draw << "." << endl;
			std::cout << "COMPUTER:\nWin:" << com_win << " Lose:" << man_win << " Draw:" << draw << ".\n" << endl;
		}
		std::cout << "Want to play again? Enter Yes(Y) or No(N)." << endl;
		cin >> play_again;
		std::cout << endl;
		point_now = {
    
     {
    
     ' ', ' ', ' '},{
    
    ' ', ' ', ' '},{
    
     ' ', ' ', ' '} }; // empyt the board
		player = 'X';
		computer_player = 'X';
		step_count = 0;
	}

	std::cout << "\nALL RIGHTS RESERVED (c) 2020 Teddy van Jerry" << endl;
	return 0;
}

//Copyright :2020 Teddy van Jerry

输出示例

Output
在Lv.3状态下该程序能做到屡战不败,争取获胜(如果没有bug的话)。(如果有bug,欢迎评论区给出战胜 Lv3 电脑的方法

分析

  • computer3()函数的定义和computer2()一样是暴力式的,属于枚举。如果枚举错误,很有可能存在bug。
  • 有些奇怪,说我的cout有歧义???算了,全加上std::
    ???
  • 此程序兼容 人 VS 人, 人 VS Lv1 电脑,Lv2 电脑,开局时可以选择。
  • 该程序一样对于不合法输入进行了判别(分为两种:1.坐标超出范围,2.输入到原来已有棋子的位置上),详见【C++ 程序】 井字棋游戏(人 VS 人)中的分析。

ALL RIGHTS RESERVED © 2020 Teddy van Jerry
欢迎转载,转载请注明出处。


See also

Teddy van Jerry 的导航页
【C++ 程序】 井字棋游戏(人 VS 人)
【C++ 程序】 井字棋游戏(人 VS Lv1电脑)
【C++ 程序】 井字棋游戏(人 VS Lv2电脑)
【C++ 程序】 井字棋游戏(人 VS Lv3电脑)
【C++ 程序】 五子棋游戏(人 VS 人)
【C++ 程序】 随机数
【C++ 程序】 移动迷宫游戏
【C++ 程序】 贪吃蛇游戏
【C++ 程序】 数字推盘游戏(15-puzzle)
【C++ 程序】 2048游戏
【C++ 程序】 井字棋游戏(人 VS 人)(EasyX 图形界面)
【C++ 程序】 井字棋游戏(人 VS Lv3电脑)(战绩统计版)(EasyX 图形界面)

猜你喜欢

转载自blog.csdn.net/weixin_50012998/article/details/108346739