Loading...
coaster avatar coaster 412 Точки

[Homework] C# Basics - Console Input Output - Problem {12**} - Falling Rocks

Здравейте, колеги!
Някой прегледа ли вече задачите за домашно от следващата лекция? Аз го направих вчера и останах заинтригувана от задача 12. Някой пробва ли се да я направи? За мен ще е голямо предизвикателство и надали ще се справя, но ми е много интересно по какъв начин се получават тези "падащи" елементи в конзолата. Нямам си и идея, може би ще трябва да се направи някакъв char array, който да съхранява въпросните "камъни", които да падат... Много различна задача от всички, които сме правили до сега, ще ми е интересно да видя решенията и идеите ви!
Ето и задачата за тези от вас, които още не са я прегледали :)

Problem12FallingRocks

Решения, пуснати в тази тема:

ViValDam
http://pastebin.com/R2VpdJ1H

mar0der
https://github.com/mar0der/FallingRocksGame/blob/master/FallingRocksGame.cs

vladislav_hadzhiyski
https://github.com/vladislavHadzhiyski/CSharpBasics/blob/master/SoftUniHW4/FallingRocks/FallingRocks.cs

achebg
http://pastebin.com/Q7TXRWbN

milen8204
http://pastebin.com/FNWjErFn

lubomirjurukov
http://pastebin.com/NtQiecwR

aslv1
http://pastebin.com/wijHas96

Fleshian
http://pastebin.com/bdfPJPHD

HPetrov
http://pastebin.com/AZjTNhE4

ZvetanIG
http://pastebin.com/W6f1virF

Darko
http://pastebin.com/LHhV3m4C

topalovr
https://www.dropbox.com/s/kk3ujtoxo2uf4pt/FallingRocks.rar

Samuil.Petrow
http://pastebin.com/1dzFDzYX

coaster
http://pastebin.com/LYKn26bH

 

 

 


Поздрави!

Тагове:
16
Programming Basics 04/09/2014 22:15:02
Darko avatar Darko 82 Точки

Ето и моето решение :)
цък

1
ViValDam avatar ViValDam 15 Точки

Изключва след десетина секунди , скоростта е доста висока 

0
Darko avatar Darko 82 Точки

На мен не ми е правело до сега проблем освен един малък бъг от който играта не се изключва и ще бъде фикснат когато имам малко време, скоростта е висока защото в заданието пише да бъде 150

0
ZvetanIG avatar ZvetanIG 907 Точки

Здравейте, ето и моят кода на 12 задача. 

http://pastebin.com/W6f1virF

Помъчил съм се да го направя с обекти, като по принцип всеки обект е в отделен файл, но тък съм ги обединил за да мога да ги кача в pastebin.com.  

Ще съм любопитен да чуя вашето мнение.

1
Samuil.Petrow avatar Samuil.Petrow 1550 Точки

Добре си го написал, единствено мога да те посъветвам:

Виждам, че си сложил property-ta за енкапсулация, но за да има смисъл това - трябва да си направиш field-овете private :)

Като цяло е лоша практика да ги оставяш без access modifiers (default-овия е internal, което не удоволетворява целите)

FallingRocks class-a също така спокойно можеш да си го направиш static.

0
ViValDam avatar ViValDam 15 Точки

Много бързо свърши -даже не разбрах за какво получавам точки smile продължавай да я оправяш !

0
ZvetanIG avatar ZvetanIG 907 Точки

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

1
coaster avatar coaster 412 Точки

Здравейте отново!

Имам една молба, или може би няколко въпроса. За последните няколко часа успях да "сътворя" това: ЦЪК. Някой по-нагоре беше пуснал линк към клипчето на TelerikAcademy за играта JustCars и съм му много благодарна, защото около 90% от кода ми се базира на него. Остава да направя следните неща, и за жалост вече блокирах и не мога да ги измисля, но ми е много интересно как биха се получили и ще съм благодарна, ако споделите идеите си. Както ще видите в кода ми, към който пуснах линк, има някои места, които са закоментирани - това са места с въпроси, но има и още допълнителни неща, които не съм записала там. Та, по същество:

