Kezdőoldal » Számítástechnika » Programozás » Mi a hiba ezzel a kóddal?...

Mi a hiba ezzel a kóddal? (C#) Sürgős

Figyelt kérdé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);

}

}

}

}


2011. szept. 23. 17:57
 1/9 anonim ***** válasza:

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?

2011. szept. 23. 19:12
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:
2. Hát igen ezt azért selytettem :P Csak, hogy ez a kérdés. :D Én ciklusra gondoltam, de nem áll össze a fejemben a kép, hogy is lehetne. :( :D
2011. szept. 23. 19:18
 3/9 anonim ***** válasza:
Egyáltalán hogy követik a testrészek a fejet? Az előző pozícióhoz képest módosítod vagy csak minden egyes centinél újrarajzolod?
2011. szept. 23. 19:20
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
Az a gond hogy ugyan már egy éve tanulok Pascal-t de C-t csak pár napja kezdtem el és nem sokat tudok kiolvasni így belőle. Ráadásul ahogy ide bemásolja a gép nem túl kényelmesen olvasható :D Sor elei kihagyások nincsenek vagy csak így másolta?
2011. szept. 23. 19:23
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:

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);

}

2011. szept. 23. 19:23
 6/9 A kérdező kommentje:
Minden testrész az előtte lévőt követi. Ebben az értelemben a fe is testrésznek számít ugye. Szal a fejet követi a törzs[1] a torzs[1] et a torzs[2] követi és így tovább.
2011. szept. 23. 19:26
 7/9 anonim ***** válasza:
És azt nem tudod ellenőrizni hogy van-e a célponton egy PictureBox?
2011. szept. 23. 19:27
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:
Hát valahogy biztos, tudom ellenőrizni. :D de nem tom, hogyan. De a célpont a "kaja" amit el kell kapni. Nekem az kéne h fej koordinátája ne lehessen azonos a testrészek koordinátájával. :D
2011. szept. 23. 19:30
 9/9 anonim ***** válasza:

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.

2011. szept. 23. 20:04
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!