[Programme C ++] Jeu de Gobang (humain VS humain)

Après avoir écrit le jeu Tic-Tac-Toe (voir aussi à la fin de l'article), je me suis soudainement intéressé à ce genre de petit programme, j'ai donc écrit le petit programme de Gobang.

programme

//This program is a simple gobang game.

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

char player = 'X';
unsigned step_count = 0;
vector<vector<char>> p_n; // struct an undefined board;

void def_empty_board(vector<vector<char>>& p) // define an empty 15X15 board
{
    
    
    vector<char> p_n_temp;
	for (size_t i = 0; i != 15; i++) p_n_temp.push_back(' '); // the inner vector
	for (size_t i = 0; i != 15; i++) p.push_back(p_n_temp);   // the outer vector(i.e. the board)
}

void print_board(vector<vector<char>> p)
{
    
    
	char ch_15[15];
	for (size_t i = 0; i != 15; i++) ch_15[i] = 65 + i; // A-O ~ 65-79 (according to ASCII)
	cout << "| |0|0|0|0|0|0|0|0|0|1|1|1|1|1|1|" << endl;
	cout << "| |1|2|3|4|5|6|7|8|9|0|1|2|3|4|5|" << endl;
	for (size_t i = 0; i != 15; i++) // print 15 lines from A to O
	{
    
    
		cout << '|' << ch_15[i] << '|';
		for (size_t j = 0; j != 15; j++)
			cout << p[i][j] << '|';
		cout << endl;
	}
	cout << endl;
}

int change_board(vector<vector<char>>& p, string l)
{
    
    
	size_t location_letter, location_number;
	if (l.size() == 2)
	{
    
    
		if (toupper(l[0]) >= 65 && l[1] >= 48)
		{
    
    
			location_letter = toupper(l[0]) - 65; // row
			location_number = l[1] - 48 - 1;      // column
			if (location_letter > 14 || location_number > 9) return -1; // PASS
		}
		else return -1; // no change is made, i.e. PASS
	}
	else if (l.size() == 3)
		if (toupper(l[0]) >= 65 && l[1] >= 48 && l[2] >= 48)
		{
    
    
			location_letter = toupper(l[0]) - 65;                 // row
			location_number = 10 * (l[1] - 48) + (l[2] - 48) - 1; // column
			if (location_letter > 14 || location_number > 14) return -1; // PASS
		}
		else return -1; // no change is made, i.e. PASS
	else return -1;     // no change is made, i.e. PASS
	if (p[location_letter][location_number] == ' ')
	{
    
    
		p[location_letter][location_number] = player; // change the board
		return 0; // indicate success
	}
	else return -1; // no change is made, i.e. PASS
}

int win_lose(vector<vector<char>> p,int n)
{
    
    
	char c = 'X';
	for (int k = 1; k != 3; k++) // k = 1(check 'X') ; k = 2(check '0')
	{
    
    
		for (size_t i = 0; i <= 14; i++)
		{
    
    
			for (size_t j = 0; j <= 10; j++)
			{
    
    
				if (p[i][j] == c && p[i][j + 1] == c && p[i][j + 2] == c && p[i][j + 3] == c && p[i][j + 4] == c) // five in a row
					return k;
			}
		}
		for (size_t i = 0; i <= 10; i++)
		{
    
    
			for (size_t j = 0; j <= 14; j++)
			{
    
    
				if (p[i][j] == c && p[i + 1][j] == c && p[i + 2][j] == c && p[i + 3][j] == c && p[i + 4][j] == c) // five in a column
					return k;
			}
		}
		for (size_t i = 0; i <= 10; i++)
		{
    
    
			for (size_t j = 0; j <= 10; j++)
			{
    
    
				if (p[i][j] == c && p[i + 1][j + 1] == c && p[i + 2][j + 2] == c && p[i + 3][j + 3] == c && p[i + 4][j + 4] == c) // five in a diagonal1
					return k;
			}
		}
		for (size_t i = 0; i <= 10; i++)
		{
    
    
			for (size_t j = 4; j <= 14; j++)
			{
    
    
				if (p[i][j] == c && p[i + 1][j - 1] == c && p[i + 2][j - 2] == c && p[i + 3][j - 3] == c && p[i + 4][j - 4] == c) // five in a diagonal2
					return k;
			}
        }
		c = '0'; // Then test player '0'.
		// 'return 1' indicates 'X' wins while 'return 2' indicates '0' wins.	
	}
	if (n == 225) return 3; // the board if full and no win, end 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
}

int main(int argc, char* argv[])
{
    
    
	string location;
	cout << "This program is a simple gobang game.\nProgrammer:Teddy van Jerry\n" << endl;
	cout << "If your input is illegal, we define it as you choose to PASS.(Or you can type in Pass to pass)" << endl;
	cout << "You can type in the location like 'B2' or 'B02', and no whitespace is allowed.\n" << endl; // a reminder
	def_empty_board(p_n);
	print_board(p_n);
	while (win_lose(p_n,step_count) == 0) // while the game is unfinished
	{
    
    
		cout << "Player " << player << ", make your move: ";
		cin >> location;
		if (change_board(p_n, location) == 0) // change the board and test whether it's a PASS
		{
    
    
			cout << endl;
			print_board(p_n);
			++step_count; // count one more time
		}
		else cout << "Player " << player << " choose PASS.\n" << endl;
		game_player_change(player);
	}
	switch (win_lose(p_n,step_count))
	{
    
    
	case 1:
		cout << "Congratulations! The winner is X." << endl;
		break;
	case 2:
		cout << "Congratulations! The winner is 0." << endl;
		break;
	case 3:
		cout << "The game ended in a draw." << endl;
	default:
		break;
	}
	cout << "\nALL RIGHTS RESERVED (c) 2020 Teddy van Jerry" << endl;
	return 0;
}

//Copyright :2020 Teddy van Jerry

Exemple de sortie

Production

La description

  • Le programme a jugé une entrée illégale et l'a définie comme une réussite.
  • Il s'agit toujours d'une interface DOS et la programmation visuelle a échoué pendant plus de cinq heures. Défiez à nouveau plus tard.
  • De plus, je pensais faire une bataille homme-machine, et l'idée était là, mais le programme était trop long et avorté. Gardez simplement une trace de vos idées. Voir mon blog pour des idées [Programme C ++] Jeu Tic-Tac-Toe (Human VS Lv1 Computer) (Réflexion et cadre, contenu à remplir) .

TOUS DROITS RÉSERVÉS © 2020 Teddy van Jerry
Bienvenue à réimprimer, veuillez indiquer la source.


Voir également

Page de navigation de Teddy van Jerry
[Programme C ++] Jeu Tic-Tac-Toe (Humain VS Humain)
[Programme C ++] Jeu Tic-Tac-Toe (Ordinateur humain VS Lv1)
[Programme C ++] Jeu Tic-Tac-Toe (Ordinateur humain VS Lv2)
[Programme C ++ 】 Jeu Tic-Tac-Toe (Ordinateur humain VS Lv3)
[Programme C ++] Jeu Tic-Tac-Toe (Ordinateur humain VS Lv3) (Version statistique)
[Programme C ++] Nombre aléatoire
[Programme C ++] Jeu de labyrinthe mobile
[Programme C ++] Serpent Jeu
[Programme C ++] Jeu Digital Push (15 puzzles)
[Programme C ++] Jeu 2048
[ Programme C ++] Jeu Tic-Tac-Toe (Human VS Human) (Interface graphique EasyX)
[Programme C ++] Jeu Tic-Tac-Toe (Human VS Lv3) Ordinateur) (Record Statistics Edition) (EasyX Graphical Interface)

Je suppose que tu aimes

Origine blog.csdn.net/weixin_50012998/article/details/108359648
conseillé
Classement