Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Gra VGA - prosta platformówka ze starych Nintendo (na ElbertV2)

Autor Wiadomość
FlyingDutch 




Posty: 287
Pomógł: 10 razy
Otrzymał 17 piw(a)
Skąd: Bydgoszcz
Programuję w:
C++,Python
Wysłany: 11-02-2018, 18:13   Gra VGA - prosta platformówka ze starych Nintendo (na ElbertV2)

Cześć,

zabrałem się tym razem za prze-portowanie bardzo prostej platformówki (w stylu Nintendo) na FPGA ElbertV2.

Chodzi o grę z tego linku:

https://www.circuitben.net/node/24

Było kilka błędów, ale udało się je wyeliminować (były to bardzo proste błędy).

Po syntezie na Spartan3A z Elbert'a gra zajmuje około 486 LUT (34%) i jeden blok pamięci oraz trochę pinów I/O. Znów trzeba było użyć pętli PLL - 25 MHz, dla odmiany źródła tej gry są w VHDL.

Patrz obrazek:



Pozostało do przerobienia sterowanie postacią z NES controller na przyciski na płytce ElbertV2. Gra jest dużo ciekawsza niż PONG ;)

Jak będę miał to działające to umieszczę źródła projektu ISE dla Elberta na tej stronie (spakowany projekt).

BTW: właśnie próbuję podłączyć i obsłużyć "nunchuk" z Nintendo Wii do Elberta - jeśli coś z tego wyjdzie to zrobię dwie wersje tej platformówki:
1) Ruch postaci za pomocą klawiszy Elberta
2) Ruch postaci za pomocą "nunchuk'a" do Nintendo Wii

Pozdrawiam

Ostatnio popularny » ZL27ARM - zestaw rozwojowy dla STM32



Anioły to też demony - lepiej ich nie wkurzaj
Ostatnio zmieniony przez FlyingDutch 11-02-2018, 19:08, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
JTyburski 



Posty: 68
Pomógł: 4 razy
Otrzymał 6 piw(a)
Skąd: Warszawa
Programuję w:
VHDL, Verilog

Wysłany: 13-02-2018, 11:01   

A już myślałem, że ty robiłeś konwersję z innego języka czy platformy, skoro mówisz "przeportowanie" (bo tak to się u nas inżynierów nawet programistów to pojęcie się rozumie) - no ale nieistotne (po prostu dokonałeś pomyślnej implementacji projektu z podanego linka już tak uściślając).

Sam projekt nawet git - bym powiedział najprościej zrobiony jak się da (właśnie ja tak swoją pracę inżynierską zrobiłem). Niemniej tu ważny niuans, na który warto zwrócić uwagę - otóż tutaj facet stosuje moduły które mają pełnić rolę pamięci ROM, zawierającej obiekty mapy itd. To co zrobił jest oczywiście na logikę poprawne, ale czasem środowiska nie rozpoznają tego, że to chodzi o pamięć ROM i wymuszają na układzie (a właściwie jego tablicach LUT), aby sam się zachowywał jak takowa pamięć (czyli powstaje absurd - masz bloki pamięciowe, a nie są stosowane, bo układ próbuje się zachować jak te bloki). Z czego to wynika? Po prostu z niedoskonałości środowisk i założeń jakie przyjęli jego twórcy (ot wymyślili, że do opisu pamięci ROM starczy taki, a siaki kod i bez namysłu na sztywno go dorzucili do kompilatora, że tak ma być i koniec, bez uwzględniania innych możliwych wariancji - ot taki "tępy" kompilator zrobiony na łatwiznę - szczególnie to widać w Quartusie, który jest "tępy" okropnie w tym względzie i trzeba używać "template-a" który oferuje i dopiero po nim się orientuje, że należy to przekształcić na bloki pamięciowe). To tak na boku - taka dobra wskazówka projektancka, żeby zwracać uwagę na to, że tam gdzie się da to tam należy spychać funkcjonalność na pamięć (u ciebie widzę jednak, że prawdopodobnie tak się stało, bo coś mało LUT-ów użytych zostało - no ale mogę się mylić :) )

Ostatnio zmieniony przez JTyburski 13-02-2018, 11:01, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
FlyingDutch 




Posty: 287
Pomógł: 10 razy
Otrzymał 17 piw(a)
Skąd: Bydgoszcz
Programuję w:
C++,Python
Wysłany: 13-02-2018, 12:00   

