Beispiel #1
0
int main(int argn, const char **argv) {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
    Config conf{argn, argv};
    try {
        //conf.addMandatory({"test"}); // add mandatory stuff
    } catch (Config::ParameterMissing m) {
        std::cout << "Syntax error in command call, missing mandatory parameter: " << m.name << std::endl;
        return RunningStatus::BadSyntax;
    }
    if (conf.helpRequested()) {
        std::cout << conf.desc << std::endl;
    }

    Board board;
    Player *players[2] = {nullptr, nullptr};
    allocate_players(players,conf.vm["player"].as<std::string>(), conf.vm["client"].as<std::string>());
    std::cout << board.toString() << std::endl;
    auto i=0;
    auto exitstatus = board.status();
    while(exitstatus==Board::Status::Ready) {
        int place = players[i]->play(board);
        try {
            board.play(place, players[i]->sign);
        } catch(Board::Exception &e) {
            std::cout << "Error playing " << place << " " << e.name() << std::endl;
            i = change_player(i);
        }
        std::cout << board.toString() << std::endl;
        // std::string data;
        // board.toProtoBuf().SerializeToString(&data); // using protobuf for deck transfer
        // std::cout << data << std::endl;
        exitstatus=board.status();
        i = change_player(i);
    }
    if(exitstatus==Board::Status::Full) {
        std::cout << "Board is full match game" << std::endl;
    } else if(exitstatus==Board::Status::Win) {
        auto tmp = change_player(i);
        std::cout << "Player " << players[tmp]->sign << " Win" << std::endl;
    }
    google::protobuf::ShutdownProtobufLibrary();
    if(players[0]!=nullptr)
        delete players[0];
    if(players[1]!=nullptr)
        delete players[1];
    return RunningStatus{};
}
Beispiel #2
0
inline void Connect4::remove_player(int i){
	v[--pointer[i]][i] = Empty;
	change_player();
}
Beispiel #3
0
bool Connect4::insert(int i){
	if(pointer[i]==7) return false;
	v[pointer[i]++][i] = current_player;
	change_player();
	return true;
}