arkanoid/Arkanoidv3.0/Classes/Ball.cs
Mootfrost777 79260807c7 v.0.3
Start commit. All gameplay. Textbox lib by my friend was broken(not fatal for gameplay).
2021-12-21 19:57:41 +03:00

162 lines
5.3 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Content;
using Arkanoid.Classes;
using System.IO;
using System;
using System.Linq;
using MonoGame_Textbox;
using MonoGame_Test;
namespace Arkanoid.Classes
{
class Ball
{
private GameObj ball;
Random random = new Random();
SoundEffect GameOverSong;
SoundEffect PlatformCollideSong;
public int speed1 = -3;
public int speed2 = -3;
Vector2 pos2 = new Vector2();
public void LoadContent(ContentManager Content, Vector2 cpos)
{
ball = new GameObj(Content.Load<Texture2D>("Ball"));
ball.Position = new Vector2(cpos.X, cpos.Y - 100);
ball.Speed = new Vector2(speed1, speed2);
GameOverSong = Content.Load<SoundEffect>("GameOver");
PlatformCollideSong = Content.Load<SoundEffect>("PlatformCollide");
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(ball.texture, ball.Position, Color.White);
}
public void UpdateBall(Platform p, Vector2 cpos, string f, Bricks bricks, SoundEffect Explosion, SoundEffect Explosion2, SoundEffect Explosion3, int levels, Cube cub)
{
Rectangle Next = new Rectangle((int)(ball.Position.X + ball.Speed.X),
(int)(ball.Position.Y + ball.Speed.Y),
ball.Width, ball.Height);
if (Next.Y <= 0)
{
ball.HorizontalRepulsion();
}
if (Next.Y >= 700 - Next.Height)
{
p.position = new Vector2(400, 500);
ball.Position = new Vector2(cpos.X, cpos.Y - 100);
ball.HorizontalRepulsion();
Game1.SaveHistory();
Game1.SaveBestScore();
Game1.score = 0;
speed1 = -3;
speed2 = -3;
p.speed = 6;
Game1.newFlag = false;
bricks.ResetBricks(levels);
ball.IsAlive = false;
Game1.gameState = GameState.GameOver;
GameOverSong.Play();
MediaPlayer.Stop();
}
if ((Next.X >= 800 - Next.Width) || Next.X <= 0)
{
ball.VerticalRepulsion();
}
foreach (var brick in Bricks.bricksArray)
{
if (Next.Intersects(brick.boundingBox) && brick.IsAlive)
{
if (random.Next(0, 2) == 1)
{
if (Game1.levels == 10)
{
if (random.Next(0, 2) == 1)
{
Game1.isBoss = true;
Game1.xforboss = brick.Position.X;
Game1.yforboss = brick.Position.Y;
if (Game1.isBoss == true)
{
// cub = new cuber(Game1.xforboss,Game1.yforboss);
cub.position = new Vector2(Game1.xforboss, Game1.yforboss);
if (p.destinationRectangle.Intersects(cub.dest))
{
Game1.isBoss = false;
}
}
}
int a = random.Next(0, 5);
if (a == 0) Explosion.Play();
else if (a == 1) Explosion2.Play();
else Explosion3.Play();
brick.IsAlive = false;
//int u = random.Next(0, 5);
//if (u==0)
//{
//}
Game1.score++;
}
else
{
int a = random.Next(0, 3);
if (a == 0) Explosion.Play();
else if (a == 1) Explosion2.Play();
else Explosion3.Play();
brick.IsAlive = false;
Game1.score++;
}
}
Collide(ball, brick.boundingBox);
}
}
ball.Position += ball.Speed;
if (Next.Intersects(p.destinationRectangle))
{
PlatformCollideSong.Play();
Collide(ball, p.destinationRectangle);
}
}
public void Collide(GameObj gameObj, Rectangle rectangle)//отбиться от стенок
{
if (rectangle.Left <= gameObj.boundingBox.Center.X && gameObj.boundingBox.Center.X <= rectangle.Right)
{
gameObj.HorizontalRepulsion();
}
else if (rectangle.Top <= gameObj.boundingBox.Center.Y && gameObj.boundingBox.Center.Y <= rectangle.Bottom)
{
gameObj.HorizontalRepulsion();
}
}
}
}