From 4862002cd71583aa2cf327b4d2fdf4f07c124c5a Mon Sep 17 00:00:00 2001 From: joshashtondev Date: Tue, 4 Aug 2026 06:56:44 -0600 Subject: [PATCH] init commit --- contacts/Address.cs | 76 ++++ contacts/AddressType.cs | 11 + contacts/Birthday.cs | 67 +++ contacts/Contact.cs | 385 ++++++++++++++++++ contacts/ContactCategory.cs | 10 + contacts/Contacts.csproj | 13 + contacts/Contacts.sln | 16 + contacts/FileIO.cs | 77 ++++ contacts/Phone.cs | 60 +++ contacts/PhoneType.cs | 10 + contacts/Program.cs | 266 ++++++++++++ contacts/Resolver.cs | 272 +++++++++++++ .../obj/ContactApp.csproj.nuget.dgspec.json | 67 +++ contacts/obj/ContactApp.csproj.nuget.g.props | 15 + .../obj/ContactApp.csproj.nuget.g.targets | 2 + .../obj/Contacts.csproj.nuget.dgspec.json | 70 ++++ contacts/obj/Contacts.csproj.nuget.g.props | 15 + contacts/obj/Contacts.csproj.nuget.g.targets | 2 + ...CoreApp,Version=v7.0.AssemblyAttributes.cs | 4 + .../Debug/net7.0/ContactApp.AssemblyInfo.cs | 22 + .../ContactApp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 11 + .../Debug/net7.0/ContactApp.GlobalUsings.g.cs | 8 + .../obj/Debug/net7.0/ContactApp.assets.cache | Bin 0 -> 147 bytes .../ContactApp.csproj.AssemblyReference.cache | Bin 0 -> 72488 bytes .../obj/Debug/net7.0/Contacts.AssemblyInfo.cs | 22 + .../net7.0/Contacts.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 17 + .../Debug/net7.0/Contacts.GlobalUsings.g.cs | 17 + .../obj/Debug/net7.0/Contacts.assets.cache | Bin 0 -> 730 bytes .../Contacts.csproj.AssemblyReference.cache | Bin 0 -> 621206 bytes .../Contacts.csproj.CoreCompileInputs.cache | 1 + .../Contacts.csproj.FileListAbsolute.txt | 124 ++++++ contacts/obj/Debug/net7.0/Contacts.dll | Bin 0 -> 26112 bytes .../net7.0/Contacts.genruntimeconfig.cache | 1 + contacts/obj/Debug/net7.0/Contacts.pdb | Bin 0 -> 28896 bytes contacts/obj/Debug/net7.0/apphost | Bin 0 -> 132768 bytes contacts/obj/Debug/net7.0/ref/Contacts.dll | Bin 0 -> 9728 bytes contacts/obj/Debug/net7.0/refint/Contacts.dll | Bin 0 -> 9728 bytes contacts/obj/project.assets.json | 100 +++++ contacts/obj/project.nuget.cache | 10 + contacts/obj/project.packagespec.json | 1 + contacts/obj/rider.project.restore.info | 1 + contacts/readme.md | 15 + snake/README.md | 3 + snake/Snake.sln | 16 + snake/Snake/Position.cs | 64 +++ snake/Snake/Program.cs | 228 +++++++++++ snake/Snake/Snake.cs | 83 ++++ snake/Snake/Snake.csproj | 10 + 50 files changed, 2194 insertions(+) create mode 100644 contacts/Address.cs create mode 100644 contacts/AddressType.cs create mode 100644 contacts/Birthday.cs create mode 100644 contacts/Contact.cs create mode 100644 contacts/ContactCategory.cs create mode 100644 contacts/Contacts.csproj create mode 100644 contacts/Contacts.sln create mode 100644 contacts/FileIO.cs create mode 100644 contacts/Phone.cs create mode 100644 contacts/PhoneType.cs create mode 100644 contacts/Program.cs create mode 100644 contacts/Resolver.cs create mode 100644 contacts/obj/ContactApp.csproj.nuget.dgspec.json create mode 100644 contacts/obj/ContactApp.csproj.nuget.g.props create mode 100644 contacts/obj/ContactApp.csproj.nuget.g.targets create mode 100644 contacts/obj/Contacts.csproj.nuget.dgspec.json create mode 100644 contacts/obj/Contacts.csproj.nuget.g.props create mode 100644 contacts/obj/Contacts.csproj.nuget.g.targets create mode 100644 contacts/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs create mode 100644 contacts/obj/Debug/net7.0/ContactApp.AssemblyInfo.cs create mode 100644 contacts/obj/Debug/net7.0/ContactApp.AssemblyInfoInputs.cache create mode 100644 contacts/obj/Debug/net7.0/ContactApp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 contacts/obj/Debug/net7.0/ContactApp.GlobalUsings.g.cs create mode 100644 contacts/obj/Debug/net7.0/ContactApp.assets.cache create mode 100644 contacts/obj/Debug/net7.0/ContactApp.csproj.AssemblyReference.cache create mode 100644 contacts/obj/Debug/net7.0/Contacts.AssemblyInfo.cs create mode 100644 contacts/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache create mode 100644 contacts/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 contacts/obj/Debug/net7.0/Contacts.GlobalUsings.g.cs create mode 100644 contacts/obj/Debug/net7.0/Contacts.assets.cache create mode 100644 contacts/obj/Debug/net7.0/Contacts.csproj.AssemblyReference.cache create mode 100644 contacts/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache create mode 100644 contacts/obj/Debug/net7.0/Contacts.csproj.FileListAbsolute.txt create mode 100644 contacts/obj/Debug/net7.0/Contacts.dll create mode 100644 contacts/obj/Debug/net7.0/Contacts.genruntimeconfig.cache create mode 100644 contacts/obj/Debug/net7.0/Contacts.pdb create mode 100755 contacts/obj/Debug/net7.0/apphost create mode 100644 contacts/obj/Debug/net7.0/ref/Contacts.dll create mode 100644 contacts/obj/Debug/net7.0/refint/Contacts.dll create mode 100644 contacts/obj/project.assets.json create mode 100644 contacts/obj/project.nuget.cache create mode 100644 contacts/obj/project.packagespec.json create mode 100644 contacts/obj/rider.project.restore.info create mode 100644 contacts/readme.md create mode 100644 snake/README.md create mode 100644 snake/Snake.sln create mode 100644 snake/Snake/Position.cs create mode 100644 snake/Snake/Program.cs create mode 100644 snake/Snake/Snake.cs create mode 100644 snake/Snake/Snake.csproj diff --git a/contacts/Address.cs b/contacts/Address.cs new file mode 100644 index 0000000..930eb14 --- /dev/null +++ b/contacts/Address.cs @@ -0,0 +1,76 @@ +using System; + +namespace Contacts +{ + /// + /// Represents an address for a contact. Contains methods to determine if two addresses are equal. + /// + public class Address : IEquatable
+ { + private readonly string _abbr; + private readonly string _city; + private readonly string _street; + private readonly string _zip; + public AddressType Type { get; } + + /// + /// Accepts input string in format "123 Example St,City,ST,12345". + /// + /// Full address + /// If null, defaults to "Other" + public Address(string address, AddressType? type) + { + string[] parsedAddress = address.Split(","); + if (parsedAddress.Length != 4) + throw new ArgumentException("Address must be in the format of \"123 Example St,City,ST,12345\""); + + _street = parsedAddress[0]; + _city = parsedAddress[1]; + _abbr = parsedAddress[2]; + _zip = parsedAddress[3]; + + this.Type = type ?? AddressType.Other; + } + + /// + /// Accepts input strings for each part of an address to create a new Address object. + /// + /// + /// + /// + /// + /// If null, defaults to "Other" + public Address(string street, string city, string abbr, string zip, AddressType? type) + { + this._street = street; + this._city = city; + this._abbr = abbr; + this._zip = zip; + + this.Type = type ?? AddressType.Other; + } + + /// + /// Determines if two addresses are equal, to avoid potential duplication. + /// + /// Address to compare to. If null, returns false. + /// Whether or not the two addresses are the same. + public bool Equals(Address? otherAddr) + { + if (otherAddr == null) + return false; + + return this.ToString().Equals(otherAddr.ToString()); + } + + /// + /// Formats address object to "123 Example St, City, ST 12345". + /// + /// + /// + public override string ToString() + { + return _street + ", " + _city + ", " + _abbr + " " + _zip; + } + } +} diff --git a/contacts/AddressType.cs b/contacts/AddressType.cs new file mode 100644 index 0000000..360f153 --- /dev/null +++ b/contacts/AddressType.cs @@ -0,0 +1,11 @@ +namespace Contacts +{ + + public enum AddressType + { + Home, + Business, + Work, + Other + } +} diff --git a/contacts/Birthday.cs b/contacts/Birthday.cs new file mode 100644 index 0000000..a589ff8 --- /dev/null +++ b/contacts/Birthday.cs @@ -0,0 +1,67 @@ +using System; + +namespace Contacts +{ + /// + /// Represents the birthday of a contact. + /// + /// Josh A + public class Birthday : IEquatable + { + private readonly int day; + private readonly int month; + private readonly int year; + public int Age { get; } + + /// + /// Creates a new Birthday object. + /// + /// + /// + public Birthday(int month, int day) + { + this.month = month; + this.day = day; + year = -1; + Age = -1; + } + + /// + /// Creates a new Birthday and determines the age. + /// + /// + /// + /// + public Birthday(int month, int day, int year) + { + this.month = month; + this.day = day; + this.year = year; + Age = 2023 - year; + } + + /// + /// Determines if two birthdays are equal, to avoid potential duplication. + /// + /// Birthday to compare to. If null, returns false. + /// Whether or not the two birthdays are the same. + public bool Equals(Birthday? birthdayToCompare) + { + if (birthdayToCompare == null) + return false; + + return this.ToString().Equals(birthdayToCompare.ToString()); + } + + /// + /// Formats a birthday to "MM-DD" or "MM-DD-YYYY", if a birthyear was provided. + /// + /// Formatted birthdate. + public override string ToString() + { + if (year == -1) + return month + "-" + day; + return month + "-" + day + "-" + year; + } + } +} diff --git a/contacts/Contact.cs b/contacts/Contact.cs new file mode 100644 index 0000000..622e544 --- /dev/null +++ b/contacts/Contact.cs @@ -0,0 +1,385 @@ +using System; +using System.Collections.Generic; + +namespace Contacts +{ + /// + /// Represents a contact inside of the contacts manager console application. Provides methods to update key information as well as methods to add and remove communication information. + /// + public class Contact : IEquatable + { + public string FirstName { get; set; } + public string LastName { get; set; } + public Birthday? Bday { get; set; } + public List
Addresses { get; } + public List Numbers { get; } + public List Emails { get; } + public ContactCategory Type { get; set; } + public string PictureUrl { get; set; } + private List attributes { get; } + + /// + /// Loads a saved contact and creates a new Contact object based upon the saved information. + /// + /// + public Contact(string savedContact) + { + string[] contactArr = savedContact.Split("|"); + FirstName = contactArr[0]; + LastName = contactArr[1]; + Addresses = new List
(); + Numbers = new List(); + Emails = new List(); + + if (contactArr[2].Length > 0) + { + string[] addr = contactArr[2].Split(","); + foreach (string a in addr) + { + if (!a.Equals("")) + Addresses.Add(new Address(a, null)); // TODO: Need to find addr type. + } + } + + if (contactArr[3].Length > 0) + { + string[] phones = contactArr[3].Split(","); + foreach (string p in phones) + { + if (!p.Equals("")) + Numbers.Add(new Phone(p, null)); // TODO: Need to find phone type. + } + } + + if (contactArr[4].Length > 0) + { + string[] emails = contactArr[4].Split(","); + foreach (string e in emails) + { + if (!e.Equals("")) + Emails.Add(e); + } + } + + if (!contactArr[5].Equals("")) + { + ContactCategory cat = (ContactCategory)Enum.Parse(typeof(ContactCategory), contactArr[5]); + Type = cat; + } + else + { + Type = ContactCategory.Other; + } + + if (!contactArr[6].Equals("")) + PictureUrl = contactArr[6]; + } + + /// + /// Create a new Contacts object and initialize the data structures responsible for storing multiple addresses, phone numbers, and emails. + /// + /// New contact's first name + /// New contact's last name + /// If null, defaults to "Other" + public Contact(string firstName, string lastName, ContactCategory? type) + { + this.FirstName = firstName; + this.LastName = lastName; + this.Type = type ?? ContactCategory.Other; + + Addresses = new List
(); + Numbers = new List(); + Emails = new List(); + + attributes = new List(); + } + + /// + /// Create a new Contacts object. + /// + /// + /// + /// + /// + /// + /// + /// + public Contact(string firstName, string lastName, Birthday bday, List
addresses, List numbers, + List emails, ContactCategory? type) + { + this.FirstName = firstName; + this.LastName = lastName; + this.Bday = bday; + this.Addresses = addresses; + this.Numbers = numbers; + this.Emails = emails; + + this.Type = type ?? ContactCategory.Other; + attributes = new List(); + } + public Contact() + { + + } + + /// + /// If first = true, update only the first name, otherwise update the last name. + /// + /// Updated name + /// First or last name + public void UpdateName(string name, bool first) + { + if (first) + FirstName = name; + else + LastName = name; + } + + /// + /// Update both the first name and the last name. + /// + /// Updated first name + /// Updated last name + public void UpdateName(string fName, string lName) + { + FirstName = fName; + LastName = lName; + } + + /// + /// Associate a birthday with the contact. + /// + /// Birthday object to save + public void UpdateBDay(Birthday bday) + { + this.Bday = bday; + } + + /// + /// Associate a new address with the contact. + /// + /// Address object to add + public void AddAddress(Address a) + { + Addresses.Add(a); + } + + /// + /// Disassociate an address from a contact. + /// + /// Address object to find and remove. + /// Thrown if the address is not associated with the contact. + public void RemoveAddress(Address addrToRemove) + { + if (!Addresses.Remove(addrToRemove)) + throw new ArgumentException("Address does not exist."); + } + + /// + /// Add a new Phone to the contact, if it does not already exist. + /// + /// Phone object to add. + public void AddPhone(Phone newPhone) + { + bool canAdd = true; + foreach (Phone p in Numbers) + { + if (newPhone.Equals(p)) + canAdd = false; + } + + if (canAdd) + Numbers.Add(newPhone); + } + + /// + /// Disassociate a phone from a contact. + /// + /// Phone object to find and remove. + /// Thrown if the phone is not associated with the contact. + public void RemovePhone(Phone phoneToRemove) + { + if (!Numbers.Remove(phoneToRemove)) + throw new ArgumentException("Phone number does not exist."); + } + + /// + /// Add a new email to the contact. + /// + /// Email to add. + public void AddEmail(string email) + { + Emails.Add(email); + } + + /// + /// Disassociate an email from a contact. + /// + /// Email to search and remove. + /// Thrown if the email is not associated with this contact. + public void RemoveEmail(string emailToRemove) + { + if (!Emails.Remove(emailToRemove)) + throw new ArgumentException("Email does not exist."); + } + + /// + /// Updates the contact type, ie. the relationship to the contact. + /// + /// Type to update to + public void SetContactType(ContactCategory type) + { + this.Type = type; + } + + // TODO: Need overloaded Equals methods for different situations. This is only checking if two Contacts objects are equal, but an imported Contacts may not be detected. + /// + /// Determines if two contacts are equal, to avoid potential duplication. + /// + /// Contacts to compare to. If null, returns false. + /// Whether or not the two contacts are the same. + public bool Equals(Contact? contactToCompare) + { + if (contactToCompare == null) + return false; + + return this.GetHashCode() == contactToCompare.GetHashCode(); + } + + /// + /// Calculates the hashcode of a contact by combining the hashcodes of each field of a contact. + /// + /// The Contacts's hashcode + public override int GetHashCode() + { + int code = 17; + code *= FirstName.GetHashCode(); + code *= LastName.GetHashCode(); + code *= Bday.GetHashCode(); + + foreach (Address a in Addresses) + { + code *= a.GetHashCode(); + } + + foreach (Phone p in Numbers) + { + code *= p.GetHashCode(); + } + + foreach (string e in Emails) + { + code *= e.GetHashCode(); + } + + code *= Type.GetHashCode(); + + return code; + } + + /// + /// Formats the contact in a parsable string, designed to be saved to a file. + /// + /// Parsable string. + public string SaveString() + { + attributes.Clear(); + attributes.Add(FirstName); + attributes.Add(LastName); + //attributes.Add(Bday.ToString()); // TODO: Need to implement and test birthdates. + attributes.Add(String.Join(",", Addresses)); + List nums = new List(); + foreach (Phone n in Numbers) + { + nums.Add(n.DisplayString()); + } + attributes.Add(String.Join(",", nums)); + attributes.Add(String.Join(",", Emails)); + attributes.Add("" + Type); + attributes.Add(String.Join(",", PictureUrl)); + + return String.Join("|", attributes); + } + + // TODO: Implement this method once the GUI is created, formatting contacts to best integrate into the GUI. + /// + /// Standard string representation of a Contact, for use while still using the console with no other GUI elements. + /// + /// + public override string ToString() + { + return FirstName + (LastName.Equals("") ? "" : ", " + LastName) + ": " + String.Join(", ", Addresses) + " || " + + String.Join(", ", Numbers) + " || " + String.Join(", ", Emails) + " || " + Type + " || " + PictureUrl; + } + + + + //full name needs to be firstname lastname + public static void RemoveContact(string fullName) + { + fullName = fullName.ToLower(); + + string[] arguments = fullName.Split(" "); + + string firstName = arguments[0]; + string lastName = arguments[1]; + + string filePath = "yourContacts.save"; + List linesToKeep = new List(); + + try + { + using (StreamReader reader = new StreamReader(filePath)) + { + string line; + while ((line = reader.ReadLine()) != null) // Read line by line until EOF + { + if (!(line.ToLower().Contains(firstName) && line.ToLower().Contains(lastName))) + { + linesToKeep.Add(line); + } + } + } + + using (StreamWriter writer = new StreamWriter(filePath)) + { + foreach (string line in linesToKeep) + { + writer.WriteLine(line); + } + } + + Console.WriteLine("Contact removed successfully."); + } + catch (Exception ex) + { + Console.WriteLine("Error reading or writing the file: " + ex.Message); + } + } + + + + + public static void AddContact(string firstName, string lastName, string phoneNumber, string ContactCategory) + { + string filePath = "yourContacts.save"; + string contactLine = $"{firstName}|{lastName}|{phoneNumber}|{ContactCategory}"; + + try + { + using (StreamWriter writer = new StreamWriter(filePath, true)) // Append mode is set to true + { + writer.WriteLine(contactLine); + } + + Console.WriteLine("Contact added successfully."); + } + catch (Exception ex) + { + Console.WriteLine("Error writing to the file: " + ex.Message); + } + } + } +} + + diff --git a/contacts/ContactCategory.cs b/contacts/ContactCategory.cs new file mode 100644 index 0000000..acf7f8a --- /dev/null +++ b/contacts/ContactCategory.cs @@ -0,0 +1,10 @@ +namespace Contacts +{ + public enum ContactCategory + { + Family, + Friends, + Work, + Other + } +} \ No newline at end of file diff --git a/contacts/Contacts.csproj b/contacts/Contacts.csproj new file mode 100644 index 0000000..77307d9 --- /dev/null +++ b/contacts/Contacts.csproj @@ -0,0 +1,13 @@ + + + + net7.0 + enable + enable + + + + + + + diff --git a/contacts/Contacts.sln b/contacts/Contacts.sln new file mode 100644 index 0000000..2fb6bdc --- /dev/null +++ b/contacts/Contacts.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contacts", "Contacts.csproj", "{300D68D7-C6ED-4FB6-8387-6ECE80CFE236}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {300D68D7-C6ED-4FB6-8387-6ECE80CFE236}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {300D68D7-C6ED-4FB6-8387-6ECE80CFE236}.Debug|Any CPU.Build.0 = Debug|Any CPU + {300D68D7-C6ED-4FB6-8387-6ECE80CFE236}.Release|Any CPU.ActiveCfg = Release|Any CPU + {300D68D7-C6ED-4FB6-8387-6ECE80CFE236}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/contacts/FileIO.cs b/contacts/FileIO.cs new file mode 100644 index 0000000..4909f95 --- /dev/null +++ b/contacts/FileIO.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace Contacts +{ + /// + /// Manages the contacts database and facilitates viewing the database via searching and sorting. Contains methods to update the current view. + /// + public class FileIO + { + public IEnumerable currentState { get; set; } + private readonly List _contacts = new(); + //private string _filepath = "~/.contacts"; + + /// + /// Create the FileIo object and set default view. + /// + public FileIO() + { + currentState = + from c in _contacts + select c; + } + + /// + /// Facilitates incoming compatability with .vcf, .card, and .csv filetypes for contacts into this console-based + /// contacts manager. + /// + /// + public void Import(Resolver resolver) + { + resolver.Parse(); + List contacts = resolver.Contacts; + foreach (Contact c in contacts) + _contacts.Add(c); + } + + /// + /// Facilitates outgoing compatability with .vcf, .card, and .csv filetypes for contacts into this console-based contacts manager. + /// + /// + public void Export(bool onIos) + { + // TODO + } + + /// + /// Save the contacts in the database to a file. + /// + /// Path to the file on computer + public void Save() + { + using (StreamWriter writer = new StreamWriter("yourContacts.save")) + { + foreach (Contact c in _contacts) + { + writer.WriteLine($"{c.SaveString()}"); + } + } + } + + /// + /// Load the saved contacts in the database. + /// + public void Load() + { + using (StreamReader reader = new StreamReader("yourContacts.save")) + { + while (!reader.EndOfStream) + { + _contacts.Add(new Contact(reader.ReadLine())); + } + } + } + } +} diff --git a/contacts/Phone.cs b/contacts/Phone.cs new file mode 100644 index 0000000..4ac3d69 --- /dev/null +++ b/contacts/Phone.cs @@ -0,0 +1,60 @@ +using System; + +/// +/// Represents a phone number for a contact. Contains methods to determine if two phone numbers are the same. +/// +namespace Contacts +{ + public class Phone : IEquatable + { + public string number { get; } + public PhoneType? Type { get; } + + /// + /// Accepts an input string in the format "1234567890" to create a new Phone object for a Contacts. + /// + /// + /// If null, defaults to "Other" + /// Thrown if input has an invalid format. + public Phone(string number, PhoneType? type) + { + if (number.Length != 10) + throw new ArgumentException("Input phone number should be in the format 1234567890."); + + this.number = number; + this.Type = type; + } + + /// + /// Determines if two phone numbers are equal, to avoid potential duplication. + /// + /// Phone number to compare to. If null, returns false. + /// Whether or not the two phone numbers are the same. + public bool Equals(Phone? numberToCompare) + { + if (numberToCompare == null) + return false; + + return this.ToString().Equals(numberToCompare.ToString()); + } + + + /// + /// Returns the phone number without any formatting, for use in saving contacts to a file. + /// + /// Unformatted phone number + public string DisplayString() + { + return number; + } + + /// + /// Formats the phone number to "(123) 456 - 7890" + /// + /// Formatted phone number + public override string ToString() + { + return "(" + number.Substring(0, 3) + ") " + number.Substring(3, 3) + " - " + number.Substring(6); + } + } +} diff --git a/contacts/PhoneType.cs b/contacts/PhoneType.cs new file mode 100644 index 0000000..9e55100 --- /dev/null +++ b/contacts/PhoneType.cs @@ -0,0 +1,10 @@ +namespace Contacts +{ + public enum PhoneType + { + Cell, + Work, + Home, + Other + } +} diff --git a/contacts/Program.cs b/contacts/Program.cs new file mode 100644 index 0000000..2a118a7 --- /dev/null +++ b/contacts/Program.cs @@ -0,0 +1,266 @@ +using System.Diagnostics; +using System.Drawing; +using System.IO; +using Contacts; +using static Crayon.Output; +using Crayon; + +/// +/// Test program for the contacts manager. Currently, to use, export a contacts list from your Google account or iCloud, in a CSV format. Save this file to bin/Debug/net7.0/testResources. +/// This will allow you to test with your own contacts. +/// Please remove this file prior to any pushes to Github. +/// +public class Program +{ + public static void Main(string[] args) + { + OperatingSystem os = Environment.OSVersion; // checking what OS is running + Console.WriteLine("Platform: {0}", os.Platform); + Console.WriteLine("Version: {0}", os.Version); + Console.WriteLine("Service Pack: {0}", os.ServicePack); + + bool isMacOS = (os.Platform == PlatformID.MacOSX || os.Platform == PlatformID.Unix); + + FileIO fileIO = new FileIO(); + Resolver? resolver; + + Console.Clear(); + Console.ResetColor(); + var rainbow = new Rainbow(0.5); + Console.WriteLine(Bold(""" + ___ _ _ + / __\ ___ _ __ | |_ __ _ ___ | |_ ___ /\/\ ___ _ __ __ _ ___ _ __ + / / / _ \ | '_ \ | __|/ _` | / __|| __|/ __| / \ / _ \| '__|/ _` | / _ \| '__| +/ /___| (_) || | | || |_| (_| || (__ | |_ \__ \ / /\/\ \| __/| | | (_| || __/| | +\____/ \___/ |_| |_| \__|\__,_| \___| \__||___/ \/ \/ \___||_| \__, | \___||_| + |___/ +""")); + // DrawLines(); + Console.WriteLine($"\n{Output.Background.Red(White(new string('~', Console.BufferWidth - 2)))}"); + Console.Write("> "); + Point point = new Point(Console.CursorLeft, Console.CursorTop); + bool isDebug = false; + bool isExported = false; + writeHelpCommand(Console.BufferWidth / 2, 9); + Console.SetCursorPosition(point.X, point.Y); + string? commandString = Console.ReadLine(); + while (commandString != "exit") + { + List arguments = commandString.Split(" ").ToList(); + string command = arguments[0]; + arguments.RemoveAt(0); + + switch (command.ToLower()) + { + case "add": + if (arguments.Count < 4) + { + Console.WriteLine("This command requires an argument. Use \"help\" for more info."); + break; + } + Contact.AddContact(arguments[0], arguments[1], arguments[2], arguments[3]); + break; + case "remove": + if (arguments.Count < 2) + { + Console.WriteLine("This command requires an argument. Use \"help\" for more info."); + break; + } + string fullname = arguments[0]; + fullname += " " + arguments[1]; + Contact.RemoveContact(fullname); + break; + case "view": + if (!isDebug) + { + if (isExported) + { + if (isMacOS) + { + Process.Start("/System/Applications/TextEdit.app/Contents/MacOS/TextEdit", Path.Combine(Directory.GetCurrentDirectory(), "yourContacts.save")); + } + else + { + Process.Start("notepad.exe", "yourContacts.save"); + } + } + else + { + Console.WriteLine($"The database hasn't been exported to a {Red(".save")} file. Use {Cyan("EXPORT")} before using this command"); + } + } + else + { + if (isMacOS) + { + Process.Start("/System/Applications/TextEdit.app/Contents/MacOS/TextEdit", Path.Combine(Directory.GetCurrentDirectory(), "yourContacts.save")); + } + else + { + Process.Start("notepad.exe", "yourContacts.save"); + } + } + break; + case "import": + if (arguments.Count <= 0) + { + System.Console.WriteLine("This command requires an argument. Use \"help\" for more info."); + break; + } + resolver = new Resolver(@arguments[0]); + fileIO.Import(resolver); + break; + case "export": + fileIO.Save(); + isExported = true; + Console.WriteLine($"Your new {Red(".save")} file has been saved @ {Path.Combine(Directory.GetCurrentDirectory(), "yourContacts.save")}"); + // TODO: Some way to tell them that it was saved to a certain spot in their computer + break; + case "help": + writeHelpCommand(0, 0); + break; + case "clear": + Console.Clear(); + break; + case "debug": + if (arguments.Count <= 0) + { + System.Console.WriteLine("This command requires an argument. Use \"help\" for more info."); + break; + } + if (arguments[0] == "true") + { + isDebug = true; + Console.WriteLine(Yellow("ABSOLUTE FILE PATH TO yourContacts.save: {0}"), Path.Combine(Directory.GetCurrentDirectory(), "yourContacts.save")); + } + else if (arguments[0] == "false") + { + isDebug = false; + } + else + { + Console.WriteLine("Invalid argument. Try again."); + } + break; + case "": + break; + default: + Console.WriteLine("Invalid Opperation. Try again."); + break; + } + + // DEAD LAST DO NOT TOUCHY + Console.Write(rainbow.Next().Bold().Text("> ")); + commandString = Console.ReadLine(); + } + } + public static void DrawLines() + { + for (int i = 0; i < 1; i++) + { + if (i % 2 == 0) + { + Console.Write($"{Red(new string('*', 1))}"); + Console.Write($"{Magenta(new string('*', 1))}"); + Console.Write($"{Yellow(new string('*', 1))}"); + } + else + { + Console.Write($"{Yellow(new string('*', 1))}"); + Console.Write($"{Magenta(new string('*', 1))}"); + Console.Write($"{Red(new string('*', 1))}"); + + } + } + + for (int i = 0; i < 51; i++) + { + if (i % 2 == 0) + { + Console.Write($"{Red(new string('*', 1))}"); + Console.Write($"{Magenta(new string('*', 1))}"); + Console.Write($"{Yellow(new string('*', 1))}"); + } + else + { + Console.Write($"{Yellow(new string('*', 1))}"); + Console.Write($"{Magenta(new string('*', 1))}"); + Console.Write($"{Red(new string('*', 1))}"); + + } + //Console.Write($"{Cyan(new string('*', i))}"); + // Console.WriteLine($"{('*', Console.BufferWidth - i))}"); + } + for (int i = 0; i < 33; i++) + { + if (i % 2 == 0) + { + Console.SetCursorPosition(153, 6 + i); + Console.Write($"{Magenta(new string('*', 1))}"); + Console.Write($"{Yellow(new string('*', 1))}"); + } + else + { + Console.SetCursorPosition(153, 6 + i); + Console.Write($"{Red(new string('*', 1))}"); + Console.Write($"{Yellow(new string('*', 1))}"); + } + + // Console.WriteLine($"{('*', Console.BufferWidth - i))}"); + if (i == 31) + { + + } + } + Console.SetCursorPosition(1, 7); + + } + private static void writeHelpCommand(int left, int top) + { + if (left == 0 && top == 0) + { + Console.WriteLine("Contacts Merger Help\n"); + Console.WriteLine(Bold(Green("ADD {0} {1}")), new string('.', 8), " "); + Console.WriteLine("Adds a new contact to the final save file"); + Console.WriteLine(Bold(Yellow("REMOVE {0} {1}")), new string('.', 5), " "); + Console.WriteLine("Removes contact from final save file"); + Console.WriteLine(Bold(Blue("IMPORT {0} {1}")), new string('.', 5), ""); + Console.WriteLine($"Brings in contacts from either a {Red(".csv")} file or a {Red(".vcf")} file."); + Console.WriteLine(Bold(Cyan("EXPORT {0}")), new string('.', 5)); + Console.WriteLine($"Takes all contacts taken from {Blue("IMPORT")} and compiles them-"); + Console.WriteLine("-into a pipe-separated file."); + Console.WriteLine(Bold(Magenta("VIEW {0}")), new string('.', 5)); + Console.WriteLine($"Opens the .save file that has been exported."); + Console.WriteLine(Bold(Yellow("EXIT {0}")), new string('.', 7)); + Console.WriteLine($"Exits the program"); + } + + else + { + Console.SetCursorPosition(left, top); + Console.WriteLine("Contacts Merger Help\n"); + Console.SetCursorPosition(left, top++); + Console.WriteLine(Bold(Green("ADD {0} {1}")), new string('.', 8), " "); + Console.SetCursorPosition(left, top++); + Console.WriteLine("Adds a new contact to the final save file"); + Console.SetCursorPosition(left, top++); + Console.WriteLine(Bold(Yellow("REMOVE {0} {1}")), new string('.', 5), " "); + Console.SetCursorPosition(left, top++); + Console.WriteLine("Removes contact from final save file"); + Console.SetCursorPosition(left, top++); + Console.WriteLine(Bold(Blue("IMPORT {0} {1}")), new string('.', 5), ""); + Console.SetCursorPosition(left, top++); + Console.WriteLine($"Brings in contacts from either a {Red(".csv")} file or a {Red(".vcf")} file."); + Console.SetCursorPosition(left, top++); + Console.WriteLine(Bold(Cyan("EXPORT {0}")), new string('.', 5)); + Console.SetCursorPosition(left, top++); + Console.WriteLine($"Takes all contacts taken from {Blue("IMPORT")} and compiles-."); + Console.SetCursorPosition(left, top++); + Console.WriteLine("-into a pipe-separated file."); + Console.SetCursorPosition(left, top++); + Console.WriteLine(Bold(Magenta("VIEW {0}")), new string('.', 5)); + Console.SetCursorPosition(left, top++); + Console.WriteLine($"Opens the .save file that has been exported."); + } + } +} diff --git a/contacts/Resolver.cs b/contacts/Resolver.cs new file mode 100644 index 0000000..b4a4e62 --- /dev/null +++ b/contacts/Resolver.cs @@ -0,0 +1,272 @@ +using Microsoft.VisualBasic.FileIO; +using System.Collections.Generic; +using System.IO; +using System; + +namespace Contacts +{ + + /// + /// Represents a file, and provides implementations for parsing contacts from a file. + /// + public class Resolver + { + public List Contacts { get; set; } + internal string _filepath; + private bool isGoogleCsv; + + public Resolver(string filepath) + { + _filepath = filepath; + if (!File.Exists(_filepath)) + throw new InvalidOperationException("File does not exist."); + + Contacts = new List(); + } + + /// + /// Manages the parsing process and determines the correct parser to use based upon the filetype. + /// + public void Parse() + { + string filetype = _filepath.Substring(_filepath.LastIndexOf('.')); + + switch (filetype) + { + case ".csv": + ParseCsv(); + break; + case ".vcf": + ParseVCF(); + break; + case ".card": + ParseVCF(); + break; + } + } + + /// + /// Convert a CSV file into a List, and determine if the input csv is in the Google contact format or the Outlook contact format. + /// + private void ParseCsv() + { + List contactInfo = new List(); + using (TextFieldParser parser = new TextFieldParser(_filepath)) + { + if (parser.PeekChars(5).Equals("Name,")) + isGoogleCsv = true; + else + isGoogleCsv = false; + + parser.ReadLine(); // skip header row + parser.TextFieldType = FieldType.Delimited; + parser.SetDelimiters(","); + while (!parser.EndOfData) + { + //Processing row + string[] fields = parser.ReadFields(); + foreach (string field in fields) + if (!field.Equals("")) // skip blank fields + contactInfo.Add(field); + + parser.ReadLine(); // move to next line to read the next contact. + ConvertToContact(contactInfo); // with current contact information, generate and add the new contact. + contactInfo.Clear(); // clear contact information for next contact. + } + } + } + + /// + /// Parse the information contained by a Google formatted .csv file to generate a new Contacts object. + /// + private void ConvertToContact(List csv) + { + Phone home = null; + Phone work = null; + Phone cell = null; + Phone other = null; + Contact c; + string[] contact = csv.ToArray(); + + // Check if the csv is a google or outlook formatted csv. + if (isGoogleCsv) + c = new Contact(contact[1], contact[2].Contains("*") ? "" : contact[2], null); + else + c = new Contact(contact[0], contact[1].Contains("*") ? "" : contact[1], null); + + // iterate through csv array + for (int i = 0; i < contact.Length; i++) + { + // if current element is labeled as a number, + switch (contact[i]) + { + case "Home": + home = ParsePhone(PhoneType.Home, contact[i + 1]); + if (home != null) + c.AddPhone(home); + break; + case "Work": + work = ParsePhone(PhoneType.Work, contact[i + 1]); + if (work != null) + c.AddPhone(work); + break; + case "Job": + work = ParsePhone(PhoneType.Work, contact[i + 1]); + if (work != null) + c.AddPhone(work); + break; + case "Mobile": + cell = ParsePhone(PhoneType.Cell, contact[i + 1]); + if (cell != null) + c.AddPhone(cell); + break; + case "Cell": + cell = ParsePhone(PhoneType.Cell, contact[i + 1]); + if (cell != null) + c.AddPhone(cell); + break; + case "Other": + other = ParsePhone(PhoneType.Other, contact[i + 1]); + if (other != null) + c.AddPhone(other); + break; + default: + other = ParsePhone(PhoneType.Other, contact[i]); + if (other != null) + c.AddPhone(other); + break; + } + + if (contact[i].Contains("@")) // detect an email address and add to the current contact. + c.AddEmail(contact[i]); + if (contact[i].Contains("http") || + contact[i].Contains("www.")) // detect a URL and add to the current contact. + c.PictureUrl = contact[i]; + } + + Contacts.Add(c); + } + + /// + /// Parse the information contained by the .vcf file to generate a new Contacts object. + /// + private void ParseVCF() + { + using (StreamReader reader = new StreamReader(_filepath)) + { + string line; + Contact contact = null; + while ((line = reader.ReadLine()) != null) + { + if (line.StartsWith("BEGIN:VCARD")) + { + contact = new Contact(); + } + else if (line.StartsWith("FN:") && contact != null) + { + //mabye wrong + string myLine = line; + int i = 0; + while (true) + { + if (myLine[i].Equals(" ")) + { + break; + } + else + { + contact.FirstName += myLine[i]; + i++; + } + } + //now at last name + while (true) + { + //mabye change + if (i == myLine.Length) + { + break; + } + else + { + contact.LastName += myLine[i]; + } + } + } + else if (line.StartsWith("TEL;TYPE=") && contact != null) + { + int typeEndIndex = line.IndexOf(':', 9); + string phoneType = line.Substring(9, typeEndIndex - 9).ToUpper(); + string phoneNumber = line.Substring(typeEndIndex + 1); + + PhoneType parsedPhoneType = PhoneType.Other; + + switch (phoneType) + { + case "HOME": + parsedPhoneType = PhoneType.Home; + break; + case "WORK": + parsedPhoneType = PhoneType.Work; + break; + case "CELL": + parsedPhoneType = PhoneType.Cell; + break; + case "OTHER": + parsedPhoneType = PhoneType.Other; + break; + } + + Phone phone = ParsePhone(parsedPhoneType, phoneNumber); + if (phone != null) + { + contact.AddPhone(phone); + } + } + else if (line.StartsWith("EMAIL:") && contact != null) + { + string email = line.Substring(6); + contact.AddEmail(email); + } + else if (line.StartsWith("PHOTO;VALUE=URI:") && contact != null) + { + string pictureUrl = line.Substring(15); + contact.PictureUrl = pictureUrl; + } + else if (line.StartsWith("END:VCARD") && contact != null) + { + Contacts.Add(contact); + contact = null; + } + } + } + } + + /// + /// Parses any format of a phone number into the acceptable format 1234567890. + /// + /// + /// + /// + private Phone ParsePhone(PhoneType type, string number) + { + List list = new List(); + char[] characters = number.ToCharArray(); + + for (int i = 0; i < characters.Length; i++) + if (char.IsDigit(characters[i])) // if the character is a digit, add it to the list + list.Add(characters[i]); + + if (list.Count == 11) // remove the international code + list.RemoveAt(0); + + string outputNumber = string.Join("", list); + if (outputNumber.Length > 10 || + outputNumber.Length < + 10) // detect if this was an email or address labeled as a generic category, ie. "Home". + return null; + + return new Phone(outputNumber, type); + } + } +} diff --git a/contacts/obj/ContactApp.csproj.nuget.dgspec.json b/contacts/obj/ContactApp.csproj.nuget.dgspec.json new file mode 100644 index 0000000..a47aac1 --- /dev/null +++ b/contacts/obj/ContactApp.csproj.nuget.dgspec.json @@ -0,0 +1,67 @@ +{ + "format": 1, + "restore": { + "/home/jashton/dev/active/2410-Contacts/ContactApp/ContactApp/ContactApp.csproj": {} + }, + "projects": { + "/home/jashton/dev/active/2410-Contacts/ContactApp/ContactApp/ContactApp.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/home/jashton/dev/active/2410-Contacts/ContactApp/ContactApp/ContactApp.csproj", + "projectName": "ContactApp", + "projectPath": "/home/jashton/dev/active/2410-Contacts/ContactApp/ContactApp/ContactApp.csproj", + "packagesPath": "/home/jashton/.nuget/packages/", + "outputPath": "/home/jashton/dev/active/2410-Contacts/ContactApp/ContactApp/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/home/jashton/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net7.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[7.0.3, 7.0.3]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/7.0.103/RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/contacts/obj/ContactApp.csproj.nuget.g.props b/contacts/obj/ContactApp.csproj.nuget.g.props new file mode 100644 index 0000000..a3f13cd --- /dev/null +++ b/contacts/obj/ContactApp.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /home/jashton/.nuget/packages/ + /home/jashton/.nuget/packages/ + PackageReference + 6.4.0 + + + + + \ No newline at end of file diff --git a/contacts/obj/ContactApp.csproj.nuget.g.targets b/contacts/obj/ContactApp.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/contacts/obj/ContactApp.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/contacts/obj/Contacts.csproj.nuget.dgspec.json b/contacts/obj/Contacts.csproj.nuget.dgspec.json new file mode 100644 index 0000000..08d4915 --- /dev/null +++ b/contacts/obj/Contacts.csproj.nuget.dgspec.json @@ -0,0 +1,70 @@ +{ + "format": 1, + "restore": { + "/Users/marcuswalker/Documents/2410-Contacts/Contacts.csproj": {} + }, + "projects": { + "/Users/marcuswalker/Documents/2410-Contacts/Contacts.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/marcuswalker/Documents/2410-Contacts/Contacts.csproj", + "projectName": "Contacts", + "projectPath": "/Users/marcuswalker/Documents/2410-Contacts/Contacts.csproj", + "packagesPath": "/Users/marcuswalker/.nuget/packages/", + "outputPath": "/Users/marcuswalker/Documents/2410-Contacts/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/marcuswalker/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net7.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "Crayon": { + "target": "Package", + "version": "[2.0.69, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.AspNetCore.App": { + "privateAssets": "none" + }, + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/7.0.203/RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/contacts/obj/Contacts.csproj.nuget.g.props b/contacts/obj/Contacts.csproj.nuget.g.props new file mode 100644 index 0000000..6d9d675 --- /dev/null +++ b/contacts/obj/Contacts.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /Users/marcuswalker/.nuget/packages/ + /Users/marcuswalker/.nuget/packages/ + PackageReference + 6.5.0 + + + + + \ No newline at end of file diff --git a/contacts/obj/Contacts.csproj.nuget.g.targets b/contacts/obj/Contacts.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/contacts/obj/Contacts.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/contacts/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/contacts/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs new file mode 100644 index 0000000..4257f4b --- /dev/null +++ b/contacts/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")] diff --git a/contacts/obj/Debug/net7.0/ContactApp.AssemblyInfo.cs b/contacts/obj/Debug/net7.0/ContactApp.AssemblyInfo.cs new file mode 100644 index 0000000..c14b55d --- /dev/null +++ b/contacts/obj/Debug/net7.0/ContactApp.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("ContactApp")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("ContactApp")] +[assembly: System.Reflection.AssemblyTitleAttribute("ContactApp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/contacts/obj/Debug/net7.0/ContactApp.AssemblyInfoInputs.cache b/contacts/obj/Debug/net7.0/ContactApp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..e2c07a7 --- /dev/null +++ b/contacts/obj/Debug/net7.0/ContactApp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +179adf1247370440b107dc2dfb5bbe6de8400e1e diff --git a/contacts/obj/Debug/net7.0/ContactApp.GeneratedMSBuildEditorConfig.editorconfig b/contacts/obj/Debug/net7.0/ContactApp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..6f9a770 --- /dev/null +++ b/contacts/obj/Debug/net7.0/ContactApp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,11 @@ +is_global = true +build_property.TargetFramework = net7.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = ContactApp +build_property.ProjectDir = /home/jashton/dev/active/2410-Contacts/ContactApp/ diff --git a/contacts/obj/Debug/net7.0/ContactApp.GlobalUsings.g.cs b/contacts/obj/Debug/net7.0/ContactApp.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/contacts/obj/Debug/net7.0/ContactApp.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/contacts/obj/Debug/net7.0/ContactApp.assets.cache b/contacts/obj/Debug/net7.0/ContactApp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..0699ecbf971cce782d5c17766a3f0568588117d9 GIT binary patch literal 147 zcmWIWc6a1vU|^WFcXB+pWRSIp%t8j+qvH08dGnX*e>3=ZH|IL{udOE+^aIrp0~mpd m{bsK~L literal 0 HcmV?d00001 diff --git a/contacts/obj/Debug/net7.0/ContactApp.csproj.AssemblyReference.cache b/contacts/obj/Debug/net7.0/ContactApp.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..b9f8be1b7e2ec94369fae8eaea64535033d7603b GIT binary patch literal 72488 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 literal 0 HcmV?d00001 diff --git a/contacts/obj/Debug/net7.0/Contacts.AssemblyInfo.cs b/contacts/obj/Debug/net7.0/Contacts.AssemblyInfo.cs new file mode 100644 index 0000000..0505b44 --- /dev/null +++ b/contacts/obj/Debug/net7.0/Contacts.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Contacts")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Contacts")] +[assembly: System.Reflection.AssemblyTitleAttribute("Contacts")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/contacts/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache b/contacts/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache new file mode 100644 index 0000000..bcac9d9 --- /dev/null +++ b/contacts/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +ac8a5cca5cb465ad43c1acdee69302679ed547f9 diff --git a/contacts/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig b/contacts/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..9fc74dd --- /dev/null +++ b/contacts/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,17 @@ +is_global = true +build_property.TargetFramework = net7.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = true +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Contacts +build_property.RootNamespace = Contacts +build_property.ProjectDir = /Users/marcuswalker/Documents/2410-Contacts/ +build_property.RazorLangVersion = 7.0 +build_property.SupportLocalizedComponentNames = +build_property.GenerateRazorMetadataSourceChecksumAttributes = +build_property.MSBuildProjectDirectory = /Users/marcuswalker/Documents/2410-Contacts +build_property._RazorSourceGeneratorDebug = diff --git a/contacts/obj/Debug/net7.0/Contacts.GlobalUsings.g.cs b/contacts/obj/Debug/net7.0/Contacts.GlobalUsings.g.cs new file mode 100644 index 0000000..025530a --- /dev/null +++ b/contacts/obj/Debug/net7.0/Contacts.GlobalUsings.g.cs @@ -0,0 +1,17 @@ +// +global using global::Microsoft.AspNetCore.Builder; +global using global::Microsoft.AspNetCore.Hosting; +global using global::Microsoft.AspNetCore.Http; +global using global::Microsoft.AspNetCore.Routing; +global using global::Microsoft.Extensions.Configuration; +global using global::Microsoft.Extensions.DependencyInjection; +global using global::Microsoft.Extensions.Hosting; +global using global::Microsoft.Extensions.Logging; +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Net.Http.Json; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/contacts/obj/Debug/net7.0/Contacts.assets.cache b/contacts/obj/Debug/net7.0/Contacts.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..48711056d9753a66ca88edbfca1846a5de54d043 GIT binary patch literal 730 zcmcJNy-ve05P%D$zt93LD;r{9h=BpA3sTjJDx#DM%8yvUO^y=PaiZ7(mg3gc6llqOuj|sg~8*9#XrZSHK_yXIKE^E!||AH+LDDeIJY@i$t}tRWcEO~ z>=G=k?FXQ#0&C;+_t%HXR)hfA4n0Ww0hhJ|*{bV>4cDYhlbE+y10iirCB9`p=%^~W HpC9!Jpe4WV literal 0 HcmV?d00001 diff --git a/contacts/obj/Debug/net7.0/Contacts.csproj.AssemblyReference.cache b/contacts/obj/Debug/net7.0/Contacts.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..518753ad60d2344f670bca76c6abf0feb23031e3 GIT binary patch literal 621206 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 literal 0 HcmV?d00001 diff --git a/contacts/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache b/contacts/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..0bc8887 --- /dev/null +++ b/contacts/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +20479485776e2d1315de5d34b1bc77d2e424ee1f diff --git a/contacts/obj/Debug/net7.0/Contacts.csproj.FileListAbsolute.txt b/contacts/obj/Debug/net7.0/Contacts.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..2dcb352 --- /dev/null +++ b/contacts/obj/Debug/net7.0/Contacts.csproj.FileListAbsolute.txt @@ -0,0 +1,124 @@ +/home/jashton/dev/active/2410Contacts/bin/Debug/net7.0/Contacts +/home/jashton/dev/active/2410Contacts/bin/Debug/net7.0/Contacts.deps.json +/home/jashton/dev/active/2410Contacts/bin/Debug/net7.0/Contacts.runtimeconfig.json +/home/jashton/dev/active/2410Contacts/bin/Debug/net7.0/Contacts.dll +/home/jashton/dev/active/2410Contacts/bin/Debug/net7.0/Contacts.pdb +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/Contacts.csproj.AssemblyReference.cache +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/Contacts.AssemblyInfo.cs +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/Contacts.dll +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/refint/Contacts.dll +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/Contacts.pdb +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/Contacts.genruntimeconfig.cache +/home/jashton/dev/active/2410Contacts/obj/Debug/net7.0/ref/Contacts.dll +/home/jashton/dev/active/2410-Contacts/bin/Debug/net7.0/Contacts +/home/jashton/dev/active/2410-Contacts/bin/Debug/net7.0/Contacts.deps.json +/home/jashton/dev/active/2410-Contacts/bin/Debug/net7.0/Contacts.runtimeconfig.json +/home/jashton/dev/active/2410-Contacts/bin/Debug/net7.0/Contacts.dll +/home/jashton/dev/active/2410-Contacts/bin/Debug/net7.0/Contacts.pdb +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/Contacts.csproj.AssemblyReference.cache +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/Contacts.AssemblyInfo.cs +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/Contacts.dll +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/refint/Contacts.dll +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/Contacts.pdb +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/Contacts.genruntimeconfig.cache +/home/jashton/dev/active/2410-Contacts/obj/Debug/net7.0/ref/Contacts.dll +/home/jashton/dev/active/2410-contacts/bin/Debug/net7.0/appsettings.Development.json +/home/jashton/dev/active/2410-contacts/bin/Debug/net7.0/appsettings.json +/home/jashton/dev/active/2410-contacts/bin/Debug/net7.0/Contacts.staticwebassets.runtime.json +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/Contacts.MvcApplicationPartsAssemblyInfo.cache +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/Contacts.RazorAssemblyInfo.cache +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/Contacts.RazorAssemblyInfo.cs +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/staticwebassets/msbuild.Contacts.Microsoft.AspNetCore.StaticWebAssets.props +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/staticwebassets/msbuild.build.Contacts.props +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/staticwebassets/msbuild.buildMultiTargeting.Contacts.props +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/staticwebassets/msbuild.buildTransitive.Contacts.props +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/staticwebassets.pack.json +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/staticwebassets.build.json +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/staticwebassets.development.json +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/scopedcss/Pages/Shared/_Layout.cshtml.rz.scp.css +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/scopedcss/bundle/Contacts.styles.css +/home/jashton/dev/active/2410-contacts/obj/Debug/net7.0/scopedcss/projectbundle/Contacts.bundle.scp.css +C:/Users/Marcus/Desktop/contacts-console/bin/Debug/net7.0/Contacts.exe +C:/Users/Marcus/Desktop/contacts-console/bin/Debug/net7.0/Contacts.deps.json +C:/Users/Marcus/Desktop/contacts-console/bin/Debug/net7.0/Contacts.runtimeconfig.json +C:/Users/Marcus/Desktop/contacts-console/bin/Debug/net7.0/Contacts.dll +C:/Users/Marcus/Desktop/contacts-console/bin/Debug/net7.0/Contacts.pdb +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.csproj.AssemblyReference.cache +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.AssemblyInfo.cs +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.MvcApplicationPartsAssemblyInfo.cache +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/staticwebassets/msbuild.Contacts.Microsoft.AspNetCore.StaticWebAssets.props +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/staticwebassets/msbuild.build.Contacts.props +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/staticwebassets/msbuild.buildMultiTargeting.Contacts.props +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/staticwebassets/msbuild.buildTransitive.Contacts.props +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/staticwebassets.pack.json +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/staticwebassets.build.json +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/staticwebassets.development.json +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/scopedcss/bundle/Contacts.styles.css +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.dll +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/refint/Contacts.dll +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.pdb +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.genruntimeconfig.cache +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/ref/Contacts.dll +C:/Users/overw/source/repos/2410-Contacts/bin/Debug/net7.0/Contacts.exe +C:/Users/overw/source/repos/2410-Contacts/bin/Debug/net7.0/Contacts.deps.json +C:/Users/overw/source/repos/2410-Contacts/bin/Debug/net7.0/Contacts.runtimeconfig.json +C:/Users/overw/source/repos/2410-Contacts/bin/Debug/net7.0/Contacts.dll +C:/Users/overw/source/repos/2410-Contacts/bin/Debug/net7.0/Contacts.pdb +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.csproj.AssemblyReference.cache +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.AssemblyInfo.cs +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.MvcApplicationPartsAssemblyInfo.cache +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/staticwebassets/msbuild.Contacts.Microsoft.AspNetCore.StaticWebAssets.props +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/staticwebassets/msbuild.build.Contacts.props +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/staticwebassets/msbuild.buildMultiTargeting.Contacts.props +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/staticwebassets/msbuild.buildTransitive.Contacts.props +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/staticwebassets.pack.json +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/staticwebassets.build.json +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/staticwebassets.development.json +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/scopedcss/bundle/Contacts.styles.css +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.dll +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/refint/Contacts.dll +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.pdb +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.genruntimeconfig.cache +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/ref/Contacts.dll +C:/Users/Marcus/Desktop/contacts-console/bin/Debug/net7.0/Crayon.dll +C:/Users/Marcus/Desktop/contacts-console/obj/Debug/net7.0/Contacts.csproj.CopyComplete +C:/Users/overw/source/repos/2410-Contacts/bin/Debug/net7.0/Crayon.dll +C:/Users/overw/source/repos/2410-Contacts/obj/Debug/net7.0/Contacts.csproj.CopyComplete +/Users/marcuswalker/Documents/2410-Contacts/bin/Debug/net7.0/Contacts +/Users/marcuswalker/Documents/2410-Contacts/bin/Debug/net7.0/Contacts.deps.json +/Users/marcuswalker/Documents/2410-Contacts/bin/Debug/net7.0/Contacts.runtimeconfig.json +/Users/marcuswalker/Documents/2410-Contacts/bin/Debug/net7.0/Contacts.dll +/Users/marcuswalker/Documents/2410-Contacts/bin/Debug/net7.0/Contacts.pdb +/Users/marcuswalker/Documents/2410-Contacts/bin/Debug/net7.0/Crayon.dll +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.csproj.AssemblyReference.cache +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.GeneratedMSBuildEditorConfig.editorconfig +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.AssemblyInfoInputs.cache +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.AssemblyInfo.cs +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.csproj.CoreCompileInputs.cache +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.MvcApplicationPartsAssemblyInfo.cache +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/staticwebassets/msbuild.Contacts.Microsoft.AspNetCore.StaticWebAssets.props +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/staticwebassets/msbuild.build.Contacts.props +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/staticwebassets/msbuild.buildMultiTargeting.Contacts.props +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/staticwebassets/msbuild.buildTransitive.Contacts.props +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/staticwebassets.pack.json +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/staticwebassets.build.json +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/staticwebassets.development.json +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/scopedcss/bundle/Contacts.styles.css +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.csproj.CopyComplete +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.dll +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/refint/Contacts.dll +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.pdb +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/Contacts.genruntimeconfig.cache +/Users/marcuswalker/Documents/2410-Contacts/obj/Debug/net7.0/ref/Contacts.dll diff --git a/contacts/obj/Debug/net7.0/Contacts.dll b/contacts/obj/Debug/net7.0/Contacts.dll new file mode 100644 index 0000000000000000000000000000000000000000..d606bf4575885aa5b809b1781870b57fd061fef8 GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/contacts/obj/Debug/net7.0/Contacts.genruntimeconfig.cache b/contacts/obj/Debug/net7.0/Contacts.genruntimeconfig.cache new file mode 100644 index 0000000..9e000c7 --- /dev/null +++ b/contacts/obj/Debug/net7.0/Contacts.genruntimeconfig.cache @@ -0,0 +1 @@ +7a96de072f111734042ad45faa57d5c212ab845a diff --git a/contacts/obj/Debug/net7.0/Contacts.pdb b/contacts/obj/Debug/net7.0/Contacts.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a296df4c1bb66c50f625391bef0a1745d390f72d GIT binary patch literal 28896 zcmb__2V4`&6Y$*uArxsMc0fQ-5v1805PFxUC_W4jii8A{pkk$?fQl#$B@ObGd^9g3tf=ef-$Ho7Qus7Da$aJ7sGBOKs94ez}p zd_Ca00AN?3V(BiHBC&ZRcze%`dG0%LXhz2?{&v&be#<_{BM4r9vqf53+62v2FUV&I z!45(Y1Xl=1e+mTTHxWV$2!KcELok7W`LRZP=Bfc#{G*hQ;cgub6GSf22=0)s1VS(b zq+7fa?;tR>JifT<^ivgd_r=SCgR2=u z67498NQY}KTra`(K3rR?kwix|;7G-v79kDLBFy_~5$U0rOcL>7B#{E)Cxmw4B;g;f zM#Ml!fKUWsJ%lsi>ck5O?;(7JKt`w&daR|?LkNQ~62cS+3n5fNI1Qow0ChqDAp(LFLKcJt5MrX#iAxY(K)5rIN4O5+5#A7j zAV?vshOiX^KU$OUfe;KK62dqLb0AbkYZH4Q9ENZT!qCCm#A*mb{?aD)#%L1@QYr?$_XeFDT%7HO00fH{18#4Ir05{^mmH_K<;6Q*; zm)ZPC!+?|CmQJgoXA7_qCmrcE=D?!?Hl}fu^+$S5I574TWxuIOZ(1k483#uE<{TLD zu@7?jZCM9yRR?Ze2R7xvNY9J|V|nHr7}MKuU`)5*)b|HegM~5eUj{Y;`9}dfgvs9+ z;9+pzgMp0!J^}Y425tiIL%8qBz$O5@0z*>-Q&4E$2HXPUp;C37sb+0`KMqTN^fz1K7<-h|NxCQWow6JYELV8PvKXZWX zI55()=fIfWi34N#4jdTM9XYTjR2$(|K)*MnHD=OV1DpZ(sC$@h3h*`tb^_Rp;l~#6 z5jF=n7SfSlXMo!<=_dhp;lKuvA7N`q$F_)P(ro~CfqU#vnBETH61Wd%;PwD7g?r=& z(>nnC4(?GmI|FPBF#fG$U^{@3HtHs(+XFlm?lFHC2%VVxsB>L8FzRbJ$j_#G0^FSg z`!cWt;A7h(KRqDbk)em9L{AQk`pLq`VH^WHL4NFK<`8;8erE>Xg9BrJv_IG`E=)S| z+oulP7x3A1XGnA9z-V9GI53XG?i?8PO#p$#NBYPE3!^+d!9ufecYwV(FxJN#;LZ$x zR~fhqz(@=2HKyYj9Rv4+7`Pk2=x?-z-~;L18T?ToK!p1OJRZ_sfDn8Ec4g9~kj}y= zpHv2RgLL!{!Wmcqa4^6NAYgt^fDHj*B?J2bd<|fGx9-dB+U;+Ki8ngaHaGb(LRA5F#)jjiGLwBAVxxLNXQ^I zA@)Puj5q}`LCmJ<;21#>;P^p_*cM1z96}Py!_??|!@(MGMT;M%W&@n$YU~4^FNWNK zI4YDNdBl(~HByb}r#1xcKZnJ^eX!aBxc3U*2XS=xL3k3V=1Sp{A$07j&LgHq?t?hJ zzpDnuLm+NFAd|k|N5=#Y^P5BL9pwt~(WoI1KZ(kOc*np65W5T_G&PCjLFSq~V#%N( z5R=iF5DTL3K%Cy6;L{W!jt+OF;{^~W4&DdxlEHT%_WFy^;t_c<<`64{t`M8Wq6CP9 zWUrDX@oF7UZ&(BC_Ob+BqOBhinMeE1IR?eczmWvf|%w}MvRapD*%#-=2ABt2D5NaaLal28T$5Xm3|U0V<;5P<}xWaNZUmYAL@k|^Mj zP{BSX(xk}}1@J6a5Hex1Bvv|tKzVpd;(aCYB2;ns(?8dK!ZyRk?gd37^zvq|G5H+Z zukR7fi-sj(#J=Fg)WTf~`)Mn0jP#h~rSG(SN7Y4*7e63DtcnK!&n{sRurC|B2UPnIc?;)NN2#8(!UIm`UHVdAgGd-R9`(S{j&cxSSYoh%rj z<-6biXRrK#;1d2jZH842(i!tKt;o*H3p^@E-@qe=8%-7z(23*|lnY!u1mX(i>hiG}x z{j8?IELZbE{1m6=b4@Edq#L~tvRHk;VqKZpmy3ZnzCG=5M6qCx7N71O92A9l*k|Vt zF+Vr?cIMBWdu4r;*)Ctx$)D6q9JRuh?%L=vU7}mvqc~{G&25Z+cYXKJ`-LHT5AZJUKXpQx9#Mmp-PpYCDXTXg<7@{dqwLD4cN0GcxYz!_%_eZ+uH|uh6|)Jky~0?$4F4uWT~Y0 za45sxO)eLu#)>oC6tF}Ro30Sa>yck-p0~2|w5GPETSsOL`VcUt*~Eo$s~`0$uN*N* z*yMcQ4Sn;PRddRcL+etPP>#B}(U@NaaXUM_D$SlawM_0{H(e**<;DG&U52-}`OG>v z=NHK*HApJE6Ic^u5u9wWb!ng=GCTH>i+yK%Cp%|*Cuhg5j`m$`;~l#ubaip;?9wGc z81K}zTbH=l_%6=fUE&?Ob#d(8*~LZF*;(k^B_8auBr#o>C?W)wgj|{~ixb(QMYW5Q zrh`>+bY|?GT}m=oa;Oj(H58XP8B7rJB27~yrzVe50`X{a?b5{QV8X;gMS@h8O1Mcf z1ZnAn49F#?imDk#DR;K*=HTKK-^DT3v1?}+2a!v6;Hq<%?jq-|PTk_25`;p>xX#_X zbnfO{&1N;eBQADHU<47yibaH{gucX!5^%@}4|NlGcJ%OckMQmYEsUXSj00W-!J(dR zAt89%ImRI-I5fr^9)x>_;*&1*o&Z*zJPZNHh7%lBV>mU0;S|##hLdVi&JB@ru0@L2 zM|eFJ$b=bEiG4f_cLdpCcau}-1(%A(6%QF?7Pu<*8rAD)pjBXUoJ=a0CMZDf(}F|_ z>=O2F&|c7hi6XFEO7v9*50?^m2x7FT?Tn~}_dVtrmbKa&P~82|0mOnvx8iQpp%U&+i3N@*XTs zIyQEVpnS)Q9V@m5zW6grP*)|HFW=3NAQ`*8XEMK>y&W_^SUSt@Xj_jzA)}-))8wzq z=q2ti80YbDg^%YfwK(l&{f#&O358%ckQl?si?63wAtwRH*A;G;^$*@Sf9-*XGt}%G zq$8CvU63K*F~M&;5?DWde7k-DApuj*C+~{8^~mrK2!u$XZ?jFlb$g%lNJltHEv-rR zxPYbp26jYY$1;_41YnfFKLh{79_vz5n3x0`EqX4z|#k@L#l) zq7}|xP)^(-iEKNMjniJ03%2xGbm`;!B|ZNO+Y4+Et0z0B_F03q*)?$E*w_PCf@W`S z8vWdGtI>ba2ouS`&N8CCxqRPKWaP!t^QjwhqJk!TYuC~IJxV>_J z-v(%5uc_6*{yts{P$U~ozeYW}z29$lpmyTr)}9v|z?ZS2yyYQ2i+BUd{DUuz@d#cV zKl-tGdQk(Slx3tT&|yeR%CPs9fQu^;iWy;87am=UT_!%ai=g{qe&Fhjj<;@BOnac3 z0WKkbQHF;|mOPvudKhX#?|08p$3Av=CCc>u;3EgYJcJ4%I5G;QcvYFG zr2NN!Be}9Rl1&b)3j@m>7JfIXYUTeY!zTM{aA{+<1g)V#&fpiBt|27`kJ9>-)y> z<_o0dch@)mf=J7I;lO|=E>3%6|C5%oUW-gmP9V%l;*8FeosBehdab>tT@*Uq()~Zt zeMCaBB1w=Wic4Xu)q2b99mvXw9KD0(wiUkH#=mS?v0PfNl9sY~|1XXgQ2mbHvFT** zIoY#d=Z$Q6$iy`&QG7rO;7)_ufv3nQ%7j^I&#=sSmYutNxZ>$w(fJWC?n>&j1_>al z3NijjaokV$gOyhz$6dZ1ICIyzhvS~#+xlBN$~p{tKjI9kM*c*_J zt-9J+2V{XUMJhPyGuPrG)~HG8)Q2a#9``BkYyWQjuRE<(bD~HUtE!GHNkL8k?>?!iotiuJ~lIMF|7gk&e>NaDk`k#?f%6X>Iohn@axBE;ynNZx{XX630 zcTe7o^lg}i63U8kY*g6@@g zZ*r9ly!>KmLu~@$^b!eiO@i$jce8ijK=a;4>OJDfxg?)O-JiL%c-SeuVIE+Tl`e)6 zSXqa46;~^<4*LHFkGlE8$!GGW#o41~zntD6etHk9bhdky&R}xi)Ag5C z;s!|LgyPyR)SXocTaop!=fNW-@=t<2$Ht@;JM38a-}s@hL{uZg$GyW3VI5BT$)CKQ z;_J8S@z+}+%Qg#D(g_qPgz+#eG0ivf{mGw*JJWvm@$;|dxs_gh`PFXz{5Gm_hsUYv zjh_!KzJR^arEq((ILh8XKg}<#O&8-n4bwu6>6UrK0u7??fYsxdxcPgQ{}bFl%Fblk?{Hb|GlaYT2MNTdqdCt%5lJ6PvoCrXgDU)*i@7@ypsp-oJm zXEtq+1tsTM+hku*_$TBoGv!9Z0~TBDICrPHW|s!h(A5+wZ~@QWPhM@pZap!l+pyi? zM~kA2oIDnquJ6}$QTOwILS_J1X(cnKR{Z@E>tJ;~B`?6-$7A)^Pl6^shgHu_P!uXO zdKbT}7{xg^*7MbtjlKLzh$rb?i6Yg;0BM8@M@d;7xI0{a11-tAmTL-H>kjgqr`|y; z?(G?0jq!2Dl^bv{EP@YO5 zZ1U?c8+lmyeE!$`LCgJ0f2@zcUNO4i3PdK0M%1yWBTnhBB!*Cgi(JR7citlRqBTz| zzD(^sSS1(1^jfb#7?)JjpY>W5ox0bHgp$ztnX{g*Y%n; zaP%|NvsHEtkfB%l8KIn6dHM`*6#cVxi^ z|2?KEhoDjm?5SNA+LXAgkJWVUA(P)c^6mS0(ZoLDieLOMccZB>wS!E)z zJ!j|6jH-cf(xD-*f zkEeCx4DINAv7RwhXUzkzO;6+AM@?I#+T9MT)ss&&DtLr~e)l!`z_#q;-o?evvnr4D z+pn6P*5)93C+EM3 zjCM|R_FDVom-z0D!^eJ$uWX!^lc`c{oXf?zlN2vYJ&SFdBwJK8n)q8(obOBHq~cmb zw7=Qv>qx11@3(XUMX9(Erfk2%_th66Cu^5wF7vbY z_9=<~SQM(;jkAQrAecg?1-A*E%*F&YA7Y2BHtTdf@<;{@DcB<=Di!1CHu-}ba*Gv`5hK3$TVn*eg z)w*qK5?tC;znjgz?pywVm{LaTY@Iitl--vF|9HCNg!i(*m;qU{Tn+w!fTv`5vP>$$ z{o+WWEE)GlScSc}Y0DjC%PMHxy$iP2-AXflwsB8uDf&GtoV7V z*(CRAkDW1XXnG zwWUq2A%Euk=I*|B+}dpq@vCW4u=&CNjj)o*{)e~TMoYbZ)|RpMZeP4+PL@X(Y;hf} zl2)CGL)rbmw;>HNS?rQ#DxNa^Pl$5(S7#~%Q-_ygH;Sk%8Z?38=`j;?esliL0z zS|H%8-f^0<)_Q>o8E#rHUyd^5Hx0b3_;Dg|nyml55SzzVD*35JOex4n!uSyC*66&X z>;3fX1$p19idW_*6g7aaT!mD@$JzmRW+NXK51tRb(q6-DQ~RN@rSmin{gzH`L$740 z@9<@``|-kJvi?(#kM0xl?{9e=(}6SVtR)>KL(B^hOd}sFCt;x*UcHe-h++^$~Gl*#(ak`g0_Ds#pDs^~g@mm5)_TN}(pGMSecjE>Q zJCyF0^J!a*&FQ4uzeV*N4&DGP@iN7$HyXbcX>46NgTL50-fR0}n=5Ii6FJje6(XQ% zgwbz`Fl0_V>spLtME83gJ3Tqqb6ds^8=pgcN`A`z~&t zXwJRBk;L_sRVv8@$KsF{B9*chCopy>y;Gp}@TcTTerCX`UzV{c+w(Z{W=>s#;iVPa zR;#5KoOGp#D~FlG-W|L%KYL?-x<-$njVrsfwR7oxRW(BlN!3e`8w=mPMN(Hs4LB9p zRl{@I+bb3ZYu8u(mXwkU`>gx7vEy8CHrRUIrC$CkF5R5FB%XIkC2EL_UThj(Z3B*F zhEGBj-R*N`s*c)g&y~4nsQgK(s_OuA6Hf`gty#U|c5TSODTu!EdTv#(PGkMcBNBE+ z*=w2C6z&&BZ|F){!#Doz_DVE5QCs%C_g-KXIP<1u_9aanPM?4mOzd&l!5&6_PEn5@ zsNX}x(|>8kb_?-xFHe3ScE9a6&NMbMS)MKwy9;5U;ZF14&TPFN=hTWYqHETL_TF0_ zOWw3P9Ti{0BNtIA)C2t{zrgnJX%#ko(5=6M3$E>SStk6+(Y5}`5@#p-dh&cR5nTwWOZU zjZ@`uQkgiJeKVln#iA8h70vc7-(B0b*KdWN;zCq^BWHN?O|F2cg;2&0)v?Rem*HZn ztL^C7fm02AXUB;4G`hX;rE(m#hc~o9w-ut13Z{=<-hYSo9LGNw+_XJ6*{5u%gXc`~ zY&RyqdwN1bO{+WWlXQp9@-&J#w`rh9SytP~8I|8IF_{HYv6y`&0ZNHWm&w4aFai7F6$ zQ&ZCwIFVt>av@&6#P#4LO}7G%!*ks?j9S&$E;30&1!|B~;w_TE4luhC)BcL)TWk@X z)nka=|9*9^{9tlU^g?5^3f!e#MC9(1v_c)i?|UrGZgchZ+$32w zGV>x#AoL~JXRWs*VYy=NN9@ycPVP8=<&4yAN$iJkQ_t(~RO72QDP_Y==!ty1rM2to zq;R*Hqn`{)iavc$H4UY#*EctyC&_ajO>cJirl#w<-cQeHtq6Rj8i%&@(A`AwZt@HX zD>%O!6g_!d{%T>`&sR2nOTA(jCgp9cQca^?2P%2rgkH5dsIjVQ;G!koOPZ}W%==Y( zTQxeq-U})QyNa-_!n8WoynQjgfYavifW~_Jj03YLzF(5|X2I}k3fxJZvfife{oBScIkDYpua^18pM*ICMGW0=`bhW)U9V-DUp4y( zU$}4)5Gzcis5csE@;A{FNc}50F9-j)@4NVThp8pk#Q$<}m9>>v9-E46O>p{aT_dww zu9?kzwRC&<#Hv8$`Y~sV zDhd#7;Mk8JDzC?RuHSa4WT@fid{t=GrPmt#{rs`QM~c+Z%xx6U)i^R?`>yNQ>IvT;@x31$w)e)>&ZrMLpt+~0@H z7d(iXd^z&9+ss>)tLJ1n7N{TqQ@S`)y$s#^1SwpJD1`YJ=#eH zVi-1l|(M`??<2ry$yvl7;v7QsJ(&q zQqN--7UtP4Ml&Y!Nx-y|lE}1oh9emy<^C^B_vI2trgip2ETt_38LEGG$v)$t(jMc= zp18z&)WHZBvdww0qx*F%!gcfYgq;;D{U<&*>frjlpgDt}eC3^eQ9&RS!wL_4E5ekf zJ!Un%2D3V4>}5+Yh5Nd!t)3tCl8aO#D}~*3QOtcTZ{^m&IoS)w`);v5;I0#6bV4Oc zJ)1P;tz{l!r}f%1Xw>FD?j=@4rQew?#SFG@Fq*&W-9vX+dl$3IeXb8|ej(~4?NzhA zr$%~B?scpnppzDBlIx%Q`|B?wJ0y`pt?Bh?M#XiefrUy zSy-fZQCzpiaW8|*o4@&b^0^s1aMUSsU~(E~EpTAlwFeQm%aa+4?>yV?wP#WG$sxUl zH>)XHSw=+e{(G1&+_=Nn^CunM3Ki)hwmn?>%=XSb|FXv+<0Mvcwacs5jnYn!+KkvIk{<+)H2)D?v3JP!Q@%Y| z!(SV_zfche-$^mbYH~StEjDIHz5I^np1OHWX)^D2`QC@CYq<7>K^gYX<8e^~-Xmb} z?6g;`LcBxUqF2o})APu(Yd!zd-PPA?@RYj@fx@&jQ9KHZ?H{c(#Lusd0X<$tLk8}e zupDt6{mQRCnrH60P=8dF>C!{2tpm|uX)JI05i961JAK{qJ`;j@-gB~wrgWO$m0wd* zgakGhKn(H9>cMAjBKQDDsR7NUwzN;?>`H!oleffeLZ=yrru$sk&0xch#4sjjC%(;L zw0m75@2NlW@bQ_y$hoTNK*v;WPI&u=+3;t%3rY#iMn_xY`$+8zb6$DO%w8L?Prun@ zE>;M9y$16Fc0MlIuwfk*bfWXDzc0j=d6%AgH_vU5?<_7#zjXMxfaA}PtSqXanX7zs zw&bOqd#R6ES*G4k)>_uuJ<9yGKOaYlpB-+cRyw`(oqJ(Ye8gknL54m~GL^FV6eU@O z?I6hgF}~-Pk3Q?Y#y=KKKF4|%)w5A$?yfKU|H2uVt#yaj@_nX(bCY@>oFwklmqV7G zyK=T1s1|!Cph7;4I_Tk0T;x}B*Gf23ZMKZP3=Z8`FbMO-SKjz$Q&P_*U$mAVm zS{Sn7$#L)&J$!Y^w2nud(RZx-v*=bwyl1ra+WuEk@toq>8@O1tw(LhQ3Av8NNS!+F zQq$YyRxvZCU6YGz;y4Jf79$WR*UYO8O(N)TcV>I^ZM;xtYG8Kx_gJ-WiF0bBD3?@f zCg==aQUfY{>xkB z2Y+=5)2fZZ?qt{E^i5Usi-@XoN$b&*pMAX77!%hH&iTmBtWj6%ZGszHjH6fYh%aer z%L4QR%l^7Kwae8R-(-zU>JtVfD9w;RZ2Rz1J0OOu4vs{It5cBVm<7 zTJ0TuUN($2eQ8D?)_G142CRy5IZgEcGg*O^OnzcMXXn{9iZ&eVe`#rYSBpj2TO_tg8bd>KY2GbiLQ@Y z=e^hQ|dRv~BdtZ$iYU z{&vA**vT;m71ti>dAw;$H_Stp^JB-(+94=#D}Cr1lRdEgvuc)=-%!f!L+Qm$Mn-4K zENEx<`u1+&h5VTwdk&2?*8Q?0Oa+z_Kad{kSyw5#aO@H+)G6oj%;ss0U01uvcz4_M zW~aDl_3^_^xxI3l$Q0UUVPPg>Wv=}4V|Qh#M@f_5wIbu|>)1k>cLUKw2PX-(t7*F? zw~vs>g$b;;B|Ec;p7N~sw^Gk5YU5LG^yxu`_G{L`W9LWph$xp_1q>_8|8aPNtO#5# z{BnOfD=_c9wcVQq8*TSL zfJ(s^F|eA>+Et&CyB84VYQ&-uw>R7FJ?A^8aqll#ZwlE-F^d-<#dUk8X?50ipvV2p zw!6K$i3qQJrzwIb##h+Y6BY-~OW<1Y=dKF+EyraVP8OfW{_8uh#l2Rkmt(uvsWHf# zUU=mitdq@r>6MFRcGr%!n9x3GM)Tgif7v+x_$?~u)of+cna#UPPqTJRUi&b={~N*N z!YRD=;rpw5B-1%+Gr)2B7FE4of=#xuMYPNFEzykGUJd}5_XRiEf5Ufo7NV$iF7 z8&%VjqKy$>5O;Q1)vfI>W8J3T%J+TNy7Pj%xB{^-x%vajE<6j`K|gk7Sh3Z!i*7UQ ztf|7_Ev&(=E>OVzPR~sYrynFMlB%hU4t1@ch^FRZ|gE zf4XJ1up9k~k3cv2R9C(Gf@PDd)FSsDYg&(UE)xPdyFs;h+I)JPl^T(k^jba-uA11r z>!|z24}OcTRGOEMV#{&ZY1(GkDqq`99#t2KzxTdw#;%U4W}MzptMQW;cD$j?Kf!g+Gr~Cbu%7D%e-3721pPYanc300{|9*ag-it5_ zkWnX-_X?)3SY#0(GGphusw-8a$5%Sfu0UPn&)aUc&SHAd+}&6Ewf%ejzPhX^TfyqE zEp6Qfo;d5Ne{82`_M;=?795K^S~oY;SQ3|~!st~ncrM!6i& zDry)Hw({boBUtO`SNN0OxmeL76TVA`^)D;8h_yM;i(L$;t|WaUg86w(qbJ`I(=W({ ztRK+a#y`eqdt%Z!Gr5r6?*S`;QwpW;3BEC7TF-vovISM;*C+kizm5jEZfenTi{)jD zan%efCnB}hq_^Ig_Y!f&v~Jsahq#sZOwqVqqN3jZ3=Xa(+gEF(0Jf*NUueucl~IVu z_e(1_NvF2*oc?y7`1|FOF)ERjjd6HkD;h+mJ5C|RoLL&R7>Vt>%sJZsS|rQyR=7R_l*ZPG>;n8m0j+ zc&^GKN;IZ7KhE-)gl7O@Qwx%W@D*eA3i}a*mGq8l`$=RC}f%TTkc}KJ+WQK^tCO41QuKrq{L@HPO)Du?<@-)kXU|`R%Y@ z;omn}KQ|tjP_G~rAES&PzV$vfz@VL#-IuS9^RE(V28?NUl3gFDDK%UuhwpW9Zz@47 z9l?~mICIS;)lfio3tA0I|fzE|8FnBsWmZ^1mbDL*E*Iv&^n7U#7Tv*%KJ-S}*f z-nJzl0^BOkYK8cnoA{zWCLE5!`cx*D)6XK4r<_VZ7Ob5VyuEMy!d=^Dw`Y;?%Yxcx zX_$_QT8kJDb^qQu$H3KRP2~=&eVXUkOs`o|{TOY5$awgnAb7WAISHOC&{9D5f+)NnGYI>*OcaUD(hGCRBIFlbicC8WMN=FGsU7aw?4PXDaqG^~js zOTCskzI?3j4t_jfA#yzb?^U%L|&QIO3Pq zq~~W&M$Q817O@UJK3}esud~=!;kKy5(YJqRG}GhcR!;3|&9$P%k~};tPTF5h_d((_ zpG|XZH;=r#ncWIRW@@{F%Dym}az23-?zc4e>9qDI+;^l6`uyc^N-Iub1K2~em=>FE z7P=h!99ihRe0joF_p;?S>#{UcSjQDhf=~y^?Nk&!Dzumpl$ziDPVoBUT8GB%(dx)8 zCsoXHSgnU)&Xp^0ndT!?WY`xoL#i6l3?n-V4hrl@!MTvO6dquyL6C4fGa;b( z#)K&zTWmtX8Hg?5_+>nekjP3Tn(+*D@t&k0UpU3rA$Sy^`KxDGEAN`A!#R!hGnlDo zXd_1^=w0%aSsSTinVL#k`V=2ZU&WT9w>B(Z4_^M81UK?(%5))0GYBc5xKGko0 z!p>mL_X(=MKvD5RKBpkg;K}f(I+6M6pQr4pEtn2lvy3daXI`GtVv>A=b(lLeo%+l@ zyO&~I2c|!VHeeoBdj;&EQT@Q49`TKsd>%Ege6Yrs+4|?>jw!yh!c(4Zl|b$zg7#o^ z1EbFn1sh@138PSqMq@M!qs?b29e{nb(QT3ncSylKK8*ei=D&p;i7rRQ^8%RnUc+u$d~9QiZFj!nXu9 znV_b;rKX*srthT6o>Te!EHF%NK!WkfzRdceOZs>}GNeJU~^;BBd5>IKr3dPX9A)9u%M!B0%~)r`?5jIOF$lmnXUVUVUtn0FBJv6d}KW2!f$ zLuPlPvZJVMYclsNmHUM%Fs5>kWIhFk$jloc)E3zH0hyJf4xHpqSfGX1!LPq9h#q(s zhj$Rg60UHxKQRD}ixVceAt=B*I-wojDa8-<1*$|_iqFTfL5Hxx1L{X0A^MIkfxe@Q zq3`Ij=sUVV_AXY5L6<;3g9D4rl+S1;=w~!1^c~F(%>+bh6qqprgr;ZN6GjHdCR)r$ z0qxpIIXZzB2~i4QMYV|LI8@OQm}f1*nm$FG$_N3?{{Px_G{|O@578c!FVdD}$pm#8 zbexF{aC`s;XoYSKl^}a+kua9>0ZEN$gd?2`8h)syI;C$y8i2NuK9Hpc#rMOflnFEe zR=tH4Tr8`r-Wbc#$8xkWf+L)1+m4y+ELmo1G8r-)!Osg&88jb`P>3m)k6sKPtw9CJ z-jE926HZZA14;5N32Q3D2XSd;bS#yZcJxKpLV2;FFOAwLFV^%$uLFJ2S3(BLi=i^7 zVMjX6$Vz!>PhT3_X1PJ9t8aSLWUJcO*?`_hY3#6X3Pb+RR&5rJfZ_M z2u%mY%b{alhYs}D|0_Cr6d!)lp@tuZjwyZOGsDk7ir<{jK~;tZsBwK-W4ENAu(?}e zivckKC}vhuGAmj$Ym!#hBrgTTG<3hi4MF7`AagY}b9-pz z_8@b6P`P8N+y`WyBbBe`3~lcd&b9(j=3@i!i4JIi&C#={X$2YtPP#$qf2AM}a8A_V zfcEhLgs3S-;B^8W__YsZYXTyk(QPo2Eex>RfI%ZOb3hBVDLzLRz9J-Ky#XYB|HIzfYQ~#d8QqxVZoqJ zWad^#f!+hX2GvQEXa`TR3#DM$paxB8Zq%@kKn83+D#HS3>JvJ;F|@-9eH=>~rb8O@ zI+2~Ip;YF6WvR!3wk1<)FQ!x_hZi9Qs>0#$A9!NHt_mGhs=BjPe3PX zEDQ8#__+%zBXcR}HktVo(m~zSQ0jWeVW|{G_CX-o{;rR1Ja8=2y*1$cqh%VX!BUD8rq9fW>7%q4XwNfiamNlH& z@MD@1?NNn+OnaR5v?Z+6Vb%lX>ylY*cv(JVmJbx#7+iibtBV#%W?rKBna6NA#Fzfigj9%9Wj#$A`1|DL&X}relMS zFp{Ii*CCymXy`#vXxD&%x*kJ7lLBlV!U2pUTE93(rl5$`!tX%Kl;j7q*v{BZfwUS< z`A|=Rq8G)7-vq&D5Va*e$P6-b8JT&J%!2w4BeM=t*%4IMKV(i6FJ}n}|G9I*Ks(7S zF;p2G8Xi=Eh*nmwOLg^VSt9FOykUX~VDUqP%o(0o~WJ zk(LgjuZvXM5(Jo!@(#<&LuL7D;c?l>eG;v^UU+Y>rGs24re)xmjqojX!JnMayf#ZWPsvtiI6U4R0# z2>dz+rH8eFmTyP#L9Nu##L!A)Oi$-g&bDa6z*<1j*qET)*6NUlRyiKw1meSAaT02R zS2qGWiaL%B&`H6&7~6_Z81W-C(M9EB7o^(@em^Azx+U6xW?U6$PPQV2ROSjYJ4`b> zPb)i*%+8~-_fT06vn-ne(_z3g3=UxUurJe5W4vpF10t;T(6fplitm671*yZY-)QkD zP%&oG(ioYBLJ1M@Y@mnmg}QP;g_)V94-d?L6m%X`fH>=ln(Gx>0$SFd3!tpHl_rsR`?;i7wQ{<5aeNR#h_)FYPcmQYMT( zG*w5p17wE{4x=?#W5&ybo`^mrI$|22McSZH*sd_2ZK4i?E4bqzbVgIaa5bk}8ekAI z`U*I;G{Zqa9i>6jp(EWCAcuG`Re*IPs4HqnZ9K5DR&`N8iD*t-xSW7C>*Bo5nCODa z2?M1XVT6Me{`Vl-@C?+HeFT)J-knADv#z{hy4XCl;?TU*I0dW(9O-hARggd%Y*~8J zrA(&4wxWQTWE&i;%(;%Nl4~ZJc9~#K1C>Vc(ou)KgV8ew31=?j_Le}>l9Z5{#Z=}G zDr+X0-G4z?<&q~O1BIaL%&7Hy}B zUC834)FgWThB*#;k8>!(`mMfKYTRE*Gn}X^Q F{|8cb^jQD^ literal 0 HcmV?d00001 diff --git a/contacts/obj/Debug/net7.0/apphost b/contacts/obj/Debug/net7.0/apphost new file mode 100755 index 0000000000000000000000000000000000000000..ffa322eb15767dc5821d653f046840a6f258b114 GIT binary patch literal 132768 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 literal 0 HcmV?d00001 diff --git a/contacts/obj/Debug/net7.0/ref/Contacts.dll b/contacts/obj/Debug/net7.0/ref/Contacts.dll new file mode 100644 index 0000000000000000000000000000000000000000..0a4a22b00c7690d302886410d04aba82d0cb18f7 GIT binary patch literal 9728 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 literal 0 HcmV?d00001 diff --git a/contacts/obj/Debug/net7.0/refint/Contacts.dll b/contacts/obj/Debug/net7.0/refint/Contacts.dll new file mode 100644 index 0000000000000000000000000000000000000000..0a4a22b00c7690d302886410d04aba82d0cb18f7 GIT binary patch literal 9728 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 literal 0 HcmV?d00001 diff --git a/contacts/obj/project.assets.json b/contacts/obj/project.assets.json new file mode 100644 index 0000000..518f098 --- /dev/null +++ b/contacts/obj/project.assets.json @@ -0,0 +1,100 @@ +{ + "version": 3, + "targets": { + "net7.0": { + "Crayon/2.0.69": { + "type": "package", + "compile": { + "lib/netstandard2.0/Crayon.dll": {} + }, + "runtime": { + "lib/netstandard2.0/Crayon.dll": {} + } + } + } + }, + "libraries": { + "Crayon/2.0.69": { + "sha512": "eJHxoMTfhZs1782YUIMafXIDTPcTwAV5I3MNsl2d4Mn61/h3ABPMSzHwzigL/NO7BrCKRoP4gHJuERpLHdSCvg==", + "type": "package", + "path": "crayon/2.0.69", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "crayon.2.0.69.nupkg.sha512", + "crayon.nuspec", + "lib/netstandard2.0/Crayon.dll" + ] + } + }, + "projectFileDependencyGroups": { + "net7.0": [ + "Crayon >= 2.0.69" + ] + }, + "packageFolders": { + "/Users/marcuswalker/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/marcuswalker/Documents/2410-Contacts/Contacts.csproj", + "projectName": "Contacts", + "projectPath": "/Users/marcuswalker/Documents/2410-Contacts/Contacts.csproj", + "packagesPath": "/Users/marcuswalker/.nuget/packages/", + "outputPath": "/Users/marcuswalker/Documents/2410-Contacts/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/marcuswalker/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net7.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "Crayon": { + "target": "Package", + "version": "[2.0.69, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.AspNetCore.App": { + "privateAssets": "none" + }, + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/7.0.203/RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/contacts/obj/project.nuget.cache b/contacts/obj/project.nuget.cache new file mode 100644 index 0000000..d6bded2 --- /dev/null +++ b/contacts/obj/project.nuget.cache @@ -0,0 +1,10 @@ +{ + "version": 2, + "dgSpecHash": "hLf4B0n+n6M/x10I7MS4T+MbxFSG+50xIg2qJF4KHIq49lAHX6cG+62zutm3rbOfEU/CZrsdUv0fn88Rt+TDaw==", + "success": true, + "projectFilePath": "/Users/marcuswalker/Documents/2410-Contacts/Contacts.csproj", + "expectedPackageFiles": [ + "/Users/marcuswalker/.nuget/packages/crayon/2.0.69/crayon.2.0.69.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/contacts/obj/project.packagespec.json b/contacts/obj/project.packagespec.json new file mode 100644 index 0000000..eda6b84 --- /dev/null +++ b/contacts/obj/project.packagespec.json @@ -0,0 +1 @@ +"restore":{"projectUniqueName":"/home/jashton/dev/active/2410-contacts/Contacts.csproj","projectName":"Contacts","projectPath":"/home/jashton/dev/active/2410-contacts/Contacts.csproj","outputPath":"/home/jashton/dev/active/2410-contacts/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net7.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net7.0":{"targetAlias":"net7.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net7.0":{"targetAlias":"net7.0","imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"downloadDependencies":[{"name":"Microsoft.AspNetCore.App.Ref","version":"[7.0.3, 7.0.3]"}],"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/share/dotnet/sdk/7.0.103/RuntimeIdentifierGraph.json"}} \ No newline at end of file diff --git a/contacts/obj/rider.project.restore.info b/contacts/obj/rider.project.restore.info new file mode 100644 index 0000000..30830f9 --- /dev/null +++ b/contacts/obj/rider.project.restore.info @@ -0,0 +1 @@ +16816954560259051 \ No newline at end of file diff --git a/contacts/readme.md b/contacts/readme.md new file mode 100644 index 0000000..376acb0 --- /dev/null +++ b/contacts/readme.md @@ -0,0 +1,15 @@ +# Contact Project A05 + +### Project Status +- [X] Imports from `.card`, and `.vcf` +- [-] Exporting into human readable (`.json`?) + - Making it into a `.save` file instead. No specific naming scheme in mind +- [X] Exporing into both Outlook and Google `.csv`s +- [ ] Exporting into `.card` +- [ ] Exporting into `.vcf` +- [X] Figure out what kind of UX should be given 👀 +- [ ] Contact Merger?? + +### Third Party Libraries +- [Crayon by riezebosch](https://github.com/riezebosch/Crayon) + - helps out with the formatting of the command line \ No newline at end of file diff --git a/snake/README.md b/snake/README.md new file mode 100644 index 0000000..d1dafc3 --- /dev/null +++ b/snake/README.md @@ -0,0 +1,3 @@ +# Snake +Snake +CLI snake game. CSIS 2410 project A05. diff --git a/snake/Snake.sln b/snake/Snake.sln new file mode 100644 index 0000000..85cfc6f --- /dev/null +++ b/snake/Snake.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Snake", "Snake\Snake.csproj", "{4A6995A3-4AC4-4954-A7CA-904A77D5AC85}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4A6995A3-4AC4-4954-A7CA-904A77D5AC85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A6995A3-4AC4-4954-A7CA-904A77D5AC85}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A6995A3-4AC4-4954-A7CA-904A77D5AC85}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A6995A3-4AC4-4954-A7CA-904A77D5AC85}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/snake/Snake/Position.cs b/snake/Snake/Position.cs new file mode 100644 index 0000000..e15c370 --- /dev/null +++ b/snake/Snake/Position.cs @@ -0,0 +1,64 @@ +namespace Snake +{ + /// + /// Represents a Console position in Left and Top coordinates, AKA (x, y). + /// + /// Josh Ashton + /// + public class Position + { + public int X1; + public int X2; + public int Y { get; } + + private const ConsoleColor D_GREEN = ConsoleColor.DarkGreen; + private const ConsoleColor BLACK = ConsoleColor.Black; + private const ConsoleColor GREEN = ConsoleColor.Green; + private const ConsoleColor WHITE = ConsoleColor.White; + private const ConsoleColor YELLOW = ConsoleColor.Yellow; + + + public bool SnakeKiller { get; } + public bool Snake { get; set; } + public Position Next { get; set; } + public Position Prev { get; set; } + + public Position(int x1, int x2, int y) + { + X1 = x1; + X2 = x2; + Y = y; + } + + public Position(int x1, int x2, int y, bool snakeKiller) + { + X1 = x1; + X2 = x2; + Y = y; + SnakeKiller = snakeKiller; + } + + public void Draw(bool isHead) { + if(SnakeKiller) + { + Console.BackgroundColor = D_GREEN; + Console.Write(" "); + Console.BackgroundColor = BLACK; + } else if (Snake) + { + Console.BackgroundColor = WHITE; + Console.Write(" "); + Console.BackgroundColor = BLACK; + } else if (isHead) + { + Console.BackgroundColor = GREEN; + Console.Write(" "); + Console.BackgroundColor = BLACK; + } + else + { + Console.Write(" "); + } + } + } +} \ No newline at end of file diff --git a/snake/Snake/Program.cs b/snake/Snake/Program.cs new file mode 100644 index 0000000..6635df8 --- /dev/null +++ b/snake/Snake/Program.cs @@ -0,0 +1,228 @@ +using System.ComponentModel; +using System.Timers; +using Timer = System.Timers.Timer; + +namespace Snake; + +public class Program +{ + int leftMargin = 9; + int topMargin = 0; + private int height = 19; + private int width = 31; + private double difficulty; + private int time; + private Position[][] grid; + private Position bottom { get; set; } + private Position top { get; set; } + + + static void Main(string[] args) + { + Program p = new Program(); + p.bottom = new Position(p.leftMargin, p.leftMargin + 1, p.topMargin + p.height); + p.top = new Position(p.leftMargin, p.leftMargin + 1, p.topMargin); + p.time = 0; + p.PrintIntro(); + p.MenuInput(); + } + + void DrawSnake() + { + Snake s = new Snake(grid, 100); + Timer t = new Timer(100); + t.Elapsed += TimerAction; + t.Enabled = true; + if (!s.Move()) + { + DisplayGameOver(); + Thread.Sleep(3000); + PrintIntro(); + MenuInput(); + } + else + { + DisplayNextLevel(); + } + } + + void TimerAction(object? sender, ElapsedEventArgs elapsedEventArgs) + { + time++; + } + + void PrintIntro() + { + string[] s = + { + "╔════════════════════════════════════════════════════════════╗", + " /^\\/^\\ ", + " _|__| O| ", + " \\/ /~ \\_/ \\ ", + " \\____|__________/ \\ ", + " \\_______ \\ ", + " '\\ \\ \\ ", + " | | \\ ", + " / / \\ ", + " / / \\\\ ", + " / / \\\\ ", + " / / \\ \\\\ ", + " / / _----_ \\ \\\\ ", + " / / _-~ ~-_ | | ", + " ( ( _-~ _--_ ~-_ _/ | ", + " \\ ~-____-~ _-~ ~-_ ~-_-~ / ", + " ~-_ _-~ ~-_ _-~ ", + " ~--______-~ ~-___-~ ", + "╚════════════════════════════════════════════════════════════╝" + }; + PrintConsole(s); + } + + // TODO: Can no longer press q or r after starting the game. + void MenuInput() + { + Console.SetCursorPosition(bottom.X1, bottom.Y); + Console.Write("Enter p to play, q to quit, r for rules: "); + char input = Console.ReadKey().KeyChar; + Console.SetCursorPosition(bottom.X1, bottom.Y); + while (input != 'q') + { + switch (input) + { + case 'p': + Console.SetCursorPosition(bottom.X1, bottom.Y); + Console.Write("Enter e for easy, m for medium, and h for hard: "); + char level = Console.ReadKey().KeyChar; + grid = new Position[height][]; + switch (level) + { + case 'e': + grid = GenerateGameBoard(grid, 0.03); + break; + case 'm': + grid = GenerateGameBoard(grid, 0.06); + break; + case 'h': + grid = GenerateGameBoard(grid, 0.1); + break; + } + DrawGameBoard(grid); + DrawSnake(); + break; + case 'q': + Environment.Exit(0); + break; + case 'r': + DisplayRules(); + break; + } + } + } + + void DrawGameBoard(Position[][] grid) + { + for (int i = 0; i < grid.Length; i++) + { + for (int j = 0; j < grid[i].Length; j++) + { + Console.SetCursorPosition(grid[i][j].X1, grid[i][j].Y); + grid[i][j].Draw(false); + } + Console.WriteLine(); + } + time = 0; + } + + void DisplayRules() + { + Position[][] grid = new Position[height][]; + grid = GenerateGameBoard(grid, 0.03); + DrawGameBoard(grid); + + string rules = ( + "RULES:\n" + + " - Do not let the snake head touch walls or obstacles.\n" + + " - Use the arrow keys to control the snake." + //" - Collect all points in a level to move to the next level.", + //" - Levels increase difficulty." + ); + PrintConsole(rules); + } + + // TODO: ASCII art for game over screen + void DisplayGameOver() + { + string[] s = + { + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⠀⠀⠀⢀⣴⣿⡶⠀⣾⣿⣿⡿⠟⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣄⣀⠀⠀⠀⠀⣶⣶⣦⠀⠀⠀⠀⣼⣿⣿⡇⠀⣠⣿⣿⣿⠇⣸⣿⣿⣧⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⡿⠿⠿⠿⠇⠀⠀⣸⣿⣿⣿⡆⠀⠀⢰⣿⣿⣿⣷⣼⣿⣿⣿⡿⢀⣿⣿⡿⠟⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⡿⠋⠁⠀⠀⠀⠀⠀⠀⢠⣿⣿⣹⣿⣿⣿⣿⣿⣿⡏⢻⣿⣿⢿⣿⣿⠃⣼⣿⣯⣤⣴⣶⣿⡤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠏⠀⣀⣠⣤⣶⣾⣷⠄⣰⣿⣿⡿⠿⠻⣿⣯⣸⣿⡿⠀⠀⠀⠁⣾⣿⡏⢠⣿⣿⠿⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠲⢿⣿⣿⣿⣿⡿⠋⢰⣿⣿⠋⠀⠀⠀⢻⣿⣿⣿⠇⠀⠀⠀⠀⠙⠛⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⢿⣷⣶⣿⣿⠿⠋⠀⠀⠈⠙⠃⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣴⣶⣦⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠀⠀⠀⠀⠀⠀⣠⡇⢰⣶⣶⣾⡿⠷⣿⣿⣿⡟⠛⣉⣿⣿⣿⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⡎⣿⣿⣦⠀⠀⠀⢀⣤⣾⠟⢀⣿⣿⡟⣁⠀⠀⣸⣿⣿⣤⣾⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⡿⠛⠉⢿⣦⠘⣿⣿⡆⠀⢠⣾⣿⠋⠀⣼⣿⣿⣿⠿⠷⢠⣿⣿⣿⠿⢻⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⠋⠀⠀⠀⢸⣿⣇⢹⣿⣷⣰⣿⣿⠃⠀⢠⣿⣿⢃⣀⣤⣤⣾⣿⡟⠀⠀⠀⢻⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡇⠀⠀⢀⣴⣿⣿⡟⠀⣿⣿⣿⣿⠃⠀⠀⣾⣿⣿⡿⠿⠛⢛⣿⡟⠀⠀⠀⠀⠀⠻⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣶⣾⣿⣿⣿⠟⠁⠀⠸⢿⣿⠇⠀⠀⠀⠛⠛⠁⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀" + }; + // Prints score and time below ASCII art of same dimension as the snake drawing above + PrintConsole($"Score: {time * 100} | Time: {time / 10} seconds "); + PrintConsole(s); + time = 0; + } + + void DisplayNextLevel() + { + grid = GenerateGameBoard(grid, difficulty * (1 + difficulty)); + DrawGameBoard(grid); + DrawSnake(); + } + + void PrintConsole(string message) + { + Console.SetCursorPosition(bottom.X1, bottom.Y + 1); + Console.WriteLine(message); + } + + void PrintConsole(string[] s) + { + Console.BackgroundColor = ConsoleColor.Black; + for (int i = 0; i < s.Length; i++) + { + Console.SetCursorPosition(top.X1, top.Y + i); + Console.WriteLine(s[i]); + } + } + + private Position[][] GenerateGameBoard(Position[][] grid, double chance) + { + int xCounter = 0; + for (int y = 0; y < grid.Length; y++) + { + grid[y] = new Position[width]; + for (int x = 0; x < grid[y].Length; x++) + { + if (x == 0 || x == grid[y].Length - 1 || y == 0 || y == grid.Length - 1 || + new Random().NextDouble() <= chance) + { + grid[y][x] = new Position(xCounter++ + leftMargin, xCounter++ + leftMargin, y + topMargin, true); + } + else + { + grid[y][x] = new Position(xCounter++ + leftMargin, xCounter++ + leftMargin, y + topMargin, false); + } + } + xCounter = 0; + } + return grid; + } +} \ No newline at end of file diff --git a/snake/Snake/Snake.cs b/snake/Snake/Snake.cs new file mode 100644 index 0000000..a7d4f73 --- /dev/null +++ b/snake/Snake/Snake.cs @@ -0,0 +1,83 @@ +namespace Snake +{ + /// + /// Represents the in-game snake, which traverses the 2D array of Positions. + /// + public class Snake + { + private Queue body; + private int n; + private int capacity; + private Position[][] grid; + private bool Collided; + + public Snake(Position[][] grid, int capacity) + { + this.grid = grid; + this.capacity = capacity; + n = 0; + Collided = false; + body = new Queue(); + } + + public bool Move() + { + Console.ForegroundColor = ConsoleColor.Black; + int x = 1; + int y = grid.Length / 2; + int direction = 0; + + while (!Collided && x < grid[0].Length - 1 && y < grid.Length - 1 && x > 0 && y > 0) + { + if (Console.KeyAvailable) + { + char d = Console.ReadKey().KeyChar; + switch (d) + { + case 'w': + direction = 1; + break; + case 'a': + direction = 2; + break; + case 's': + direction = 3; + break; + case 'd': + direction = 0; + break; + } + } + Console.SetCursorPosition(grid[y][x].X1, grid[y][x].Y); + grid[y][x].Draw(false); + switch (direction) + { + case 0: // move right + x++; + break; + case 1: // move up + y--; + break; + case 2: // move left + x--; + break; + case 3: // move down + y++; + break; + } + if (grid[y][x].SnakeKiller) + { + Console.SetCursorPosition(grid[0][0].X1, grid[grid.Length - 1][0].Y + 1); + Console.ForegroundColor = ConsoleColor.White; + return false; + } + body.Enqueue(grid[y][x]); + body.Dequeue(); + grid[y][x].Snake = true; + Thread.Sleep(150); + } + Console.ForegroundColor = ConsoleColor.White; + return true; + } + } +} \ No newline at end of file diff --git a/snake/Snake/Snake.csproj b/snake/Snake/Snake.csproj new file mode 100644 index 0000000..2b14c81 --- /dev/null +++ b/snake/Snake/Snake.csproj @@ -0,0 +1,10 @@ + + + + Exe + net7.0 + enable + enable + + +