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

这是在之前【C++ 程序】 井字棋游戏(人 VS Lv3电脑)(战绩统计版)的基础上运用 EasyX 图形库完成的可视化程序。

程序

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

#include <iostream>
#include <string>
#include <cstddef>
#include <stdexcept>
#include <Windows.h>
#include <graphics.h>
#include <conio.h>
#include <ctime>
#include <vector>
using namespace std;

IMAGE imageX, image0, imageXt, image0t, imageXw, image0w, imageD;

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
}

void init1()
{
    
    
	initgraph(1200, 800);
	loadimage(0, _T("Welcome.jpg"), 1200, 800);
	Sleep(3000);
}

void init2()
{
    
    
	loadimage(0, _T("Board.jpg"), 1200, 800);// the board
}

string man_input()
{
    
    
	int Check = 0;
	string ret = "00";
	while (Check == 0)
	{
    
    
		if (MouseHit())
		{
    
    
			MOUSEMSG mouse = GetMouseMsg();
			if (mouse.uMsg == WM_LBUTTONDOWN)
			{
    
    
				/**/ if (mouse.y > 150 && mouse.y < 350) ret[0] = 'A';
				else if (mouse.y > 350 && mouse.y < 550) ret[0] = 'B';
				else if (mouse.y > 550 && mouse.y < 750) ret[0] = 'C';
				/**/ if (mouse.x > 100 && mouse.x < 300) ret[1] = '1';
				else if (mouse.x > 300 && mouse.x < 500) ret[1] = '2';
				else if (mouse.x > 500 && mouse.x < 700) ret[1] = '3';
			}
		}
		if (ret[0] != '0' && ret[1] != '0')
			if (point_now[ret[0] - 65][ret[1] - 49] == ' ')
				Check = 1; // indicate it's a legal click
	}
	return ret;
}

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);
}

void chess(string str, char c)
{
    
    
	if (c == 'X')
	{
    
    
		loadimage(&imageX, _T("X.jpg"), 180, 180);
		/**/ if (str == "A1") putimage(110, 160, &imageX);
		else if (str == "A2") putimage(314, 160, &imageX);
		else if (str == "A3") putimage(518, 160, &imageX);
		else if (str == "B1") putimage(110, 360, &imageX);
		else if (str == "B2") putimage(314, 360, &imageX);
		else if (str == "B3") putimage(518, 360, &imageX);
		else if (str == "C1") putimage(110, 560, &imageX);
		else if (str == "C2") putimage(314, 560, &imageX);
		else if (str == "C3") putimage(518, 560, &imageX);
	}
	else
	{
    
    
		loadimage(&image0, _T("0.jpg"), 180, 180);
		/**/ if (str == "A1") putimage(110, 160, &image0);
		else if (str == "A2") putimage(314, 160, &image0);
		else if (str == "A3") putimage(518, 160, &image0);
		else if (str == "B1") putimage(110, 360, &image0);
		else if (str == "B2") putimage(314, 360, &image0);
		else if (str == "B3") putimage(518, 360, &image0);
		else if (str == "C1") putimage(110, 560, &image0);
		else if (str == "C2") putimage(314, 560, &image0);
		else if (str == "C3") putimage(518, 560, &image0);
	}
}

void tip(char c)
{
    
    
	if (c == 'X')
	{
    
    
		loadimage(&imageXt, _T("Xt.jpg"), 100, 100);
		putimage(1040, 190, &imageXt);
	}
	else
	{
    
    
		loadimage(&image0t, _T("0t.jpg"), 100, 100);
		putimage(1040, 190, &image0t);
	}
}

char Man_or_Computer_input()
{
    
    
	char ret = '0';
	if (MouseHit())
	{
    
    
		MOUSEMSG mouse = GetMouseMsg();
		if (mouse.uMsg == WM_LBUTTONDOWN)
		{
    
    
			/**/ if (mouse.y > 0 && mouse.y < 450) ret = '1';
			else if (mouse.y > 450 && mouse.y < 800) ret = '2';
		}
	}
	return ret;
}

