void KBattleshipWindow::slotServerReplay() { KMessage *msg = new KMessage(KMessage::REPLAY); switch(KMessageBox::questionYesNo(this, i18n("Do you want to restart the game?"), QString::null, i18n("Restart"), i18n("Do Not Restart"))) { case KMessageBox::Yes: if (m_connection) { // the client could have closed while the user was thinking if he wanted to replay slotReplay(); slotStatusMsg(i18n("Please place your ships. Use the \"Shift\" key to place the ships vertically.")); slotSendMessage(msg); } else { delete msg; slotAbortNetworkGame(); } break; case KMessageBox::No: delete msg; slotAbortNetworkGame(); break; } }
void KBattleshipWindow::slotClientReplay() { KMessage *msg = new KMessage(KMessage::REPLAY); switch(KMessageBox::questionYesNo(this, i18n("Do you want to ask the server restarting the game?"), QString::null, i18n("Ask to Restart"), i18n("Do Not Ask"))) { case KMessageBox::Yes: if (m_connection) { // the server could have closed while the user was thinking if he wanted to replay slotReplay(); slotStatusMsg(i18n("Waiting for an answer...")); slotSendMessage(msg); } else { delete msg; slotAbortNetworkGame(); } break; case KMessageBox::No: delete msg; slotAbortNetworkGame(); break; } }
void KBattleshipWindow::slotSendVersion() { KMessage *msg = new KMessage(KMessage::GETVERSION); msg->versionMessage(); slotSendMessage(msg); QTimer::singleShot(150, this, SLOT(slotSendGreet())); }
void KBattleshipWindow::slotSendGreet() { m_serverHasClient = true; m_chat->slotAcceptMsg(true); KMessage *msg = new KMessage(KMessage::GREET); msg->addField(QString("nickname"), m_ownNickname); slotSendMessage(msg); }
void KBattleshipWindow::slotSendChatMessage(const QString &text) { if(m_connection != 0 && m_serverHasClient) { KMessage *msg = new KMessage(KMessage::CHAT); msg->chatMessage(m_ownNickname, text); slotSendMessage(msg); } }
int MyWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: slotReadyRead(); break; case 1: slotSendMessage(); break; default: ; } _id -= 2; } return _id; }
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { server = new QTcpServer(this); server->listen(QHostAddress::Any, 8900); connect(server, SIGNAL(newConnection()), this, SLOT(slotConnect())); edit1 = new QTextEdit(); edit2 = new QTextEdit(); button = new QPushButton("Send"); quit = new QPushButton("Quit"); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); #if 1 QVBoxLayout* rightLayout = new QVBoxLayout(); rightLayout->addWidget(button); rightLayout->addWidget(quit); QHBoxLayout* downLayout = new QHBoxLayout(); downLayout->addWidget(edit1, 10); downLayout->addLayout(rightLayout); QVBoxLayout* layout = new QVBoxLayout(); layout->addWidget(edit2, 1); layout->addLayout(downLayout); #endif #if 0 QVBoxLayout* layout = new QVBoxLayout(); layout->addWidget(edit2, 10); layout->addWidget(edit1, 1); layout->addWidget(button); layout->addWidget(quit); #endif setLayout(layout); setWindowTitle(tr("Dialog")); //setFixedHeight(sizeHint().height()); connect(button, SIGNAL(clicked()), this, SLOT(slotSendMessage())); }
void KBattleshipWindow::slotShipsReady() { if(m_aiPlaying) { slotStatusMsg(i18n("Waiting for computer player to start the match...")); m_placeable = false; m_aiPlayer->slotRequestShot(); return; } KMessage *msg = new KMessage(KMessage::SHIPSREADY); slotSendMessage(msg); if(m_connection->type() == KonnectionHandling::SERVER) slotStatusMsg(i18n("Waiting for other player to place their ships...")); else slotStatusMsg(i18n("Waiting for other player to start the match...")); m_placeable = false; }
int CFrmUserList::InitMenu() { bool check = true; m_Menu.setTitle(tr("Operator roster(&O)")); m_Menu.setIcon(QIcon(":/icon/Operate")); check = connect(&m_Menu, SIGNAL(aboutToShow()), SLOT(slotUpdateMenu())); Q_ASSERT(check); //菜单设置 m_pMenuAction = NULL; m_Menu.addAction(ui->actionSendMessage); check = connect(ui->actionSendMessage, SIGNAL(triggered()), SLOT(slotSendMessage())); Q_ASSERT(check); m_Menu.addAction(ui->actionSendFile); check = connect(ui->actionSendFile, SIGNAL(triggered()), SLOT(slotSendFile())); Q_ASSERT(check); m_Menu.addAction(ui->actionVideo); check = connect(ui->actionVideo, SIGNAL(triggered()), SLOT(slotCallVideo())); Q_ASSERT(check); m_Menu.addAction(ui->actionAudio); check = connect(ui->actionAudio, SIGNAL(triggered()), SLOT(slotCallAudio())); Q_ASSERT(check); m_Menu.addAction(ui->actionAllowMonitor); ui->actionAllowMonitor->setCheckable(true); check = connect(ui->actionAllowMonitor, SIGNAL(triggered()), SLOT(slotMonitor())); Q_ASSERT(check); //TODO:1.新增菜单,总共三步 m_Menu.addSeparator(); m_Menu.addAction(ui->actionAddRoster_A); check = connect(ui->actionAddRoster_A, SIGNAL(triggered()), SLOT(slotAddRoster())); Q_ASSERT(check); m_Menu.addAction(ui->actionRename); check = connect(ui->actionRename, SIGNAL(triggered()), SLOT(slotRenameRoster())); Q_ASSERT(check); m_Menu.addAction(ui->actionMove_roster); check = connect(ui->actionMove_roster, SIGNAL(triggered()), SLOT(slotMoveRoster())); Q_ASSERT(check); m_Menu.addAction(ui->actionRemoveRoster_R); check = connect(ui->actionRemoveRoster_R, SIGNAL(triggered()), SLOT(slotRemoveRoster())); Q_ASSERT(check); m_Menu.addAction(ui->actionAgreeAddRoster); check = connect(ui->actionAgreeAddRoster, SIGNAL(triggered()), SLOT(slotAgreeAddRoster())); Q_ASSERT(check); m_Menu.addAction(ui->actionInformation_I); check = connect(ui->actionInformation_I, SIGNAL(triggered()), SLOT(slotInformationRoster())); Q_ASSERT(check); m_Menu.addAction(ui->actionRemove_Group); check = connect(ui->actionRemove_Group, SIGNAL(triggered()), SLOT(slotRemoveGroup())); Q_ASSERT(check); return 0; }
void KBattleshipWindow::slotReceivedEnemyFieldData(int fieldx, int fieldy, int enemystate, int xstart, int xstop, int ystart, int ystop, bool death) { m_stat->setShot(); int showstate; if(enemystate == 99) { m_stat->setWater(); showstate = KBattleField::WATER; } else { m_stat->setHit(); showstate = KBattleField::HIT; } slotChangeEnemyFieldData(fieldx, fieldy, showstate); if(death) { if(xstart == xstop) { for(int i = ystart; i <= ystop; i++) { if (fieldx>0) m_view->changeEnemyFieldData(fieldx-1, i, KBattleField::BORDER); m_view->changeEnemyFieldData(fieldx, i, KBattleField::DEATH); if(fieldx<m_enemyshiplist->m_fieldx) m_view->changeEnemyFieldData(fieldx+1, i, KBattleField::BORDER); } if(ystart>0) { if (fieldx>0)m_view->changeEnemyFieldData(fieldx-1, ystart-1, KBattleField::BORDER); m_view->changeEnemyFieldData(fieldx, ystart-1, KBattleField::BORDER); if (fieldx<m_enemyshiplist->m_fieldx)m_view->changeEnemyFieldData(fieldx+1, ystart-1, KBattleField::BORDER); } if(ystop<m_enemyshiplist->m_fieldy) { if (fieldx>0)m_view->changeEnemyFieldData(fieldx-1, ystop+1, KBattleField::BORDER); m_view->changeEnemyFieldData(fieldx, ystop+1, KBattleField::BORDER); if (fieldx<m_enemyshiplist->m_fieldx)m_view->changeEnemyFieldData(fieldx+1, ystop+1, KBattleField::BORDER); } } else if(ystart == ystop) { for(int i = xstart; i <= xstop; i++) { if(fieldy+1 < m_enemyshiplist->m_fieldy) m_view->changeEnemyFieldData(i, fieldy+1, KBattleField::BORDER); m_view->changeEnemyFieldData(i, fieldy, KBattleField::DEATH); if(fieldy > 0) m_view->changeEnemyFieldData(i, fieldy-1, KBattleField::BORDER); } if(xstart > 0) { if (fieldy > 0) m_view->changeEnemyFieldData(xstart-1, fieldy-1, KBattleField::BORDER); m_view->changeEnemyFieldData(xstart-1, fieldy, KBattleField::BORDER); if (fieldy < m_enemyshiplist->m_fieldy) m_view->changeEnemyFieldData(xstart-1, fieldy+1, KBattleField::BORDER); } if(xstop < m_enemyshiplist->m_fieldx) { if (fieldy>0) m_view->changeEnemyFieldData(xstop+1, fieldy-1, KBattleField::BORDER); m_view->changeEnemyFieldData(xstop+1, fieldy, KBattleField::BORDER); if (fieldy < m_enemyshiplist->m_fieldy)m_view->changeEnemyFieldData(xstop+1,fieldy+1, KBattleField::BORDER); } } } if(m_stat->hit() != 10) slotStatusMsg(i18n("Waiting for enemy to shoot..")); else { KMessage *msg = m_view->getAliveShips(m_ownshiplist); // let's show ai player ships slotSendMessage(msg); slotStatusMsg(i18n("You won the game :)")); m_stat->slotAddOwnWon(); slotUpdateHighscore(); if(m_connection->type() == KonnectionHandling::SERVER) slotServerReplay(); else slotClientReplay(); } }
void KBattleshipWindow::slotEnemyFieldClick(int fieldx, int fieldy) { if(m_connection != 0 || m_aiPlaying) { if(!m_aiPlaying && m_connection == 0) return; if(!m_serverHasClient && m_connection != 0) return; if(!m_shootable) return; if(m_view->enemyFieldState(fieldx, fieldy) == KBattleField::FREE) { if(!m_aiPlaying && !m_lost) { slotStatusMsg(i18n("Sending Message...")); KMessage *msg = new KMessage(KMessage::SHOOT); msg->addField("fieldx", QString::number(fieldx)); msg->addField("fieldy", QString::number(fieldy)); slotSendMessage(msg); } if(m_stat->hit() != 10 && m_aiPlaying) { m_stat->setShot(); int showstate; if(m_enemyshiplist->shipTypeAt(fieldx, fieldy) == 99) { m_stat->setWater(); showstate = KBattleField::WATER; } else { m_stat->setHit(); showstate = KBattleField::HIT; } slotChangeEnemyFieldData(fieldx, fieldy, showstate); if(showstate == KBattleField::HIT) { KShip *ship = m_enemyshiplist->shipAt(fieldx, fieldy); typedef QValueList<int> DeathValueList; DeathValueList deathList; bool xokay = true, yokay = true; int tempy = 0, tempx = 0; if(ship->placedLeft()) { for(tempx = ship->shipxstart(); tempx <= ship->shipxstop(); tempx++) { if(m_view->enemyFieldState(tempx, fieldy) == KBattleField::HIT) { deathList.append(tempx); xokay = true; yokay = false; } else { xokay = false; yokay = false; break; } } } else { for(tempy = ship->shipystart(); tempy <= ship->shipystop(); tempy++) { if(m_view->enemyFieldState(fieldx, tempy) == KBattleField::HIT) { deathList.append(tempy); xokay = false; yokay = true; } else { xokay = false; yokay = false; break; } } } if(xokay) { DeathValueList::Iterator it; for(it = deathList.begin(); it != deathList.end(); ++it) { if(fieldy+1 < m_enemyshiplist->m_fieldy) m_view->changeEnemyFieldData(*it, fieldy+1, KBattleField::BORDER); m_view->changeEnemyFieldData(*it, fieldy, KBattleField::DEATH); if(fieldy > 0) m_view->changeEnemyFieldData(*it, fieldy-1, KBattleField::BORDER); } if(ship->shipxstart() > 0) { if (fieldy > 0) m_view->changeEnemyFieldData(ship->shipxstart()-1, fieldy-1, KBattleField::BORDER); m_view->changeEnemyFieldData(ship->shipxstart()-1, fieldy, KBattleField::BORDER); if (fieldy < m_enemyshiplist->m_fieldy) m_view->changeEnemyFieldData(ship->shipxstart()-1, fieldy+1, KBattleField::BORDER); } if(ship->shipxstop() < m_enemyshiplist->m_fieldx) { if (fieldy>0) m_view->changeEnemyFieldData(ship->shipxstop()+1, fieldy-1, KBattleField::BORDER); m_view->changeEnemyFieldData(ship->shipxstop()+1, fieldy, KBattleField::BORDER); if (fieldy < m_enemyshiplist->m_fieldy)m_view->changeEnemyFieldData(ship->shipxstop()+1,fieldy+1, KBattleField::BORDER); } } else if(yokay) { DeathValueList::Iterator it; for(it = deathList.begin(); it != deathList.end(); ++it) { if (fieldx>0) m_view->changeEnemyFieldData(fieldx-1, *it, KBattleField::BORDER); m_view->changeEnemyFieldData(fieldx, *it, KBattleField::DEATH); if(fieldx<m_enemyshiplist->m_fieldx) m_view->changeEnemyFieldData(fieldx+1, *it, KBattleField::BORDER); } if(ship->shipystart()>0) { if (fieldx>0)m_view->changeEnemyFieldData(fieldx-1, ship->shipystart()-1, KBattleField::BORDER); m_view->changeEnemyFieldData(fieldx, ship->shipystart()-1, KBattleField::BORDER); if (fieldx<m_enemyshiplist->m_fieldx)m_view->changeEnemyFieldData(fieldx+1, ship->shipystart()-1, KBattleField::BORDER); } if(ship->shipystop()<m_enemyshiplist->m_fieldy) { if (fieldx>0)m_view->changeEnemyFieldData(fieldx-1, ship->shipystop()+1, KBattleField::BORDER); m_view->changeEnemyFieldData(fieldx, ship->shipystop()+1, KBattleField::BORDER); if (fieldx<m_enemyshiplist->m_fieldx)m_view->changeEnemyFieldData(fieldx+1, ship->shipystop()+1, KBattleField::BORDER); } } } } if(m_stat->hit() == 10 && m_aiPlaying) { m_aiPlaying = false; m_shootable = false; slotChangeOwnPlayer("-"); slotChangeEnemyPlayer("-"); m_gameSingle->setText(i18n("S&ingle Player")); m_gameNewServer->setEnabled(true); m_gameServerConnect->setEnabled(true); slotStatusMsg(i18n("You won the game :)")); m_stat->slotAddOwnWon(); slotUpdateHighscore(); switch(KMessageBox::questionYesNo(this, i18n("Do you want to restart the game?"),QString::null,i18n("Restart"),i18n("Do Not Restart"))) { case KMessageBox::Yes: QTimer::singleShot(0, this, SLOT(slotRestartAI())); break; case KMessageBox::No: QTimer::singleShot(0, this, SLOT(slotDeleteAI())); break; } return; } else if(m_aiPlayer != 0 && m_aiPlaying) m_aiPlayer->slotRequestShot(); } } }
/** popup menu */ void MainWindows::slotPopupMenu( const QPoint & point ) { currentPopupMenuItem = treeWidget->itemAt ( point ); // if object is dead if (!QTreeWidgetItemList.contains(currentPopupMenuItem)) return; if( currentPopupMenuItem ) { // create popup menu menuPopup->clear(); if (currentPopupMenuItem==item_server) // if a server item { menuPopup->addAction ( tr( "Properties"),this,SLOT(InfoServer() ) ); QAction * action=menuPopup->addAction ( tr( "Send out message to all users"),this,SLOT(slotSendMessageAllUsers() ) ); action->setEnabled(permitSendMsg); menuPopup->exec( QCursor::pos() ); return; } if (currentPopupMenuItem->parent()==item_server) // if a machine item { machine * myItem=dynamic_cast<machine *>(currentPopupMenuItem); if (!myItem) return; menuPopup->addAction ( tr( "Properties"),this,SLOT(InfoMachine() ) ); QAction * action=menuPopup->addAction ( tr( "Send out message to")+ " " + myItem->machine_name,this,SLOT(slotSendMessage() ) ); action->setEnabled(permitSendMsg); // if client can send popup messages menuPopup->exec( QCursor::pos() ); return; } if (currentPopupMenuItem->parent()->parent()==item_server) // if an user item { user * myItem=dynamic_cast<user *>(currentPopupMenuItem); if (!myItem) return; menuPopup->addAction ( tr( "Properties"),this,SLOT(InfoUser() ) ); QAction * action=menuPopup->addAction ( tr( "Disconnect user")+ " " + myItem->username,this,SLOT(slotDisconnectUser() ) ); action->setEnabled(permitDisconnectUser); // if client can disconnect an user menuPopup->exec( QCursor::pos() ); return; } // it's a locked file or share menuPopup->addAction ( tr( "Properties"),this,SLOT(InfoService() ) ); menuPopup->exec( QCursor::pos() ); } }