示例#1
0
        public void Print(SnakeModel model)
        {
            var sb = new StringBuilder();

            for (var j = 0; j < model.NumRows; j++)
            {
                for (var i = 0; i < model.NumColumns; i++)
                {
                    sb.AppendFormat("{0,4}", model.Array[i, j]);
                }
                sb.AppendLine();
            }
            try
            {
                using (var w = new StreamWriter(Path))
                {
                    w.WriteLine(sb.ToString());
                    MessageBox.Show("Данные успешно сохранены",
                                    "Сохранение файла", MessageBoxButtons.OK, MessageBoxIcon.None);
                    logger.Info("Массив успешно сохранен в файл.");
                }
            }
            catch (IOException ex)
            {
                logger.Info("Ошибка сохранения в файл. " + ex.ToString());
                MessageBox.Show("Произошла ошибка \n" + ex.ToString(),
                                "Печать в файл", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#2
0
        public SnakeViewModel(SnakeModel model)
        {
            _model = model;

            _model.GameOver   += Model_GameOver;
            _model.SnakeMoved += RefreshTable;

            Fields  = new ObservableCollection <ViewField>();
            NewGame = new DelegateCommand(OnNewGame);
            Control = new DelegateCommand(KeyHandler);

            LoadGameOpenCommand = new DelegateCommand(param =>
            {
                Games = new ObservableCollection <SaveEntry>(_model.List());
                OnLoadGameOpen();
            });
            LoadGameCloseCommand = new DelegateCommand(
                param => SelectedGame != null,
                param => {
                OnLoadGameClose(SelectedGame.Name);
            });
            SaveGameOpenCommand = new DelegateCommand(param =>
            {
                Games = new ObservableCollection <SaveEntry>(_model.List());
                OnSaveGameOpen();
            });
            SaveGameCloseCommand = new DelegateCommand(
                param => NewName.Length > 0,
                param => {
                OnSaveGameClose(NewName);
            });

            //MakeGameTable();
        }
 public void Print(SnakeModel model)
 {
     try
     {
         DataGrid.Rows.Clear();
         DataGrid.ColumnCount = model.NumColumns;
         DataGrid.RowCount    = model.NumRows;
         for (var j = 0; j < model.NumRows; j++)
         {
             for (var i = 0; i < model.NumColumns; i++)
             {
                 DataGrid.Rows[j].Cells[i].Value = model.Array[i, j];
             }
         }
         logger.Info("Массив успешно отображен в DataGrid.");
     }
     catch (InvalidOperationException ex)
     {
         logger.Warn("Ошибка отображения массива в DataGrid. " + ex.ToString());
         MessageBox.Show(ex.ToString());
     }
     catch (ArgumentException ex)
     {
         logger.Warn("Ошибка отображения массива в DataGrid. " + ex.ToString());
         MessageBox.Show(ex.ToString());
     }
     catch (IndexOutOfRangeException ex)
     {
         logger.Warn("Ошибка отображения массива в DataGrid. " + ex.ToString());
         MessageBox.Show(ex.ToString());
     }
 }
示例#4
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            var   model = new SnakeModel(10, 10);
            Form1 view  = new Form1();

            view.InitView(10, 10);
            view.SetTextureMap(new Dictionary <SnakeTile, Image>()
            {
                { SnakeTile.Blank, Image.FromFile(@"C:\Users\xiwyu\Pictures\blank.bmp") },
                { SnakeTile.Snake, Image.FromFile(@"C:\Users\xiwyu\Pictures\snake.bmp") },
                { SnakeTile.Food, Image.FromFile(@"C:\Users\xiwyu\Pictures\food.bmp") },
                { SnakeTile.Grass, Image.FromFile(@"C:\Users\xiwyu\Pictures\grass.bmp") }
            });
            view.KeyPreview = true;

            var controller = new WinFormController <SnakeTile>(model, view);

            view.KeyDown += controller.HandelUserInput;
            controller.InitView();
            controller.BindSelfToTimer(view.Timer1);

            Application.Run(view);
        }
 public SnakeBlockController(Coordinate _blockCoordinate, SnakeBlockController _nextBlock, GameObject _blockPrefab, SnakeModel _model)
 {
     blockCoordinate = _blockCoordinate;
     nextBlock       = _nextBlock;
     model           = _model;
     block           = GameObject.Instantiate(_blockPrefab, UtilityFunctions.GetTransformsForCoordinatesOnBoardPlane(blockCoordinate, 0.6f), Quaternion.identity);
 }
示例#6
0
 public Snake(SnakeModel snakeModel)
 {
     Id     = snakeModel.Id;
     Name   = snakeModel.Name;
     Health = snakeModel.Health;
     Body   = snakeModel.Body.AsPoints();
 }
示例#7
0
    public void Start()
    {
        // find the model
        m_Model = FindObjectOfType <SnakeModel>();

        // create the 3 initial blocks
        var obj = Instantiate(blockReference, Vector3.zero, Quaternion.identity);

        m_Model.SnakeBlocks.Add(obj);

        obj = Instantiate(blockReference,
                          new Vector3(-1, 0, 0), Quaternion.identity);
        m_Model.SnakeBlocks.Add(obj);

        obj = Instantiate(blockReference,
                          new Vector3(-2, 0, 0), Quaternion.identity);
        m_Model.SnakeBlocks.Add(obj);

        // fruit
        m_Fruit = Instantiate(
            blockReference,
            new Vector3(
                UnityEngine.Random.Range(-10, 10),
                UnityEngine.Random.Range(-10, 10),
                0), Quaternion.identity);

        StartCoroutine(Move());
    }
示例#8
0
        private void Initialize()
        {
            ChangeDirectionCommand = new PlayerControlCommnad(ChangeDirection, CanChangeDirection);
            SnakeObj = new SnakeModel(SnakeBodyPart.GetDefaultBodyPart());
            PointObj = new PointModel();

            SnakeTimer = new DispatcherSnakeTime(UpdateBoard);
        }
示例#9
0
 // Use this for initialization
 public void Start()
 {
     snake          = gameManager.GameData.Snake;
     foodController = gamePanel.GetComponent <FoodController> ();
     snakeView.Start();
     InstantiateSnake();
     direction = snake.Direction;
     StartMoving();
 }
示例#10
0
        private const int panelSize = 12;   //The size of individual field panels.

        #endregion

        #region Constructors

        /// <summary>
        /// Constructor for the Form window. Creates a new model and subscribes to its events.
        /// </summary>
        public SnakeForm()
        {
            InitializeComponent();

            model = new SnakeModel(new TextFilePersistence());

            model.MapChanged  += new EventHandler <MapChangedEventArgs>(Model_MapChanged);
            model.TileChanged += new EventHandler <TileChangedEventArgs>(Model_TileChanged);
            model.GameOver    += new EventHandler <GameOverEventArgs>(Model_GameOver);
        }
示例#11
0
 public static void ChanceOtherFoodToAppear(List <FoodModel> foods, SnakeModel snake)
 {
     if (Random.Next(0, 20) == 10 && !IsGoldenFoodShown)
     {
         foods.Add(CreateGoldenFood(snake));
     }
     else if (Random.Next(0, 4) == 2 && !IsSpecialFoodShown)
     {
         foods.Add(CreateSpecialFood(snake));
     }
 }
示例#12
0
        private static FoodModel CreateGoldenFood(SnakeModel snake)
        {
            FoodModel food = new FoodModel();

            food.Type = FoodType.Gold;
            food.NewPosition(snake);

            IsGoldenFoodShown = true;

            return(food);
        }
示例#13
0
        private static FoodModel CreateSpecialFood(SnakeModel snake)
        {
            FoodModel food = new FoodModel();

            food.Type = FoodType.Special;
            food.NewPosition(snake);

            IsSpecialFoodShown = true;

            return(food);
        }
示例#14
0
    private static Scorer GetScorer()
    {
        SnakeModel model = SnakeApplication.GetInstance().model;

        if (model != null && model.scorer != null)
        {
            return(model.scorer);
        }
        else
        {
            return(new Scorer());
        }
    }
示例#15
0
        public void Initialize()
        {
            mock = new Mock <IPersistence>();
            mock.Setup(x => x.LoadLevel(It.IsAny <string>()));
            mock.SetupGet(x => x.MapSize).Returns(7);
            mock.SetupGet(x => x.Walls).Returns(new System.Collections.Generic.List <Tuple <int, int> >()
            {
                new Tuple <int, int>(0, 0)
            });

            model        = new SnakeModel(mock.Object);
            wrappedModel = new PrivateObject(model);
        }
示例#16
0
        private bool IsInsideSnakeBody(SnakeModel snake)
        {
            foreach (var bodyPart in snake.BodyParts)
            {
                Point pos = new Point(bodyPart.CurrentPosition.X, bodyPart.CurrentPosition.Y);

                if (pos.X == Position.X && pos.Y == Position.Y)
                {
                    return(true);
                }
            }

            return(false);
        }
示例#17
0
        /// <summary>
        /// Startup eventhandler. Creates components, hooks up events.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void App_Startup(object sender, StartupEventArgs e)
        {
            dataAccess = new TextFilePersistence();

            model           = new SnakeModel(dataAccess);
            model.GameOver += new EventHandler <GameOverEventArgs>(Model_GameOver);

            viewModel            = new SnakeViewModel(model);
            viewModel.ExitGame  += new EventHandler(ViewModel_Exit);
            viewModel.LoadLevel += new EventHandler(ViewModel_LoadLevel);

            window             = new SnakeWindow();
            window.DataContext = viewModel;
            window.Show();
        }
示例#18
0
        static void Main()
        {
            IModel <SnakeTile>              model             = new SnakeModel(20, 15);
            SimpleConsoleView <SnakeTile>   simpleConsoleView = new SimpleConsoleView <SnakeTile>();
            ColorfulConsoleView <SnakeTile> colorful          = new ColorfulConsoleView <SnakeTile>();

            simpleConsoleView.SetTextureMap(new Dictionary <SnakeTile, string>
            {
                { SnakeTile.Grass, "w" },
                { SnakeTile.Blank, " " },
                { SnakeTile.Snake, "@" },
                { SnakeTile.Food, "*" }
            });

            colorful.SetTextureMap(new Dictionary <SnakeTile, string>
            {
                { SnakeTile.Grass, "w" },
                { SnakeTile.Blank, " " },
                { SnakeTile.Snake, "@" },
                { SnakeTile.Food, "*" }
            });

            colorful.SetTextureMap(new Dictionary <SnakeTile, ConsoleColor>
            {
                { SnakeTile.Grass, ConsoleColor.Green },
                { SnakeTile.Snake, ConsoleColor.White },
                { SnakeTile.Food, ConsoleColor.Red },
                { SnakeTile.Blank, ConsoleColor.Black }
            });

            IView <SnakeTile> view;

            Console.WriteLine("你想要:A.黑白电视 B.彩色电视:");
            string input = Console.ReadLine();

            if (input.StartsWith("B"))
            {
                view = colorful;
            }
            else
            {
                view = simpleConsoleView;
            }

            Controller <SnakeTile> controller = new Controller <SnakeTile>(model, view);

            controller.GameMain();
        }
示例#19
0
        public void NewPosition(SnakeModel snake)
        {
            AsRectangle = new Rectangle();

            switch (Type)
            {
            case FoodType.Normal:
                AsRectangle.Fill = Settings.FoodColor;
                break;

            case FoodType.Gold:
                AsRectangle.Fill = Brushes.Gold;
                break;

            case FoodType.Special:
                AsRectangle.Fill = Brushes.Pink;
                break;
            }

            AsRectangle.Width  = Size;
            AsRectangle.Height = Size;

            while (true)
            {
                Position = new Point(Random.Next(0, 500 / Size) * Size, Random.Next(0, 500 / Size) * Size);

                if (IsInsideSnakeBody(snake))
                {
                    continue;
                }

                if (MainWindow.CanShowWalls)
                {
                    if (IsInsideWalls())
                    {
                        continue;
                    }
                }

                break;
            }

            Canvas.SetLeft(AsRectangle, Position.X);
            Canvas.SetTop(AsRectangle, Position.Y);
        }
示例#20
0
        public SnakeManager()
        {
            playField = new PlayFieldModel();
            fruit     = new FruitModel();
            snake     = new SnakeModel {
                Bodyes = new LinkedList <SnakeBodyPartModel>()
            };

            snake.Bodyes.AddFirst(new SnakeBodyPartModel {
                Сoordinates = new СoordinatesModel(110, 110)
            });
            snake.Bodyes.AddFirst(new SnakeBodyPartModel {
                Сoordinates = new СoordinatesModel(100, 110)
            });
            snake.Bodyes.AddFirst(new SnakeBodyPartModel {
                Сoordinates = new СoordinatesModel(90, 110)
            });
        }
示例#21
0
        private void App_StartUp(object sender, StartupEventArgs e)
        {
            DbPersistence _dataAccess = new DbPersistence("name=SnakeModel");

            _model = new SnakeModel(_dataAccess);

            _viewmodel = new SnakeViewModel(_model);


            _viewmodel.LoadGameOpen  += new EventHandler(ViewModel_LoadGameOpen);
            _viewmodel.LoadGameClose += new EventHandler <String>(ViewModel_LoadGameClose);
            _viewmodel.SaveGameOpen  += new EventHandler(SaveGameOpen);
            _viewmodel.SaveGameClose += new EventHandler <String>(SaveGameClose);

            _view             = new MainWindow();
            _view.DataContext = _viewmodel;

            _view.Show();
        }
示例#22
0
        public IViewModel Construct(SnakeStruct str, Vector2 positionForSpawn)
        {
            var snakeGo        = new GameObject("Snake").AddComponent <SnakeView>();
            var snakeTransform = snakeGo.transform;

            snakeTransform.position = positionForSpawn;
            var model = new SnakeModel(str, snakeTransform);

            for (int i = 0; i < str.BodyCount; i++)
            {
                model.AddingNewPiece();
            }

            if (snakeGo.TryGetComponent <Rigidbody2D>(out var rigidbody2D))
            {
                rigidbody2D.gravityScale = 0.0f;
            }

            return(new SnakeViewModel(model, snakeGo, snakeGo.gameObject));
        }
示例#23
0
        public event EventHandler LoadLevel;       //Event for loading a new level.

        #endregion

        #region Constructors

        /// <summary>
        /// SnakeViewModel constructor
        /// </summary>
        /// <param name="model"></param>
        public SnakeViewModel(SnakeModel model)
        {
            //Set the model.
            this.model = model;
            //Subscribe to the events of the model.
            model.MapChanged  += new EventHandler <MapChangedEventArgs>(Model_MapChanged);
            model.TileChanged += new EventHandler <TileChangedEventArgs>(Model_TileChanged);

            //Define the commands.
            UpCommand      = new DelegateCommand(param => model.Direction = Direction.Up);
            DownCommand    = new DelegateCommand(param => model.Direction = Direction.Down);
            LeftCommand    = new DelegateCommand(param => model.Direction = Direction.Left);
            RightCommand   = new DelegateCommand(param => model.Direction = Direction.Right);
            ExitCommand    = new DelegateCommand(param => OnExit());
            RestartCommand = new DelegateCommand(param => model.RestartLevel());
            PauseCommand   = new DelegateCommand(param => OnPause());
            LoadCommand    = new DelegateCommand(param => OnLoad());

            //Initialize the fields collection.
            Fields = new ObservableCollection <ViewField>();
        }
示例#24
0
 public void ChangeModel(SnakeModel model)
 {
     this.model = model;
 }
示例#25
0
        public ActionResult KeyPush(KeyModel model)
        {
            LobbyModel lobby          = lobbies[getIndex(model.Username)];
            SnakeModel hostPieceAdded = null;
            SnakeModel memPieceAdded  = null;

            if (lobby.lost != "no")
            {
                return(Json(lobby, JsonRequestBehavior.AllowGet));
            }
            int  x;
            int  y;
            bool isHost = false;

            if (lobby.Host == model.Username)
            {
                isHost = true;
                x      = lobby.HostSnake.X;
                y      = lobby.HostSnake.Y;
            }
            else
            {
                x = lobby.MemberSnake.X;
                y = lobby.MemberSnake.Y;
            }

            string key = model.Key;

            if (model.Drop)
            {
                if (isHost)
                {
                    lobby.HostWalls.AddRange(lobby.HostBody);
                    lobby.HostBody = new List <SnakeModel>();
                }
                else
                {
                    lobby.MemWalls.AddRange(lobby.MemBody);
                    lobby.HostBody = new List <SnakeModel>();
                }
            }

            if (key.CompareTo("w") == 0)
            {
                y = y - 1;
                if (y < 0)
                {
                    y = 0;
                }
            }
            else if (key.CompareTo("a") == 0)
            {
                x = x - 1;
                if (x < 0)
                {
                    x = 0;
                }
            }
            else if (key.CompareTo("s") == 0)
            {
                y = y + 1;
                if (y > MAXHEIGHT)
                {
                    y = MAXHEIGHT;
                }
            }
            else if (key.CompareTo("d") == 0)
            {
                x += 1;
                if (x > MAXWIDTH)
                {
                    x = MAXWIDTH;
                }
            }
            if (isHost)
            {
                lobby.HostBody.Add(new SnakeModel
                {
                    X = lobby.HostSnake.X,
                    Y = lobby.HostSnake.Y
                });
                hostPieceAdded = lobby.HostSnake;
                lobby.HostBody.RemoveAt(0);
                lobby.HostSnake.X = x;
                lobby.HostSnake.Y = y;
                lobby.Board[x, y] = "hHead";
            }
            else
            {
                lobby.MemBody.Add(new SnakeModel
                {
                    X = lobby.MemberSnake.X,
                    Y = lobby.MemberSnake.Y
                });
                memPieceAdded = lobby.MemberSnake;
                lobby.MemBody.RemoveAt(0);
                lobby.MemberSnake.X = x;
                lobby.MemberSnake.Y = y;
                lobby.Board[x, y]   = "hHead";
            }
            if (lobby.MemberSnake.X == lobby.Fruit.X && lobby.MemberSnake.Y == lobby.Fruit.Y)
            {
                lobby.MemSize += 1;
                lobby.MemBody.Add(memPieceAdded);
                lobby.Fruit = newFruitLocation(lobby);
            }
            else if (lobby.HostSnake.X == lobby.Fruit.X && lobby.HostSnake.Y == lobby.Fruit.Y)
            {
                lobby.HostSize += 1;
                lobby.HostBody.Add(hostPieceAdded);
                lobby.Fruit = newFruitLocation(lobby);
            }

            if (checkWin(lobby, isHost))
            {
                if (isHost)
                {
                    lobby.lost = lobby.Member;
                }
                else
                {
                    lobby.lost = lobby.Host;
                }
            }

            lobbies[getIndex(model.Username)] = lobby;
            return(Json(lobby, JsonRequestBehavior.AllowGet));
        }
示例#26
0
 public SnakeController(SnakeManager _snakeManger)
 {
     model       = new SnakeModel();
     snakeManger = _snakeManger;
 }
示例#27
0
 public void SetModel(SnakeModel model)
 {
     this.model = model;
 }
示例#28
0
 public GameData()
 {
     snake = new SnakeModel();
     food  = new FoodModel();
 }