Ответы пользователя по тегу C#
  • Есть программа на C# как ее написать на php?

    twobomb
    @twobomb
    Ну по идее как-то так
    //левая и правая границы отрезка, количество точек
          $a = readline("Левая граница отрезка a = ");
          $b= readline("Правая граница отрезка b = ");
          $n = readline("Количество точек n = ");
          
          echo "i  |x         |y         \n";
          $x = $a;
          $dx = ($b - $a) / ($n-1); //расстояние между точками
          for ($i = 1; $i <=$n; $i++)
          {
            $y = sin($x) * atan($x); //вычисление значения функции
            echo sprintf("%3d%10.3f%10.3f\n",$i,$x,$y);
            $x = $a + $i*$dx; //вычисление значения аргумента
          }
    Ответ написан
    7 комментариев
  • Не видит локальную переменную?

    twobomb
    @twobomb
    Имя переменной hendl а обращаешься как handl
    Ответ написан
    3 комментария
  • Почему я не могу создать класс Random?

    twobomb
    @twobomb
    А у вас там в зоне видимости случайно нет статического класса с именем Random?
    Попробуйте так
    private void Start()
            {
                System.Random r = new System.Random();
                int result;
                int x = 5, y = 10;
                result = r.Next(x, y); // x - минимальное, y - максимальное возможные числа
            }
    Ответ написан
    1 комментарий
  • Как ежесекундно проверять данные в потоке Stream (FileStream, StreamReader, CryptoStream)?

    twobomb
    @twobomb
    Пример для консольки, если у тебя winform или wpf то вместо той херни которая в цикле while вызывай инвок и меняй состояния бара, ток слип оставь можешь сделать меньше
    public static void EncryptFile(string inputFile, string outputFile){
                using (var rijndael = RijndaelManaged.Create()){
                    rijndael.GenerateIV();
                    rijndael.GenerateKey();
                    using (var inputStream = File.OpenRead(inputFile))
                    using (var outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
                    using (var encStream = new CryptoStream(outputStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write)){
                        Task.Run(() =>{
                            double len = inputStream.Length;
                            while (outputStream.Length < inputStream.Length){
                                int currentLineCursor = Console.CursorTop;
                                Console.SetCursorPosition(0, Console.CursorTop);
                                Console.Write(new string(' ', Console.WindowWidth));
                                Console.SetCursorPosition(0, currentLineCursor);
                                Console.Write(String.Format("Завершено на {0}%", Math.Round(((double)outputStream.Length / len * 100), 2)));
                                Thread.Sleep(100);
                            }
    
                        });
                        inputStream.CopyTo(encStream);
                        Console.WriteLine("\nЗавершено!");
                    }
                }
            }

    P.S. Кстате всё что в таске можешь обернуть в try и ловить System.ObjectDisposedException, если уловил значит оно уже дошифровало и сделало диспос, хотя если не уловишь оно и так завершиться, так вот можно даже white(true) использовать, то условие бесполезно
    Ответ написан
    1 комментарий
  • Можно ли задать цвет для текста в консоли?

    twobomb
    @twobomb
    Console.ForegroundColor = ConsoleColor.White;
    Console.BackgroundColor = ConsoleColor.Green;
    Console.Clear();
    Console.WriteLine("Hello");
    Console.ReadKey();
    Ответ написан
  • Какие программы можно написать на C#?

    twobomb
    @twobomb
    На большинстве ЯП можно написать что угодно и уж точно всё то что в списке.
    Ну понятно что лучше всего написать на С++, вообще всё лучше писать на С++ от сайтов до крупных проектов, но почему же этого никто не делает и создали кучу языков? Да потому-что люди ленивые и не хотят тратить кучу времени и нервов, им нужно что-то более удобное, то на чем можно быстро и легко выполнить поставленную задачу, даже ценой производительности.
    C# простой язык на котором можно быстро и без заморочек написать нужную программу, ну если стоит вопрос написать тот же 3д редактор типа blender, тут лучше смотреть в сторону С++ из-за того что банально это программа в которой происходит очень много вычислений и как ни крути на С++ она будет работать быстрее, чем на C#, а здесь это критично, но это не значит что ее нельзя написать на C#.
    Ответ написан
    Комментировать
  • Построения в 3D карту из ч\б 2D карты?

    twobomb
    @twobomb
    Сделал пример на openGl, залил на github.
    Рендер через SharpGL на winforms
    Код

    public partial class Form1 : Form
        {
    
            private OpenGL gl;
    
            private float offX = 0;//вращение камеры
            private float offY = 100;//высота камеры
            private float cameraDist = 200;//дистация камеры от центра
            private int maxHeightMap = 50;//максимальная высота гор с 100% яркостью
            private float sensivity = 5;//Чувстительность мыши
    
            //для вращения
            private int lastX = 0;
            private int lastY = 0;
            private bool isDrag = false;
            
            
            int xC = 0;//Количество точек по х
            int zC = 0;//Количество точек по y
            int[,] points ;//массив высот, 
    
            private void openGLControl1_MouseUp(object sender, MouseEventArgs e){
                if (e.Button == MouseButtons.Left)
                    isDrag = false;
            }
            private void openGLControl1_MouseMove(object sender, MouseEventArgs e)
            {
                if (isDrag)
                {
                    offX += (e.X - lastX) / sensivity;
                    offY += (lastY - e.Y) / sensivity;
                }
                lastX = e.X;
                lastY = e.Y;
            }
            private void openGLControl1_MouseDown(object sender, MouseEventArgs e){
                if (e.Button == MouseButtons.Left){
                    lastX = e.X;
                    lastY = e.Y;
                    isDrag = true;
                }
            }
    
            public Form1(){
                InitializeComponent();
                gl = this.openGLControl1.OpenGL;
                openGLControl1.MouseWheel += openGLControl1_MouseWheel;
                gl.ClearColor(1, 1, 1, 0);
                
            }
            void openGLControl1_MouseWheel(object sender, MouseEventArgs e){
                if (e.Delta < 0 && cameraDist < 500)
                    cameraDist += 20;
                if (e.Delta > 0 && cameraDist > 20)
                    cameraDist -= 20;
            }
            private void Form1_Load(object sender, EventArgs e){
    
                var bmp = new Bitmap(Properties.Resources.noise);//Берем изображение шума из ресурсов
                xC = bmp.Width;
                zC = bmp.Height;
                points = new int[xC, zC];
                for (int i = 0; i < xC; i++)
                    for (int j = 0; j < zC; j++){
                        points[i, j] = (int)(bmp.GetPixel(i, j).GetBrightness() * maxHeightMap);//Генерируем карту высот по яркости пикселем
                    }
            }
            public void setColor(int val, OpenGL gl){
                double col = (double)val/(double)maxHeightMap * 0.8f;//цвет вершин чем выше тем светлее 
                gl.Color(col, col, col);
            }
            private void openGLControl1_OpenGLDraw(object sender, RenderEventArgs args){
                gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
    
                var width = openGLControl1.Width;
                var height = openGLControl1.Height;
                gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
                gl.MatrixMode(OpenGL.GL_PROJECTION);
                gl.LoadIdentity();
    
                gl.Perspective(60.0f, (double)Width / (double)Height, 0.01, 500.0);
    
                //Вращение камеры
                double angleT = (offX%360)*Math.PI/180f;
                double vx = xC / 2 + Math.Cos(angleT) * cameraDist;
                double vz = zC / 2 + Math.Sin(angleT) * cameraDist;
                gl.LookAt(vx, offY%200, vz, xC / 2, maxHeightMap / 2, zC / 2 , 0, 50, 0);
    
                gl.MatrixMode(OpenGL.GL_MODELVIEW);
                gl.LoadIdentity();
    
                double color = 0;
                //Рисуем карту по треугольникам
                for (int x = 0; x < xC-1; x++)
                    for (int z = 0; z < zC-1; z++){
                        gl.Begin(OpenGL.GL_TRIANGLES);
    
                        setColor(points[x, z], gl);
                        gl.Vertex(x,  points[x, z],z);
                        setColor(points[x+1, z], gl);
                        gl.Vertex(x + 1, points[x+1, z],z);
                        setColor(points[x, z+1], gl);
                        gl.Vertex(x, points[x, z + 1], z + 1);
                        gl.End();
    
                        gl.Begin(OpenGL.GL_TRIANGLES);
                        setColor(points[x+1, z], gl);
                        gl.Vertex(x + 1,  points[x + 1, z],z);
                        setColor(points[x + 1, z+1], gl);
                        gl.Vertex(x + 1, points[x + 1, z + 1], z + 1);
                        setColor(points[x , z+1], gl);
                        gl.Vertex(x,  points[x, z + 1],z + 1);
                        gl.End();
                    }
            }
        }



    6053413090d61617407388.png
    Ответ написан
    Комментировать
  • Как подсчитать количество итераций цикла за 1 секунду?

    twobomb
    @twobomb
    Stopwatch stopWatch = new Stopwatch();
            stopWatch.Start();
    		int iterationCounter = 0;
    		while(true){			
           //todo
    			iterationCounter++;
    			if(stopWatch.ElapsedMilliseconds >= 1000){
    				Console.WriteLine("iterations "+iterationCounter);
    				break;
    			}
    		}
            stopWatch.Stop();

    P.S. Ну это не идеально за 1 секунду, так как одна секунда может истечь в момент обработки вашего кода, тогда если не нужно считать такую итерацию, от счетчика отнимите 1 если ElapsedMilliseconds > 1000
    Ответ написан
  • С# Taks и Invoke почему то блокируется форма?

    twobomb
    @twobomb
    Invoke помоему синхронно работает с основным потоком, если вы в Invoke засунули не просто обновление прогресс бара,а какой-то продолжительный процесс то будет блокироваться. Или используйте BeginInvoke или Invoke но обновляйте только прогресс бар через него не более.
    Ответ написан
    9 комментариев
  • Как заставить UI "ждать" выполнения операции?

    twobomb
    @twobomb
    (new Thread(() => {
                    Invoke(new Action(() =>
                    {
                        mylabel.Text = "Обработка файла...";
                    }));
    
                    //Тут обработка файла
                    Invoke(new Action(() =>
                    {
                        mylabel.Text = "Обработка файла завершена!";
                    }));
    
                })).Start();
    Ответ написан
    8 комментариев
  • Как в юнити определить, что GameObject был уничтожен, чтобы исключить взаимодействие с ним?

    twobomb
    @twobomb
    Ну вы пытаетесь получить доступ к уничтоженному gameobject, значит либо вам нужно при уничтожении удалять его из массива friend, либо может помочь получать этот массив каждый раз, возможно оно не будет искать удаленные типа такого
    ...
        friend = GameObject.FindGameObjectsWithTag("Friend"); 
          foreach (GameObject go in friend)
    ....
    Ответ написан
    1 комментарий
  • Как изменить формат времени?

    twobomb
    @twobomb
    string s = "75:10";
                var formatted = new TimeSpan(0,Int32.Parse(s.Split(':')[0]),Int32.Parse(s.Split(':')[1])).ToString();
    Ответ написан
    Комментировать
  • Как создать функцию с параметрами в потоке?

    twobomb
    @twobomb
    А нельзя это через другую функцию вызвать?
    Типа такого
    Thread thread = new Thread(() =>   {
                   unt_client_recv(client, "127.0.0.1", 25443);
                });

    Если нет, то нужно оформить как класс, и изначально создать класс, инициализировать его и передать метод для выполнения на поток
    Ответ написан
  • Как получить ответ от сервера Кинопоиска?

    twobomb
    @twobomb
    Поменяйте метод на гет
    var key = "71c5dd47-2ab2-40d4-bb00-4974097af5b6";
                var request = WebRequest.Create("https://kinopoiskapiunofficial.tech/api/v2.1/films/300");
                request.ContentType = "application/json";
                request.Headers["X-API-KEY"] = key;
                request.Method = "GET";
                using (var stream  = request.GetResponse().GetResponseStream()){
                    List<byte> buff = new List<byte>();
                    while (true){
                        int b = stream.ReadByte();
                        if(b != -1)
                            buff.Add((byte) b);
                        else
                            break;
                    }
                  textBox1.Text = Encoding.UTF8.GetString(buff.ToArray());
                }

    или
    using (var stream = new StreamReader(request.GetResponse().GetResponseStream()))
                     textBox1.Text = = stream.ReadToEnd();
    Ответ написан
    Комментировать
  • Что лучше для разработки игр под Android?

    twobomb
    @twobomb
    Выучить основы Java или C# это вообще не проблема, тем более они очень похожи. Вам нужно определится что вы будете делать дальше, если будете использовать движок то определится какой,. Просто с ваших слов звучит так что вот вы сейчас выучите C# и будете без проблем писать игры на любых движках и не парится, только вот на практике бывает так что освоить хотя бы основы движка сложнее чем основы языка. Определяйтесь с движком и учите, не понравится один учите другой, не нужно зацикливаться на чем-то одном.
    Ответ написан
    Комментировать
  • Строку в DateTime и вычислить процент, как осуществить на C#?

    twobomb
    @twobomb
    public static string getTimePercent(string time,float percent){
                return TimeSpan.FromSeconds(TimeSpan.Parse(time).TotalSeconds * (percent / 100f)).ToString(@"hh\:mm\:ss");
            }
    
    var diff = getTimePercent("2:15:00",40);//00:48:00
    Ответ написан
    Комментировать
  • Как по другому вытащить значение c#?

    twobomb
    @twobomb
    var result = Regex.Match(str, @"/(\d+)$").Groups[1];
    Ответ написан
    Комментировать