Mi a hiba ezzel a kóddal? (C#) Sürgős
A kód egy snake játék. MŰKÖDIK! 2 hibája viszont akad. Első: csak a második kaja evésnél kezd el folyamatosan nőni. Szal megeszi a kaját ugyan úgy csak fej marad. megeszi a második kaját már egy testrész van. 3. kaja 2 testrész+fej ugye...stb. Ez nem olyan nagy probléma nekem de ha erre valaki tudja a megoldást a kódból akkor azt is köszönöm.
Második: A kód alapján, hogy lehetne megoldani h a kígyó ne mehessen saját magába? Ötlet morzsák vannak a fejemben de nem állnak össze. Ez lenne a fontosabbik. Előre köszönöm.
Itt a kód:
public partial class Form1 : Form
{
Point cel = new Point(190, 190);
int min = 1;
int max = 19;
int szorzat = 19;
int v, f = 0;
int[] irany = new int[1];
Point pont = new Point(0, 0);
int talalat = 0;
Random X = new Random();
private Keys m_keys;
PictureBox[] torzs = new PictureBox[50];
public Form1()
{
InitializeComponent();
kaja.Location = cel;
torzs[0] = new PictureBox();
torzs[0].Visible = true;
torzs[0].Size = new Size(19, 19);
torzs[0].Image = Image.FromFile(@"kigyo.png");
timer1.Interval = 100;
timer1.Enabled = true;
timer1.Start();
}
public void novel()
{
torzs[talalat] = new PictureBox();
torzs[talalat].Visible = true;
torzs[talalat].Parent = Form1.ActiveForm;
torzs[talalat].Size = new Size(19, 19);
torzs[talalat].Image = Image.FromFile(@"kigyo.png");
torzs[talalat].Location = new Point(torzs[talalat - 1].Location.X, torzs[talalat - 1].Location.Y);
}
public void gyoztel()
{
szunet.Text = "Győztél";
szunet.Visible = true;
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
m_keys = e.KeyCode;
}
private void timer1_Tick(object sender, EventArgs e)
{
torzs[0].Parent = Form1.ActiveForm;
if (m_keys == Keys.Escape)
{
Application.Exit();
}
if (m_keys == Keys.Space)
{
szunet.Visible = true;
}
else if (talalat == 50)
{
gyoztel();
}
else
{
szunet.Visible = false;
if (torzs[0].Location == cel)
{
v = X.Next(min, max);
cel.X = szorzat * v;
f = X.Next(min, max);
cel.Y = szorzat * f;
kaja.Location = cel;
talalat++;
novel();
}
if (m_keys == Keys.Up)
{
pont.Y -= 19;
pont.X += 0;
torzs[0].Location = pont;
}
if (m_keys == Keys.Down)
{
pont.Y += 19;
pont.X += 0;
torzs[0].Location = pont;
}
if (m_keys == Keys.Left)
{
pont.Y += 0;
pont.X -= 19;
torzs[0].Location = pont;
}
if (m_keys == Keys.Right)
{
pont.Y += 0;
pont.X += 19;
torzs[0].Location = pont;
}
//for (int i = 1; i < 3; i++)
//{
// torzs[i] = new PictureBox();
// torzs[i].Visible = true;
// torzs[i].Size = new Size(20, 20);
// torzs[i].Image = Image.FromFile(@"C:\Documents and Settings\Tanulo\Asztal\kigyo.png");
// torzs[i].Parent = Form1.ActiveForm;
//}
for (int i = talalat; i > 0; i--)
{
torzs[i].Location = new Point(torzs[i - 1].Location.X, torzs[i - 1].Location.Y);
}
}
}
}
Hát nem nagyon értek én a C#-hoz de megpróbálok segíteni ~.~
1. Gondolom a fejet is testrésznek számolja de az alapból meg van jelenítve így amikor az elsőt bekapja akkor lesz ott még 1 fej.
2. Ellenőrizd hogy az adott célterületen van-e testrész?
A növelés metódusban növeljük értelem szerűen a kígyó hosszát, tehát ott létrehoz egy új picture boxot, meg az adatait..stb.
public void novel()
{
torzs[talalat] = new PictureBox();
torzs[talalat].Visible = true;
torzs[talalat].Parent = Form1.ActiveForm;
torzs[talalat].Size = new Size(19, 19);
torzs[talalat].Image = Image.FromFile(@"kigyo.png");
torzs[talalat].Location = new Point(torzs[talalat - 1].Location.X, torzs[talalat - 1].Location.Y);
}
A kígyó fejét, pedig ezzel a ciklussal követik:
for (int i = talalat; i > 0; i--)
{
torzs[i].Location = new Point(torzs[i - 1].Location.X, torzs[i - 1].Location.Y);
}
Akkor egy tömb változóban szépen tárold el a testrészek koordinátáit és hasonlítsd össze őket minden egyes újrarajzolásnál. Ha egyezik akkor kiadja hogy game over vagy valami.
Pascalban az ellenőrzés kb így nézne ki:
for a:=1 to (testrészek száma változó) do
if fejkoordinata=testreszkoordinata[a] then és itt amit akarsz csinálni ha belemegy.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!