Пример #1
0
        // расчет времени суток, а так же смена его, при необходимости
        private void timer_Tick(object sender, EventArgs e)
        {
            tick++;
            if (tick == tickInterval)
            {
                int hourBefore = dayTime.Hour;
                dayTime = dayTime.AddMinutes(dayTimeTick);
                if (WorkWithTime.IsNight(dayTime.Hour) && !net.IsNearLamp(new Point(lastClickNet.X + beginRenderNet.X, lastClickNet.Y + beginRenderNet.Y)))
                    goingTime = dayTimeTick * 2;
                else
                    goingTime = dayTimeTick;

                gameTime = gameTime.AddMinutes(-goingTime);
                // условие проигрыша
                if (gameTime.Day == 9)
                {
                    OutMessageBox("время закончилось!!!", "Game end");
                    Close();

                }
                GameTime.Text = gameTime.ToString("yyyy-MM-dd HH':'mm':'ss");


                Time.Text = dayTime.ToShortTimeString();
                // перерисовываем, если день сменился ночью или наоборот
                if (WorkWithTime.TimesOfDay(hourBefore, dayTime.Hour))
                    AllRender();
                tick = 0;
            }
        }
Пример #2
0
 // перерисовка всех отображаемых в данный момент объектов
 private void AllRender()
 {
     Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
     GameRendering.RenderNet(net, beginRenderNet, Scene, scale, WorkWithTime.IsNight(dayTime.Hour));
     GameRendering.RenderMouseClickAlgorithmPoint(lastClickNet.X, lastClickNet.Y, Textures.CurrentCharactert);
     GameRendering.RenderWayByAlgorithmPoint(way);
     GameRendering.RenderMouseClickGraphPoint(currentClickGraph.X, currentClickGraph.Y, Textures.TransparentCharacter);
     GameRendering.RenderMouseClickAlgorithmPoint(subClickNet.X, subClickNet.Y, Textures.TransparentCharacter);
     Scene.Invalidate();
 }
Пример #3
0
 // вспомогательный метод, расчет пути по предполагаемому расположению персонажа
 // и отображение минут, которых потребуется на этот переход
 private void CalculationPathForCurrentCell()
 {
     subClickNet.X = lastClickNetWithoutOffset.X;
     subClickNet.Y = lastClickNetWithoutOffset.Y;
     way = GameControl.FindPath(net.CellsOfNet, lastClickNet, subClickNet, beginRenderNet, scale);
     if (way?.Count > 1)
     {
         distance = WorkWithTime.SubTotalTimeCountingForWay(way, DateTime.Parse(Time.Text), beginRenderNet, net, dayTimeTick);
         TravelTime.Text = distance.ToString();
     }
     else
     {
         TravelTime.Text = "0";
         distance = 0;
     }
     AllRender();
 }
Пример #4
0
        // двойной клик на клетку, расчет времени и отображение персонажа в новой позиции
        private void Scene_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            int mouseArgX = e.X;
            int mouseArgY = Scene.Height - e.Y; // инвертирование значения ординаты курсора
            var currentClickNet = GameRendering.GraphPointToAlgorithmPoint(mouseArgX, mouseArgY);

            lastClickNetWithoutOffset.X = currentClickNet.X;
            lastClickNetWithoutOffset.Y = currentClickNet.Y;
            
            currentClickNet.X += beginRenderNet.X;
            currentClickNet.Y += beginRenderNet.Y;

            if (net.IsFree(currentClickNet))
            {
                subClickNet.X = lastClickNetWithoutOffset.X;
                subClickNet.Y = lastClickNetWithoutOffset.Y;
                way = GameControl.FindPath(net.CellsOfNet, lastClickNet, subClickNet, beginRenderNet, scale);
                if (way?.Count > 1)
                    distance = WorkWithTime.SubTotalTimeCountingForWay(way, DateTime.Parse(Time.Text), beginRenderNet, net, dayTimeTick);
                MoveCharacterAndRecountingPath(currentClickNet);

                flagForFirstDrawing = true;
            }
        }