Exemplo n.º 1
0
int main (){
	printf("Start game\n");
	initBoard();			/*ボードの初期化*/
	showBoard();			/*ボードの表示*/
	initStone();			/*石の初期化*/
	initPlayer();			/*プレーヤーの初期化*/

	cont = 1;				/*継続判定の初期化*/
	judge = 0;				/*勝ち判定初期化*/
	printf("\n");

	while (cont == 1){
		input();			/*マス目の選択受付*/
		showBoard();		
		checkWin();			/*勝ち判定*/
		if (judge == 1){
			break;			/*勝ち判定ありの場合、ループ脱出*/
		} else {
			check();		/*ゲーム継続可能性(空きマスがあるか)の判定*/
			changeStone();	
			changePlayer();
			printf("\n");
		}
	}

	printf("\n");
	dispWinner();			/*judgeの値により勝者表示OR引分宣言*/

		return 0;

}
Exemplo n.º 2
0
KJumpingCube::KJumpingCube()
  : view(new KCubeBoxWidget(5, this, "KCubeBoxWidget"))
{
   connect(view,SIGNAL(playerChanged(int)),SLOT(changePlayer(int)));
   connect(view,SIGNAL(stoppedMoving()),SLOT(disableStop()));
   connect(view,SIGNAL(stoppedThinking()),SLOT(disableStop()));
   connect(view,SIGNAL(startedMoving()),SLOT(enableStop_Moving()));
   connect(view,SIGNAL(startedThinking()),SLOT(enableStop_Thinking()));
   connect(view,SIGNAL(playerWon(int)),SLOT(showWinner(int)));

   // tell the KMainWindow that this is indeed the main widget
   setCentralWidget(view);

   // init statusbar
   QString s = i18n("Current player:");
   statusBar()->insertItem(s,ID_STATUS_TURN_TEXT, false);
   statusBar()->changeItem(s,ID_STATUS_TURN_TEXT);
   statusBar()->setItemAlignment (ID_STATUS_TURN_TEXT, AlignLeft | AlignVCenter);
   statusBar()->setFixedHeight( statusBar()->sizeHint().height() );
 
   currentPlayer = new QWidget(this, "currentPlayer");
   currentPlayer->setFixedWidth(40);
   statusBar()->addWidget(currentPlayer, ID_STATUS_TURN, false);
   statusBar()->setItemAlignment(ID_STATUS_TURN, AlignLeft | AlignVCenter);

   initKAction();
   changePlayer(1);
}
Exemplo n.º 3
0
void Reversi::newGame(){
	map = new Map(FIELD_SIZE);

	gameOver = false;
	gameStatus = WHITE_PLAYER_TURN; // Turn zero
	refreshField();
	changePlayer(0); // Change player to turn one
}
Exemplo n.º 4
0
void CheckerBoardWidget::receiveCheckerboard(checkerboard c)
{
    board = c;
    clearLists();
    //this->clear();
    changePlayer();
    placeCheckers();
}
Exemplo n.º 5
0
void Dialog::onTimerOut() {
    if (map->curPlayer == player) {
        ++myTotalTime;
        QString myDisplayTime = "";
        if (myTotalTime / 60 < 10) {
            myDisplayTime += "0" + QString::number(myTotalTime / 60);
        }else {
            myDisplayTime += QString::number(myTotalTime / 60);
        }
        myDisplayTime += ":";
        if (myTotalTime % 60 < 10) {
            myDisplayTime += "0" + QString::number(myTotalTime % 60);
        }else {
            myDisplayTime += QString::number(myTotalTime % 60);
        }
        myTotalTimeLCD->display(myDisplayTime);
        if (--mySingleTime == 0) {
            mySingleTimeLCD->display(0);
            changePlayer();
            return;
        }
        mySingleTimeLCD->display(mySingleTime);
    }else {
        ++opTotalTime;
        QString opDisplayTime = "";
        if (opTotalTime / 60 < 10) {
            opDisplayTime += "0" + QString::number(opTotalTime / 60);
        }else {
            opDisplayTime += QString::number(opTotalTime / 60);
        }
        opDisplayTime += ":";
        if (opTotalTime % 60 < 10) {
            opDisplayTime += "0" + QString::number(opTotalTime % 60);
        }else {
            opDisplayTime += QString::number(opTotalTime % 60);
        }
        opTotalTimeLCD->display(opDisplayTime);
        if (--opSingleTime == 0) {
            opSingleTimeLCD->display(0);
            changePlayer();
            return;
        }
        opSingleTimeLCD->display(opSingleTime);
    }
}
Exemplo n.º 6
0
void Battlefield::game(RenderWindow &window){
    yourField->act_game(window);
    enemyField->act(window);

    shootField->setShooter(current_player);

    if (shootField->shoot())
        changePlayer();
    if (current_player->isLoose())
        game_over = true;
}
Exemplo n.º 7
0
int TicTacToeGame::playTurn() {
	
	if (playerTurn == CROSS) 
		crossPlayer->turn(&board);
	else 
		circlePlayer->turn(&board);

	changePlayer();
	
	return 0;
}
Exemplo n.º 8
0
void Reversi::cellClicked(int x, int y) {
	Lines lines(gameStatus, Point(x, y), map->fieldStatus, FIELD_SIZE);
	if (map->fieldStatus[x][y] == 0) {
		QList<Point> modifiedCells = lines.getActiveTiles();
		if ((modifiedCells.size() > 0)) {
			for (unint i = 0; i < modifiedCells.size(); i++) {
				map->fieldStatus[modifiedCells.at(i).x][modifiedCells.at(i).y] =
						gameStatus;
			}
			refreshField();
			changePlayer(0);
		}
	}
}
Exemplo n.º 9
0
void Position::applyMove(Square sq)
{
    place(sq, currentPlayer());

    for (int d = 0; d < TOT_DIR; ++d) {
        if (isValidMove(sq, DIR[d]))
            reverse(sq, DIR[d]);
    }

    ++count[currentPlayer()];
    nullMoveCount = 0;

    changePlayer();
}
Exemplo n.º 10
0
	void GameManager::preUpdate(unsigned long elapsed_millis)
	{
		if (_gameMode) {
			if(cg::KeyBuffer::instance()->isKeyDown('z') && !_changePlayerPressed) {
				changePlayer();
				_changePlayerPressed = true;
			}
			if (cg::KeyBuffer::instance()->isKeyUp('z') && _changePlayerPressed) {
				_changePlayerPressed = false;
			}

		}

		_fog->draw(); //this stupid hack shouldn't be needed! This class should draw all it's entities! 
	}