1) Тъй като в условието на нашата задача се иска играчът да е изобразен с (0), го въведох така, обаче не знам как да направя позицията му да отговаря и на трите му символа. Сега, когато някой камък удари джуджето, признава за ударена само най-лявата му скоба, тоест (. Ако удари нулата 0 или дясната скоба ), просто не го зачита за ударен и играта си продължава. Някой изобщо разбра ли ме, че май не успях да се изкажа като хората...
2) Как да направя камъните да са различни chars? Сега единствените символи, които падат, са диези #. Някой беше казал, че се използват масиви, респ. списъци, но въпросът е как?
2.1)Освен това, как да ги направя да са с различни цветове? Вероятно ще трябва да се използва нещо, свързано с класа System.Random. Какво да е то?
3) Още нещо, свързано с камъните - как да се направи така, че понякога да падат по 2 или по 3 "в комплект"?
4) И един въпрос, който е закоментиран в кода, но ще го напиша и тук, за да е по-четимо. Искам да направя така, че когато потребителят достигне максималната скорост (в моя случай тя е 400), да се изпише подходящо съобщение. Респективно, когато се достигне скорост 150, да изпише съобщение за достигнато ниво, например второ, след това за скорост 200 нивото да е трето и т.н.

Малко дълго стана... Anyway, благодаря предварително на отзовалите се!
Поздрави!

2
HPetrov avatar HPetrov 822 Точки

Здравей! За първия ти въпрос, това което аз направих е да си направя джуджето като сбор от 3 отделни обекта и следователно да ги движа заедно. Като проверка за удар правя проверка дали координатите на съответния камък съвпадат с координатите на някоя от съставните части на джуджето. Спокойно, добре си исказала въпроса :P

Как да направиш каманите да са различни char-ове, ами аз го направих като ми генерира нова стойност за нов камък да минава през един switch и в зависимост коя стойност е да ми създава съответния обект. Същото важи и за цветовете, макар че не са ми никък random те. Другия вариант, който бяха ми препоръчали е вместо switch да създавам веднъж обект но когато се избира какъв char и цвят да са, просто да ги имаш вече запазени в едномерни масиви и чрез random да им достъпваш индекса -> trully random :} Как да ги направиш "по-големи" камани... предполагам както нормалните но ще трябва да си поиграеш малко с начина по който създаваш обектите. В смисъл може да имаш random генератор за вида камак, който ще създадеш и вече в зависимост какво ти се падне от зарчето такъв обект да направиш, като вече по-големите обекти може да бъдат съставни от по-малки обекти и т.н. Малко се оплеснах, дано си ме разбрала :D

Идеята ти за нивата е интересна. Аз лично бих използвал няколко counter-а като например времеви counter, който се стартира при достигане на определени точки, при което ще излезе някъде съобщение, че си достигнал ново ниво и чрез този counter да не изчезне на следващата итерация на цикъла например. А може би и по по-лесен начин може да стане, просто това ми беше най-първата идея. Ще трябва малко да си поиграеш :) (Пак дано си ме разбрала...)

Ето го моето решение отново да видиш как съм адресирал някой неща относно първите въпроси.

2
ViValDam avatar ViValDam 15 Точки

Ако искаш двойни или тройни символи , както е показано на картинката най-отгоре , ще трябва да ги декларираш ,като string, а не като char

string stone = "+++";

Освен това не е задължително да ползваш символите дадени в задачата - може и други, аз си сложих за джуджето една главичка .

 

Целта на задачата , в крайна сметка, е да практикуваме вход и изход от конзолота .

За различните цветове , декларирай няколко различни обекта, от тип камък , всеки да е с различен символ и различен цвят - виж най-добре във видеото на Терелик,  как го прави Ники - все пак се учим още  и повечето неща , които се ползват в играта, не сме ги учили още ! Гледай и преписвай !smile Аз така направих !

 

А ,защо си сложила скоби на джуджето ? Те не са към него ! И стрелките не са към него , просто показват ,че се движи в тези посоки , а не  .

 

Един символ стига за джуджето,че иначе много ще го удрят по главата wink

2
coaster avatar coaster 412 Точки

@HPetrov, с поста си ми вдъхна акъл, така да се каже, и направих скромна добавка, която всъщност е само за красота и май повече вреди, отколкото помага. Но все пак има лъч светлина :D Направих камъните да са рандом обекти, но ми взима живот само тогава, когато ме удари диез #, защото така е зададено.. Не знам дали би било правилно да правя if-loop за всеки възможен char, който се появява на конзолата (дори звучи безумно). Това са двата реда, които правят голямото чудо хаха:

