Съдържание:

Конкурентна игра срещу времето за 2 играча: 4 стъпки
Конкурентна игра срещу времето за 2 играча: 4 стъпки

Видео: Конкурентна игра срещу времето за 2 играча: 4 стъпки

Видео: Конкурентна игра срещу времето за 2 играча: 4 стъпки
Видео: ТОП 5 НЕЩА, КОИТО НЕ ТРЯБВА ДА ПРАВИТЕ С PLAYSTATION 4 2024, Юли
Anonim
Конкурентна игра срещу времето за 2 играчи
Конкурентна игра срещу времето за 2 играчи

Ще имаш нужда:

1. Digilent Basys 3, FPGA Board (или всяка друга FPGA,)

2. Сравнително актуална версия на Vivado или друга VHDL среда

3. Компютър, който може да изпълнява споменатата програма.

Стъпка 1: Самата игра

Самата игра
Самата игра

Как FSM взаимодейства с модулите.

Как да играя

За да започнете, натиснете средния бутон. Това ще накара „99“, представляващ здравето на играча двама, да се покаже на седем сегментния дисплей. След това светодиодите ще светнат последователно отдясно наляво. Това образува захранваща лента. След като лентата за захранване е пълна, тя се нулира. Целта на играч едно е да обърне превключвателя си, когато лентата е възможно най -висока. Колкото повече светодиоди светят, толкова повече щети нанася играч на играч двама. След като играч един обърне превключвателя си, нанесените щети се приспадат от здравето на играч двама. След това преминава на ред на играч два. Сега показаният номер показва здравето на играча, а лентата за захранване се запълва отляво надясно. След като играч двама направи своя ход, щетите се приспадат и той отново е на ред на играч един. Това се повтаря, докато един играч достигне 0 здраве. Видеото на това функциониране е приложено.

Стъпка 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Тази игра е по същество една голяма машина с крайни състояния, в която се случва някаква сложна логика, базирана на състоянието, в което се намира FSM.

Състояние 1: Меню Първото състояние е екранът на менюто, което е едно от по -простите състояния. Той включва седем сегментния дисплей, показващ думата „PLAY“, и бутона, който кара играта да започне. Бутонът, BTN, ни води до следващото състояние, което е ред на играча.

Състояние 2: Ред на Играч Първи

Ходът на един играч активира сигнал, който кара седемсегментния дисплей да показва здравето на Играч втори. Друг сигнал се включва за активиране на регистър за смяна, импортиран от друг модул, който създадохме (Pone.vhd). Този регистър на смяна кара светодиода да свети като увеличаващ се манометър в други игри и след това ще се нулира до 0, когато достигне максималното количество светодиоди, което може да светне. Той актуализира нарастващия ръб на часовника, получен от barclock.vhd, който е променен от заимстван лабораторен файл. Имахме бара на играча, който започва отдясно и се запълва отляво, защото превключвателят на играча е също отляво (за интуитивно потребителско изживяване). След като превключвателят се обърне, състоянието преминава към приспадане на играча и количеството активен светодиод се записва в сигнал.

Състояние 3: Приспадане на играч 1 Сигналът с количеството активен светодиод определя размера на здравето, което се приспада. Това става чрез друг регистър на смяна (deductor1.vhd), който вместо да увеличава светодиодите, ги намалява. Това намалява на нарастващия ръб на един от модулите div div, които заимствахме и модифицирахме (downcounterclock.vhd). Точно когато един светодиод е изключен, една точка от здравето се приспада от общото състояние на играча двама. Ако по време на този процес играч двама достигне 0 здраве, ние спираме и незабавно преминаваме в състояние „Играта приключи“. В противен случай, след като светодиодният вектор достигне „0000000000000000“, преминаваме към хода на играча двама.

Състояние 4: Редът на Играч Втори Играчът на двама е точно като на играча на първия, с изключение на регистъра за смяна за него (Ptwo.bhd) отива отляво надясно, а превключвателят е от дясната страна на дъската. Активира се сигнал, за да има здравословен дисплей на Player 1. След като превключвател 2 е активен, това преминава към приспадането на играча Втори.

Етап 5: Приспадане на играч втора Точно като ред на играч двама, приспадането на играч втори действа много като приспадане на играч първи. Основната разлика е, че регистърът за смяна, който контролира изключването на светодиода, върви в обратната посока, което е лесна промяна, която трябва да направите, след като приспадането на играча работи правилно.

