Важная информация

User Tag List

Страница 3 из 7 ПерваяПервая 1234567 ПоследняяПоследняя
Показано с 21 по 30 из 70

Тема: C чего начать геймдэв для горбатыша?

  1. #21
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    206 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ALKO, ТехЗадание же
    с него родного все начинается
    можешь даже сюда писать но нежелательно - закидаю(т)
    С уважением,
    Jerri / Red Triangle.

  2. #22
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    На асме же можно сделать вывод спрайтов (опять таки тут меня интересует вывод спрайта с маской), но игровую логику на асме просто нереально для меня создать, это куча cmp, jmp nz ,call-ов, ret-ов и т.д.
    Ну для начала можно писать "быдло-код", но на ассемблере. Примерно так:

    Для каждой переменной заводим байты памяти и метку:

    Код:
    var_i         defb 0         ; однобайтовая переменная
    var_j         defb 0        ; однобайтовая переменная
    var_x         defw 0         ; двухбайтовая переменная
    var_y         defw 0        ; двухбайтовая переменная
    А затем оперируем постоянно с ними, как на Бейсике:

    Код:
                    ; LET i=i+j
    
                    ld a,(var_i)
                    ld c,a
                    ld a,(var_j)
                    add a,c
                    ld (var_i),a
    
                    ; или вот так, но тут портится регистр HL:
    
                    ld hl,var_i
                    ld a,(var_j)
                    add a,(hl)
                    ld (hl),a
    
    
                    ; LET x=x+y
    
                    ld hl,(var_x)
                    ld de,(var_y)
                    add hl,de
                    ld (var_x),hl
    
    
                    ; сложение однобайтовой и двухбайтной переменной LET x:=x+i:
    
                    ld a,(var_i)
                    ld c,a
                    ld b,0                         ; превратили регистр a в регистр bc
                    ld hl,(var_x)
                    add hl,bc
                    ld (var_x),hl
    Проверка условий:

    Код:
                    ; IF i>j THEN LET i=i-j ELSE LET i=i+j
                    ; т.к. в асме нет проверки условия "больше", то заменяем на "меньше":
                    ; IF j<i THEN LET i=i-j ELSE LET i=i+j
    
                    ld a,(var_j)
                    ld hl,var_i
                    cp (hl)
                    jp c,label01
                    
                    add a,(hl)
                    jp label02
    
    label01       ld a,(hl)
                    ld hl,var_j
                    sub a,(hl)
    
    label02       ld (var_i),a
    Цикл со счетчиком:
    Код:
                   ; повторить 45 раз
    
                    ld b,45
    loop01       push bc                              ; запомнить b в стеке
                    ...
                    pop bc                               ; достать b из стека
                    djnz loop01
    
                   ; если внутри цикла регистр b не изменяется, то можно убрать push bc и pop bc.
    Цикл со счетчиком и с принудительным выходом из тела цикла:
    Код:
                  ; FOR i=0 to 20
                  ; ...
                  ; IF i>15 THEN <выход из цикла>
                  ; NEXT i
                  ; ...
    
                  ld b,20
    loop01     push bc
                  ld a,20
                  sub a,b
                  ld (var_i),a                         ; получили значение i
                  ...
                  ld a,(var_i)
                  cp 16                                ; if i>=16
                  jp nc,label01                       ; then goto label01
                  pop bc
                  djnz loop01
                  jp label02
    label01     pop bc                               ; возвращаем стек в исходное состояние, т.к. до этого мы туда втолкнули bc
    label02     ...
    Последний раз редактировалось Andrew771; 16.01.2012 в 11:07.

  3. #23
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    206 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Andrew771, подожди физикой грузить
    пусть сначала лирику опишет
    С уважением,
    Jerri / Red Triangle.

  4. #24
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Процедура вывода спрайта (без масок):
    Код:
    ; подпрограма вывода спрайта
    ; входные параметры: HL=адрес спрайта, D=вертик.координата вывода на экране, E=гориз.координата вывода на экране
    ; выходных параметров нет
    
    PUTSPR		LD	A,(HL)
    		AND	A
    		RET	Z				; выход, если пустой спрайт
    		LD	B,A
    PUTS1		PUSH	BC				; B = количество знакомест в спрайте
    
    		INC	HL
    		LD	A,(HL)
    		ADD	A,D
    		LD	B,A
    		INC	HL
    		LD	A,(HL)
    		ADD	A,E
    		LD	C,A
    		INC	HL
    		PUSH	DE				; DE = координаты спрайта на экране
    		EX	DE,HL				; DE = адрес нахождения в спрайте, HL = свободно
    
    
    
    
    
                    LD      A,B				; расчет адреса первого байта знакоместа в HL
                    LD      H,A
                    RRCA
                    RRCA
                    RRCA
                    AND	A,224
    		ADD	A,C
                    LD	L,A
                    LD	A,H
                    AND	24
                    OR	64
                    LD	H,A				; HL = адрес вывода знакоместа на экране, DE = адрес изображения в спрайте
    
    		; вывод знакоместа (8 строк)
    
    
    		LD	A,(DE)
    		LD	(HL),A				; вывели байт спрайта
    		INC     DE
                    INC     H
    
    		LD	A,(DE)
    		LD	(HL),A				; вывели байт спрайта
    		INC     DE
                    INC     H
    
    		LD	A,(DE)
    		LD	(HL),A				; вывели байт спрайта
    		INC     DE
                    INC     H
    
    		LD	A,(DE)
    		LD	(HL),A				; вывели байт спрайта
    		INC     DE
                    INC     H
    
    		LD	A,(DE)
    		LD	(HL),A				; вывели байт спрайта
    		INC     DE
                    INC     H
    
    		LD	A,(DE)
    		LD	(HL),A				; вывели байт спрайта
    		INC     DE
                    INC     H
    
    		LD	A,(DE)
    		LD	(HL),A				; вывели байт спрайта
    		INC     DE
                    INC     H
    
    		LD	A,(DE)
    		LD	(HL),A				; вывели байт спрайта
    
    		EX	DE,HL				; HL = адрес нахождения в спрайте
    
    		POP	DE				; HL = адрес нахождения в спрайте, DE = координаты спрайта на экране
    		POP	BC				; B = цикл по количеству знакомест в спрайте
    		DJNZ	PUTS1
    		RET
    
    
    
    ; спрайты
    
    SPRITE01
    DEFB 14                                                   ; количество знакомест в спрайте
    DEFB 14,3, 0,0,0,0,0,0,255,255                    ; знакоместо 1: координата y, координата x, 8 байтов изображения
    DEFB 15,3, 0,23,20,243,0,0,0,0                    ; знакоместо 2
    ...            и так 14 знакомест ...


    ---------- Post added at 10:32 ---------- Previous post was at 10:30 ----------

    Цитата Сообщение от jerri Посмотреть сообщение
    Andrew771, подожди физикой грузить
    пусть сначала лирику опишет
    ALKO уже умеет игры на Бейсике и Дельфи писать, к асму надо приучить.

    ---------- Post added at 10:46 ---------- Previous post was at 10:32 ----------

    Цитата Сообщение от ALKO Посмотреть сообщение
    Как можно перевести из указания координат видом X/Y в адрес хранящийся ввиде двух байт (DEC)? Что б записывать значения через Poke.
    Код:
                    LD      B,Y
                    LD      C,X
    
                    LD      A,B
                    LD      H,A
                    RRCA
                    RRCA
                    RRCA
                    AND	A,224
    		ADD	A,C
                    LD	L,A
                    LD	A,H
                    AND	24
                    OR	64
                    LD	H,A	  ; HL = адрес вывода знакоместа на экране
    Последний раз редактировалось Andrew771; 16.01.2012 в 10:35.

  5. #25
    Guru Аватар для ALKO
    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,257
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    183
    Поблагодарили
    86 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    ALKO уже умеет игры на Бейсике и Дельфи писать,
    с\с++ не указали.

  6. #26
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    с\с++ не указали.
    Тогда попробуй кросс-компилятор ccz80, удобный, но не оптимальный: http://zx.pk.ru/showpost.php?p=450358&postcount=4

  7. #27
    Veteran Аватар для AER
    Регистрация
    18.11.2009
    Адрес
    пгт.Малиновка
    Сообщений
    1,355
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    все вопросы решаются тут - http://zxpress.ru/

  8. #28
    Activist Аватар для AndTorp
    Регистрация
    03.03.2008
    Адрес
    Петербург
    Сообщений
    271
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    ALKO уже умеет игры на Бейсике и Дельфи писать, к асму надо приучить.
    В таком случае, для приучения, можно попробовать попереводить с ЯВУ на ассемблер какие-нибудь программы.
    Например из книги Максима Мозгового "Занимательное программирование".

    Цитата Сообщение от alone Посмотреть сообщение
    Для начала питона осильте. Потом уже к тетрисам можно переходить
    Удав и Тетрис, в вышеприведенной книге, разобраны хорошо.

  9. #29
    Guru Аватар для ALKO
    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,257
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    183
    Поблагодарили
    86 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    огда попробуй кросс-компилятор ccz80, удобный, но не оптимальный:
    z88dk оптимизированее...Только с ним не могу разобраться.

    ---------- Post added at 19:45 ---------- Previous post was at 19:43 ----------

    Спасибо за код перевода XY в 2 байта.
    Теперь то же самое нужно для перевода address (формата DEC) в 2 байта.

    ---------- Post added at 20:53 ---------- Previous post was at 19:45 ----------

    На бейцыке это будет примерно так:
    add= 40000
    x=int(add/256)
    y= add-(x*256)

    ---------- Post added at 20:55 ---------- Previous post was at 20:53 ----------

    x - старший байт
    y - младший байт

    ---------- Post added at 20:57 ---------- Previous post was at 20:55 ----------

    хотя проще будет выбирать фрейм
    40000+k*n, где n - номер фрэйма
    k - объём фрейма в байтах

  10. #30
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,773
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    1,179
    Поблагодарили
    775 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    для перевода address (формата DEC) в 2 байта.

    На бейцыке это будет примерно так:
    add= 40000
    x=int(add/256)
    y= add-(x*256)

    x - старший байт
    y - младший байт
    на ZX бейсике проще сделать так
    RANDOMIZE addr
    hi=peek 23671
    low=peek 23670

Страница 3 из 7 ПерваяПервая 1234567 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Голая Амига с чего начать
    от alex51 в разделе Amiga
    Ответов: 335
    Последнее: 22.02.2016, 00:26
  2. Концепции? Для чего?
    от GNTB в разделе ZX Концепции
    Ответов: 107
    Последнее: 09.01.2010, 14:08
  3. Как заставить плеер PT3 начать играть заново?
    от GriV в разделе Программирование
    Ответов: 18
    Последнее: 17.10.2008, 14:17
  4. Подскажите с чего начать знакомство со спекки...
    от aleksej в разделе Несортированное железо
    Ответов: 33
    Последнее: 28.12.2005, 23:00

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •