コード例 #1
0
ファイル: World.cs プロジェクト: LucaScorpion/tetris-uu
        public World(Rectangle rect, int offset, ControlMode controlMode, bool muteShape = true)
        {
            this.rect = rect;
            this.borderOffset = offset;
            this.controlMode = controlMode;
            this.mute = muteShape;

            this.currentShape = new Shape(this, controlMode);

            //Combo emitters
            List<ParticleModifier> p = new List<ParticleModifier>();
            p.Add(new GravityModifier(new Vector2(0, -0.5f)));
            p.Add(new RandomSpeedModifier(new Vector2(0.1f, 0.1f)));
            this.comboEmitter = new Emitter(rect.Width / 100f, 0f, Color.Orange * 0.6f, Color.Red, 20, 1, new RandomSpawnSpeed(Vector2.Zero, Vector2.Zero), Assets.Textures.Particle, new RectangleSpawnShape(rect.Width, rect.Height), p);
            this.comboEmitter.Position = new Vector2(rect.Center.X, rect.Center.Y);

            List<ParticleModifier> cp = new List<ParticleModifier>();
            cp.Add(new GravityModifier(new Vector2(0, -0.5f)));
            cp.Add(new RandomSpeedModifier(new Vector2(1f, 1f)));
            this.epicComboEmitter = new Emitter(rect.Width / 90f, 0f, Color.Orange * 0.5f, Color.Blue, 20, 1.5f, new RandomSpawnSpeed(Vector2.Zero), Assets.Textures.Particle, new RectangleSpawnShape(rect.Width, rect.Height), cp);
            this.epicComboEmitter.Position = new Vector2(rect.Center.X, rect.Center.Y);

            //Get rect of one block for size
            Rectangle blockRect = CalculateBlockRectangle(0,0);
            List<ParticleModifier> ep = new List<ParticleModifier>();
            ep.Add(new GravityModifier(new Vector2(0, 0.3f)));
            explosionEmitter = new Emitter(
                (float)blockRect.Width / (float)Assets.Textures.Block.Width,
                (float)blockRect.Width / (float)Assets.Textures.Block.Width,
                Color.Red,
                Color.Red,
                1,
                2f,
                new RandomSpawnSpeed(new Vector2(12, -rect.Width / 30), new Vector2(-12, -rect.Width / 50)),
                Assets.Textures.Block,
                new RectangleSpawnShape(0, 0),
                ep
            );
            stats = new Stats(Assets.Fonts.BasicFont, Color.White, rect);

            //Tetris emitter
            tetrisEmitter = new Emitter(rect.Width / 100f, 0f, Color.Red * 0.4f, Color.Blue, 100, 0.5f, new RandomSpawnSpeed(new Vector2(-30,-9), new Vector2(30,-4)), Assets.Textures.Particle, new RectangleSpawnShape(rect.Width, 0), new List<ParticleModifier>());
            tetrisEmitter.Position = new Vector2(rect.Center.X, rect.Bottom);
        }
