Движение ИИ на 100% похоже на игру MAFIA на C64.

Обновление Ссылка на проект решения C# от пользователя, который мне ответил: https://github.com/TedDawkin/C64_AI_Movement

Обновить

Я нашел это - если кому-то интересно, просто используйте ссылку на тему на форуме C64: http://www.lemon64.com/forum/viewtopic.php?p=712902#712902, где я обсуждал эту тему (сам с собой). Забавно, как просто это было в конце. Не так смешно, что это заняло у меня более 2 недель.

Позже я опубликую код BASIC для C # и «отвечу» на свой вопрос.

Если кого-то это волнует и он не хочет переходить по ссылке на форум, вот как это работает в C64 basic.

30110 IF KS(S)=0 THEN GOSUB 30400 : GOTO30105
30400 POKE 211,20: POKE214,18: SYS CS: PRINT"SPIELER"F
30405 Y=INT(KP(S,F)/40)
  SYS CR, KP(S,F)-40*Y, Y
  X=PEEK(UA)-1
  Y=PEEK(UA+1)-40
30410 IF PEEK(UA+2)=1 OR PEEK (UA+3)=1 GOTO 30420
30415 IFINT(RND(1)*2)=0ORGW(KS(S),F)<4GOTO30450
30420 IFX=0THENX=Y:GOTO30215
30421 IFY<>0GOTO30450
30425 GOTO30215
30450 IFX<>0ANDRI(F)<>(1+2*(X=1))THENP=X:GOSUB30490:IFP=0THENRETURN
30451 IFY<>0ANDRI(F)<>(40+80*(Y=1))THENP=Y:GOSUB30490:IFP=0THENRETURN
30455 IFX<>0ANDRI(F)<>(1+2*(X=1))GOTO30460
30456 IFRI(F)<>-1THENP=1:GOSUB30490:IFP=0THENRETURN
30457 IFRI(F)<>1THENP=-1:GOSUB30490:IFP=0THENRETURN
30458 GOTO30465
30460 IFY<>0ANDRI(F)<>(40+80*(Y=1))GOTO30465
30461 IFRI(F)<>-40THENP=40:GOSUB30490:IFP=0THENRETURN
30462 IFRI(F)<>40THENP=-40:GOSUB30490:IFP=0THENRETURN
30465 RETURN
30490 Q=KP(S,F)+P:IFQ<0ORQ>520OR(PEEK(BR+Q)<>32ANDPEEK(BR+Q
<>96)THENRETURN
30491 POKEBR+KP(S,F),32:KP(S,F)=Q:POKEBR+KP(S,F),193:POKEFR+KP(S,F),6
30492 RI(F)=P:P=0:RETURN

некоторые подсказки:

X = moved right (1), left (-1), up (-40) or down(40)
P = Position. There is no Y because the next/prev line is
40 characters away. (C64 Screen =  40 Columns and 25 Rows)
S = switches between 0 and 2 to determine if its human or ai turn
KP(S,F) = Offset-Position in Video-Memory-Adress
BR = Start-Adress of Video-Memory
32 = 0x20 = Space to clear old position
193 = Ascii-Character used as pawn for player and ai
6 = Mark field as AI (Human position is marked with 0x0b)
F = Playernumber
RI(F) = dont know yet

Оригинальный вопрос:


Работая над ремейком и пытаясь понять код C64, я борюсь с движением ИИ. Работая над ним неделю, я не могу воспроизвести на 100% такое же поведение.


person user312430    schedule 25.12.2015    source источник
comment
Примечание: я пробовал простой A* и более сложный. Движение не такое, как в C64 Original, особенно если ИИ приближается к препятствиям. С более чем одним ИИ дальность и движение становятся еще хуже. Я думал, что этот код произошел в коде C64 Basic и ассемблере.   -  person user312430    schedule 26.12.2015
comment
Тогда то, что вы думали о коде ассемблера, должно быть, было неправильным. Займитесь реверс-инжинирингом посложнее (не забывайте и о юридических аспектах реверс-инжиниринга..), я не думаю, что кто-то здесь имеет опыт работы с точным кодом движения ИИ в старой игре c64 и может помочь вам с этим. что.   -  person Maximilian Gerhardt    schedule 26.12.2015
comment
Также ваши круги и мусорные баки (а также другие препятствия) в видео имеют не одинаковую конфигурацию. Это затрудняет сравнение двух игр. Если вы хотите сравнить, используйте точно такую ​​же конфигурацию.   -  person Olivier Jacot-Descombes    schedule 26.12.2015
comment
Я помню это. Поместите преобразование с BASIC на C# на github Знакомство с Unity Я работаю над ремейком, просто для удовольствия.   -  person Ted Dawkin    schedule 11.04.2017


Ответы (1)


Чтобы ответить на мой вопрос: да, ИИ может действовать случайным образом, используя RND, и я полностью упустил это из виду.

Для подробного обсуждения перейдите на Ветку форума.

Там есть и другие камни преткновения, которые могут помочь, если вы хотите что-то отладить/перепроектировать.

  • Я всегда читаю BASIC-код без подсветки синтаксиса и форматирования. Делая это, я упустил некоторые вещи и сделал ошибки.
  • Позиции, отмеченные в памяти экрана
  • Позиции, где не Point(x,y) или array[x,y], а целое число от 0 до 999, представляющее 25 строк и 40 столбцов C64-Screen.
  • Что касается ассемблера, я был слишком подробным. Было бы лучше просмотреть 5-10 команд подряд и подумать, что может произойти (без отладки), чем теряться в JSRс при отладке
person user312430    schedule 30.12.2015