Exemplo n.º 11
0
void Dialog::putPoint(int x, int y) {
    map->arr[x][y] = player;
    withDrawTime = 0;
    withdrawButton->setEnabled(true);
    map->place.push_back(QPoint(x, y));
    changePlayer();
    /*if (map->curPlayer == Map::Black)
        map->curPlayer = Map::White;
    else
        map->curPlayer = Map::Black;*/
    update();
    
    if (gameLogic->checkWin()) {
        gameOver(1);
    }
}
Exemplo n.º 12
0
int main(void)
{
  int fini,x,y;
  fini=0;
  
  initPlayer();
  createBoard();
  while(!fini)
    {
      displayBoard();
      if(getPlayer()==CROSS)
        {
          printf("Cross to play\n");
        }
      else
        {
          printf("Circle to play\n");
        }
      printf("column?: ");
      scanf("%d",&x);
      printf("line?: ");
      scanf("%d",&y);
      if(putPiece(x,y,getPlayer())==0)
        {
          fini=checkGameStatus();
          if(!fini)
            {
              changePlayer();
            }
        }else
        {
          printf("you can't play here!\n");
        }
    }
  displayBoard();
  if(getPlayer()==CROSS)
    {
      printf("Cross won \\o/\n");
    }
  else
    {
      printf("Circle won \\o/\n");
    }
}
Exemplo n.º 13
0
void Game::run() {
	isStarted = true;

	while (window.isOpen()) {
		sf::Event event;

		while (window.pollEvent(event)) {
			if (event.type == sf::Event::Closed) {
				window.close();
			}

			if (!isFinished) {
				if (event.type == sf::Event::MouseButtonReleased) {
					if (event.mouseButton.button == sf::Mouse::Left) {
						bool click = mGrid.onClickListener(
								sf::Vector2f(event.mouseButton.x,
										event.mouseButton.y),
								mPlayers[mCurrentPlayer]);

						if (click) {
							changePlayer();
						}

						if (mGrid.hasWinner()) {
							if (!mGrid.isDraw()) {
								printf("WINNER: %s\n",
										mGrid.getWinner()->getName().c_str());
							} else {
								printf("DRAW!\n");
							}

							isFinished= true;
						}
					}
				}
			}
		}

		window.clear(sf::Color(0xFF, 0xFF, 0xFF));
		window.draw(mGrid);
		window.display();
	}
}
Exemplo n.º 14
0
void CheckerBoardWidget::move()
{
    movement m;
    m.startPoint.line = firstClick.y();
    m.startPoint.column = firstClick.x();
    m.endPoint.line = secondClick.y();
    m.endPoint.column = secondClick.x();

    qDebug() << "[Move] ";
    qDebug() << "[MOVEMENT] : start (" << m.startPoint.line << ", " << m.startPoint.column << ")";
    qDebug() << "[MOVEMENT] : end (" << m.endPoint.line << ", " << m.endPoint.column << ")";


    if(test_and_execute_movement(player_color, m, &board) != 0) {
        //Valid movement, do it for gui
        qDebug() << "movement is ok";

        promote_checkers(&board, player_color);   //Check if daughter is made

        clearLists();   // Clear all the gui gameboard

        placeCheckers(); // Reconstruct the new GUI gameboard

        //Check if there is a winner
        if(game_ended(&board) == BLACK_CHECKER) {
            _player.color == BLACK_CHECKER ? emit sendWinner(_player) : emit sendWinner(_opponent_player);
        }
        if(game_ended(&board) == WHITE_CHECKER) {
            _player.color == WHITE_CHECKER ? emit sendWinner(_opponent_player) : emit sendWinner(_player);
        }


        preventAction(player_color);
        changePlayer();

//        qDebug() << "ppppppppppppppppppppppppppppppp" << (char *) board;
        emit sendCheckerboard(board);
    }
}
Exemplo n.º 15
0
void Dialog::calcRead() {
    /*if (opAvatarPixmap.isNull()) {
        opAvatarPixmap.loadFromData(readWriteSocket->readAll());
        sendUsername();
        return;
    }*/
    QString info;
    info = readWriteSocket->readAll();
    qDebug() << "calcRead " << info;
    if (opUserName == "") {
        QStringList infoList2 = info.split("@");
        opAvatarFileName = infoList2[0];
        opUserName = infoList2[1];
        opAvatarPixmap.load(opAvatarFileName);
        qDebug() << opAvatarFileName + " " + opUserName;
        prepareGameWidget();
        return;
    }
    if (info == "start") {
        isOpBegin = true;
        if (isMeBegin) {
            isGameBegin = true;
            connect(timer, SIGNAL(timeout()), this, SLOT(onTimerOut()));
            update();
            timer->start();
        }
        return;
    }
    if (info == "requestQuit") {
        timer->stop();
        QMessageBox::StandardButton b1 = QMessageBox::question(NULL, "Request", "对方请求退出游戏");
        if (b1 == QMessageBox::Yes) {
            timer->start();
            sendMessage("agreeQuit");
            InitialGame();
            //this->close();
        }else {
            timer->start();
            sendMessage("disagreeQuit");
        }
        return;
    }
    if (info == "agreeQuit") {
        timer->start();
        InitialGame();
        //this->close();
        return;
    }
    if (info == "disagreeQuit") {
        timer->start();
        QMessageBox::about(NULL, "Result", "对方不同意退出游戏");
        return;
    }
    if (info == "requestSave") {
        timer->stop();
        QMessageBox::StandardButton b2 = QMessageBox::question(NULL, "Request", "对方请求保存残局");
        if (b2 == QMessageBox::Yes) {
            timer->start();
            QTime time = QTime::currentTime();
            map->save(QString::number(time.hour()) + "_" + QString::number(time.minute()) + ".txt");
            sendMessage("agreeSave");
        }else {
            timer->start();
            sendMessage("disagreeSave");
        }
        return;
    }
    if (info == "agreeSave") {
        timer->start();
        QTime time = QTime::currentTime();
        map->save(QString::number(time.hour()) + "_" + QString::number(time.minute()) + ".txt");
        return;
    }
    if (info == "disagreeSave") {
        timer->start();
        QMessageBox::about(NULL, "Result", "对方不同意保存残局");
        return;
    }
    if (info.contains("requestLoad")) {
        timer->stop();
        QStringList list1 = info.split("#");
        QMessageBox::StandardButton b3 = QMessageBox::question(NULL, "Request", "对方请求加载残局" + list1[(int)list1.size() - 1]);
        if (b3 == QMessageBox::Yes) {
            timer->start();
            map->load(list1[(int)list1.size() - 1]);
            update();
            sendMessage("agreeLoad#" + list1[(int)list1.size() - 1]);
        }else {
            timer->start();
            sendMessage("disagreeLoad");
        }
        return;
    }
    if (info == "disagreeLoad") {
        timer->start();
        QMessageBox::about(NULL, "Result", "对方不同意加载残局");
        return;
    }
    if (info.contains("agreeLoad")) {
        timer->start();
        QStringList list2 = info.split("#");
        map->load(list2[(int)list2.size() - 1]);
        update();
        return;
    }
    if (info == "requestWithdraw") {
        timer->stop();
        QMessageBox::StandardButton b4 = QMessageBox::question(NULL, "Request", "对方请求悔棋");
        if (b4 == QMessageBox::Yes) {
            timer->start();
            sendMessage("agreeWithdraw");
            map->pop(player ^ 1);
            renewTime();
        }else {
            timer->start();
            sendMessage("disagreeWithdraw");
        }
        return;
    }
    if (info == "agreeWithdraw") {
        timer->start();
        ++withDrawTime;
        if (withDrawTime >= 2) {
            withdrawButton->setDisabled(true);
        }
        map->pop(player);
        if (checkNoMyChess()) {
            withdrawButton->setDisabled(true);
        }
        renewTime();
        return;
    }
    if (info == "disagreeWithdraw") {
        timer->start();
        QMessageBox::about(NULL, "Result", "对方不同意悔棋");
        return;
    }
    QStringList infoList = info.split("_");
    int x = infoList[0].toInt();
    int y = infoList[1].toInt();
    map->arr[x][y] = player ^ 1;
    map->place.push_back(QPoint(x, y));
    
    changePlayer();
    /*if (map->curPlayer == Map::Black)
        map->curPlayer = Map::White;
    else
        map->curPlayer = Map::Black;*/
    update();
    
    if (gameLogic->checkWin()) {
        gameOver(0);
    }
}
Exemplo n.º 16
0
void Position::applyNullMove()
{
    ++nullMoveCount;

    changePlayer();
}
Exemplo n.º 17
0
void Reversi::changePlayer(int skippedTurns) {
	// Change player turn
	switch (gameStatus *= -1) {
	case WHITE_PLAYER_TURN:
	{
		QString result1 = QString("White player\'s turn");
		result1.append(gameScore);
		main->setStatusBar(&result1);
		break;
	}
	case BLACK_PLAYER_TURN:
	{
		QString result2 = QString("Black player\'s turn");
		result2.append(gameScore);
		main->setStatusBar(&result2);
		break;
	}
	}
	if (checkForLegalTurns() && skippedTurns < 1) {
		changePlayer(1);
	} else if (checkForLegalTurns() && skippedTurns > 0) {
		QString result3 = QString("Game over");
		result3.append(gameScore);
		main->setStatusBar(&result3);
		skippedTurns++;
	}
	// Counts the amount of time this function was called
	switch (skippedTurns) {
	case 1:{
		QMessageBox msgBox1;
			switch(gameStatus*(-1)){
				case WHITE_PLAYER_TURN:
					msgBox1.setText("White player skips a turn");
					break;
				case BLACK_PLAYER_TURN:
					msgBox1.setText("Black player skips a turn");
					break;
			}
		    msgBox1.exec();
		return;
	}
	case 2:{
			QMessageBox msgBox2;
				msgBox2.setText("White player wins");
			if((map->blackChipCount-map->whiteChipCount)< 0){
			}
			else if((map->blackChipCount-map->whiteChipCount)>0){
				msgBox2.setText("Black player wins");
			}
			else {
				msgBox2.setText("Its a draw");
			}

		    msgBox2.setInformativeText(*gameScore);
		    msgBox2.exec();
		    gameOver = true;
		    return;
		}
	}

	if(playWithAi && gameStatus==WHITE_PLAYER_TURN && !gameOver){
		AI *bot = new AI(gameStatus);
		bot->makeTurn(map);
		refreshField();
		changePlayer(0);
	}
}