コード例 #2
0
ファイル: Application.cs プロジェクト: war-man/TetrisClone
        /// <summary>
        /// Sets up global vars to the program
        /// </summary>
        void SetUpGlobalVars()
        {
            //Create the BACKEND grid for the game
            grid    = new Grid(teacher);
            teacher = false;

            holdManager = new Hold();

            for (int i = 0; i < StaticVars.drawGrid.GetLength(0); i++)
            {
                for (int j = 0; j < StaticVars.drawGrid.GetLength(1); j++)
                {
                    StaticVars.drawGrid[i, j] = new Sprite();

                    //Place each block of the grid at the corresponding position of the array
                    StaticVars.drawGrid[i, j].Position = new Vector2f(j * StaticVars.imageSize.X + StaticVars.gridXPos, i * StaticVars.imageSize.Y + StaticVars.gridYPos + StaticVars.imageSize.Y);

                    //drawGrid[i, j].Size = new Vector2f(WINDOW_WIDTH / 10, WINDOW_HEIGHT / 20);
                    //drawGrid[i, j].Size = new Vector2f(20, 20);
                }
            }

            #region End text
            endText = new Text("You have lost\npress space\nto reset\nthe game", StaticVars.font);

            FloatRect textRect = endText.GetLocalBounds();
            endText.Origin   = new Vector2f(textRect.Left + textRect.Width / 2.0f, textRect.Top + textRect.Height / 2.0f);
            endText.Position = new Vector2f(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2);
            #endregion

            FloatRect textRectPause = StaticVars.pauseText.GetLocalBounds();
            StaticVars.pauseText.Origin   = new Vector2f(textRectPause.Left + textRectPause.Width / 2.0f, textRectPause.Top + textRectPause.Height / 2.0f);
            StaticVars.pauseText.Position = new Vector2f(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2);

            //Make it so the game is playing
            gameState = GameState.Playing;

            pieceQueue = new PieceQueue();

            stats = new Stats();

            //Select a new active piece
            NewPiece();

            //Add the piece to the grid, with a movement of 0,0
            grid.AddPiece(activePiece, new Vector2i(0, 0));

            StaticVars.queueSprite.Position    = new Vector2f(StaticVars.gridXPos + StaticVars.imageSize.X * (StaticVars.drawGrid.GetLength(1) + 2.25f), StaticVars.gridYPos);
            StaticVars.holdSprite.Position     = new Vector2f(StaticVars.gridXPos - StaticVars.holdTexture.Size.X - (StaticVars.imageSize.X * 2.25f), StaticVars.gridYPos);
            StaticVars.drawGridSprite.Position = new Vector2f(StaticVars.gridXPos - StaticVars.imageSize.X * 1.5f, StaticVars.gridYPos - StaticVars.imageSize.Y * 2f);

            #region Queue setup

            queueSpriteArray4x4 = new Sprite[3][, ] {
                new Sprite[4, 4],
                new Sprite[4, 4],
                new Sprite[4, 4]
            };

            for (int i = 0; i < queueSpriteArray4x4.Length; i++)
            {
                for (int j = 0; j < queueSpriteArray4x4[0].GetLength(0); j++)
                {
                    for (int k = 0; k < queueSpriteArray4x4[0].GetLength(1); k++)
                    {
                        queueSpriteArray4x4[i][j, k] = new Sprite();

                        queueSpriteArray4x4[i][j, k].Position = new Vector2f(StaticVars.queueSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * k,
                                                                             StaticVars.queueSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * j + StaticVars.imageSize.Y * (queueSpriteArray4x4[0].GetLength(0) - 1) * i - StaticVars.imageSize.Y);
                    }
                }
            }

            queueSpriteArray1x4 = new Sprite[3][, ] {
                new Sprite[1, 4],
                new Sprite[1, 4],
                new Sprite[1, 4]
            };

            for (int i = 0; i < queueSpriteArray1x4.Length; i++)
            {
                for (int j = 0; j < queueSpriteArray1x4[0].GetLength(0); j++)
                {
                    for (int k = 0; k < queueSpriteArray1x4[0].GetLength(1); k++)
                    {
                        queueSpriteArray1x4[i][j, k] = new Sprite();

                        queueSpriteArray1x4[i][j, k].Position = new Vector2f(StaticVars.queueSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * k,
                                                                             StaticVars.queueSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * j + StaticVars.imageSize.Y * (queueSpriteArray4x4[0].GetLength(0) - 1) * i + StaticVars.imageSize.Y * 0.5f);
                    }
                }
            }


            queueSpriteArray3x3 = new Sprite[3][, ] {
                new Sprite[3, 3],
                new Sprite[3, 3],
                new Sprite[3, 3]
            };

            for (int i = 0; i < queueSpriteArray3x3.Length; i++)
            {
                for (int j = 0; j < queueSpriteArray3x3[0].GetLength(0); j++)
                {
                    for (int k = 0; k < queueSpriteArray3x3[0].GetLength(1); k++)
                    {
                        queueSpriteArray3x3[i][j, k] = new Sprite();

                        queueSpriteArray3x3[i][j, k].Position = new Vector2f(StaticVars.queueSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * k + StaticVars.imageSize.X * 0.5f,
                                                                             StaticVars.queueSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * j + StaticVars.imageSize.Y * queueSpriteArray3x3[0].GetLength(0) * i);
                    }
                }
            }

            #endregion

            #region Hold queue

            holdSprite3x3 = new Sprite[3, 3];

            for (int i = 0; i < holdSprite3x3.GetLength(0); i++)
            {
                for (int j = 0; j < holdSprite3x3.GetLength(1); j++)
                {
                    holdSprite3x3[i, j] = new Sprite();

                    holdSprite3x3[i, j].Position = new Vector2f(StaticVars.holdSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * j + StaticVars.imageSize.X * 0.5f,
                                                                StaticVars.holdSprite.Position.Y + StaticVars.imageSize.Y * 3.5f + StaticVars.imageSize.Y * i);
                }
            }

            holdSprite4x4 = new Sprite[4, 4];

            for (int i = 0; i < holdSprite4x4.GetLength(0); i++)
            {
                for (int j = 0; j < holdSprite4x4.GetLength(1); j++)
                {
                    holdSprite4x4[i, j] = new Sprite();

                    holdSprite4x4[i, j].Position = new Vector2f(StaticVars.holdSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * j,
                                                                StaticVars.holdSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * i);
                }
            }

            holdSprite1x4 = new Sprite[1, 4];

            for (int i = 0; i < holdSprite1x4.GetLength(0); i++)
            {
                for (int j = 0; j < holdSprite1x4.GetLength(1); j++)
                {
                    holdSprite1x4[i, j] = new Sprite();

                    holdSprite1x4[i, j].Position = new Vector2f(StaticVars.holdSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * j,
                                                                StaticVars.holdSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * i + StaticVars.imageSize.Y * 1.5f);
                }
            }

            #endregion

            #region Text

            score = new Score();

            level = new Level();

            realTime = new RealTime();

            #endregion

            menu = new Menu("Play", "Options", "Exit");

            optionsMenu = new Options();

            soundplayer = new SoundPlayer(selectedSong);

            StaticVars.statsSprite.Position = new Vector2f(StaticVars.holdSprite.Position.X, realTime.Position.Y + StaticVars.imageSize.Y);

            StaticVars.controlsText.Position = new Vector2f(StaticVars.queueSprite.Position.X, StaticVars.queueSprite.Position.Y + StaticVars.queueTexture.Size.Y + StaticVars.imageSize.Y);
        }