void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end) { for (int i=begin; i<=end; i++) { *(dest+i) = CheckCell(m_matrix, i); } }
// Checks cell with cell- coordinates against move- coordinates; int CApp::MoveCell(int cellX, int cellY, int moveX, int moveY) { // Checks if the cell isn't checking against itself (+0; +0 move) if(moveX == 0 && moveY == 0)return GRID_TYPE_NONE; // Checks if the cell's coordinates are within the grid else if((cellX + moveX) < 0 || (cellX + moveX) > 2 || (cellY + moveY) < 0 || (cellY + moveY) > 2)return GRID_TYPE_NONE; else return CheckCell((cellX + moveX) * 3 + (cellY + moveY)); }
void NextGen(void) { short neib; int i,j; for(i=0; i<WIDTH; i++) { for(j=0; j<HEIGHT; j++) { neib=0; neib=neib+CheckCell(i-1,j-1); neib=neib+CheckCell(i-1,j); neib=neib+CheckCell(i-1,j+1); neib=neib+CheckCell(i,j-1); neib=neib+CheckCell(i,j+1); neib=neib+CheckCell(i+1,j-1); neib=neib+CheckCell(i+1,j); neib=neib+CheckCell(i+1,j+1); if (neib>3 || neib <2) { field[i][j].next=false; } else { if(neib==3) { field[i][j].next=true; } if(neib==2 && field[i][j].current==false) { field[i][j].next=false; } else { field[i][j].next=true; } } } } for(i=0; i<WIDTH; i++) { for(j=0; j<HEIGHT; j++) { if(field[i][j].current==field[i][j].next) { field[i][j].age++; } else { field[i][j].age=0; } field[i][j].current=field[i][j].next; } } generation++; }
bool DirectKey::CanDiretect(int iCellX, int iCellY, KeyDirect dir) { switch (dir) { case KeyDirectLeft: iCellX--; break; case KeyDirectRight: iCellX++; break; case KeyDirectUp: iCellY--; break; case KeyDirectDown: iCellY++; break; default: return false; } return CheckCell(iCellX, iCellY); }
bool DirectKey::GetPosList(dk_vec_pos& vpos) { if (m_dequeDir.empty()) { return false; } NDPlayer& player = NDPlayer::defaultHero(); CCPoint pos = player.GetPosition(); int iCellX = (int)pos.x-DISPLAY_POS_X_OFFSET, iCellY = (int)pos.y-DISPLAY_POS_Y_OFFSET; if( !(iCellX % 16 == 0 && iCellY % 16 == 0) ) { return false; } iCellX /= 16; iCellY /= 16; for_vec(m_dequeDir, deque_dir_it) { KeyDirect dir = *it; if (!NextDir(iCellX, iCellY, dir)) continue; int tmpX = iCellX, tmpY = iCellY; switch (dir) { case KeyDirectLeft: tmpX--; break; case KeyDirectRight: tmpX++; break; case KeyDirectUp: tmpY--; break; case KeyDirectDown: tmpY++; break; default: continue; break; } if (CheckCell(tmpX, tmpY)) { vpos.push_back( //ccp(tmpX*MAP_UNITSIZE+DISPLAY_POS_X_OFFSET, tmpY*MAP_UNITSIZE+DISPLAY_POS_Y_OFFSET));//@del ConvertUtil::convertCellToDisplay(tmpX, tmpY)); //iCellX = tmpX; iCellY = tmpY; m_dequeDir.erase(m_dequeDir.begin(), it); break; } }