JTyburski napisał/a:
A już myślałem, że ty robiłeś konwersję z innego języka czy platformy, skoro mówisz "przeportowanie" (bo tak to się u nas inżynierów nawet programistów to pojęcie się rozumie) - no ale nieistotne (po prostu dokonałeś pomyślnej implementacji projektu z podanego linka już tak uściślając).

To tak na boku - taka dobra wskazówka projektancka, żeby zwracać uwagę na to, że tam gdzie się da to tam należy spychać funkcjonalność na pamięć (u ciebie widzę jednak, że prawdopodobnie tak się stało, bo coś mało LUT-ów użytych zostało - no ale mogę się mylić :) )


Cześć Jakub,

miło Cię usłyszeć. Raczej został użyty jeden z bloków pamięci. Na razie utknałem z obsługą "Nunchuka" od Nintendo WII - nie dlatego, że nie wiem jak on działa, ale z powodu braku gniazdka takiego jak jest w konsoli Nintendo (mam tylko oryginalne nunchuki od konsoli i nie chcę ich niszczyć - pewnie gdzieś w chińskim sklepie znajdę podróbkę Nunchuka).

Pozdrawiam


Anioły to też demony - lepiej ich nie wkurzaj
Postaw piwo autorowi tego posta
 
 
JTyburski 



Posty: 68
Pomógł: 4 razy
Otrzymał 6 piw(a)
Skąd: Warszawa
Programuję w:
VHDL, Verilog

Wysłany: 13-02-2018, 13:19   

Pewnie na Alibabie czy Aliexpress znajdziesz takowe gniazdko :)

Polecany artykuł » Kurs STM32 F4 - #12 - Programowanie przez bootloader


Postaw piwo autorowi tego posta
 
 
FlyingDutch 




Posty: 287
Pomógł: 10 razy
Otrzymał 17 piw(a)
Skąd: Bydgoszcz
Programuję w:
C++,Python
Wysłany: 16-02-2018, 11:09   

JTyburski napisał/a:
Pewnie na Alibabie czy Aliexpress znajdziesz takowe gniazdko :)


Cześć,

właśnie znalazłem "Wii nunchuk" za około 21 PLN w chińskim sklepie i zamówiłem:

https://www.banggood.com/...ur_warehouse=CN

, tak, że postaram się go użyć w tej grze (i może jakichś innych w przyszłości - Utnę mu złącze i podlutuję kable do takiego gniazdka, że da się bezpośrednio podłączyć do ElbertaV2) ;-)

Pozdrawiam


Anioły to też demony - lepiej ich nie wkurzaj
Ostatnio zmieniony przez FlyingDutch 16-02-2018, 11:11, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
FlyingDutch 




Posty: 287
Pomógł: 10 razy
Otrzymał 17 piw(a)
Skąd: Bydgoszcz
Programuję w:
C++,Python
Wysłany: 18-02-2018, 11:07   Gra VGA - prosta platformówka ze starych Nintendo (na ElbertV2)

Cześć,

platformówka VGA poprawnie wyświetla się na monitorze VGA. Zamieszczam cały działający projekt (nie musicie się obawiać przed wgraniem na Elberta plik ucf jest poprawny - wgrałem u siebie grę).

Nie działa jeszcze ruch postaci (w tym wypadku czerwonego klocka), trzeba przerobić kod na obsługę przycisków w Elbercie, lub jakiś inny kontroler. Czekam, aż przyjdzie zamówiony w chińskim sklepi "nunchuk" od Nintendo Wii - jak przyjdzie postaram się dodać jego obsługę w grze. W międzyczasie pewnie dodam też obsługę ruchu postaci za pomocą przycisków Elberta.

Pilk bin do wgrania do FPGA to "ss.bin" (w zamieszczonym projekcie ISE).

A tak gra wygląda na ekranie monitora VGA:



W załączniku spakowany plik projektu gry "ISE" dla Elberta.

Podłączyłem shield firmy Keyestudio z joystickiem i czterema przyciskami do Elberta (bo na przyciskach z Elberta słabo by się grało ). Niestety joystic jest analogowy, więc potrzebny byłby przetwornik analogowo-cyfrowy. Na razie użyję przycisków z tego shieldu do sterowania grą (dopóki nie będę miał nunchuka).

Tak to wygląda:



Biorę się teraz za przeróbkę gry, aby działała z tymi przyciskami.

Pozdrawiam