char difficulty_input()
{
    
    
	char ret = '0';
	if (MouseHit())
	{
    
    
		MOUSEMSG mouse = GetMouseMsg();
		if (mouse.uMsg == WM_LBUTTONDOWN)
		{
    
    
			/**/ if (mouse.y > 0 && mouse.y < 350) ret = '1';
			else if (mouse.y > 350 && mouse.y < 550) ret = '2';
			else if (mouse.y > 550 && mouse.y < 800) ret = '3';
		}
	}
	return ret;
}
/*
vector<char> to_char(unsigned n)
{
	char c[2] = {'0','0'};
	if (n > 9)
	{
		c[0] = n % 10 + 48;
		c[1] = n / 10 + 48;
	}
	return { c[0],c[1] };
}
*/
void total_result(unsigned com_win, unsigned man_win, unsigned draw)
{
    
    
	setbkcolor(RGB(253, 236, 166)); // set the background colour
	settextstyle(60, 30, _T("Times New Roman")); // set the sytle
	settextcolor(BLUE); // set the colour
	TCHAR s1[5], s2[5], s3[5], s4[5], s5[5], s6[5];
	swprintf_s(s1, _T("%d"), man_win);
	swprintf_s(s2, _T("%d"), com_win);
	swprintf_s(s3, _T("%d"), draw);
	swprintf_s(s4, _T("%d"), com_win);
	swprintf_s(s5, _T("%d"), man_win);
	swprintf_s(s6, _T("%d"), draw); // change into string first
	outtextxy(165, 340, s1);
	outtextxy(370, 340, s2);
	outtextxy(575, 340, s3);
	outtextxy(165, 565, s4);
	outtextxy(370, 565, s5);
	outtextxy(575, 565, s6); // print
}

int main()
{
    
    
	init1();
	char play_again('1');
	unsigned com_win = 0, man_win = 0, draw = 0;
	char Man_or_Computer = '0';
	loadimage(0, _T("Choice1.jpg"), 1200, 800);
	while (Man_or_Computer == '0')
	{
    
    
		Man_or_Computer = Man_or_Computer_input();
	}
	while (play_again == '1')
	{
    
    
		char difficulty = '0'; // default setup
		if (Man_or_Computer == '2') // for Man VS Computer
		{
    
    
			loadimage(0, _T("Choice2.jpg"), 1200, 800);
			while (difficulty == '0')
			{
    
    
				difficulty = difficulty_input();
			}
			loadimage(0, _T("Choice3.jpg"), 1200, 800);
			char You_or_Computer = '0';
			while (You_or_Computer == '0')
			{
    
    
				You_or_Computer = Man_or_Computer_input();
			}
			if (You_or_Computer == '1')
				computer_player = '0';
			else computer_player = 'X';
		}
		init2();
		while (win_lose(point_now, step_count) == 0)
		{
    
    
			string location;
			unsigned location_letter = 0; // A/B/C
			unsigned location_number = 0; // 1/2/3
			tip(player);
			if(Man_or_Computer == '1')
			    location = man_input();
			else
			{
    
    
				if (player == computer_player)
				{
    
    
					if (difficulty == '1') location = computer1(point_now);
					else if (difficulty == '2') location = computer2(point_now);
					else location = computer3(point_now);
				}
				else location = man_input();
			}
			chess(location, player); // print the chess
			switch (location[0])
			{
    
    
			case 'A':
				location_letter = 0;
				break;
			case 'B':
				location_letter = 1;
				break;
			case 'C':
				location_letter = 2;
				break;
			default:
				break;
			}

			switch (location[1])
			{
    
    
			case '1':
				location_number = 0;
				break;
			case '2':
				location_number = 1;
				break;
			case '3':
				location_number = 2;
				break;
			default:
				break;
			}
			point_now[location_letter][location_number] = player;

			game_player_change(player); // change the player
			++step_count; // count one more time
		}

		int final_result = win_lose(point_now, step_count);
		char winner = 'N';
		switch (final_result)
		{
    
    
		case 1:
			loadimage(&imageXw, _T("Xw.jpg"), 390, 500);
			putimage(780, 100, &imageXw);
			winner = 'X';
			break;
		case 2:
			loadimage(&image0w, _T("0w.jpg"), 390, 500);
			putimage(780, 100, &image0w);
			winner = '0';
			break;
		case 3:
			loadimage(&imageD, _T("D.jpg"), 390, 500);
			putimage(780, 100, &imageD);
			++draw; // draw count
			break;
		}
		if (Man_or_Computer == '2')
		{
    
    
			if (winner == computer_player)
				++com_win;
			else if (winner != 'N')
				++man_win;
			Sleep(5000); //wait for a moment 
 		    loadimage(0, _T("Choice4.jpg"), 1200, 800);
		    total_result(com_win, man_win, draw);
		    play_again = '0';
		    while (play_again == '0')
		    {
    
    
                play_again = Man_or_Computer_input();
		    }
        }
		else
		{
    
    
			Sleep(5000); //wait for a moment 
			loadimage(0, _T("Choice5.jpg"), 1200, 800);
			play_again = '0';
			while (play_again == '0')
			{
    
    
				play_again = Man_or_Computer_input();
			}
		}
		point_now = {
    
     {
    
     ' ', ' ', ' '},{
    
    ' ', ' ', ' '},{
    
     ' ', ' ', ' '} }; // empyt the board
		player = 'X';
		computer_player = 'X';
		step_count = 0;
	}
	getchar();
	return 0;
}

