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
ViValDam avatar ViValDam 15 Точки

http://prikachi.com/images.php?images/583/7212583q.jpg

 

Това е скрин-шот от моята , 12 задача, която е вече напълно готова според моите критерии.

Стана доста хубавичка.cool 

И работи безпогрешно.

Но и аз хвърлих доста труд по нея, но в никакъв случай  не съжалявам !smile

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

Като например - за какво служат Обектите .

 

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

Моят браузер е Опера.

 

Някакви идеи и препоръки ?

 

След , малко ще пусна и кода на задачата , но да си изпратя първо домашното и да я кача някъде ,че е много дълга - най-дългият досега от мен написан код wink

 

1
ViValDam avatar ViValDam 15 Точки

Ето го и кода , към моето решение на 12 задача "Faling Rocks"

и 

скриншот от на конзолата по време на игра:

 

Code :

 

http://pastebin.com/s4XVCJig

 

Screenshot :

 

http://prikachi.com/images.php?images/612/7212612D.jpg

 

Много съм щастлива ,че успях да сътворя това , - вярно с много усилия ,но стана както го исках  smile

 

Приятна игра !

smile

2
achebg avatar achebg Trainer 387 Точки

Ето моето решение на задачата. Тук проверява за блъскане в стената на трола и паднал камък на главата или ръцете :)

Отделно пуска произволно по 1 до 4 камъка на всяко падане.

Брои и резултат и връща при край на играта.

 

Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace FallingRocks
{
class FallingRocks
{
class Item
{
public int X, Y;
public string Type, Empty;
public ConsoleColor Color;
public Item(int x, int y, ConsoleColor color, string type)
{
this.X = x;
this.Y = y;
this.Color = color;
this.Type = type;
for (int i = 0; i < this.Type.Length; i++)
{
this.Empty += " ";
}
}
public void Display()
{
Console.SetCursorPosition(this.X, this.Y);
Console.ForegroundColor = this.Color;
Console.Write(this.Type);
}
public void Clear()
{
Console.SetCursorPosition(this.X, this.Y);
Console.Write(this.Empty);
}
}
class Dwarf : Item
{
public Dwarf()
: base(Console.WindowWidth / 2,
Console.WindowHeight - 1,
ConsoleColor.DarkYellow,
"(0)")
{}
public void Move(ConsoleKeyInfo pressedKey)
{
switch (pressedKey.Key)
{
case ConsoleKey.LeftArrow:
if (this.X > 0)
{
this.Clear();
this.X--;
this.Display();
}
break;
case ConsoleKey.RightArrow:
if (this.X < Console.WindowWidth - 2 - 2)
{
this.Clear();
this.X++;
this.Display();
}
break;
default:
break;
}
}
}
static void Main()
{
Random rnd = new Random();
string[] rockTypes = { "!", "@", "#", "$", "%", "^", "&", "*", ".", ";" };
List<Item> rocks = new List<Item>();
long score = 0;
double SleepTime = 200;
Console.CursorVisible = false;
Console.BufferHeight = Console.WindowHeight;
Console.WriteLine("Falling rocks game!");
Console.WriteLine("Use the arrow keys to move the dwarf (0) at the bottom.");
Console.WriteLine("Try to avoid being hit!");
Console.WriteLine("Press one of the arrows to start...");
ConsoleKeyInfo pressedKey = Console.ReadKey();
if (pressedKey.Key == ConsoleKey.LeftArrow ||
pressedKey.Key == ConsoleKey.RightArrow)
{
Dwarf dwarf = new Dwarf();
dwarf.Display();
while (true)
{
for (int i = rnd.Next(0,3); i < 4; i++) //randomly generate 1-4 new rocks
{
Item rock = new Item(rnd.Next(0, Console.WindowWidth - 1),
0,
(ConsoleColor)rnd.Next((int)ConsoleColor.Blue,(int)ConsoleColor.White),
rockTypes[rnd.Next(rockTypes.Length)]);
rock.Display(); //displaying the rocks
rocks.Add(rock); //adding the rocks to a list
}
foreach (Item i in rocks) //generating falling of rocks
{
i.Clear();
i.Y++;
if (i.Y < (Console.WindowHeight)) i.Display(); //showing the fallen rock only in the field
else score++; //adding score for each fallen rock
if ((i.X >= dwarf.X) &&
(i.X <= dwarf.X + 2) &&
(i.Y >= dwarf.Y) &&
(i.Y <= dwarf.Y + 2))
{
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Game over!!!");
Console.WriteLine("Your score is {0} points!", score);
return;
}
}
rocks.RemoveAll(i => i.Y >= (Console.WindowHeight));
if (Console.KeyAvailable)
{
dwarf.Move(Console.ReadKey());
}
Thread.Sleep((int)SleepTime);
SleepTime -= 0.05;
}
}
}
}
}

