@Urlxd

Код не идёт дальше в c#?

Код не идёт дальше. В условии while он не идёт дальше первого условия

Код:
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;

namespace war_simulator
{

    public class Program 
    {
        public static void Main()
        {
        	Random rnd1 = new Random(Environment.TickCount);
    		
    		// создание переменных
    		int randatk1 = 0;
    		int randatk2 = 0;
    		
			double atk1, def1, def2, hp1, hp2, randwar2 = 0;
			double atk2 = 0;
			double randwar1 = 0;
			
			
			// вписывание категории
			atk1 = int.Parse(Console.ReadLine());
			def1 = int.Parse(Console.ReadLine());
			hp1 = int.Parse(Console.ReadLine());
			atk2 = int.Parse(Console.ReadLine());
			def2 = int.Parse(Console.ReadLine());
			hp2 = int.Parse(Console.ReadLine());
			
			if (atk1 == 0){
				atk1 = 0.1;
			}
			
			// вычесление силы первого персонажа
			if (atk1 <= def2){
				randwar1 = atk1 * 50 / def2;
			}
			if (atk1 > def2){
				randwar1 = def2 * 50 / atk1 - 100;
				randwar1 = Math.Pow(randwar1, 2);
				randwar1 = Math.Pow(randwar1, 0.5);
			}
			
			// вычесление силы второго персонажа
			if (atk2 <= def1){
				randwar2 = atk2 * 50 / def1;
			}
			if (atk2 > def1){
				randwar2 = def1 * 50 / atk2 - 100;
				randwar2 = Math.Pow(randwar2, 2);
				randwar2 = Math.Pow(randwar2, 0.5);
			}
			Console.WriteLine("hh");
			Console.WriteLine(randwar1);
			Console.WriteLine(randwar2);
			
			
			// процесс битвы
			while(true){
				randatk1 = rnd1.Next(0,101);
				randatk2 = rnd1.Next(0,101);
				if (randwar1 > randatk1){
					hp2 = hp2 - 1;
					Console.WriteLine("bruh 1");
					continue;
				}
				else if (randwar1 < randatk1){
					Console.WriteLine(hp2);
					continue;
				}
				if (randwar2 > randatk2){
					hp1 = hp1 - 1;
					Console.WriteLine("bruh 2");
					continue;
				}
				else if (randwar2 < randatk2){
					Console.WriteLine("iu 2");
					continue;
				}
				if (hp2 < 0){
					Console.WriteLine("1 team win");
					break;
				}
				if (hp1 == 0){
					Console.WriteLine("2 team win");
					break;
				}
			}
			Console.WriteLine("sksk");
			Console.WriteLine(randatk1);
			Console.WriteLine(randatk2);
        }
    }
}

Может я что-нибудь не вижу (
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
@spaceatmoon
В вашем коде кто первый бьёт, тот и выигрывает по сути. Также у вас будет бесконечным цикл пока первый и второй не промахнётся по цели.

Я попробовал переписать часть с битвой, чтобы одинаково рандомно каждый из игроков бил за один ход другого.
// процесс битвы
		while(true)
			{
				randatk1 = rnd1.Next(0,101);
				randatk2 = rnd1.Next(0,101);
				Console.WriteLine("h1 = " + hp1);
				Console.WriteLine("h2 = " + hp2);
				Console.WriteLine("Current chance h1 = " + randatk1);
				Console.WriteLine("Current chance h2 = " + randatk2);
				
				if (randatk1 > randatk2)
				{
					if (randwar1 > randatk1){
						hp2 = hp2 - 1;
						Console.WriteLine("atack player 1");
					}
				}
				else
				{
					if (randwar2 > randatk2){
						hp1 = hp1 - 1;
						Console.WriteLine("atack player 2");
					}
				}
			
				Console.WriteLine("All attacks repelled");
				if (hp1 <= 0 || hp2 <= 0)
				{
					if (hp1 <= 0)
					{
						Console.WriteLine("2 team win");
					}
					else
					{
						Console.WriteLine("1 team win");
					}
					break;
				}
				
			}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Следующие после первого условия не будут выполнены если:
randwar1 > randatk1 - тогда первое условие будет выполнено и сработает continue;
randwar1 < randatk1 - тогда будет выполнена ветка else, и также сработает continue;
Тоесть к следующим условиям выполнение перейдёт только если randwar1 == randatk1
randwar2 > randatk2 - снова попадёт в continue;
randwar2 < randatk2 - также
if (randwar1 > randatk1){
          hp2 = hp2 - 1;
          Console.WriteLine("bruh 1");
          continue;
        }
        else if (randwar1 < randatk1){
          Console.WriteLine(hp2);
          continue;
        }
        if (randwar2 > randatk2){
          hp1 = hp1 - 1;
          Console.WriteLine("bruh 2");
          continue;
        }
        else if (randwar2 < randatk2){
          Console.WriteLine("iu 2");
          continue;
        }
        if (hp2 < 0){
          Console.WriteLine("1 team win");
          break;
        }
        if (hp1 == 0){
          Console.WriteLine("2 team win");
          break;
        }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы