Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

bobekabg avatar bobekabg 30 Точки

[Console Game] Вдъхновение за игра от задача от домашното

Здравейте!

Решавайки 5 задача от домашното за многомерни масиви, речници и множества( ЛИНК ), реших да направя конзолна игра, горе-долу със същата идея.Все пак първият ни Teamwork ще е точно на тази тема и реших, че това ще ми бъде една добра тренировка.

https://github.com/bobekas/ConsoleGame/blob/master/ConsoleGame.cs

Ще съм благодарен ако искажете мнение и препоръки относно структурата и оптимизацията на кода.

4
Fundamentals Module 22/09/2015 04:17:08
Gabbs avatar Gabbs 80 Точки

Здравей,

Добре изглежда. :)

Моите предложения са:

- Да си скриеш курсора (за да не flicker-ва при всяко ново изписване на конзолата)  -  Console.CursorVisible = false;

- Да смениш името на Object класа на нещо по-описателно (за по-добро readibility) .

- Би могъл да изнесеш всичките if (pressedKey.Key == ConsoleKey.нещо) в отделен метод и да го направиш със switch.

- Препоръчвам Console.ReadKey(true) - така няма да се изписва на екрана това, което потребителят е натиснал.

2
22/09/2015 11:51:14
bobekabg avatar bobekabg 30 Точки

Благодаря за съветите!

Мисля, че изпълних всичките препоръки.

Сега се чудя как мога да движа играча само когато съм натиснал даден клавиш, а не когато съм го задържал и защо когато направя картата по-голяма и се движа понякога се получава лек flicker на всички символи(дали това е от бавното изписване на текст върху конзолата или мога да си оптимизирам кода по някъкав начин) ?

1
22/09/2015 13:05:05
Gabbs avatar Gabbs 80 Точки

Можеш да използваш GetKeyState - https://msdn.microsoft.com/en-us/library/ms646301%28v=VS.85%29.aspx , и да направиш нещо като if (keyIsPressed && doAction == true){ doAction = false; do stuff }. По този начин би трябвало да изпълнява action само веднъж per key press. Имай предвид, че трябва да се импортне от User32.dll . Засега друг начин не съм открила, може и да има.

Колкото до flicker-a на първия ред - получава се заради Console.Clear(); Махни го и ползвай само Console.SetCursorPosition(), когато искаш нещо на екрана да се смени как изглежда (трябва обаче, когато player се движи, да зачистиш старата му позиция). Няма нужда да преначертаваш целия екран наново всеки път - със Console.SetCursorPosition() можеш да промениш само местата, които искаш да преначертаеш.

Ето и един туториал за конзолни игри, който много ми хареса - http://broadcast.oreilly.com/2010/08/understanding-c-text-mode-games.html

Ако искаш да задълбаеш, почети за event handling. :)

2
22/09/2015 15:00:32
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.