/* Турнир на выбывание в чет-нечет. */ // 1. Сначала один игрок (пользователь) играет с компьютером. // У игрока ограниченный ресурс, у компьютера - бесконечный. // Игрок - только хранилище денег (поле, защищенное свойстом). /* using System; using System.Threading; namespace game01 { class Player //это просто кошелек для сумм >= 0 { int sum = 0; public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } } class Program { static void Main() { Player p = new Player(); Thread.Sleep(1); Random r = new Random(); p.Sum = 1; int x, y; while (p.Sum > 0) { Console.Write("сумма: {0}; ваш ход: ", p.Sum); x = int.Parse(Console.ReadLine()); y = r.Next(2); Console.Write("ответ: {0} ", y); if (x == y) { Console.WriteLine("победа I"); p.Sum ++; } else { Console.WriteLine("победа II"); p.Sum --; } } } } } */ // 2. Переделать в равноправную игру, чтобы у компьютера // был тот же начальный ресурс. /* using System; using System.Threading; namespace game01 { class Player //это просто кошелек для сумм >= 0 { int sum = 0; public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } } class Program { static void Main() { Player p1 = new Player(); Player p2 = new Player(); Thread.Sleep(1); Random r = new Random(); p1.Sum = 2; p2.Sum = 2; int x, y; while (p1.Sum > 0 && p2.Sum > 0) { Console.Write("сумма I: {0}; сумма II: {1}; ваш ход: ", p1.Sum, p2.Sum); x = int.Parse(Console.ReadLine()); y = r.Next(2); Console.Write("ответ: {0} ", y); if (x == y) { Console.WriteLine("победа I"); p1.Sum ++; p2.Sum --; } else { Console.WriteLine("победа II"); p1.Sum --; p2.Sum ++; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: I --"); } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: II --"); } } } } */ // 3. Что плохо -- игра "сам с собой". // Чем плохо -- трудно увеличивать число игроков. // Шаг первый: передать функции игроков - игрокам (2 класса), // главная программа -- судья. /* using System; using System.Threading; namespace game01 { class PlayerM { int sum = 2; public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } public int Attack() { Console.Write("сумма: {0}; ваш ход: ",sum); return int.Parse(Console.ReadLine()); } } class PlayerC { int sum; public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } Random r; public PlayerC() { sum = 2; Thread.Sleep(1); r = new Random(); } public int Attack() { return r.Next(2); } } class Program { static void Main() { PlayerM p1 = new PlayerM(); PlayerC p2 = new PlayerC(); int x, y; while (p1.Sum > 0 && p2.Sum > 0) { x = p1.Attack(); y = p2.Attack(); Console.Write("-- ход {0}, ответ: {1} ",x, y); if (x == y) { Console.WriteLine("победа I"); p1.Sum++; p2.Sum--; } else { Console.WriteLine("победа II"); p1.Sum--; p2.Sum++; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: I --"); } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: II --"); } } } } */ // 4. Теперь сделаем судью отдельной функцией, которая по // двум ЛЮБЫХ игрокам организует схватку и возвращает победителя. // Какие у нее типы аргументов и значения? Нужен полиморфизм. /* using System; using System.Threading; namespace game01 { class Player { protected int sum; //доступен из наследников public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } public virtual int Attack() { return 0; } } class PlayerM:Player { public PlayerM() { sum = 2; } public override int Attack() { Console.Write("сумма: {0}; ваш ход: ", sum); return int.Parse(Console.ReadLine()); } } class PlayerC:Player { Random r; public PlayerC() { sum = 2; Thread.Sleep(1); r = new Random(); } public override int Attack() { return r.Next(2); } } class Program { static Player Battle(Player p1, Player p2) { int x, y; while (p1.Sum > 0 && p2.Sum > 0) { x = p1.Attack(); y = p2.Attack(); Console.Write("-- ход {0}, ответ: {1} ", x, y); if (x == y) { Console.WriteLine("победа I"); p1.Sum++; p2.Sum--; } else { Console.WriteLine("победа II"); p1.Sum--; p2.Sum++; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: I --"); return p1; } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: II --"); return p2; } } static void Main() { PlayerM p1 = new PlayerM(); PlayerC p2 = new PlayerC(); Player p = Battle(p1, p2); } } } */ // 5. Турнир, 4 участника, один из которых -- пользователь. /* using System; using System.Threading; namespace game01 { class Player { protected int sum; //доступен из наследников public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } public virtual int Attack() { return 0; } } class PlayerM : Player { public PlayerM() { sum = 2; } public override int Attack() { Console.Write("сумма: {0}; ваш ход: ", sum); return int.Parse(Console.ReadLine()); } } class PlayerC : Player { Random r; public PlayerC() { sum = 2; Thread.Sleep(1); r = new Random(); } public override int Attack() { return r.Next(2); } } class Program { static Player Battle(Player p1, Player p2) { int x, y; while (p1.Sum > 0 && p2.Sum > 0) { x = p1.Attack(); y = p2.Attack(); Console.Write("-- ход {0}, ответ: {1} ", x, y); if (x == y) { Console.WriteLine("победа I"); p1.Sum++; p2.Sum--; } else { Console.WriteLine("победа II"); p1.Sum--; p2.Sum++; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: I --"); return p1; } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: II --"); return p2; } } static void Main() { Player[] p = new Player[4]; p[0] = new PlayerM(); for (int i = 1; i < 4; i++) { p[i] = new PlayerC(); } Player pp=Battle(Battle(p[0],p[1]),Battle(p[2],p[3])); } } } */ // 6. Как их всех различать и объявлять победителя? // Нужно добавить имена. /* using System; using System.Threading; namespace game01 { class Player { protected string name; public string Name { get { return name; } } protected int sum; public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } public virtual int Attack() { return 0; } } class PlayerM : Player { public PlayerM(string nn) { sum = 2; name = nn; } public override int Attack() { Console.Write("сумма: {0}; ваш ход: ", sum); return int.Parse(Console.ReadLine()); } } class PlayerC : Player { Random r; public PlayerC(string nn) { sum = 2; name = nn; Thread.Sleep(1); r = new Random(); } public override int Attack() { return r.Next(2); } } class Program { static Player Battle(Player p1, Player p2) { int x, y; while (p1.Sum > 0 && p2.Sum > 0) { x = p1.Attack(); y = p2.Attack(); Console.Write("-- ход {0}, ответ: {1} ", x, y); if (x == y) { Console.WriteLine("победа I"); p1.Sum++; p2.Sum--; } else { Console.WriteLine("победа II"); p1.Sum--; p2.Sum++; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0} --",p1.Name); return p1; } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0} --",p2.Name); return p2; } } static void Main() { Player[] p = new Player[4]; p[0] = new PlayerM("Витязь Vi"); for (int i = 1; i < 4; i++) { p[i] = new PlayerC(i.ToString() +"-й рыцарь"); } Battle(Battle(p[0], p[1]), Battle(p[2], p[3])); } } } // Попытка сделать MessageBox // Надо в References добавить System.Windows.Forms /* using System; using System.Windows.Forms; class Program { static void Main() { DialogResult res = MessageBox.Show("Привет", "Заголовок", MessageBoxButtons.YesNo); if (res == DialogResult.Yes) { Console.WriteLine("Yes"); } else { Console.WriteLine("No"); } } } */ // 7. Сделать диалог с пользователем через MessageBox.Show // Консоль -- только для сообщений судьи. /* using System; using System.Threading; using System.Windows.Forms; namespace game01 { class Player { protected string name; public string Name { get { return name; } } protected int sum; public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } public virtual int Attack() { return 0; } } class PlayerM : Player { public PlayerM(string nn) { sum = 2; name = nn; } public override int Attack() { // Console.Write("сумма: {0}; ваш ход: ", sum); // return int.Parse(Console.ReadLine()); DialogResult result = MessageBox.Show ("ваш ход", "сумма: " + sum.ToString(), MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { return 1; } else { return 0; } } } class PlayerC : Player { Random r; public PlayerC(string nn) { sum = 2; name = nn; Thread.Sleep(1); r = new Random(); } public override int Attack() { return r.Next(2); } } class Program { static Player Battle(Player p1, Player p2) { int x, y; while (p1.Sum > 0 && p2.Sum > 0) { x = p1.Attack(); y = p2.Attack(); Console.Write("-- ход {0}, ответ: {1} ", x, y); if (x == y) { Console.WriteLine("победа I"); p1.Sum++; p2.Sum--; } else { Console.WriteLine("победа II"); p1.Sum--; p2.Sum++; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0} --", p1.Name); return p1; } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0} --", p2.Name); return p2; } } static void Main() { Player[] p = new Player[4]; p[0] = new PlayerM("Витязь Vi"); for (int i = 1; i < 4; i++) { p[i] = new PlayerC(i.ToString() + "-ый рыцарь"); } Battle(Battle(p[0], p[1]), Battle(p[2], p[3])); } } } */ // 8. Самостоятельно: преобразовать игроков-вампиров в людей, // чтобы не брали чужих жизней. Увеличить начальный запас до 3. // После каждой битвы выводить и количество жизней победителя. /* using System; using System.Threading; using System.Windows.Forms; namespace game01 { class Player { protected string name; public string Name { get { return name; } } protected int sum; public int Sum { set { sum = value; if (sum < 0) { sum = 0; }; } get { return sum; } } public virtual int Attack() { return 0; } } class PlayerM : Player { public PlayerM(string nn) { sum = 3; name = nn; } public override int Attack() { // Console.Write("сумма: {0}; ваш ход: ", sum); // return int.Parse(Console.ReadLine()); DialogResult result = MessageBox.Show ("ваш ход", "сумма: " + sum.ToString(), MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { return 1; } else { return 0; } } } class PlayerC : Player { Random r; public PlayerC(string nn) { sum = 3; name = nn; Thread.Sleep(1); r = new Random(); } public override int Attack() { return r.Next(2); } } class Program { static Player Battle(Player p1, Player p2) { int x, y; while (p1.Sum > 0 && p2.Sum > 0) { x = p1.Attack(); y = p2.Attack(); Console.Write("-- ход {0}, ответ: {1} ", x, y); if (x == y) { Console.WriteLine("победа I"); p2.Sum--; } else { Console.WriteLine("победа II"); p1.Sum--; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0}, жизней {1} --", p1.Name,p1.Sum); return p1; } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0}, жизней {1} --", p2.Name,p2.Sum); return p2; } } static void Main() { Player[] p = new Player[4]; p[0] = new PlayerM("Витязь Vi"); for (int i = 1; i < 4; i++) { p[i] = new PlayerC(i.ToString() + "-ый рыцарь"); } Battle(Battle(p[0], p[1]), Battle(p[2], p[3])); } } } */ // // 9. Добавить броню, которая с вероятностью 1/3 // спасает жизнь. Как: // 1) Добавить датчик в класс Player и его инициализацию // в конструктор PlayerM // 2) Эффект брони поместить в свойство Sum /* using System; using System.Threading; using System.Windows.Forms; namespace game01 { class Player { protected string name; public string Name { get { return name; } } protected int sum; protected Random r; public int Sum { set { if (r.Next(3) > 0) { sum = value; } //броня else { Console.WriteLine(Name +" - спасла броня"); } if (sum < 0) { sum = 0; }; } get { return sum; } } public virtual int Attack() { return 0; } } class PlayerM : Player { public PlayerM(string nn) { sum = 3; name = nn; Thread.Sleep(1); r = new Random(); } public override int Attack() { // Console.Write("сумма: {0}; ваш ход: ", sum); // return int.Parse(Console.ReadLine()); DialogResult result = MessageBox.Show ("ваш ход", "сумма: " + sum.ToString(), System.Windows.Forms.MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { return 1; } else { return 0; } } } class PlayerC : Player { //Random r; public PlayerC(string nn) { sum = 3; name = nn; Thread.Sleep(1); r = new Random(); } public override int Attack() { return r.Next(2); } } class Program { static Player Battle(Player p1, Player p2) { int x, y; while (p1.Sum > 0 && p2.Sum > 0) { x = p1.Attack(); y = p2.Attack(); Console.Write("-- ход {0}, ответ: {1} ", x, y); if (x == y) { Console.WriteLine("победа I"); p2.Sum--; } else { Console.WriteLine("победа II"); p1.Sum--; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0}, жизней {1} --", p1.Name, p1.Sum); return p1; } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0}, жизней {1} --", p2.Name, p2.Sum); return p2; } } static void Main() { Player[] p = new Player[4]; p[0] = new PlayerM("Витязь Vi"); for (int i = 1; i < 4; i++) { p[i] = new PlayerC(i.ToString() + "-ый рыцарь"); } Battle(Battle(p[0], p[1]), Battle(p[2], p[3])); } } } */ // 10. Сделать переменное число рыцарей. // Надо использовать System.Collections.Generic.Queue using System; using System.Threading; using System.Windows.Forms; using System.Collections.Generic; namespace game01 { class Player { protected string name; public string Name { get { return name; } } protected int sum; protected Random r; public int Sum { set { if (r.Next(3) > 0) { sum = value; } //броня else { Console.WriteLine(Name + " - спасла броня"); } if (sum < 0) { sum = 0; }; } get { return sum; } } public virtual int Attack() { return 0; } } class PlayerM : Player { public PlayerM(string nn) { sum = 3; name = nn; Thread.Sleep(1); r = new Random(); } public override int Attack() { // Console.Write("сумма: {0}; ваш ход: ", sum); // return int.Parse(Console.ReadLine()); DialogResult result = MessageBox.Show ("ваш ход", "сумма: " + sum.ToString(), System.Windows.Forms.MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { return 1; } else { return 0; } } } class PlayerC : Player { //Random r; public PlayerC(string nn) { sum = 3; name = nn; Thread.Sleep(1); r = new Random(); } public override int Attack() { return r.Next(2); } } class Program { static Player Battle(Player p1, Player p2) { int x, y; while (p1.Sum > 0 && p2.Sum > 0) { x = p1.Attack(); y = p2.Attack(); Console.Write("-- ход {0}, ответ: {1} ", x, y); if (x == y) { Console.WriteLine("победа I"); p2.Sum--; } else { Console.WriteLine("победа II"); p1.Sum--; } } if (p1.Sum > 0) { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0}, жизней {1} --", p1.Name, p1.Sum); return p1; } else { Console.WriteLine("-- ОСТАЛСЯ ТОЛЬКО ОДИН: {0}, жизней {1} --", p2.Name, p2.Sum); return p2; } } static void Main() { Console.WriteLine("Сколько противников?"); int m = int.Parse(Console.ReadLine()); Queue q = new Queue(); q.Enqueue(new PlayerM("Витязь Vi")); for (int i = 1; i < m; i++) { q.Enqueue(new PlayerC(i.ToString() + "-ый рыцарь")); } Player p1, p2; while (q.Count > 1) { p1 = q.Dequeue(); p2 = q.Dequeue(); q.Enqueue(Battle(p1, p2)); } } } }