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

}

}

}

#结束区域

}