예제 #1
0
void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)
{
        for (int i=begin; i<=end; i++)
        {
            *(dest+i) = CheckCell(m_matrix, i);
        }
}
예제 #2
0
// 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));
}
예제 #3
0
파일: life.c 프로젝트: viva-calman/Life
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++;
}
예제 #4
0
파일: DirectKey.cpp 프로젝트: chaosren/HHHH
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);
}
예제 #5
0
파일: DirectKey.cpp 프로젝트: chaosren/HHHH
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;
		}
	}