贪吃蛇小项目
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace 贪吃蛇
|
||||
{
|
||||
enum E_MoveDirection
|
||||
{
|
||||
Up,
|
||||
Down,
|
||||
Left,
|
||||
Right
|
||||
}
|
||||
class Snake : IDraw
|
||||
{
|
||||
E_MoveDirection moveDirection;//记录蛇当前的移动方向
|
||||
SnakeBody[] bodies; //存放蛇身体的数组
|
||||
int nowNum;//用一个变量记录蛇的长度
|
||||
public Snake(int x, int y)
|
||||
{
|
||||
moveDirection = E_MoveDirection.Right;
|
||||
bodies = new SnakeBody[200];
|
||||
bodies[0] = new SnakeBody(x, y, E_BodyType.Head);
|
||||
nowNum = 1;
|
||||
}
|
||||
public void Draw()
|
||||
{
|
||||
//只画出当前的蛇身
|
||||
for (int i = 0; i < nowNum; i++)
|
||||
{
|
||||
bodies[i].Draw();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#region Lesson7
|
||||
//蛇的移动
|
||||
public void Move()
|
||||
{
|
||||
//移动前擦除前一个位置
|
||||
SnakeBody lastBody = bodies[nowNum - 1];
|
||||
Console.SetCursorPosition(lastBody.pos.x, lastBody.pos.y);
|
||||
Console.Write(" ");
|
||||
|
||||
for(int i = nowNum - 1; i > 0; i--)
|
||||
{
|
||||
bodies[i].pos = bodies[i - 1].pos;
|
||||
}
|
||||
switch (moveDirection)
|
||||
{
|
||||
case E_MoveDirection.Up:
|
||||
bodies[0].pos.y--;
|
||||
break;
|
||||
case E_MoveDirection.Down:
|
||||
bodies[0].pos.y++;
|
||||
break;
|
||||
case E_MoveDirection.Left:
|
||||
bodies[0].pos.x -= 2;
|
||||
break;
|
||||
case E_MoveDirection.Right:
|
||||
bodies[0].pos.x += 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Lesson8
|
||||
public void ChangeDirection(E_MoveDirection newDirection)
|
||||
{
|
||||
//不能直接掉头
|
||||
if ( newDirection == moveDirection ||
|
||||
nowNum > 1 && (moveDirection == E_MoveDirection.Right && newDirection == E_MoveDirection.Left ) ||
|
||||
nowNum > 1 && (moveDirection == E_MoveDirection.Left && newDirection == E_MoveDirection.Right) ||
|
||||
nowNum > 1 && (moveDirection == E_MoveDirection.Up && newDirection == E_MoveDirection.Down) ||
|
||||
nowNum > 1 && (moveDirection == E_MoveDirection.Down && newDirection == E_MoveDirection.Up) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
moveDirection = newDirection;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Lesson9
|
||||
//碰撞检测
|
||||
public bool CheckEnd(Map map)
|
||||
{
|
||||
//是否和墙体位置重合
|
||||
for(int i = 0; i < map.walls.Length; i++)
|
||||
{
|
||||
if (bodies[0].pos == map.walls[i].pos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//是否和自己身体位置重合
|
||||
for(int i = 1; i < nowNum; i++)
|
||||
{
|
||||
if (bodies[0].pos == bodies[i].pos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Lesson10
|
||||
public bool CheckSamePos(Position p)
|
||||
{
|
||||
for(int i = 0; i < nowNum; i++)
|
||||
{
|
||||
if (bodies[i].pos == p)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public void CheckEat(Food food)
|
||||
{
|
||||
if (bodies[0].pos == food.pos)
|
||||
{
|
||||
//吃到了就再次随机生成食物,并且让蛇变长
|
||||
food.RandomPos(this);
|
||||
GrowUp();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Lesson11
|
||||
private void GrowUp()
|
||||
{
|
||||
SnakeBody lastBody = bodies[nowNum - 1];
|
||||
bodies[nowNum] = new SnakeBody(lastBody.pos.x, lastBody.pos.y, E_BodyType.Body);
|
||||
nowNum++;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user