void PushUp(int now) { TN.data = max(tree[TL].data, tree[TR].data); if(now == 1) return ; PushUp(TT); }
void CChat::AddChatMessage( CNetworkPlayer * pNetworkPlayer, const char * szMessage ) { // Is the player invalid? if( !pNetworkPlayer ) return; // Check for the % character char * szChar = (char *)memchr( szMessage, '%', strlen(szMessage) ); char szMessageToSet [ 129 ]; // Did we find the character? if( szChar ) { // char szMessageA [ 129 ]; int offset1 = 0; int offset2 = 0; strcpy ( szMessageA, szMessage ); while ( true ) { if ( szMessageA[ offset1 ] == '%' ) { szMessageToSet[ offset2 ] = '%'; szMessageToSet[ offset2 + 1 ] = '%'; offset2 += 2; offset1 ++; continue; } else if ( szMessageA[ offset1 ] == '\0' || offset1 == 128 || offset2 == 128 ) { szMessageToSet[ offset2 ] = '\0'; break; } else { szMessageToSet[ offset2 ] = szMessageA[ offset1 ]; offset1 ++; offset2 ++; } } } else strcpy ( szMessageToSet, szMessage ); // Push all the messages up PushUp (); // Get the player colour CColor colour( pNetworkPlayer->GetColour(), true ); // Set the chat line data strcpy_s( m_chatLine[ 0 ].szMessage, (MAX_MESSAGE_LEN + 1), szMessageToSet ); sprintf( m_chatLine[ 0 ].szName, "%s: ", pNetworkPlayer->GetNick().Get() ); m_chatLine[ 0 ].ulMsgColour = D3DCOLOR_ARGB( 255, 255, 255, 255 ); m_chatLine[ 0 ].ulNameColour = colour.dwHexColor; m_chatLine[ 0 ].fNameExtent = pCore->GetGraphics()->GetTextWidth( m_chatLine[0].szName, 1.0f, "tahoma-bold" ); }
void build(int l, int r, int rt = 1) { if (l == r) { sum[rt] = num[l]; return; } int m = (l + r) >> 1; build(lson); build(rson); PushUp(rt); }
void Build(int l, int r, int rt) { if (l == r) seq[rt] = 1; else { int m = (l + r) >> 1; Build(lhs); Build(rhs); PushUp(rt); } }
void Update(int s,int t,int v,int l,int r,int rt) { if (s<=l && r<=t) { add[rt]+=v; sum[rt]+=v*(r-l+1); return ; } PushDown(rt,r-l+1); int m=(l+r)>>1; if (s<=m) Update(s,t,v,l,m,rt<<1); if (m<t) Update(s,t,v,m+1,r,rt<<1|1); PushUp(rt); }
void build(int l,int r,int rt) { if(l==r) { scanf("%d",&_max[rt]); _min[rt]=_max[rt]; return; } int mid=(l+r)>>1; build(l,mid,rt<<1); build(mid+1,r,rt<<1|1); PushUp(rt); }
void build(int l,int r,int pos) { if(l==r) { color[pos]=1; return; } int mid=(l+r)>>1; build(l,mid,pos<<1); build(mid+1,r,pos<<1|1); PushUp(pos); }
void Updata(int now, int pos, int k) { if(TN.l == TN.r) { TN.data = k; PushUp(TT); return ; } int mid = (TN.l + TN.r) >> 1; if(pos > mid) Updata(TR, pos, k); else Updata(TL, pos, k); }
void Run(UI* ui) { if(ui == NULL) return; NewGame(ui->game); NextTurn(ui->game); int c, running = 1; while(running && ui->game->status != GAME_STATUS_ERROR) { DisplayGame(ui); c = getch(); switch(c) { case KEY_LEFT: if(ui->game->status != GAME_STATUS_LOST) { if(PushLeft(ui->game)) NextTurn(ui->game); else CheckTurn(ui->game); } break; case KEY_RIGHT: if(ui->game->status != GAME_STATUS_LOST) { if(PushRight(ui->game)) NextTurn(ui->game); else CheckTurn(ui->game); } break; case KEY_UP: if(ui->game->status != GAME_STATUS_LOST) { if(PushUp(ui->game)) NextTurn(ui->game); else CheckTurn(ui->game); } break; case KEY_DOWN: if(ui->game->status != GAME_STATUS_LOST) { if(PushDown(ui->game)) NextTurn(ui->game); else CheckTurn(ui->game); } break; case 'q': running = 0; break; case 'n': NewGame(ui->game); NextTurn(ui->game); break; case 'r': StartGame(ui->game); NextTurn(ui->game); break; default: break; } } }
void BuildTree(int now, int l, int r) { TN.l = l; TN.r = r; TN.data = 0; if(TN.l == TN.r) { scanf("%d", &TN.data); PushUp(TT); return ; } int mid = (l + r) >> 1; BuildTree(TL, l, mid); BuildTree(TR, mid + 1, r); }
void TerrainTest::Event(SDL_Event* event) { switch (event->type) { case SDL_KEYUP: { switch (event->key.keysym.sym) { case SDLK_n: NewGrid(Width() / TILE_SIZE, Height() / TILE_SIZE); break; case SDLK_q: if (m_iUpperHeight < MAX_HEIGHT) m_iUpperHeight++; break; case SDLK_a: if (m_iUpperHeight > 0) m_iUpperHeight--; break; case SDLK_w: if (m_iLowerHeight < MAX_HEIGHT) m_iLowerHeight++; break; case SDLK_s: if (m_iLowerHeight > 0) m_iLowerHeight--; break; case SDLK_t: m_bDisplayTypeMap = !m_bDisplayTypeMap; break; default: break; } } break; case SDL_MOUSEMOTION: { int x, y; if (gui->IsMouseButtonDown(MOUSE_BUTTON_LEFT, &x, &y)) { PushUp(x / TILE_SIZE, y / TILE_SIZE); } else if (gui->IsMouseButtonDown(MOUSE_BUTTON_RIGHT, &x, &y)) { PushDown(x / TILE_SIZE, y / TILE_SIZE); } } break; default: break; } }
void CChat::AddDebugMessage( const char * szDebug, ... ) { // Push all the messages up PushUp(); // Get the arguments va_list args; va_start( args, szDebug ); vsnprintf( m_chatLine[ 0 ].szMessage, 128, szDebug, args ); va_end( args ); // Set the chat line data m_chatLine[ 0 ].szMessage[ MAX_MESSAGE_LEN ] = '\0'; m_chatLine[ 0 ].ulMsgColour = D3DCOLOR_ARGB( 255, 179, 179, 179 ); m_chatLine[ 0 ].fNameExtent = 0.0f; }
void CChat::AddInfoMessage( CColor colour, const char * szInfo, ... ) { // Push all the messages up PushUp(); // Get the arguments va_list args; va_start( args, szInfo ); vsnprintf( m_chatLine[ 0 ].szMessage, 128, szInfo, args ); va_end( args ); // Set the chat line data m_chatLine[ 0 ].szMessage[ MAX_MESSAGE_LEN ] = '\0'; m_chatLine[ 0 ].ulMsgColour = colour.dwHexColor; m_chatLine[ 0 ].fNameExtent = 0.0f; }
void update(int p,int l,int r,int pos) { if(l==r) { if(p==l) t[pos]++; return; } int mid=(l+r)>>1; if(p<=mid) update(p,l,mid,pos<<1); else update(p,mid+1,r,pos<<1|1); PushUp(pos); }
void Query(int p, int value, int l, int r, int rt) { if (l == r) { seq[rt] = 0; order[l] = value; } else { int m = (l + r) >> 1; if (seq[rt << 1] > p) Query(p, value, lhs); else Query(p - seq[rt << 1], value, rhs); PushUp(rt); } }
void update(int L, int c, int l, int r, int rt = 1) { if (L == l && l == r) { sum[rt] = c; return; } int m = (l + r) >> 1; if (L <= m) { update(L, c, lson); } else { update(L, c, rson); } PushUp(rt); }
void update(int a,int b,int v,int l,int r,int pos) { if(a<=l && b>=r) { mix[pos]=false; color[pos]=v; return; } if(l==r) return; int mid=(l+r)>>1; PushDown(pos); if(a<=mid) update(a,b,v,l,mid,pos<<1); if(b>mid) update(a,b,v,mid+1,r,pos<<1|1); PushUp(pos); }
void query(int a,int b,int l,int r,int pos) { if(!mix[pos]) { in[color[pos]]=true; return; } PushDown(pos); if(l==r) return; int mid=(l+r)>>1; if(a<=mid) query(a,b,l,mid,pos<<1); if(b>mid) query(a,b,mid+1,r,pos<<1|1); PushUp(pos); }
void Insert(priorityQueue *pqueue, huffman_node_t *node){ if(pqueue->size<CHARCOUNT){ pqueue->queue[pqueue->size++]=node; PushUp(pqueue,pqueue->size-1); } }
void Tetris::Attack(game_info* gi, int severity) { // add a line! // add two lines!! // rotate board!!! int gameover = 0; int good = 0; engine.audio.PlaySound(SND_ADDLINE); if (severity == 1) { // ok dokey int i; for (i=0; i<10; i++) { if (gi->board[i][0] != -1) { // game over! gameover = 1; break; } } PushUp(gi, 1); for (i=0; i<10; i++) { gi->board[i][23] = rand() % 7; if (gi->board[i][23] == 6) { good = 1; gi->board[i][23] = -1; } } if (!good) { gi->board[rand() % 10][23] = -1; } // send this line! engine.PassMessage(MSG_PUSHUP, 1,0,0); engine.PassMessage(MSG_ADDBLOCKS_A,gi->board[0][23], gi->board[1][23],gi->board[2][23]); engine.PassMessage(MSG_ADDBLOCKS_B,gi->board[3][23], gi->board[4][23],gi->board[5][23]); engine.PassMessage(MSG_ADDBLOCKS_C,gi->board[6][23], gi->board[7][23],gi->board[8][23]); engine.PassMessage(MSG_ADDBLOCKS_D,gi->board[9][23], 0,0); } else if (severity == 2) { // move two lines // ok dokey int i; for (i=0; i<10; i++) { if (gi->board[i][0] != -1) { // game over! gameover = 1; break; } if (gi->board[i][1] != -1) { // game over! gameover = 1; break; } } PushUp(gi, 2); for (i=0; i<10; i++) { gi->board[i][23] = rand() % 7; if (gi->board[i][23] == 6) { good |= 1; gi->board[i][23] = -1; } gi->board[i][22] = rand() % 7; if (gi->board[i][22] == 6) { good |= 2; gi->board[i][22] = -1; } } if (!(good & 1)) { gi->board[rand() % 10][23] = -1; } if (!(good & 2)) { gi->board[rand() % 10][22] = -1; } // send these lines! engine.PassMessage(MSG_PUSHUP, 2,0,0); engine.PassMessage(MSG_ADDBLOCKS_A,gi->board[0][23], gi->board[1][23],gi->board[2][23]); engine.PassMessage(MSG_ADDBLOCKS_B,gi->board[3][23], gi->board[4][23],gi->board[5][23]); engine.PassMessage(MSG_ADDBLOCKS_C,gi->board[6][23], gi->board[7][23],gi->board[8][23]); engine.PassMessage(MSG_ADDBLOCKS_D,gi->board[9][23], 0,0); engine.PassMessage(MSG_ADDBLOCKS2_A,gi->board[0][22], gi->board[1][22],gi->board[2][22]); engine.PassMessage(MSG_ADDBLOCKS2_B,gi->board[3][22], gi->board[4][22],gi->board[5][22]); engine.PassMessage(MSG_ADDBLOCKS2_C,gi->board[6][22], gi->board[7][22],gi->board[8][22]); engine.PassMessage(MSG_ADDBLOCKS2_D,gi->board[9][22], 0,0); } else if (severity == 3) { // rotate! gi->attacking = 1; gi->attack_rot = 0; } if (gameover) { engine.GameOver(); } }