2
vladislav_hadzhiyski avatar vladislav_hadzhiyski 66 Точки

Falling Rocks Това е моето решение. Неуспях да направя "скалите" да имат различна дължина, но и така ми се струва добре играта. Работя върху записването на точките на всяка игра в текстов документ и класиране на ТОП 10.

2
ViValDam avatar ViValDam 15 Точки

"Дългите камъни" - тези  с повече от един символ", стават, като вместо да ги дефинираш ,като символи от тип чар  , ги дефинираш от тип стринг - и можеш да си слагаш колкото  си искаш символа в един камъкр може  и различни символи в един камък, може и само един символ - с тип стринг може всичко !

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

1
coaster avatar coaster 412 Точки

Ако ти трябва помощ за записването на точките в избран файл:
Можеш да го направиш с помощта на класа StreamWriter на System.IO. За целта си импортни namespace-а System.IO. Можеш да създадеш обект на класа по следния начин:

StreamWriter pointsInfoFile = new StreamWriter("d:\\pointsInfo.txt");

След това въртиш цикъл до размера на точките (в зависимост от обекта, в който ги записваш, това може да стане по различни начини - прилагам пример за списък):

for (int i = 0; i < pointsList.Count; i++)
{
    pointsInfoFile .WriteLine(pointList[i].ToString());
}

Последната операция затваря процеса, отворен от създаването новия файл:

pointsInfoFile.Close();

И пак да кажа - променливите ти могат да варират, но според мен това е най-лесният начин.
Поздрави и успех!
0
mar0der avatar mar0der 191 Точки

Скрийшот от играта на линка долу. Моля ако някой може да ме светне как мога да вкарам картинката да се вижда в поста. Правя го уж както трябва а снимката не се показва. Вероятно е голяма или нещо подобно. Благодаря предварително!

http://prikachi.com/images.php?images/495/7221495s.png

Поиграх си с тази задачка. Отне ми 7,5 часа. Мисля, че съм ползвал всичко което сме учили на курса и няколко допълнителни неща.

Направих играта със следните фичъри:

1.Брояч на точките ( колкто повече скали успеете да излъжете толкова повече точки.). 

2. Нива - на всеки 10 скали се вдига ниво и на всяко ниво се добавя по една допълнителна скала на екрана. Максимума е 100. Става доста интересно след определен брой скали.

3. Всяка скала се движи с различна скорост (5 скорости на движение)

4. "животи". Започвате с 5 живота и ако ви опраскат 5 скали край на играта.

5.Смешен "ефект" при "умиране" исках да сложа wav файл за повече драма, но трябваше да събмитвам домашното.

6. Начален екран с инструкции и краен екран с точки и game over надпис. 

7. Бутон за излизане от играта по всяко време (Q) и бутон за спиране на движението на джуджето ( стрелка надолу)

ето и кода:

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

 П.П: имах проблем с това да накарам скалите да стигат до последния ред. Стигнат ли там гърми. Не можах да открия защо става така. Ако някой се сети много стрелкички нагоре ще му нацъкам :)

2
ViValDam avatar ViValDam 15 Точки

Сложи им на камъните  у -координата = (височината на конзолата -1 )и няма да гърми - виж в моята игра как са координатите , малко над твоята smile

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

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

