Mám jako projekt do školy udělat hada. Můj had je v poli pictureboxů 15x15 a 40x40 pixelů. Po stisknutí buttonu se naspawnuje pole a po stisknutí druhého tlačítka se mi spawne jídlo pro hada a taky had samotný. Had se pohybuje a je to 1 čtvereček. Když sní jídlo, dole se v labelu ukáže jeho délka. Ovšem nevím jak udělat optický pohyb tohoto hada. Programově se přičítá ( jeho délka ), ale opticky je to furt jenom jeden čtvereček. Posílám source a prosím vás o pomoc. Předem děkuji všem za vaše rady a podobně.
Zde je Form1
Kód: Vybrat vše
namespace HraSnake
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
PictureBox[,] pole = new PictureBox[15, 15];
Random nahKulicka = new Random();
Hat had;
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 15; i++)
{
for (int o = 0; o < 15; o++)
{
PictureBox p = new PictureBox();
p.Width = 40;
p.Height = 40;
p.BackgroundImage = Image.FromFile("myluju.png");
p.Location = new Point(i * 40, o * 40);
p.BorderStyle = BorderStyle.Fixed3D;
pole[i, o] = p;
panel1.Controls.Add(pole[i, o]);
}
}
button1.Visible = false;
button3.Visible = true;
had = new Hat(1, 3, 5);
timer2.Start();
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
timer2.Stop();
string message = "Doopravdy chcete ukončit hru ?";
string caption = "Form Closing";
var result = MessageBox.Show(message, caption,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
this.Close();
}
if (result == DialogResult.No)
{
timer1.Start();
timer2.Start();
}
}
Image jidlo = Image.FromFile("lol.png");
Image hadik = Image.FromFile("qwre.png");
int r1 = 0;
int r2 = 0;
private void button3_Click(object sender, EventArgs e)
{
r1 = nahKulicka.Next(0, 15);
r2 = nahKulicka.Next(0, 15);
pole[r1, r2].Image = jidlo;
for (int i = 0; i < had.Delka; i++)
{
pole[had.Zleva + i, had.Shora].Image = hadik;
}
button3.Enabled = false;
button3.Visible = false;
button2.Enabled = true;
button2.Visible = true;
had.Dolu = true;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (had.Nahoru)
{
Zruseni(had.Zleva, had.Shora);
had.Pohyb(0, -1);
if (had.Shora < 0) had.Shora = 14;
Hybani(0,-1);
}
if (had.Dolu)
{
Zruseni(had.Zleva, had.Shora);
had.Pohyb(0, 1);
if (had.Shora > 14) had.Shora = 0;
Hybani(0,1);
}
if (had.Doleva)
{
Zruseni(had.Zleva, had.Shora);
had.Pohyb(-1, 0);
if (had.Zleva < 0) had.Zleva = 14;
Hybani(-1,0);
}
if (had.Doprava)
{
Zruseni(had.Zleva, had.Shora);
had.Pohyb(1, 0);
if (had.Zleva>14) had.Zleva = 0;
Hybani(1,0);
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.W)
{
had.Dolu = false;
had.Doleva = false;
had.Doprava = false;
had.Nahoru = true;
}
if (e.KeyCode == Keys.S)
{
had.Nahoru = false;
had.Doleva = false;
had.Doprava = false;
had.Dolu = true;
}
if (e.KeyCode == Keys.D)
{
had.Dolu = false;
had.Doleva = false;
had.Nahoru = false;
had.Doprava = true;
}
if (e.KeyCode == Keys.A)
{
had.Dolu = false;
had.Nahoru = false;
had.Doprava = false;
had.Doleva = true;
}
if (e.KeyCode == Keys.Escape)
{
timer1.Stop();
timer2.Stop();
string message = "Doopravdy chcete ukončit hru ?";
string caption = "Form Closing";
var result = MessageBox.Show(message, caption,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
this.Close();
}
if (result == DialogResult.No)
{
timer1.Start();
timer2.Start();
}
}
}
void Hybani(int kamX,int kamY)
{
try
{
pole[had.Zleva , had.Shora].Image = hadik;
}
catch
{ }
}
void Zruseni(int x, int y)
{
pole[x,y].Image = null;
}
private void button2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.W)
{
had.Dolu = false;
had.Doleva = false;
had.Doprava = false;
had.Nahoru = true;
}
if (e.KeyCode == Keys.S)
{
had.Nahoru = false;
had.Doleva = false;
had.Doprava = false;
had.Dolu = true;
}
if (e.KeyCode == Keys.D)
{
had.Dolu = false;
had.Doleva = false;
had.Nahoru = false;
had.Doprava = true;
}
if (e.KeyCode == Keys.A)
{
had.Dolu = false;
had.Nahoru = false;
had.Doprava = false;
had.Doleva = true;
}
}
private void timer2_Tick(object sender, EventArgs e)
{
label3.Text = "Souřadnice: " + had.Zleva + ", " + had.Shora + " Delka hada:" + had.Delka;
if (r1 == had.Zleva && r2 == had.Shora)
{
had.Delka++;
r1 = nahKulicka.Next(0, 15);
r2 = nahKulicka.Next(0, 15);
pole[r1, r2].Image = jidlo;
}
}
}
}
Zde je class Hat
namespace HraSnake
Kód: Vybrat vše
{
class Hat
{
int delka;
int zleva;
int shora;
bool nahoru = false;
bool dolu = false;
bool doprava = false;
bool doleva = false;
public int Delka
{
get
{
return delka;
}
set
{
delka = value;
}
}
public int Zleva
{
get
{
return zleva;
}
set
{
zleva = value;
}
}
public int Shora
{
get
{
return shora;
}
set
{
shora = value;
}
}
public bool Nahoru
{
get
{
return nahoru;
}
set
{
dolu = false;
doleva = false;
doprava = false;
nahoru = value;
}
}
public bool Dolu
{
get
{
return dolu;
}
set
{
dolu = value;
}
}
public bool Doprava
{
get
{
return doprava;
}
set
{
doprava = value;
}
}
public bool Doleva
{
get
{
return doleva;
}
set
{
doleva = value;
}
}
public Hat(int delka,int zleva, int shora)
{
this.Delka = delka;
this.Zleva = zleva;
this.Shora = shora;
}
public void Pohyb(int oKolikX, int oKolikY)
{
Zleva += oKolikX;
Shora += oKolikY;
}
}
}]
Prosím o nekopírování, i když tento projekt je takový s prominutím SHIT, že by to nemělo smysl. Děkuji ještě jednou za vaše rady.