using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace Snake
{
public partial class Snake : Form
{
enum E_SnakeDir
{
UpDir,
DownDir,
LeftDir,
RightDir,
NoneDir
}
struct Stu_SnakeSportParam
{
int i_UpBorder;
int i_DownBorder;
int i_LeftBorder;
int i_RightBorder;
}
struct Stu_SnakeBody
{
public int i_SnakeBodyWidth;
public int i_SnakeBodyHigh;
public int i_SnakeBodyX;
public int i_SnakeBodyY;
}
class PaintSnake
{
public Stu_SnakeSportParam s_ssp;
public List<Stu_SnakeBody> l_ssbNew;
public List<Stu_SnakeBody> l_ssbOld;
public E_SnakeDir e_sd;
public PaintSnake()
{
s_ssp = new Stu_SnakeSportParam();
l_ssbNew = new List<Stu_SnakeBody>();
l_ssbOld = new List<Stu_SnakeBody>();
e_sd = new E_SnakeDir();
e_sd = E_SnakeDir.RightDir;
}
}
public Snake()
{
InitializeComponent();
}
Graphics paint;
Pen p;
PaintSnake c_ps;
Stu_SnakeBody s_sb;
bool b_FristFlag = true;
bool b_SnakeEatFoodFlag = true;
int i_FristX = 0;
int i_FristY = 0;
int i_FoodX = 0;
int i_FoodY = 0;
Random rdm = new Random();
private void timerUpdateSnake_Tick(object sender, EventArgs e)
{
this.Refresh();
if (b_SnakeEatFoodFlag == true)
{
b_SnakeEatFoodFlag = false;
i_FoodX = ((rdm.Next(this.Width - 5))/5)*5;
i_FoodY = ((rdm.Next(this.Height - this.toolStrip1.Height - this.statusStrip1.Height - 5)) / 5) * 5;
}
paint.DrawRectangle(p, i_FoodX, i_FoodY, 5, 5);
this.label1.Text = c_ps.l_ssbOld[0].i_SnakeBodyX.ToString();
bool bFlag = false;
foreach (Stu_SnakeBody i in c_ps.l_ssbNew)
{
paint.DrawRectangle(p, i.i_SnakeBodyX, i.i_SnakeBodyY,i.i_SnakeBodyWidth,i.i_SnakeBodyHigh);
}
if (c_ps.e_sd == E_SnakeDir.UpDir)
{
if (b_FristFlag)
{
b_FristFlag = false;
i_FristX = c_ps.l_ssbOld[0].i_SnakeBodyX;
}
s_sb.i_SnakeBodyX = i_FristX;
s_sb.i_SnakeBodyY = c_ps.l_ssbOld[0].i_SnakeBodyY - 5;
bFlag = true;
}
else if (c_ps.e_sd == E_SnakeDir.DownDir)
{
if (b_FristFlag)
{
b_FristFlag = false;
i_FristX = c_ps.l_ssbOld[0].i_SnakeBodyX;
}
s_sb.i_SnakeBodyX = i_FristX;
s_sb.i_SnakeBodyY = c_ps.l_ssbOld[0].i_SnakeBodyY + 5;
bFlag = true;
}
else if (c_ps.e_sd == E_SnakeDir.LeftDir)
{
if (b_FristFlag)
{
b_FristFlag = false;
i_FristY = c_ps.l_ssbOld[0].i_SnakeBodyY;
}
s_sb.i_SnakeBodyY = i_FristY;
s_sb.i_SnakeBodyX = c_ps.l_ssbOld[0].i_SnakeBodyX -5;
bFlag = true;
}
else if (c_ps.e_sd == E_SnakeDir.RightDir)
{
if (b_FristFlag)
{
b_FristFlag = false;
i_FristY = c_ps.l_ssbOld[0].i_SnakeBodyY;
}
s_sb.i_SnakeBodyY = i_FristY;
s_sb.i_SnakeBodyX = c_ps.l_ssbOld[0].i_SnakeBodyX + 5;
bFlag = true;
}
else
{
//return ;
}
//if (c_ps.l_ssbOld[0].i_SnakeBodyX > this.Width - 5)
//{
// s_sb.i_SnakeBodyX = 5;
//}
//else if (c_ps.l_ssbOld[0].i_SnakeBodyX < 5)
//{
// s_sb.i_SnakeBodyX = this.Width - 5;
//}
//else if (c_ps.l_ssbOld[0].i_SnakeBodyY > this.Height - this.toolStrip1.Height - this.statusStrip1.Height-5)
//{
// s_sb.i_SnakeBodyY = this.Height - this.toolStrip1.Height+5;
//}
//else if (c_ps.l_ssbOld[0].i_SnakeBodyY < this.Height - this.toolStrip1.Height-5)
//{
// s_sb.i_SnakeBodyY = this.Height - this.toolStrip1.Height - this.statusStrip1.Height-5;
//}
//else
//{
//}
if (bFlag == true)
{
c_ps.l_ssbNew.Clear();
c_ps.l_ssbNew.Add(s_sb);
for (int i = 0; i < c_ps.l_ssbOld.Count - 1; i++)
{
s_sb.i_SnakeBodyX = c_ps.l_ssbOld[i].i_SnakeBodyX;
s_sb.i_SnakeBodyY = c_ps.l_ssbOld[i].i_SnakeBodyY;
c_ps.l_ssbNew.Add(s_sb);
}
c_ps.l_ssbOld.Clear();
foreach (Stu_SnakeBody i in c_ps.l_ssbNew)
{
c_ps.l_ssbOld.Add(i);
}
if(c_ps.l_ssbOld[0].i_SnakeBodyX==i_FoodX&&c_ps.l_ssbOld[0].i_SnakeBodyY==i_FoodY)
{
b_SnakeEatFoodFlag = true;
s_sb.i_SnakeBodyX=i_FoodX;
s_sb.i_SnakeBodyY=i_FoodY;
c_ps.l_ssbOld.Insert(0, s_sb);
}
}
}
private void Snake_Load(object sender, EventArgs e)
{
paint = this.CreateGraphics();
p = new Pen(Color.Black);
c_ps= new PaintSnake();
s_sb = new Stu_SnakeBody();
s_sb.i_SnakeBodyX = 100;
s_sb.i_SnakeBodyY = 100;
s_sb.i_SnakeBodyWidth = 5;
s_sb.i_SnakeBodyHigh = 5;
for (int i = 0; i < 5;i++ )
{
s_sb.i_SnakeBodyX += 5;
c_ps.l_ssbNew.Add(s_sb);
}
foreach (Stu_SnakeBody ii in c_ps.l_ssbNew)
{
c_ps.l_ssbOld.Add(ii);
}
this.timer1.Interval = 100;
this.timer1.Start();
}
private void Snake_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode==Keys.Up)
{
if (c_ps.e_sd == E_SnakeDir.LeftDir || c_ps.e_sd == E_SnakeDir.RightDir || c_ps.e_sd == E_SnakeDir.NoneDir)
{
c_ps.e_sd = E_SnakeDir.UpDir;
b_FristFlag = true;
}
}
else if (e.KeyCode == Keys.Down)
{
if (c_ps.e_sd == E_SnakeDir.LeftDir || c_ps.e_sd == E_SnakeDir.RightDir || c_ps.e_sd == E_SnakeDir.NoneDir)
{
c_ps.e_sd = E_SnakeDir.DownDir;
b_FristFlag = true;
}
}
else if (e.KeyCode == Keys.Left)
{
if (c_ps.e_sd == E_SnakeDir.UpDir || c_ps.e_sd == E_SnakeDir.DownDir || c_ps.e_sd == E_SnakeDir.NoneDir)
{
c_ps.e_sd = E_SnakeDir.LeftDir;
b_FristFlag = true;
}
}
else if (e.KeyCode == Keys.Right)
{
if (c_ps.e_sd == E_SnakeDir.UpDir || c_ps.e_sd == E_SnakeDir.DownDir || c_ps.e_sd == E_SnakeDir.NoneDir)
{
c_ps.e_sd = E_SnakeDir.RightDir;
b_FristFlag = true;
}
}
}
}
}
C#-测试贪吃蛇
最新推荐文章于 2024-01-30 22:01:09 发布