Need help to build SQL query for a complex scenario
Exactly, How you will pass  parameter value ? 

In my example, I am passing parameter value in variable.

Mention it clearly.I understand that above output is only for explanation.

create table #Cuisine(CuisineId int,CuisineType varchar(50))
insert into #Cuisine values
( 1 ,'Chinese'),( 2 ,'Indian'),( 3 ,'Italian'),( 4 ,'French')

create table #DeliveryType (DeliveryTypeId int, DeliveryType varchar(50))
insert into #DeliveryType values
 (  1,'Delivery') ,(  2,'Pickup') ,(  3,'Dine In')

  create table #MealType (MealTypeId int, MealType varchar(50))
 insert into #MealType values
(1,'Breakfast')
,(2,'Lunch')
,(3,'Dinner')


 create table #Food(Food  varchar(50),CuisineId int,MealTypeId int,DeliveryTypeId int)
insert into #Food values
('Cakes',               NULL ,        NULL,          NULL)
,('Pizza',               3 ,  NULL,            NULL)
,('Noodles',             1 ,  2 ,       NULL)
,('Butter Chicken',      2  ,  3,       1 )
,('Ice cream',           NULL,         2 ,      2 )
,('Soup',                NULL,        NULL,             2 )
,('Drinks',              NULL,        NULL,             1 )


Parameter value,

Declare @Cuisine int,@Mealtype int,@DeliveryType int=2


Since you have condition like if delivery is Any then consider both null and Delivery=1 and vice versa.

So Create one local temp table to define value.It is easier and cost effective to join than write complicated and expensive where condition.

Create table #DeliveryParameter (DeliveryTypeId int)

if(@DeliveryType is null or @DeliveryType=1)
insert into #DeliveryParameter values(-1),(1)
else
insert into #DeliveryParameter values(@DeliveryType)


select * from #Food F
inner join #DeliveryParameter DP on f.DeliveryTypeId=dp.DeliveryTypeId
where ((@Cuisine is null and CuisineId is null) or(CuisineId=@Cuisine)) 
and ((@Mealtype is null and MealTypeId is null) or(MealTypeId=@Mealtype)) 

drop table #Cuisine,#DeliveryType,#MealType,#Food,#DeliveryParameter


Notice : ((@Cuisine is null and CuisineId is null) or(CuisineId=@Cuisine)) 

This type of condition is very expensive if you records are in millions .

So if you treat Null or Any as -1 or 0 for example, then condition will be simplified to

CuisineId=@Cuisine


Like in #Food table store -1 instead of Null and in variABLE pass -1 instead of null.

If you need output in some other format then mention it.