2015-04-22 3 views
0

Я делаю игру в сборке с игрой, являющейся объектом персонажа (в данном случае это символ «Х»), чтобы уклониться от падения 0 и 1. Мои падающие объекты идеальны, единственная проблема, с которой я сталкиваюсь, заключается в том, что если кто-то должен был удерживать направление влево или вправо, мои падающие предметы останавливаются, чтобы разместить новую позицию объекта игрока. Я использую библиотеку irvine для таких процессов, как readkey, которая получает ввод с клавиатуры почти во всем остальном, на 100% меня. Я не уверен, почему он останавливает все, чтобы завершить строку кода, которая выполняется только при первом прохождении цикла печати. Любая помощь приветствуется. Ниже я отправлю код. Ибо сейчас он работает на бесконечном цикле, который разбивается, если вы попадаете в объект.Сборка Игра персонажа, замедляющая мою игру

;******* proc to make it easier to reprint the rain;Kilian Proc 

print PROC 


    mov esi,0 
    mov count, 0; intilize as zero to reset the print proc 

PrintAll: 




     mov ecx, count 
    mov ebx , 0 
    cmp esi,4 
    je four 
    jmp end4 

four: 
    mov esi , 4 
end4: 

inLoop2: 

    mov dl,xArray[ebx] 

    mov dh,yArray[ebx] 
    call Gotoxy   ;Moves cursor to the position of rain 


    mov al,rainArray[ebx] 
    call WriteChar   ;Rewrite rain 

    push ecx 
    cmp ebx, 0 
    je xmov 
    jmp endx 
xmov: 
    call ReadKey   ; looks for keyboard input 
    call RightIf 
     call LeftIf 
endx: 
    pop ecx 
    call fall 

    cmp ecx, 0 
    jne decrease 
    jmp endD 
decrease: 
    dec ecx 
endD: 
    inc ebx 





    cmp ebx, esi 
    ja endinLoop 
    jmp inLoop2 

endinLoop: 

    mov eax , 105 
    call delay 
    call clrscr 

    mov dh,23d    ;move cursor to character's current position ********* Added to this version by Killian edited by John 
    mov dl , beginX 
    call Gotoxy 
    mov al,'X'    ;move X into al        ********* 
    call WriteChar   ;print it     ********** 
    call Crlf 
    xor al,al    ;clear 


    cmp ecx, 0 
    je random 
    mov ebx, 0 
    jmp inLoop2 
random: 

    mov eax, 5 
    call RandomRange 
    mov ebx, eax 

    cmp ebx , 0 
    je Increase 
    jmp PrintAll 


Increase: 
    cmp esi, 4 
    je PrintAll 
    inc count 
    inc esi 
    jmp PrintAll 
EndPrint: 

    ret 
print  ENDP 

Эта часть кода выполняет весь тяжелый подъем, проблема здесь где-то. Если вы хотите, чтобы увидеть полный код, который вы можете пойти сюда Git Repo

+0

Nevermind Я решил, что проблема понравилась этому сообществу; D –

+3

Если вы нашли свое решение, отправьте его как ответ, чтобы другие могли его найти :) – cubrr

+0

Чтобы устранить эту проблему, я переместил вызовы в ReadKey, RightIf и LeftIf вниз под областью, где я снова печатаю «X». Это исправило проблему довольно хорошо. Я поставлю код ниже. –

ответ

0

Исправление меня укладывал вызовы ReadKey, RightIf и LeftIf вниз под где я напечатать «X» снова код ниже:

endinLoop: 

    mov eax , 105 
    call delay 
    call clrscr 

    mov dh,23d    ;move cursor to character's current position ********* Added to this version by Killian edited by John 
    mov dl , beginX 
    call Gotoxy 
    mov al,'X'    ;move X into al        ********* 
    call WriteChar   ;print it     ********** 
    call Crlf 
    xor al,al    ;clear 

    push ecx 
    call ReadKey 
    call Rightif 
    call Leftif 
    pop ecx 

    cmp ecx, 0 
    je random 
    mov ebx, 0 
    jmp inLoop2 
random: 
+0

Мне пришлось нажать ecx, потому что я узнал, что моя область Rightif и Leftif изменила его ценность, и мне нужно было сохранить то, что было. –