WIP: Tachka v0.4
Posted: Sun Jan 06, 2008 3:57 pm
А вот и новый релиз Теперь можно сказать, что основа игрового движка готова: реализована карта взаимодействия спрайта и окружающей среды попиксельно, т.е. спрайты можно загружать любые - они будут "биться" о препятствия четко по контуру; типов взаимодействия с картой может быть сколько душе угодно - для этого необходимо назначить этому типу определенный цвет, нанести его на карту "логики" и прописать взаимодействие
Еще из изменений - поворот работает теперь только во время движения (что на мой взгляд более логично), спрайт движется с разумной скоростью =)
//Al_Rado// Tachka v0.4 // Файл с данными тут http://slil.ru/25321183
resize_pixi (0,320,240)
set_disk0 ("data.tar")
fon = load_pixi("0:/fon.gif") // карта "логики" ("непроходимый" рельеф, масляные пятна, грязь и т.п) , отрисована определенными цветами, разрешение в 2 раза меньше отображаемой карты
fon_real = load_pixi("0:/fon_real.gif") // рисованый фон, который будет отображаться
P = 16 x=-30*P y=-30*P z=5 w=150 a=0 sign=1
car = load_pixi("0:/jeep.gif")
x_car = get_pixi_xsize(car)
y_car = get_pixi_ysize(car)
n=0 n2=0 m=0
x_scr = get_window_xsize
y_scr = get_window_ysize
zvuk = new_array( 8 )
zvuk[ 0 ] = 1
zvuk[ 1 ] = 6000
zvuk[ 2 ] = 2000
zvuk[ 3 ] = 4000
zvuk[ 4 ] = 1
zvuk[ 5 ] = 6000
zvuk[ 6 ] = 2000
zvuk[ 7 ] = 4000
unu:
pixi( fon, 0, 0, 2 )
OPROS_FON
clear (SNEG)
handle_hard_keys({OPROS},{})
pixi( fon_real, 0, 0, 1 )
fpixi(car,x/P,y/P,1,1,z)
y=y + yp
x=x + xp
sound_volume (w)
send_sound( zvuk , 400, 1, 1 )
frame (30)
goto unu
OPROS:
if ghk = 264 {w=w+25 a=a+1 sign=1 if a>4 {a=4 w=250} } // повышение передачи
if ghk = 265 {w=w-25 a=a-1 if a<1 {a=1 sign=-1 w=50} } // понижение передачи + задний ход
if ghk = 266 & a!=0 { z=z-1 } // поворот налево, если едем
if ghk = 267 & a!=0 { z=z+1 } // поворот направо, если едем
xp=((cos(z*16))/32) * a * sign
yp=((sin(z*16))/32) * a * sign
ret
OPROS_FON:
if z < 0 {z = 31}
if z > 31 {z = 0}
if w > 250 {w=250}
if w < 50 {w=50}
m=0 while(m < y_car)
{
n=0 while(n < x_car)
{
zzz=x_car*y_car*z+n2
if car[zzz] != 0
{
x_opr = x/P-x_car/2+n
y_opr = y/P-y_car/2+m
color_fon = get_dot (x_opr,y_opr)
stop_blue
zanos_green
medl_red
otskok_white
}
n+1 n2+1
}
m+1
}
n2=0
ret
stop_blue: // останавливаемся, если наезжаем на синий цвет
if color_fon = BLUE {xp=0 yp=0 a=0 w=100}
ret
zanos_green: // заносит, если наезжаем на зеленый цвет, типа масляное пятно
if color_fon = GREEN {z=(sin(get_timer(0)/4)/2+128)/64 w=250}
ret
medl_red: // не можем разогнаться, если наезжаем на красный цвет, типа грязь
if color_fon = RED {xp=((cos(z*16))/32)*a/2*sign yp=((sin(z*16))/32)*a/2*sign}
ret
otskok_white: // отскакиваем, если наезжаем на белый цвет
if color_fon = WHITE {xp=(cos(z*16)/32)*(-sign) yp=(sin(z*16)/32)*(-sign) a=0}
ret
Если кому интересно, вот тестовая версия =)
//Al_Rado// Tachka v0.4 test//
resize_pixi (0,320,240)
set_disk0 ("data.tar")
fon = load_pixi("0:/fon.gif") // карта "логики" ("непроходимый" рельеф, масляные пятна, грязь и т.п) , отрисована определенными цветами, разрешение в 2 раза меньше отображаемой карты
fon_real = load_pixi("0:/fon_real.gif") // рисованый фон, который будет отображаться
P = 16 x=-30*P y=-30*P z=5 w=150 a=0 sign=1
car = load_pixi("0:/jeep.gif")
//car = load_pixi("0:/SLIX_F1.gif") // раскомментить для проверки работы c другими спрайтами авто
x_car = get_pixi_xsize(car)
y_car = get_pixi_ysize(car)
n=0 n2=0 m=0
x_scr = get_window_xsize
y_scr = get_window_ysize
zvuk = new_array( 8 )
zvuk[ 0 ] = 1
zvuk[ 1 ] = 6000
zvuk[ 2 ] = 2000
zvuk[ 3 ] = 4000
zvuk[ 4 ] = 1
zvuk[ 5 ] = 6000
zvuk[ 6 ] = 2000
zvuk[ 7 ] = 4000
unu:
pixi( fon, 0, 0, 2 )
OPROS_FON
//clear (SNEG)// 1) закомментить для теста
handle_hard_keys({OPROS},{})
//pixi( fon_real, 0, 0, 1 ) // 2) закомментить для теста
fpixi(car,x/P,y/P,1,1,z)
y=y + yp
x=x + xp
sound_volume (w)
send_sound( zvuk , 400, 1, 1 )
frame (30)
clear (SNEG) // 3) закомментить для "финального" вида
goto unu
OPROS:
if ghk = 264 {w=w+25 a=a+1 sign=1 if a>4 {a=4 w=250} } // повышение передачи
if ghk = 265 {w=w-25 a=a-1 if a<1 {a=1 sign=-1 w=50} } // понижение передачи + задний ход
if ghk = 266 & a!=0 { z=z-1 } // поворот налево, если едем
if ghk = 267 & a!=0 { z=z+1 } // поворот направо, если едем
xp=((cos(z*16))/32) * a * sign
yp=((sin(z*16))/32) * a * sign
ret
OPROS_FON:
if z < 0 {z = 31}
if z > 31 {z = 0}
if w > 250 {w=250}
if w < 50 {w=50}
m=0 while(m < y_car)
{
n=0 while(n < x_car)
{
zzz=x_car*y_car*z+n2
if car[zzz] != 0
{
x_opr = x/P-x_car/2+n
y_opr = y/P-y_car/2+m
dot (x_opr+30 ,y_opr+30, SNEG ) // для наглядности, отрисовываю "контур" авто (правее и ниже) - внутри его считывается карта "логики"
color_fon = (get_dot (x_opr,y_opr))
stop_blue
zanos_green
medl_red
otskok_white
}
n+1 n2+1
}
m+1
}
n2=0
ret
stop_blue: // останавливаемся, если наезжаем на синий цвет
if color_fon = BLUE {xp=0 yp=0 a=0 w=100}
ret
zanos_green: // заносит, если наезжаем на зеленый цвет, типа масляное пятно
if color_fon = GREEN {z=(sin(get_timer(0)/4)/2+128)/64 w=250}
ret
medl_red: // не можем разогнаться, если наезжаем на красный цвет, типа грязь
if color_fon = RED {xp=((cos(z*16))/32)*a/2*sign yp=((sin(z*16))/32)*a/2*sign}
ret
otskok_white: // отскакиваем, если наезжаем на белый цвет
if color_fon = WHITE {xp=(cos(z*16)/32)*(-sign) yp=(sin(z*16)/32)*(-sign) a=0}
ret
Еще из изменений - поворот работает теперь только во время движения (что на мой взгляд более логично), спрайт движется с разумной скоростью =)
//Al_Rado// Tachka v0.4 // Файл с данными тут http://slil.ru/25321183
resize_pixi (0,320,240)
set_disk0 ("data.tar")
fon = load_pixi("0:/fon.gif") // карта "логики" ("непроходимый" рельеф, масляные пятна, грязь и т.п) , отрисована определенными цветами, разрешение в 2 раза меньше отображаемой карты
fon_real = load_pixi("0:/fon_real.gif") // рисованый фон, который будет отображаться
P = 16 x=-30*P y=-30*P z=5 w=150 a=0 sign=1
car = load_pixi("0:/jeep.gif")
x_car = get_pixi_xsize(car)
y_car = get_pixi_ysize(car)
n=0 n2=0 m=0
x_scr = get_window_xsize
y_scr = get_window_ysize
zvuk = new_array( 8 )
zvuk[ 0 ] = 1
zvuk[ 1 ] = 6000
zvuk[ 2 ] = 2000
zvuk[ 3 ] = 4000
zvuk[ 4 ] = 1
zvuk[ 5 ] = 6000
zvuk[ 6 ] = 2000
zvuk[ 7 ] = 4000
unu:
pixi( fon, 0, 0, 2 )
OPROS_FON
clear (SNEG)
handle_hard_keys({OPROS},{})
pixi( fon_real, 0, 0, 1 )
fpixi(car,x/P,y/P,1,1,z)
y=y + yp
x=x + xp
sound_volume (w)
send_sound( zvuk , 400, 1, 1 )
frame (30)
goto unu
OPROS:
if ghk = 264 {w=w+25 a=a+1 sign=1 if a>4 {a=4 w=250} } // повышение передачи
if ghk = 265 {w=w-25 a=a-1 if a<1 {a=1 sign=-1 w=50} } // понижение передачи + задний ход
if ghk = 266 & a!=0 { z=z-1 } // поворот налево, если едем
if ghk = 267 & a!=0 { z=z+1 } // поворот направо, если едем
xp=((cos(z*16))/32) * a * sign
yp=((sin(z*16))/32) * a * sign
ret
OPROS_FON:
if z < 0 {z = 31}
if z > 31 {z = 0}
if w > 250 {w=250}
if w < 50 {w=50}
m=0 while(m < y_car)
{
n=0 while(n < x_car)
{
zzz=x_car*y_car*z+n2
if car[zzz] != 0
{
x_opr = x/P-x_car/2+n
y_opr = y/P-y_car/2+m
color_fon = get_dot (x_opr,y_opr)
stop_blue
zanos_green
medl_red
otskok_white
}
n+1 n2+1
}
m+1
}
n2=0
ret
stop_blue: // останавливаемся, если наезжаем на синий цвет
if color_fon = BLUE {xp=0 yp=0 a=0 w=100}
ret
zanos_green: // заносит, если наезжаем на зеленый цвет, типа масляное пятно
if color_fon = GREEN {z=(sin(get_timer(0)/4)/2+128)/64 w=250}
ret
medl_red: // не можем разогнаться, если наезжаем на красный цвет, типа грязь
if color_fon = RED {xp=((cos(z*16))/32)*a/2*sign yp=((sin(z*16))/32)*a/2*sign}
ret
otskok_white: // отскакиваем, если наезжаем на белый цвет
if color_fon = WHITE {xp=(cos(z*16)/32)*(-sign) yp=(sin(z*16)/32)*(-sign) a=0}
ret
Если кому интересно, вот тестовая версия =)
//Al_Rado// Tachka v0.4 test//
resize_pixi (0,320,240)
set_disk0 ("data.tar")
fon = load_pixi("0:/fon.gif") // карта "логики" ("непроходимый" рельеф, масляные пятна, грязь и т.п) , отрисована определенными цветами, разрешение в 2 раза меньше отображаемой карты
fon_real = load_pixi("0:/fon_real.gif") // рисованый фон, который будет отображаться
P = 16 x=-30*P y=-30*P z=5 w=150 a=0 sign=1
car = load_pixi("0:/jeep.gif")
//car = load_pixi("0:/SLIX_F1.gif") // раскомментить для проверки работы c другими спрайтами авто
x_car = get_pixi_xsize(car)
y_car = get_pixi_ysize(car)
n=0 n2=0 m=0
x_scr = get_window_xsize
y_scr = get_window_ysize
zvuk = new_array( 8 )
zvuk[ 0 ] = 1
zvuk[ 1 ] = 6000
zvuk[ 2 ] = 2000
zvuk[ 3 ] = 4000
zvuk[ 4 ] = 1
zvuk[ 5 ] = 6000
zvuk[ 6 ] = 2000
zvuk[ 7 ] = 4000
unu:
pixi( fon, 0, 0, 2 )
OPROS_FON
//clear (SNEG)// 1) закомментить для теста
handle_hard_keys({OPROS},{})
//pixi( fon_real, 0, 0, 1 ) // 2) закомментить для теста
fpixi(car,x/P,y/P,1,1,z)
y=y + yp
x=x + xp
sound_volume (w)
send_sound( zvuk , 400, 1, 1 )
frame (30)
clear (SNEG) // 3) закомментить для "финального" вида
goto unu
OPROS:
if ghk = 264 {w=w+25 a=a+1 sign=1 if a>4 {a=4 w=250} } // повышение передачи
if ghk = 265 {w=w-25 a=a-1 if a<1 {a=1 sign=-1 w=50} } // понижение передачи + задний ход
if ghk = 266 & a!=0 { z=z-1 } // поворот налево, если едем
if ghk = 267 & a!=0 { z=z+1 } // поворот направо, если едем
xp=((cos(z*16))/32) * a * sign
yp=((sin(z*16))/32) * a * sign
ret
OPROS_FON:
if z < 0 {z = 31}
if z > 31 {z = 0}
if w > 250 {w=250}
if w < 50 {w=50}
m=0 while(m < y_car)
{
n=0 while(n < x_car)
{
zzz=x_car*y_car*z+n2
if car[zzz] != 0
{
x_opr = x/P-x_car/2+n
y_opr = y/P-y_car/2+m
dot (x_opr+30 ,y_opr+30, SNEG ) // для наглядности, отрисовываю "контур" авто (правее и ниже) - внутри его считывается карта "логики"
color_fon = (get_dot (x_opr,y_opr))
stop_blue
zanos_green
medl_red
otskok_white
}
n+1 n2+1
}
m+1
}
n2=0
ret
stop_blue: // останавливаемся, если наезжаем на синий цвет
if color_fon = BLUE {xp=0 yp=0 a=0 w=100}
ret
zanos_green: // заносит, если наезжаем на зеленый цвет, типа масляное пятно
if color_fon = GREEN {z=(sin(get_timer(0)/4)/2+128)/64 w=250}
ret
medl_red: // не можем разогнаться, если наезжаем на красный цвет, типа грязь
if color_fon = RED {xp=((cos(z*16))/32)*a/2*sign yp=((sin(z*16))/32)*a/2*sign}
ret
otskok_white: // отскакиваем, если наезжаем на белый цвет
if color_fon = WHITE {xp=(cos(z*16)/32)*(-sign) yp=(sin(z*16)/32)*(-sign) a=0}
ret