65.9K
CodeProject 正在变化。 阅读更多。
Home

一个平滑的贪吃蛇游戏

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.59/5 (11投票s)

2007年2月27日

CPOL

2分钟阅读

viewsIcon

91315

downloadIcon

5100

VB.NET中的单人游戏

Screenshot - screenshot.gif

引言

每个人都一定玩过这个游戏。我利用上班空闲时间,花了2天时间制作了这个游戏。这是一个简单的VB.NET游戏,只使用了初级类。运行游戏前不需要任何特殊信息。

目的

在制作这个游戏之前,我看到了很多版本。大多数版本都使用矩形块或圆形来移动,这不是标准方法。所以我使用了DrawLine(),精确到像素级别1,以获得这种平滑度。

输入 & 输出

不需要特殊的输入和输出,用户可以通过选择级别来更改游戏难度,并且很快就会提供一个新版本,其中包含蛇颜色和宽度选择功能。

输出直接显示在屏幕上,根据KeyPress()移动。

<pre lang=vbnet>

If Not (MenuItem3.Text = "Resume") Then

Timer1.Interval = int_timer1 : Timer2.Interval = int_timer2 : Timer1.Start()

If (e.KeyCode = Keys.Down) And ((prev = "up") Or (prev = "right") Or (prev = "left") Or (prev = "")) Then keypressed = "down"If (e.KeyCode = Keys.Up) And ((prev = "down") Or (prev = "") Or (prev = "right") Or (prev = "left")) Then keypressed = "up"If (e.KeyCode = Keys.Right) And ((prev = "left") Or (prev = "") Or (prev = "up") Or (prev = "down")) Then keypressed = "right"If (e.KeyCode = Keys.Left) And ((prev = "right") Or (prev = "") Or (prev = "up") Or (prev = "down")) Then keypressed = "left"

End If

</pre>

我使用DrawLine()函数来绘制蛇。同时,第二条线在一段时间后立即从后面开始。这条线用于从尾部擦除蛇。

<pre lang=vbnet>

Public snake_erase As Pen = New Pen(Color.Black, 2)

Me.CreateGraphics.DrawLine(snake_erase, X(value), Y(value), X(value + 1), Y(value + 1))

value=value+1

</pre>

食物

食物生成是最简单的部分,我使用了System.Random()来根据窗体宽度和高度生成随机食物粒子,因此可以在任何尺寸下玩此游戏。

<pre lang=vbnet>
foodx = RandomNumber.Next(20, Me.Width - 60)
foody = RandomNumber.Next(20, Me.Height - 60)
Me.CreateGraphics.DrawRectangle(food, foodx, foody, 2, 2)
</pre>

我使用了+-1 & +-2的精度,所以应该没有问题。

增加长度

长度的增加仅仅是通过减小从尾部来的擦除蛇的长度来实现的,我为此使用了变量value

约束

主要的限制是X()和Y()的数组大小,目前我将它们设置为500,000(足够玩5-6个小时),但是你可以编写自己的数组擦除函数。

碰撞检测

食物和蛇之间的碰撞检测是通过匹配Snake(x,y)Food (x,y)坐标来完成的。如果两者相等,则蛇的长度增加,并且随机显示新的食物。

结论

制作这个游戏是一次很好的体验。如果您有任何问题,可以通过atul_m_ojha@yahoo.co.in与我联系。

谢谢,

© . All rights reserved.