Етап 6: Играта приключи Ако в даден момент някой от играчите достигне нулево здраве, играта преминава в това състояние. Нищо изискано. Ако се натисне BTN, здравето се възстановява до 99 и състоянието се връща към менюто, като ефективно започва играта отначало.

Стъпка 3: Модули

Модули
Модули

Диаграма на черна кутия за игра

Downcounterclock (въз основа на модула clk_div.vhd от Bryan Mealy):

Това е часовникът, който се грижи за времето на удържането. Константата с име max_count е 3 пъти повече от константата max_count на barclock. Това ще направи удръжките 3 пъти по -бавни от скоростта на лентата.

Barclock - (въз основа на модул clk_div.vhd от Bryan Mealy):

Този часовник обработва времето на измервателните уреди, което увеличихме бързо, за да добавим трудност в играта. Това време може да се регулира според вашите предпочитания, увеличавайки скоростта, като прави константата max_count по -голямо число, или я намалява, като прави max_count по -малко число. Sseg_dec - (Написано от Bryan Mealy): Този модул приема 8 -битово число като вход, което декодира, преобразувайки числото в неговия десетичен еквивалент и след това извежда на дисплея със седем сегмента. За да работи този файл, трябва да се уверите, че вашите ограничения съответстват на нашите.

Поне:

Това е регистър на смяна, който измества битовете наляво, добавяйки един горещ бит, за да изглежда, че манометърът се увеличава. Когато всички битове са горещи, всички битове се нулират на „0“и цикълът започва отначало.

Ptwo:

Това е обърната версия на модула P1.

Дедуктор 1:

Това е комбинация от регистър за смяна и изваждач. Регистърът на смяна се движи в обратна посока на регистъра на смяна на P1, което показва приспадане. Това също изважда 1 от здравето на Player 2 за всеки часовник, така че с комбинацията от тези две функции, ще изглежда, че здравето на противника намалява с 1 за всеки светодиод на лентата за здраве, който се понижава.

Deductor2: Това е обърната версия на модула Deductor1.

PlayDecoder (заимстван и модифициран от ekchen35649 неговите 133 инструкции): Това се използва в състоянието на менюто за показване на думата „PLAY“на седемсегментния декодер.

Стъпка 4: Тествайте

Тази игра първоначално е вдъхновена от една от мини игрите на Kirby. Това е проста игра за двама играчи, която може да се играе на Basys 3 Board или на всяка друга FPGA.

Стъпка 1: Необходими материали

Ще ви трябват: Digilent Basys 3, FPGA Board (или всяка друга) Сравнително актуална версия на Vivado или някаква друга vhdl среда Компютър, който може да изпълнява споменатата програма A brain

Стъпка 2: Самата игра

Как да играя

За да започнете, натиснете средния бутон. Това ще накара „99“, представляващ здравето на играча двама, да се покаже на седем сегментния дисплей. След това светодиодите ще светнат последователно отдясно наляво. Това образува захранваща лента. След като лентата за захранване е пълна, тя се нулира. Целта на играч едно е да обърне превключвателя си, когато лентата е възможно най -висока. Колкото повече светодиоди светят, толкова повече щети нанася играч на играч двама. След като играч един обърне превключвателя си, нанесените щети се приспадат от здравето на играч двама. След това преминава на ред на играч два. Сега показаният номер показва здравето на играча, а лентата за захранване се запълва отляво надясно. След като играч двама направи своя ход, щетите се приспадат и той отново е на ред на играч един. Това се повтаря, докато един играч достигне 0 здраве. Видеото на това функциониране е приложено.

За да играете играта, заредете я на basys board и натиснете средния бутон. Опитайте се да завъртите превключвателя с възможно най -много активни светодиоди и след това изчакайте и гледайте, докато дъската приспада тези точки от здравето на противника. След това го предайте на приятеля си и

Стъпка 3: FSM

Тази игра е по същество една голяма машина с крайни състояния, в която се случва някаква сложна логика, базирана на състоянието, в което се намира FSM.

(Диаграма на състоянието)

Състояние 1: Меню

Първото състояние е екранът на менюто, което е едно от по -простите състояния. Той включва седем сегментния дисплей, показващ думата „PLAY“, и бутона, който кара играта да започне. Бутонът, BTN, ни води до следващото състояние, което е ред на играча.

Състояние 2: Редът на Играч Първи

