public void TippekBeallitasa(int px, int py) { for (int y = 0; y < 7; y++) { for (int x = 0; x < 7; x++) { if (Csomopontok[x, y] != null) { Csomopontok[x, y].LepesTipp = ETipp.Semmi; } } } if (px < 0 || px > 6 || py < 0 || py > 6) { return; } Csomopont cs = Csomopontok[px, py]; if (cs == null) { return; } if (cs.Tipus == ECsomopontTipus.Üres) { return; } switch (cs.Tipus) { case ECsomopontTipus.Birka: for (int i = 0; i < cs.Ellista.Length; i++) { if (cs.Ellista[i] != null) // arra van út { if (cs.Ellista[i].Tipus == ECsomopontTipus.Üres) { cs.Ellista[i].LepesTipp = ETipp.Lepes; } } } break; case ECsomopontTipus.Farkas: farkasTippek(px, py, false); break; } }
protected override void OnPaint(PaintEventArgs e) { if (buffer != null) { e.Graphics.DrawImage(buffer, ClientRectangle.Left, ClientRectangle.Top); } if (selectedX >= 0 && selectedX <= 7 && selectedY >= 0 && selectedY <= 7) { e.Graphics.DrawRectangle(Pens.Yellow, ox + A * selectedX - A / 2, oy + A * selectedY - A / 2, A, A); } for (int y = 0; y < 7; y++) { for (int x = 0; x < 7; x++) { Csomopont cs = palya.Csomopontok[x, y]; if (cs != null) { int px = ox + A * x; int py = oy + A * y; int A2 = A;// (int)((A / 2)*0.8); switch (cs.Tipus) { case ECsomopontTipus.Üres: switch (cs.LepesTipp) { case ETipp.Semmi: bufferg.FillEllipse(Brushes.Red, px - 10, py - 10, 20, 20); break; case ETipp.Lepes: bufferg.FillEllipse(Brushes.Lime, px - 10, py - 10, 20, 20); break; case ETipp.Ugras: bufferg.FillEllipse(Brushes.Orange, px - 10, py - 10, 20, 20); break; } break; } } } } }
void farkasTippek(int x, int y, bool ugrassalerkezett) { if (x < 0 || x > 6 || y < 0 || y > 6) { return; } Csomopont cs = Csomopontok[x, y]; if (cs == null) { return; } for (int i = 0; i < cs.Ellista.Length; i++) { if (cs.Ellista[i] != null) { switch (cs.Ellista[i].Tipus) { case ECsomopontTipus.Üres: if (!ugrassalerkezett) { cs.Ellista[i].LepesTipp = ETipp.Lepes; } break; case ECsomopontTipus.Birka: if (cs.Ellista[i].Ellista[i] != null) { if ( cs.Ellista[i].Ellista[i].Tipus == ECsomopontTipus.Üres && cs.Ellista[i].Ellista[i].LepesTipp == ETipp.Semmi ) { cs.Ellista[i].Ellista[i].LepesTipp = ETipp.Ugras; switch ((EIrany)i) { case EIrany.Fel: farkasTippek(x, y - 2, true); break; case EIrany.JobbraFel: farkasTippek(x + 2, y - 2, true); break; case EIrany.Jobbra: farkasTippek(x + 2, y, true); break; case EIrany.JobbraLe: farkasTippek(x + 2, y + 2, true); break; case EIrany.Le: farkasTippek(x, y + 2, true); break; case EIrany.BalraLe: farkasTippek(x - 2, y + 2, true); break; case EIrany.Balra: farkasTippek(x - 2, y, true); break; case EIrany.BalraFel: farkasTippek(x - 2, y - 2, true); break; } } } break; } } } }
public Csomopont[,] Csomopontok = new Csomopont[7, 7]; // [x,y] public Palya() { for (int y = 0; y < 7; y++) { for (int x = 0; x < 7; x++) { if (x > 1 && x < 5 || y > 1 && y < 5) { Csomopontok[x, y] = new Csomopont(); } } } for (int i = 0, x = 2, y = 0; i < 4; i++) { Csomopontok[x, y].Ellista[(int)EIrany.JobbraLe] = Csomopontok[++x, ++y]; } for (int i = 0, x = 4, y = 0; i < 4; i++) { Csomopontok[x, y].Ellista[(int)EIrany.BalraLe] = Csomopontok[--x, ++y]; } for (int i = 0, x = 0, y = 2; i < 4; i++) { Csomopontok[x, y].Ellista[(int)EIrany.JobbraLe] = Csomopontok[++x, ++y]; } for (int i = 0, x = 6, y = 2; i < 4; i++) { Csomopontok[x, y].Ellista[(int)EIrany.BalraLe] = Csomopontok[--x, ++y]; } for (int y = 0; y < 7; y++) { for (int x = 0; x < 7; x++) { if (Csomopontok[x, y] != null // Aktuális csomópontnak léteznie kell && x < 6 // utolsó oszlopban lévő csomópontnak nincs jobboldali szomszédja && Csomopontok[x + 1, y] != null) // jobb oldali szomszédjának élőnek kell lenni { Csomopontok[x, y].Ellista[(int)EIrany.Jobbra] = Csomopontok[x + 1, y]; } } } for (int y = 0; y < 7; y++) { for (int x = 0; x < 7; x++) { if (Csomopontok[x, y] != null // Aktuális csomópontnak léteznie kell && y < 6 // utolsó sorban lévő csomópontnak nincs alsó szomszédja && Csomopontok[x, y + 1] != null) // alsó szomszédjának élőnek kell lenni { Csomopontok[x, y].Ellista[(int)EIrany.Le] = Csomopontok[x, y + 1]; } } } for (int y = 0; y < 7; y++) { for (int x = 0; x < 7; x++) { if (Csomopontok[x, y] != null) { // BalraFel vizsgálat if (x > 0 && y > 0 && Csomopontok[x - 1, y - 1] != null && Csomopontok[x - 1, y - 1].Ellista[(int)EIrany.JobbraLe] != null) { Csomopontok[x, y].Ellista[(int)EIrany.BalraFel] = Csomopontok[x - 1, y - 1]; } // Felfele vizsgálat if (y > 0 && Csomopontok[x, y - 1] != null && Csomopontok[x, y - 1].Ellista[(int)EIrany.Le] != null) { Csomopontok[x, y].Ellista[(int)EIrany.Fel] = Csomopontok[x, y - 1]; } // JobbraFel vizsgálat if (x < 6 && y > 0 && Csomopontok[x + 1, y - 1] != null && Csomopontok[x + 1, y - 1].Ellista[(int)EIrany.BalraLe] != null) { Csomopontok[x, y].Ellista[(int)EIrany.JobbraFel] = Csomopontok[x + 1, y - 1]; } // Balra vizsgálat if (x > 0 && Csomopontok[x - 1, y] != null && Csomopontok[x - 1, y].Ellista[(int)EIrany.Jobbra] != null) { Csomopontok[x, y].Ellista[(int)EIrany.Balra] = Csomopontok[x - 1, y]; } } } } Alaphelyzet(); }
protected void Redraw() { if (buffer == null) { return; } if (palya == null) { return; } bufferg.Clear(Color.DarkGreen); Pen p = new Pen(Color.Blue, 5); for (int y = 0; y < 7; y++) { for (int x = 0; x < 7; x++) { Csomopont cs = palya.Csomopontok[x, y]; if (cs != null) { int px = ox + A * x; int py = oy + A * y; int A2 = A;// (int)((A / 2)*0.8); /* * if (cs.Ellista[(int)EIrany.Fel] != null) * bufferg.DrawLine(p, px, py, px, py - A2); * if (cs.Ellista[(int)EIrany.JobbraFel] != null) * bufferg.DrawLine(p, px, py, px + A2, py - A2);*/ if (cs.Ellista[(int)EIrany.Jobbra] != null) { bufferg.DrawLine(p, px, py, px + A2, py); } if (cs.Ellista[(int)EIrany.JobbraLe] != null) { bufferg.DrawLine(p, px, py, px + A2, py + A2); } if (cs.Ellista[(int)EIrany.Le] != null) { bufferg.DrawLine(p, px, py, px, py + A2); } if (cs.Ellista[(int)EIrany.BalraLe] != null) { bufferg.DrawLine(p, px, py, px - A2, py + A2); } /*if (cs.Ellista[(int)EIrany.Balra] != null) * bufferg.DrawLine(p, px, py, px - A2, py); * if (cs.Ellista[(int)EIrany.BalraFel] != null) * bufferg.DrawLine(p, px, py, px - A2, py - A2);*/ switch (cs.Tipus) { case ECsomopontTipus.Birka: bufferg.DrawImage(sheep, px - 64 / 2, py - 64 / 2, 64, 64); break; case ECsomopontTipus.Farkas: bufferg.DrawImage(wolf, px - 64 / 2, py - 64 / 2, 64, 64); break; } } } } }