C#设计斗地主游戏!高寿金
给你源代码
使用系统;
使用系统。收藏;
使用系统。绘图;
使用系统。Windows . Forms
使用系统。计时器;
命名空间GreedySnake
{
#地区蛇蛇
///
///蛇的描述。
///
公共类蛇
{
私有控件dcControl
private static int imove direction = 0x 1000;//蛇的移动方向初始化为右-0x1000。
private int iCount//关节的总数
私人int iRadius//关节的半径
私有静态int iCurrentHeadX//当前蛇头的中心坐标x。
私有静态int iCurrentHeadY//当前蛇头的中心坐标y。
私有静态int iCurrentTrailX//当前蛇尾的中心坐标x。
私有静态int iCurrentTrailY//当前蛇尾的中心坐标y。
iNextHeadX中的私有静态int//下一刻蛇头的中心坐标x
iNextHeadY中的私有静态int//下一刻黑鱼的中心坐标y
private static int iPreTrailX//前一时刻蛇尾的中心坐标x。
私有静态int iPreTrailY//前一时刻蛇尾的中心坐标y。
私有静态数组列表alSnake//存储整条蛇。
private bool bDisposing = true
private bool bIsEatself = false//自己吃吗?
private bool bIsOutOfRange = false;//是否超出许可活动范围?
公共控制数据控制
{
设置{ dcControl = value}
get { return dcControl}
}
公共int移动方向
{
set { iMoveDirection = value}
get { return iMoveDirection}
}
公共int计数
{
设置{ iCount = value}
get { return iCount}
}
公共int半径
{
set { iRadius = value}
get { return iRadius}
}
公共int CurrentHeadX
{
set { iCurrentHeadX = value}
get { return iCurrentHeadX}
}
公共int CurrentHeadY
{
set { iCurrentHeadY = value}
get { return iCurrentHeadY}
}
公共int CurrentTrailX
{
set { iCurrentTrailX = value}
get { return iCurrentTrailX}
}
公共int当前铁路
{
set { iCurrentTrailY = value}
get { return iCurrentTrailY}
}
public int NextHeadX
{
set { iNextHeadX = value}
get { return iNextHeadX}
}
public int NextHeadY
{
set { iNextHeadY = value}
get { return iNextHeadY}
}
公共int PreTrailX
{
设置{ iPreTrailX = value}
get { return iPreTrailX}
}
公共int审前
{
设置{ iPreTrailY = value}
get { return iPreTrailY}
}
公共图书馆本身
{
设置{ bIsEatself = value}
get { return bIsEatself}
}
公共图书馆是独立的
{
set { bIsOutOfRange = value}
get { return bIsOutOfRange}
}
public Snake() : this(null,20,5)
{
//
// TODO:在此添加构造函数逻辑。
//
}
公共蛇(控制控制,int iCount,int iRadius)
{
DcControl =控制;
Count = iCount
半径= iRadius
current adex = current tralx = pre tralx = 5;
current heady = current traily = pre traily = 5;
initialize();
}
~蛇()
{
Dispose(假);
}
//初始化蛇
私有void初始化()
{
alSnake = new ArrayList();
for(int I = 0;我{
阿尔斯纳克。Insert(0,new SnakeNode(DcControl,CurrentHeadX,CurrentHeadY,Radius));
current adex+= 2 *半径;
}
current adex-= 2 *半径;
next headx = current headx+2 * Radius;
NextHeadY = CurrentHeadY
}
公共void Dispose()
{
Dispose(真);
GC。suppress finalize(this);
}
公共void Dispose( bool bDisposing)
{
if (bDisposing)
{
//调用Dispose来处理受控资源中的字段。
move direction = 0x 1000;
current headx = current heady = next headx = next heady = 5;
阿尔斯纳克。clear();
}
//清除不受控制的资源
}
//浇头
公共void AddHead()
{
阿尔斯纳克。Insert(0,new SnakeNode(DcControl,NextHeadX,NextHeadY,Radius));
CurrentHeadX = NextHeadX
CurrentHeadY = NextHeadY
count++;
}
//拖尾
公共void AddTrail()
{
阿尔斯纳克。Add(new SnakeNode(DcControl,PreTrailX,PreTrailY,Radius));
count++;
((snake node)alSnake[Count-1])。draw();
}
//尾部移除
公共void RemoveTrail()
{
如果(alSnake。Count & gt1)
{
pretraillx =((snake node)alSnake[Count-1])。CenterX
pre trayly =((snake node)alSnake[Count-1])。CenterY
阿尔斯纳克。RemoveAt(alSnake。count-1);
count-;
currenttralx =((snake node)alSnake[Count-1])。CenterX
current traily =((snake node)alSnake[Count-1])。CenterY
}
}
//移动到下一个位置
公共void MoveNext()
{
//浇头
AddHead();
//绘画头
((SnakeNode)alSnake[0])。draw();
//清除尾部(用背景色填充蛇尾)
((snake node)alSnake[Count-1])。clear();
//尾部移除(从ArrayList中移除蛇尾)
remove trail();
}
//画出整条蛇
公共void Draw()
{
for(int I = 0;我{
((SnakeNode)alSnake[i])。draw();
}
}
//去掉整条蛇。
公共void清除()
{
for(int I = 0;我{
((SnakeNode)alSnake[i])。clear();
}
}
//重置运动方向
public void ResetMoveDirection(字符串strKeyData)
{
//获取键盘输入
int iKeyDirection
开关(strKeyData)
{
案例“W”:
案例“向上”:
ikey direction = 0x 0001;
打破;
案例“S”:
案例“向下”:
ikey direction = 0x 0010;
打破;
案例“A”:
案例“左”:
ikey direction = 0x 0100;
打破;
案例“D”:
案例“正确”:
ikey direction = 0x 1000;
打破;
默认值:
ikey direction = 0x 0010;
打破;
}
//重置蛇的移动方向(考虑关键点方向和当前蛇的移动方向)
int I direction = ikey direction | move direction;
if(I direction = = 0x 0011 | | I direction = = 0x 1100)
MoveDirection = MoveDirection//运动方向保持不变。
其他
MoveDirection = iKeyDirection//移动方向等于按键方向。
}
//是否超出范围?
公共作废支票()
{
GetNextHeadXY();
//检查是否自己吃。
foreach(alSnake中的SnakeNode序列号)
{
如果(sn。CenterX = = NextHeadX & amp& ampsn。CenterY == NextHeadY)
{
IsEatself = true
打破;
}
}
//检查是否超出允许的活动范围。
IsOutOfRange = NextHeadX & lt0 | | NextHeadX & gtDcControl。Width | | NextHeadY & lt0 | | NextHeadY & gtDcControl。身高;
}
//预先计算下一个位置的坐标
私有void GetNextHeadXY()
{
开关(移动方向)
{
案例0x0001:
NextHeadX = CurrentHeadX
next heady = current heady-2 * Radius;
打破;
案例0x0010:
NextHeadX = CurrentHeadX
next heady = current heady+2 * Radius;
打破;
案例0x0100:
NextHeadX = CurrentHeadX-2 * Radius;
NextHeadY = CurrentHeadY
打破;
案例0x1000:
next headx = current headx+2 * Radius;
NextHeadY = CurrentHeadY
打破;
默认值:
打破;
}
}
}
#结束区域
#区域蛇结蛇的关节
///
///蛇注
///蛇的关节
///
公共类SnakeNode
{
私有控件dcControl//用于绘制的控件。
private int iCenterX//中心坐标x
私人国际中心;//中心坐标y
私人int iRadius//半径
私有颜色colorNode//颜色
公共控制数据控制
{
设置{ dcControl = value}
get { return dcControl}
}
公共集成中心x
{
set { iCenterX = value}
get { return iCenterX}
}
公共娱乐中心
{
set { iCenterY = value}
get { return iCenterY}
}
公共int半径
{
set { iRadius = value}
get { return iRadius}
}
公共颜色节点
{
设置{ colorNode = value}
get { return colorNode}
}
private bool bDisposing = true
public SnakeNode() : this(null,0,0,5)
{
}
public SnakeNode(Control control,int iX,int iY,int iR)
{
DcControl =控制;
CenterX = iX
CenterY = iY
半径= iR
}
~SnakeNode()
{
Dispose(假);
}
公共void Dispose()
{
Dispose(真);
GC。suppress finalize(this);
}
公共void Dispose( bool bDisposing)
{
if (bDisposing)
{
//调用Dispose来处理受控资源中的字段。
centex = CenterY = 0;
半径= 5;
}
//清除不受控制的资源
}
//自己画
公共void Draw()
{
绘制(颜色。蓝色);
}
公共空白绘制(颜色颜色)
{
//用指定的颜色画一个圆。
ColorNode = color
draw circle(ColorNode);
}
//清除
公共void清除()
{
//用控件的背景色画一个圆。
绘制圆形(DcControl。背景色);
}
//以关节为圆心画一个圆。
公共空心画圈(颜色颜色)
{
使用(图形dc = DcControl。CreateGraphics())
{
//创建实心画笔
solid brush sb brush = new solid brush(color);
//创建圆的范围。
float x = CenterX-Radius;
float y =中心半径;
浮动宽度= 2 *半径;
浮动高度= 2 *半径;
//创建开始和扫描的弧度。
float fStartAngle = 0.0F
float fSweepAngle = 360.0F
//画一个圆
华盛顿。FillPie(sbBrush,x,y,width,height,fStartAngle,fSweepAngle);
}
}
}
#结束区域
#地区蛇食蛇食
///
///蛇食的描述。
///
公共类蛇食
{
私有控件dcControl
private int iMaxCount//剩余食物的最大数量。
private int iCurrentCount//目前剩余的食物总量
私人int iRadius//关节的半径
private Color[]acolor = new Color[]{ Color。红色,彩色。绿色,彩色。黄色};//新点的颜色范围
私有静态数组列表alSnakeFood//蛇食
private bool bDisposing = true
公共控制数据控制
{
设置{ dcControl = value}
get { return dcControl}
}
public int MaxCount
{
set { iMaxCount = value}
get { return iMaxCount}
}
公共国际货币账户
{
set { iCurrentCount = value}
get { return iCurrentCount}
}
公共int半径
{
set { iRadius = value}
get { return iRadius}
}
public SnakeNode this[int index]
{
得到
{
if(index & lt;0 | | index & gt=当前计数)
{
抛出新的IndexOutOfRangeException();
}
return(snake node)alSnakeFood[index];
}
}
public SnakeFood() : this(null,5,5)
{
}
公共蛇食(控制控制,int iMaxCount,int iRadius)
{
DcControl =控制;
MaxCount = iMaxCount
current count = 0;
半径= iRadius
alSnakeFood = new ArrayList();
}
~蛇食()
{
Dispose(假);
}
公共void Dispose()
{
Dispose(真);
GC。suppress finalize(this);
}
公共void Dispose( bool bDisposing)
{
if (bDisposing)
{
//调用Dispose来处理受控资源中的字段。
current count = 0;
alSnakeFood。clear();
}
//清除不受控制的资源
}
//添加食物
public void AddFood()
{
Random Random = new Random();
int iStep = Radius+Radius;
int iX = Radius + iStep * random。下一个(0,DcControl。width/iStep);
int iY = Radius + iStep * random。下一个(0,DcControl。height/iStep);
snake node sn = new snake node(DC control,iX,iY,iRadius);
Random Random index = new Random();
Color color = acolor[randomIndex。下一个(0,acolor。长度)];
颜色=色彩。绿色;
sn。绘制(颜色);
alSnakeFood。添加(序列号);
//目前剩余的食物总量加上1。
current count++;
}
//删除吃过的食物。
公共void remove food(int index)
{
if(current count & gt;0)
{
alSnakeFood。remove at(iIndex);
//目前剩余食物总量减少1。
当前计数-;
}
}
//画出所有的食物
公共void Draw()
{
foreach(alSnakeFood中的SnakeNode序列号)
{
sn。draw();
}
}
//取出所有食物。
公共void清除()
{
foreach(alSnakeFood中的SnakeNode序列号)
{
sn。clear();
}
}
}
#结束区域
}