ARCADE01.zip
Plik projektu ISE gry Arcade.
Pobierz Plik ściągnięto 6 raz(y) 963.38 KB


Anioły to też demony - lepiej ich nie wkurzaj
Ostatnio zmieniony przez FlyingDutch 18-02-2018, 16:46, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 1 piw(a):
Elvis
FlyingDutch 




Posty: 287
Pomógł: 10 razy
Otrzymał 17 piw(a)
Skąd: Bydgoszcz
Programuję w:
C++,Python
Wysłany: 25-02-2018, 11:50   Gra działa w pełni

Cześć,

platformówka działa już w pełni (ruch "postaci" za pomocą 4 switchy z Elberta).

Nie jest to ładnie zrobione (przeróbka) - raczej polega na "chamskim" hacku w entity read_pad.vhd. Kod tego entity wygląda teraz tak:

Kod programu: Zaznacz cały

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY read_pad IS PORT (
    clock:              IN STD_LOGIC;
    pad_data:           IN STD_LOGIC;
    pad_clock:          OUT STD_LOGIC;
    pad_load:           OUT STD_LOGIC;
    pad_state:          OUT STD_LOGIC_VECTOR(7 downto 0);
    jumpBtn:            IN STD_LOGIC;
    leftBtn:            IN STD_LOGIC;
    rightBtn:           IN STD_LOGIC;
    resetBtn:           IN STD_LOGIC
);
END;

ARCHITECTURE read_pad OF read_pad IS
    
    component debounce is
       port (  clk    : IN  STD_LOGIC;  --input clock
                    button  : IN  STD_LOGIC;  --input signal to be debounced
                    result  : OUT STD_LOGIC); --debounced signal
    end component;   
   
    SIGNAL ser_clock: STD_LOGIC;
    SIGNAL div_count: STD_LOGIC_VECTOR(3 downto 0);
    SIGNAL data: STD_LOGIC_VECTOR(7 downto 0);
    SIGNAL bit_num: STD_LOGIC_VECTOR(2 downto 0);
    SIGNAL done: STD_LOGIC;
    SIGNAL jumpBtnDeb: STD_LOGIC;
    SIGNAL leftBtnDeb: STD_LOGIC;
    SIGNAL rightBtnDeb: STD_LOGIC;
    SIGNAL resetBtnDeb: STD_LOGIC;
   
BEGIN
   
    D1: debounce port map (clock, jumpBtn, jumpBtnDeb);
    D2: debounce port map (clock, leftBtn, leftBtnDeb);
    D3: debounce port map (clock, rightBtn, rightBtnDeb);
    D4: debounce port map (clock, resetBtn, resetBtnDeb);

    PROCESS (clock)
    BEGIN
      IF clock'Event AND clock = '1' THEN
           pad_state <= "00000000";
           
           if leftBtnDeb = '0' then
             pad_state(1) <= '1';
           end if;
           if rightBtnDeb = '0' then
             pad_state(0) <= '1';
           end if;
           if jumpBtnDeb = '0' then
           pad_state(7) <= '1';
             pad_state(6) <= '1';
           end if;
            if resetBtnDeb = '0' then
           pad_state(4) <= '1';
             pad_state(5) <= '1';
           end if;
   
        END IF;
    END PROCESS;


--    pad_state <= "00000000";
END read_pad;


Ruch jest obsługiwany przez 4-ry switche Elberta (dolny romb):
SW3 - Jump
SW6 - Left
SW4 - Right
SW5 - Reset gry

W załączniku cały projekt ISE działającej w pełni gry (plik do wgrania ss.bin).

Niestey "nunchuk" jeszcze nie przyszedł.

BTW: gra "sama w sobie" jest bardzo prosta i nudna - traktuję jej uruchomienie jako "wprawkę", aby nauczyć się jak generować bardzo prosty "Świat" gry ;-)

Pozdrawiam


ARCADE01.zip
Projekt gry ISE z działającym poruszaniem gracza.
Pobierz Plik ściągnięto 5 raz(y) 1.04 MB


Anioły to też demony - lepiej ich nie wkurzaj
Ostatnio zmieniony przez FlyingDutch 25-02-2018, 12:22, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Realizacja pamięci p... Programowanie układó... Programatory do ukła... Jak się projektuje u...
lub przeszukaj forum po wybranych tagach: elbertv2, gra, na, nintendo, platformowka, prosta, starych, vga, ze


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki