//vzdycky musi byt v parametru zastupce tridy s kterou jdeme komunikovat public void Kolize_hrac2(Hrac2 objekt, Game1 game) { if (VratRectangle().Intersects(objekt.VratRectangle())) { this.smazani_strely = true; objekt.ZiskejPozici(new Vector2(900, 20)); } }
protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); hracuv_objekt = new Hrac1(Content.Load<Texture2D>("hrac1"), new Vector2(30, 600), this); hracuv_objekt_2 = new Hrac2(Content.Load<Texture2D>("hrac2"), new Vector2(900, 20), this); list_hrac1.Add(hracuv_objekt); list_hrac2.Add(hracuv_objekt_2); zastupce_herniho_jadra = new herni_jadro(this, list_strel, list_strel2, list_prekazek, list_odrazovych_ploch, list_hrac1, list_hrac2, Content.Load<Texture2D>("strela1"), Content.Load<Texture2D>("strela2")); //list_strel musi byt v game1 deklarovan proto, aby naplnil konstruktor herni logiky a zajistil fyzicke vykreslovani grafiky, //konstruktoru se rekne ze instance ma dany listbox + texturu jeho členů list_prekazek.Add(new prekazka(Content.Load<Texture2D>("prekazka1"), new Vector2(650, 80))); list_prekazek.Add(new prekazka(Content.Load<Texture2D>("strom2"), new Vector2(300, 250))); list_prekazek.Add(new prekazka(Content.Load<Texture2D>("prekazka3"), new Vector2(550, 450))); list_prekazek.Add(new prekazka(Content.Load<Texture2D>("strom2"), new Vector2(200, 450))); list_prekazek.Add(new prekazka(Content.Load<Texture2D>("strom2"), new Vector2(750,200))); list_prekazek.Add(new prekazka(Content.Load<Texture2D>("strom2"), new Vector2(770,500))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("prekazka3"), new Vector2(250, 150))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("skala"), new Vector2(50, 150))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("skala"), new Vector2(500, 200))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("prekazka2"), new Vector2(300, 100))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("prekazka2"), new Vector2(400, 180))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("skala"), new Vector2(30, 550))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("skala"), new Vector2(200, 400))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("prekazka2"), new Vector2(300, 500))); list_odrazovych_ploch.Add(new odrazova_plocha(Content.Load<Texture2D>("prekazka2"), new Vector2(550, 380))); }
//kolize player vs player public void Kolize_prekazka_Top(Hrac2 objekt, Game1 game) { if (VratRectangle().vrchol(objekt.VratRectangle())) { if (Keyboard.GetState().IsKeyDown(Keys.Down)) { rychlost.Y = 0f; } } }
public void Kolize_prekazka_Right(Hrac2 objekt, Game1 game) { if (VratRectangle().pravy(objekt.VratRectangle())) { if (Keyboard.GetState().IsKeyDown(Keys.Left)) { rychlost.X = 0f; } } }
public void Kolize_prekazka_Bottom(Hrac2 objekt, Game1 game) { if (VratRectangle().spodek(objekt.VratRectangle())) { if (Keyboard.GetState().IsKeyDown(Keys.Up)) { rychlost.Y = 0f; } } }
public void Update(KeyboardState keyboard, Hrac1 hrac, Hrac2 hrac_2, GameTime gameTime) { if (keyboard.IsKeyDown(Keys.Space) && !stisknuto_hrac1) { list_strel.Add(new strela(vystrel, new Vector2(hrac.VratPozici().X + hrac.VratRectangle().Width / 2 - vystrel.Width / 2, hrac.VratPozici().Y - vystrel.Height / 2 - 10), 2)); stisknuto_hrac1 = true; //vytvorit se nova strela v kolekci, ktera ma texturu, slozitejsi pozici a rychlost } if (keyboard.IsKeyUp(Keys.Space) && stisknuto_hrac1) stisknuto_hrac1 = false; //hrac2 if (keyboard.IsKeyDown(Keys.Q) && !stisknuto_hrac2) { list_strel2.Add(new strela(vystrel2, new Vector2(hrac_2.VratPozici().X + hrac_2.VratRectangle().Width / 2 - vystrel2.Width / 2, hrac_2.VratPozici().Y - vystrel2.Height / 2 + hrac_2.VratRectangle().Width + 35) , -2)); //3 na konci je posun strely od kolize pryc stisknuto_hrac2 = true; //vytvorit se nova strela v kolekci, ktera ma texturu, slozitejsi pozici a rychlost } if (keyboard.IsKeyUp(Keys.Q) && stisknuto_hrac2) stisknuto_hrac2 = false; foreach (strela item in list_strel) { item.Update(gameTime); } foreach (strela item in list_strel2) { item.Update(gameTime); } //<SEKCE> KOLIZNÍ SYSTÉM <SEKCE> //PRUCHOD NEODRAZEJICI PLOCHOU HRAC1 foreach (strela item in list_strel) { item.Update(gameTime); foreach (prekazka prekazka_item in list_prekazek) { item.Kolize_prekazka1(prekazka_item, game); } } for (int i = 0; i < list_strel.Count; i++) { if (list_strel[i].smazani_strely) //bool ze tridy strela { list_strel.RemoveAt(i); } } //kolizni system //PRUCHOD NEODRAZEJICI PLOCHOU HRAC2 foreach (strela item in list_strel2) { item.Update(gameTime); foreach (prekazka prekazka_item in list_prekazek) { item.Kolize_prekazka1(prekazka_item, game); } } for (int i = 0; i < list_strel2.Count; i++) //nejprve se pro vsechny strely v kolekci zavola kolize a ta se nasledne iteraci pole vyhodnoti pro smazani { if (list_strel2[i].smazani_strely) { list_strel2.RemoveAt(i); } } //kolizni system //PRUCHOD ODRAZEJICI PLOCHOU HRAC1 foreach (strela item in list_strel) { item.Update(gameTime); foreach (odrazova_plocha odraz_item in list_odrazovych_ploch) { item.Kolize_odrazova_plocha(odraz_item, game); } } //kolizni system //PRUCHOD ODRAZEJICI PLOCHOU HRAC2 foreach (strela item in list_strel2) { item.Update(gameTime); foreach (odrazova_plocha odraz_item in list_odrazovych_ploch) { item.Kolize_odrazova_plocha(odraz_item, game); } } foreach (Hrac2 item in list_hrac2) { item.Update(gameTime); //musi byt, jinak se vubec neprovede pohyb z update bloku hrac2 tridy foreach (prekazka objekt in list_prekazek) { item.Kolize_prekazka_Top(objekt, game); item.Kolize_prekazka_Bottom(objekt, game); item.Kolize_prekazka_Left(objekt, game); item.Kolize_prekazka_Right(objekt, game); } } foreach (Hrac1 item in list_hrac1) { //musi byt, jinak se vubec neprovede pohyb z update bloku hrac2 tridy item.Update(gameTime); foreach (prekazka objekt in list_prekazek) { item.Kolize_prekazka_Top(objekt, game); item.Kolize_prekazka_Bottom(objekt, game); item.Kolize_prekazka_Left(objekt, game); item.Kolize_prekazka_Right(objekt, game); } } foreach (Hrac1 item in list_hrac1) { //musi byt, jinak se vubec neprovede pohyb z update bloku hrac2 tridy foreach (odrazova_plocha objekt in list_odrazovych_ploch) { item.Kolize_odraz_Bottom(objekt, game); item.Kolize_odraz_Top(objekt, game); item.Kolize_odraz_Right(objekt, game); item.Kolize_odraz_Left(objekt, game); } } foreach (Hrac2 item in list_hrac2) { //musi byt, jinak se vubec neprovede pohyb z update bloku hrac2 tridy foreach (odrazova_plocha objekt in list_odrazovych_ploch) { item.Kolize_odraz_Bottom(objekt, game); item.Kolize_odraz_Top(objekt, game); item.Kolize_odraz_Right(objekt, game); item.Kolize_odraz_Left(objekt, game); } } //player vs player foreach (Hrac1 item in list_hrac1) { //musi byt, jinak se vubec neprovede pohyb z update bloku hrac2 tridy foreach (Hrac2 objekt in list_hrac2) { item.Kolize_prekazka_Top(objekt, game); item.Kolize_prekazka_Bottom(objekt, game); item.Kolize_prekazka_Left(objekt, game); item.Kolize_prekazka_Right(objekt, game); } } foreach (Hrac2 item in list_hrac2) { //musi byt, jinak se vubec neprovede pohyb z update bloku hrac2 tridy foreach (Hrac1 objekt in list_hrac1) { item.Kolize_prekazka_Top(objekt, game); item.Kolize_prekazka_Bottom(objekt, game); item.Kolize_prekazka_Left(objekt, game); item.Kolize_prekazka_Right(objekt, game); } } //pro hrac vs strela foreach (strela item in list_strel) { foreach (Hrac1 objekt in list_hrac1) { item.Kolize_hrac1(objekt, game); } } foreach (strela item in list_strel2) { foreach (Hrac2 objekt in list_hrac2) { item.Kolize_hrac2(objekt, game); } } //hrac2 foreach (strela item in list_strel2) { foreach (Hrac1 objekt in list_hrac1) { item.Kolize_hrac1(objekt, game); } } foreach (strela item in list_strel) { foreach (Hrac2 objekt in list_hrac2) { item.Kolize_hrac2(objekt, game); } } }