Пакетные проблемы с видеоиграми - PullRequest
3 голосов
/ 04 декабря 2010

Я делаю еще одну пакетную видеоигру, похожую на игру-лабиринт, и у меня настроены элементы управления, но мне было интересно, есть ли способ включить событие «при столкновении» в сценарии, чтобы вместо отображения из каждой возможной позиции, где мог бы находиться персонаж в игре, я мог бы просто сделать так, чтобы, если перед персонажем ничего не было, то двигалось вперед, но если что-то перед ним, то воспроизводите этот кадр (оставайтесь в той же позиции ) У меня будет ссылка на мой текущий игровой скрипт в нижней части этого поста. Скажем, если бы у меня была упрощенная карта, которая выглядела примерно так:

@echo off
title level 1
cls
:MAIN
echo °°°°°°°ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»°°°°°°°°°°°°°°
echo °°°°°°°º       º       º X º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º Û º       º       º°°°°°°°°°°°°°°
echo °°°°°°°ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ°°°°°°°°°°°°°°
goto MAIN

Мой текущий контроль будет:

choice /c awsd /n 
IF %errorlevel%==2 goto a2
IF %errorlevel%==1 goto a1
IF %errorlevel%==4 goto a1
IF %errorlevel%==3 goto a1
goto a1

Но проблема этого метода заключается в том, что новая копия этого кода (называемая фреймом) должна будет набираться под ним для каждого пространства символов, которое пользователь заставляет перемещать персонажа в игре. (Опять же, примеры этого приведены в моем текущем файле игры внизу), что я хотел, было что-то вроде:

@echo off
title level 1
cls
:MAIN
echo °°°°°°°ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»°°°°°°°°°°°°°°
echo °°°°°°°º   Û   º       º X º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º       º       º°°°°°°°°°°°°°°
echo °°°°°°°ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ°°°°°°°°°°°°°°

:a1
choice /c awsd /n 
IF %errorlevel%==2 goto a2check
IF %errorlevel%==1 goto a3
IF %errorlevel%==4 goto a3
IF %errorlevel%==3 goto a3
goto a1


:a2check
set /p collision=<collision_check.bat
IF %collision%==yes goto collision_confirm
IF %collision%==no goto a2
goto MAIN

:collision_confirm
cls
goto MAIN


:a3
cls
:: somehow edit the map so that the character "Û" moves to the position 
:: specified by the user in the choice command section.

:: so the new position would be: 

echo °°°°°°°ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»°°°°°°°°°°°°°°
echo °°°°°°°º     Û º       º X º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º   º   º   º   º°°°°°°°°°°°°°°
echo °°°°°°°º   º       º       º°°°°°°°°°°°°°°
echo °°°°°°°ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ°°°°°°°°°°°°°°


goto a3

Мне нужна помощь в файле collision_check.bat, мне нужен скрипт, который бы определял все точки столкновения на карте гивинов, а затем сообщал бы файлу уровней, собирается ли персонаж в игре попасть в него. Я знаю, что это много для одного проекта, но я хотел принять вызов!

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

Вы можете сделать это и с партией.

Но вы должны попытаться решить это с помощью другого решения.

Уровень должен храниться в переменных / массивах.
Позиция - это только координата x, y в этом массиве.
Тогда вам нужна только функция отображения для массива.
И вы можете «обнаруживать» коллизии, задавая свой массив.

Это должно помочь

@echo off
setlocal EnableDelayedExpansion
set line[0]=#####
set line[1]=# # #
set line[2]=# # #
set line[3]=# # #
set line[4]=#   #
set line[5]=#####
set pos.x=3
set pos.y=1

:game
call :display
call :Move
goto :game

:display
cls
set /a xAdd1=pos.x+1
for /L %%n in (0,1,5) do (
    set line=!line[%%n]!
    if %%n==%pos.y% (
        set line=!line:~0,%pos.x%!X!line:~%xAdd1%!
    )
    echo !line!
)
goto :eof
0 голосов
/ 03 июня 2015

это делает все проще:

BatBox - это внешняя команда, которая позволяет графически использовать консоль, но не только. Это позволяет также пользовательские взаимодействия, такие как мышь.

Например, BatBox позволяет изменять положение курсора консоли, изменять локально цвета консоли или даже получать ввод от мыши.

http://dos9.org/doc/en/html/batbox.html

...