Редът на един играч активира сигнал, който кара седемсегментния дисплей да показва здравето на Играч втори. Друг сигнал се включва за активиране на регистър за смяна, импортиран от друг модул, който създадохме (Pone.vhd). Този регистър на смяна кара светодиода да светне като увеличаващия се манометър в другите игри и след това ще се нулира до 0, когато достигне максималното количество светодиоди, което може да светне. Той актуализира нарастващия ръб на часовника, получен от barclock.vhd, който е променен от заимстван лабораторен файл. Имахме бара на играча, който започва отдясно и се запълва отляво, защото превключвателят на играча също е отляво (за интуитивно потребителско изживяване). След като превключвателят се обърне, състоянието преминава към приспадане на играча и количеството активен светодиод се записва в сигнал.

Състояние 3: Приспадане на Играч 1

Сигналът с количеството активен светодиод определя размера на здравето, което се приспада. Това става чрез друг регистър на смяна (deductor1.vhd), който вместо да увеличава светодиодите, ги намалява. Това намалява с нарастващия ръб на един от часовниковите div модули, които заимствахме и модифицирахме (downcounterclock.vhd). Точно когато един светодиод е изключен, една точка от здравето се приспада от общото състояние на играча двама. Ако по време на този процес играч двама достигне 0 здраве, ние спираме и незабавно преминаваме в състояние „Играта приключи“. В противен случай, след като светодиодният вектор достигне „0000000000000000“, преминаваме към хода на играча двама.

Състояние 4: Редът на Играч Втори

Ходът на двама играчи е точно като на играча на първия, с изключение на регистъра за смяна (Ptwo.bhd), който отива отляво надясно, а превключвателят е от дясната страна на дъската. Активира се сигнал, за да има здравословен дисплей на Player 1. След като превключвател 2 е активен, това преминава към приспадането на играча Втори.

Етап 5: Приспадане на играч втора

Точно както играчът на втория играч, приспадането на играч втори действа много като приспадане на играч първи. Основната разлика е, че регистърът за смяна, който контролира изключването на светодиода, върви в обратната посока, което е лесна промяна, която трябва да направите, след като приспадането на играча работи правилно.

Етап 6: Играта приключи Ако в даден момент някой от играчите достигне нулево здраве, играта преминава в това състояние. Нищо изискано. Ако се натисне BTN, здравето се възстановява до 99 и състоянието се връща към менюто, като ефективно започва играта отначало.

Черна кутия

Стъпка 4: Модули

Downcounterclock (въз основа на модула clk_div.vhd от Bryan Mealy):

Това е часовникът, който се грижи за времето на дедукторите. Константата с име max_count е 3 пъти повече от константата max_count на barclock. Това ще направи удръжките 3 пъти по -бавни от скоростта на лентата.

Barclock - (въз основа на модула clk_div.vhd от Bryan Mealy): Този часовник обработва времето на измервателните уреди, което увеличихме бързо, за да добавим трудност в играта. Това време може да се регулира според вашите предпочитания, увеличавайки скоростта, като прави константата max_count по -голямо число или я намалява, като прави max_count по -малко число. Sseg_dec - (Написано от Bryan Mealy): Този модул приема 8 -битово число като вход, което декодира, преобразувайки числото в неговия десетичен еквивалент и след това извежда на дисплея със седем сегмента. За да работи този файл, трябва да се уверите, че вашите ограничения съответстват на нашите.

Pone: Това е регистър за смяна, който измества битовете наляво, добавяйки един горещ бит, за да изглежда, че манометърът се увеличава. Когато всички битове са горещи, всички битове се нулират на „0“и цикълът започва отначало.

Ptwo: Това е обърната версия на модула P1.

Deductor1: Това е комбинация от регистър за смяна и извадител. Регистърът на смяна се движи в обратна посока на регистъра на смяна на P1, което показва приспадане. Това също изважда 1 от здравето на Player 2 за всеки часовник, така че с комбинацията от тези две функции, ще изглежда, че здравето на противника намалява с 1 за всеки светодиод на лентата за здраве, който се понижава.

Deductor2: Това е обърната версия на модула Deductor1.

PlayDecoder (заимстван и леко модифициран от ekchen35649 неговите 133 инструкции):

Това се използва в състоянието на менюто за показване на думата „PLAY“на седемсегментния декодер.

Задачи: снимки, видео

Препоръчано: