實戰小項目_三子棋小遊戲

#include <iostream>
#include <vector>
#include <time.h>
#include <stdlib.h>
using namespace std;
/*
三子棋小遊戲簡介:
	1. Menu() 菜單欄
	2. ChessboardPrint() 打印棋盤
	3. UsersChess() 用戶下棋
	4. ComputerChess() 計算機下棋
	5. Judge() 判定結果
*/

class Chess {
public:
	Chess()
		: _Chessboard(vector<vector<char>>(3, vector<char>(3, ' ')))
		, _Map(vector<vector<bool>>(3, vector<bool>(3, false)))
	{}
	~Chess(){}
	//返回 false 代表結束遊戲,返回 true 代表 開始新遊戲
	bool Menu() {
		cout << "------------------------------" << endl;
		cout << "-- 1:開始一盤新的遊戲      --" << endl;
		cout << "-- 2:結束遊戲              --" << endl;
		cout << "------------------------------" << endl;
		int btn = 0;
		while (1) {
			cin >> btn;
			if (btn == 1)
				return true;
			else if (btn == 2)
				return false;
			else
				cout << "重新輸入:";
		}
	}
	void ChessboardPrint() {
		for (int i = 0; i < 3; ++i) {
			cout << "  " << _Chessboard[i][0] << " | " << _Chessboard[i][1] << " | " << _Chessboard[i][2] << endl;
			if (i != 2)
				cout << " -----------" << endl;
		}
	}
	void UsersChess() {
		cout << "請以(x, y)的格式輸入下棋的位置:";
		int x, y;
		while (1) {
			cin >> x >> y;
			if (x < 0 || x > 2 || y < 0 || y > 2) {
				cout << "請重新輸入:";
				continue;
			} else {
				if (_Map[x][y] == true) {
					cout << "請重新輸入:";
					continue;
				} else {
					_Chessboard[x][y] = '*';
					_Map[x][y] = true;
					break;
				}
			}
		}
	}
	void ComputerChess() {
		srand((unsigned int)time(0));
		while (1) {
			int x = rand() % 3;
			int y = rand() % 3;
			if (_Map[x][y] == true) {
				continue;
			}
			else {
				_Chessboard[x][y] = '+';
				_Map[x][y] = true;
				break;
			}
		}
	}
	bool Judge() {
		char judge = ' ';
		for (int i = 0; i < 3; ++i) {
			if (_Chessboard[i][0] == _Chessboard[i][1] && _Chessboard[i][0] == _Chessboard[i][2]) {
				judge = _Chessboard[i][0];
				break;
			}
			else if (_Chessboard[0][i] == _Chessboard[1][i] && _Chessboard[0][i] == _Chessboard[2][i]) {
				judge = _Chessboard[0][i];
				break;
			}
			else if (_Chessboard[0][0] == _Chessboard[1][1] && _Chessboard[1][1] == _Chessboard[2][2]) {
				judge = _Chessboard[1][1];
				break;
			}
			else if (_Chessboard[0][2] == _Chessboard[1][1] && _Chessboard[1][1] == _Chessboard[2][0]) {
				judge = _Chessboard[1][1];
				break;
			}
		}
		if (judge == ' ')
			return false;
		else if (judge == '*') {
			system("cls");
			ChessboardPrint();
			cout << "玩家勝利~~" << endl;
			return true;
		}
		else {
			system("cls");
			ChessboardPrint();
			cout << "電腦勝利~~" << endl;
			true;
		}
		//沒用,只是爲了消除警告
		return false;
	}
private:
	vector<vector<char>> _Chessboard;
	vector<vector<bool>> _Map;
};
int main() {
	Chess chess;
	chess.Menu();
	chess.ChessboardPrint();
	while (1) {
		chess.UsersChess();
		if (chess.Judge()) {
			break;
		}
		chess.ComputerChess();
		if (chess.Judge()) {
			break;
		}
		system("cls");
		chess.ChessboardPrint();
	}

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章