int num = randomGenerator.Next(0, 10);
newRock.c = (char)('#' + num);

Би ли пояснил какво имаш предвид под "няколко counter-а като например времеви counter"? Опитах с if-loop (отново...), но съобщението за ниво се появява с премигване и като цяло не прави това, което искам.
И благодаря, утре ще прегледам решението ти на свежа глава! :)

@ViValDam, наистина направо си преписах голяма част от кода на Ники. Не мисля, че бих се справила сама на този етап, но си права, че трябва да дерзаем и да напредваме, а не да тъпчем на едно място. И много умна забележка, изобщо не се бях замислила, че стрелкичките не се използват, а ни трябва само нулата. Тенкс и на теб!

0
ViValDam avatar ViValDam 15 Точки

Ако искаш двойни или тройни символи , както е показано на картинката най-отгоре , най-лесно е  да  декларираш , символа за камък,  като string, а не като char . Така ще можеш да имаш единични, двойни, тройни или колкото си искаш дълги "камъни". Например :

 string stone.symbol = "+++"; 

 

Освен това не е задължително да ползваш символите дадени в задачата - може и други, аз си сложих за джуджето една главичка smile  от АССКИ табелата.

 

Целта на задачата , в крайна сметка,  е да практикуваме вход и изход от конзолота .

А, някой може ли да ми обясни как се слага картинка във форума ?

0
ViValDam avatar ViValDam 15 Точки

Как се слагат картинки във форума ?

Аз нещо не успявам !surprised

0
aslv1 avatar aslv1 304 Точки

Здравейте!

Тук е и моят код!

Моля, ако имате забележки или препоръки, споделете ги!

Поздрави!

0
KeepAlive avatar KeepAlive 0 Точки

Здравейте, бихте ли ми ми дали пример и обяснили как да проверя, когато падащите камъни имат еднакви кординати с (0) . ако беше един символ щеше да е доста лесно x и y се проверяват дали съвпадат, но сега камъните може да са три символа, два или един, а (0) са три, та как да ги проверя, каква е логията, благодаря предварително.

0
Fleshian avatar Fleshian 379 Точки

Здравей, малко по горе в коментарите съм обеснил как правя проеверката , там където пише По въпрос едно. Ако не схващаш нещо питай. :)

0
KeepAlive avatar KeepAlive 0 Точки

if (newObject.y == dwarf.y && newObject.x >= dwarf.x && newObject.x <= dwarf.x + 2)
{
       speed -= 50;
}

 

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

***       **

    (0)      (0)

В тези два случея, не бачка.

0
aslv1 avatar aslv1 304 Точки

Всичко зависи от това как си решил да дефинираш обектите - т. е. дали най-левия край ще се пази във x например.

Ето малко псевдокод:

 

 

 

if(обект.х == dwarf.x /* т. е. дали са на един и същи ред*/ &amp;&amp; (обект.най-ляв х &lt;= dwarf.най-десен x /* дали го чуква отдясно*/ || обект.най-десен х &gt;= dwarf.най-ляв х &nbsp;/* сали го чуква отляво */))

0
milen8204 avatar milen8204 296 Точки

С много мъки достигнах до някакво работещо решение , използвал съм List<Object>,в който се съхраняват каманите( като Object) и се принтират на конзолата с помоща на специален метод за принтиране на Object, играча съм го представил като 3 Objecta ("(", "O" и ")") и го принтирам всеки път на конзолата със същия метод, направил съм някаква система за точки като мине ред и играча е жив да му дава 1 точка, на всеки натрупани 100 точки усложнявам играта, като махам 10 от Thread.Sleep(...). Може още да се пудри, но може да се счита, че задачата е решена :). 

0
coaster avatar coaster 412 Точки

А някой има ли представа как може да се направи така, че когато потребителят натисне бутон [ESC], автоматично да се затваря играта? Пробвах разни неща от stackoverflow и MSDN, но не успях да ги накарам да работят. Например:

var key = Console.ReadKey();
if (key.Key == ConsoleKey.Escape)
{

Environment.Exit(0);
}

Също така се забих с някакви Forms, Threads, Processes и прочие, уви не проработиха, та нека някой по-осведомен да шеърне знанията си. :)

0
beBoss avatar beBoss 507 Точки
Console.WriteLine("press esc");
do {
while (! Console.KeyAvailable) {
// code...
}
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);
4
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.