コード例 #1
0
        public void resetGame()
        {
            Cobra            = new Modelo();
            cobraLength      = 1;
            CobraFull        = new List <Modelo>();
            directionHistory = new List <int>();
            directionHistory.Add(1);

            direcaoCobra = 1;   //1: X+  2: Z+  3: X-  4: Z-

            LModelos   = new List <Modelo>();
            Comida     = new List <Modelo>();
            Obstaculos = new List <Modelo>();

            Cobra.LerFicheiro("..\\..\\loadModelos\\cubo.obj");

            Cobra.Translacao(0, 0.5f, 0);

            fieldSize = 100;

            currentPont = 0;

            Matriz               = new Dictionary <string, List <Modelo> >();
            Matriz["food"]       = new List <Modelo>();
            Matriz["obstaculos"] = new List <Modelo>();

            Invoke(new MethodInvoker(delegate()
            {
                pontLabel.Text    = string.Format("Pontuação: " + currentPont);
                maxPontLabel.Text = string.Format("Pontuação máxima: " + maxPont);
            }));
        }
コード例 #2
0
        public void aumentarCobra()
        {
            Modelo cobraPart = new Modelo();

            cobraPart.LerFicheiro("..\\..\\loadModelos\\snakeBody.obj");
            if (LModelos.Count > 0)
            {
                switch (directionHistory[directionHistory.Count - 1 - LModelos.Count - 1])
                {
                case 1:
                    cobraPart.Translacao(LModelos[LModelos.Count - 1].getX() - 1, LModelos[LModelos.Count - 1].getY(), LModelos[LModelos.Count - 1].getZ());
                    break;

                case 2:
                    cobraPart.Translacao(LModelos[LModelos.Count - 1].getX(), LModelos[LModelos.Count - 1].getY(), LModelos[LModelos.Count - 1].getZ() - 1);
                    break;

                case 3:
                    cobraPart.Translacao(LModelos[LModelos.Count - 1].getX() + 1, LModelos[LModelos.Count - 1].getY(), LModelos[LModelos.Count - 1].getZ());
                    break;

                case 4:
                    cobraPart.Translacao(LModelos[LModelos.Count - 1].getX(), LModelos[LModelos.Count - 1].getY(), LModelos[LModelos.Count - 1].getZ() + 1);
                    break;
                }
            }
            else
            {
                switch (directionHistory[directionHistory.Count - 1])
                {
                case 1:
                    cobraPart.Translacao(Cobra.getX() - 2, Cobra.getY(), Cobra.getZ());
                    break;

                case 2:
                    cobraPart.Translacao(Cobra.getX(), Cobra.getY(), Cobra.getZ() - 2);
                    break;

                case 3:
                    cobraPart.Translacao(Cobra.getX() + 2, Cobra.getY(), Cobra.getZ());
                    break;

                case 4:
                    cobraPart.Translacao(Cobra.getX(), Cobra.getY(), Cobra.getZ() + 2);
                    break;
                }
            }

            LModelos.Add(cobraPart);
            cobraLength++;

            removeFood(Cobra.getX(), Cobra.getZ());

            incrementPoints();
        }
コード例 #3
0
        public void randomPosition(object source, ElapsedEventArgs e)
        {
            bool foodOcupado = true;
            bool obstOcupado = true;

            while (foodOcupado == true)
            {
                int newValueX = rndNumber.Next(1, fieldSize);
                int newValueY = rndNumber.Next(1, fieldSize);

                if (foodMatrix[newValueX, newValueY] != 1 && obstaclesMatrix[newValueX, newValueY] != 1)
                {
                    Modelo comida = new Modelo();
                    comida.LerFicheiro("..\\..\\loadModelos\\maça.obj");
                    comida.Translacao(newValueX, 0.5, newValueY);
                    foodMatrix[newValueX, newValueY] = 1;
                    Matriz["food"].Add(comida);
                    foodOcupado = false;
                }
            }

            while (obstOcupado == true)
            {
                int newValueX = rndNumber.Next(1, fieldSize);
                int newValueY = rndNumber.Next(1, fieldSize);

                if (obstaclesMatrix[newValueX, newValueY] != 1 && foodMatrix[newValueX, newValueY] != 1)
                {
                    Modelo obstaculo = new Modelo();
                    obstaculo.LerFicheiro("..\\..\\loadModelos\\cubo.obj");
                    obstaculo.Translacao(newValueX, 0.5, newValueY);
                    obstaclesMatrix[newValueX, newValueY] = 1;
                    Matriz["obstaculos"].Add(obstaculo);
                    obstOcupado = false;
                }
            }
        }