//Copyright :2020 Teddy van Jerry

输出示例

1
2
以下:Man VS Man
3
4
5
以下是Man VS Computer:
6
7

素材

【C++ 程序】 井字棋游戏(人 VS 人)(Easy-X 图形界面)之外还有以下素材:(Choice1.jpg 到 Choice5.jpg)
1

2
3

4
5

分析

  • 首先,应该建立游戏的逻辑,详见【C++ 程序】 井字棋游戏(人 VS Lv3电脑)(战绩统计版)
  • 其次,最重要的,是下载EasyX。这个百度上搜一下即可。
    安装
    之后有安装提示可以下载。或者直接点击 https://docs.easyx.cn/en-us/intro
    在这里插入图片描述
  • 然后记得要重启一次 Visual Studio 才有效。
  • 然后加入 graphics.h的头文件。
  • 具体使用可在上面提供的介绍网站上找到。
  • 由于我对 EasyX 不是很了解,所以画表格什么全是在 3D Paint 中完成。
    1
    2
  • 关于328行背景颜色也是在 3D Paint 中找到的:
    3
  • 482行防闪屏。
  • 输出数字我搞了好久没成功(注释掉的to_char()函数就是之前的尝试),后来发现网站上说的很清楚:
    1
    编译有错误,按照要求修改即可。
    2
  • 提醒:进行鼠标操作的函数应该嵌套在一个while中,否则会认为没有输入跳一下就没了。

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


See also

【C++ 程序】 井字棋游戏(人 VS 人)
【C++ 程序】 井字棋游戏(人 VS Lv1电脑)
【C++ 程序】 井字棋游戏(人 VS Lv2电脑)
【C++ 程序】 井字棋游戏(人 VS Lv3电脑)
【C++ 程序】 井字棋游戏(人 VS Lv3电脑)(战绩统计版)
【C++ 程序】 五子棋游戏(人 VS 人)
【C++ 程序】 五子棋游戏(人 VS Lv1电脑)(思路及框架,内容待填充)
【C++ 程序】 随机数
【C++ 程序】 移动迷宫游戏
【C++ 程序】 贪吃蛇游戏
【C++ 程序】 数字推盘游戏(15-puzzle)
【C++ 程序】 2048游戏
【C++ 程序】 井字棋游戏(人 VS 人)(EasyX 图形界面)

猜你喜欢

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