Имам и животи -5 сърчица , които намаляват при удар и се увеличават при бонус за живот, имам и събиране на скъпоценноссти - 11 бр, като ги събереш - побеждаваш .

Освен това я направих с "програмистка тематика" - хвърчат програмни езици и други необходими за програмистта неща, като бонуси - моето джудже иска да стане програмист wink

Имам и аз начален екран с указания и краен с избор за край на играта или за нова игра - за последната опция трябваше да пренапиша играта наново - но научих така много неща .

 

Моята игра работи без никаква грешка , но я правих 7 дена , а не 7 часа wink.

И ти като поработиш още над твоята , ще стане перфект !cool

 

Ето го и кода , към моето решение на 12 задача "Faling Rocks"

и

скриншот на конзолата по време на игра:

 

Code :

 

http://pastebin.com/s4XVCJig

 

Screenshot :

 

http://prikachi.com/images.php?images/612/7212612D.jpg

 

 

3
mar0der avatar mar0der 191 Точки

Дам играта ти е яка доста труд е вложен. Най- малкото е 700 реда мойта е само 350. Имах желание и идеи за подобрение, но стана 11:45 и трябваше да я кача в системата. Даже се наложи на няколко места да ползвам магически числа. Сега пак си разгледах кода за местенето и триенето на каманите и открих че правя проверка за позиция добавям ход надолу и чак токгава принтирам и за тва като отида на последния ред гарми щото се опитва да пропадне под последния ред. Трябва да си поиграя с алгоритъма за движение. Мерси. 

Иначе за звука пробвах Console.Beep(500,1000) и комютъра ми беше ням като пън. 10 мин отделих за това и се отказах. За това направих смешния ефект при сблъсък.

А това на крайния екран да те праща в началото малко на не се сещам как ще стане. трябва да разгледам кода ти по подробно.

Междо другото бих искал да помоля модераторите или създателя на темата ако може да изнесе в първия пост всички решения (код/снимка) за да не се налага да прочитаме 3 страници с постове за да видиме кой я е направил и как. Благодаря предварително :)

0
ViValDam avatar ViValDam 15 Точки

coaster няма нужда от специялни функции, да записваш /запомняш нещо в играта - при мен всичко е с обикновенни цикли .

Просто се използва координатната система на конзолата - (0,0) е най- горе в ляво и се записва нещото на избрани координати , нещото е или стойност или символ , които после или се изтриват или променят, като просто в тези координати се задава нищо или нова стойност.

 

0
ViValDam avatar ViValDam 15 Точки

Ей, сега ,като си прегледах кода си  открих грешки в коментарите  - прави бяха на лекциитеwink да не се ръководим от коментари - при промените коментарите биват забравени да бъдат променени, както и си открих една друга малка грешцица в музикалната част при победа .

Ето го поправеният код :

 

http://pastebin.com/R2VpdJ1H

Моля, модератора да промени линка към моят код и в началото на тази тема, че да не се излагам surprised !

Благодаря ! smile

 

Edit:

За да се рестартира играта, трябва да се върнат всички променливи в началните им стойностти и  да се прочете някакъв ключ за изход. Затова всичките камъни се декларират като обект ,  с еднаква структура - struct , записват се в един List (при мен се казва listOfObjects) и конзолата се почиства наведнъж., като се изтрие всичко от конзолата и се изтрие този List от обектите  

това става с командите: Console.Clear(); listOfObjects.Clear(); после слагаме всички променливи в началните им стойностти и извикваме : Main(); и програмата започва пак от начало с началните си стойностти .

1
a.angelov avatar a.angelov 1316 Точки

Здравейте,

имам нужда от помощ за тази задачка. Това е кодът ми към момента: http://pastebin.com/qvmGTzua /умишлено съм закоментирал проверките за сблъсък със скалички, които имат дължина 2 и 3 символа за да е по-лесно дебъгването и да се проверява само за сблъсък със скаличка от 1 символ/.

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

Надявам се, някой да помогне и да открие бъга :)

 

0
a.angelov avatar a.angelov 1316 Точки
Повдигам темата за да не потъне и все някой да види въпросът ми по-горе... Благодаря предварително! :)
0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.