コード例 #4
0
        public SharpGLForm()
        {
            InitializeComponent();

            TextArray = new Texture[5];

            gl = openGLControl.OpenGL;

            for (int i = 1; i <= 4; i++)
            {
                TextArray[i - 1] = new Texture();
                TextArray[i - 1].Create(gl, "..\\..\\Texturas\\Text" + i + ".bmp");
            }

            TextArray[4] = new Texture();
            TextArray[4].Create(gl, "..\\..\\Texturas\\Terrain.bmp");

            this.KeyDown += new KeyEventHandler(keyPress);

            TX                = 0;
            TY                = 0;
            TZ                = 0;
            Escala            = 1.0;
            Incremento_Escala = 0.1;
            Sentido           = 2;
            Em_Movimento      = true;

            Cobra            = new Modelo();
            cobraLength      = 1;
            CobraFull        = new List <Modelo>();
            directionHistory = new List <int>();
            directionHistory.Add(1);

            direcaoCobra = 1;   //1: X+  2: Z+  3: X-  4: Z-

            LModelos   = new List <Modelo>();
            Comida     = new List <Modelo>();
            Obstaculos = new List <Modelo>();

            Cobra.LerFicheiro("..\\..\\loadModelos\\cubo.obj");
            Cobra.Translacao(0, 0.5f, 0);

            fieldSize = 100;

            currentPont = 0;
            maxPont     = 0;

            pontLabel.TextChanged += new System.EventHandler(this.updateScreenPont);

            foodMatrix      = new int[fieldSize, fieldSize];
            obstaclesMatrix = new int[fieldSize, fieldSize];

            timer          = new System.Timers.Timer();
            timer.Elapsed += new ElapsedEventHandler(timerMovement);
            timer.Interval = 100;
            timer.Enabled  = true;

            extrasTimer           = new System.Timers.Timer();
            extrasTimer.Elapsed  += new ElapsedEventHandler(randomPosition);
            extrasTimer.Interval  = 6000;
            extrasTimer.Enabled   = true;
            extrasTimer.AutoReset = true;

            rotatetimer          = new System.Timers.Timer();
            rotatetimer.Elapsed += new ElapsedEventHandler(rotateFunction);
            rotatetimer.Interval = 100;
            rotatetimer.Enabled  = true;

            Matriz               = new Dictionary <string, List <Modelo> >();
            Matriz["food"]       = new List <Modelo>();
            Matriz["obstaculos"] = new List <Modelo>();

            rndNumber = new Random();
        }
コード例 #5
0
        public void timerMovement(object source, ElapsedEventArgs e)
        {
            switch (direcaoCobra)
            {
            case 1:
                if (Cobra.getX() < fieldSize - 2)
                {
                    Cobra.Translacao(1, 0, 0);
                    directionHistory.Add(1);
                }
                break;

            case 2:
                if (Cobra.getZ() < fieldSize - 2)
                {
                    Cobra.Translacao(0, 0, 1);
                    directionHistory.Add(2);
                }
                break;

            case 3:
                if (Cobra.getX() > 0)
                {
                    Cobra.Translacao(-1, 0, 0);
                    directionHistory.Add(3);
                }
                break;

            case 4:
                if (Cobra.getZ() > 0)
                {
                    Cobra.Translacao(0, 0, -1);
                    directionHistory.Add(4);
                }
                break;
            }

            foreach (Modelo M in Matriz["food"].ToArray())
            {
                if (Cobra.Colide(M))
                {
                    aumentarCobra();
                    removeFood(M.getX(), M.getZ());
                    incrementPoints();
                }
            }

            for (int i = 0; i < LModelos.Count - 1; i++)
            {
                if (Cobra.Colide(LModelos[i]))
                {
                    DialogResult resultado = MessageBox.Show("Vamos jogar mais uma vez?", "Fim do jogo", MessageBoxButtons.OK);
                    if (resultado == DialogResult.OK)
                    {
                        resetGame();
                    }
                }
            }

            foreach (Modelo M in Matriz["obstaculos"].ToArray())
            {
                if (Cobra.Colide(M))
                {
                    removeObstacle(M.getX(), M.getZ());
                    decrementPoints();
                }
            }

            for (int i = 1; i <= LModelos.Count; i++)
            {
                if (directionHistory.Count > LModelos.Count)
                {
                    switch (directionHistory[directionHistory.Count - i - 1])
                    {
                    case 1:
                        LModelos[i - 1].Translacao(1, 0, 0);
                        break;

                    case 2:
                        LModelos[i - 1].Translacao(0, 0, 1);
                        break;

                    case 3:
                        LModelos[i - 1].Translacao(-1, 0, 0);
                        break;

                    case 4:
                        LModelos[i - 1].Translacao(0, 0, -1);
                        break;
                    }
                }
                else
                {
                    switch (directionHistory[directionHistory.Count - 1])
                    {
                    case 1:
                        LModelos[0].Translacao(1, 0, 0);
                        break;

                    case 2:
                        LModelos[0].Translacao(0, 0, 1);
                        break;

                    case 3:
                        LModelos[0].Translacao(-1, 0, 0);
                        break;

                    case 4:
                        LModelos[0].Translacao(0, 0, -1);
                        break;
                    }
                }
            }
        }