admin 管理员组文章数量: 1086019
2024年4月30日发(作者:手机淘宝一返回就回到顶部)
|¨ ≥ j
r
—
维普资讯
蓼cram-麓黼浆纂
:
呦《I悖 r 殴
一
i
? ㈣
图形图像处理与游
GRA llCS& AM PR《 )(j}乏A
然 毫蠢棼 § 黪
用VB开发“穿越彩色危险地带”益智游戏
袁晓虎
摘要给出概念游戏的定义。并举例说明。
游戏概念,概念游戏,VB程序 关键词
一
、
概念游戏
玩过游戏的人都有这样的体会,如果一个游戏的想法不吸
(1)每次初始一个出发点和一个目标点,用“ ’号标
记,并给出出发点和其正上方三个格的提示(如果不提示第一
步完全靠运气,没有意义。如果其正上方三个格中没有颜色提
示的是陷阱) 引人,你不会去玩的。而且相同构思的游戏,玩过一款后,就
不会对另一款同类游戏感兴趣。所以游戏的构思很重要,应该
作为游戏开发首先考虑的问题,举例来说,对于战略游戏,其
想法构思不外乎资源、建设、造兵、开战,不同的只是实现这
些想法的方法而已。所以实现方法可以千变万化,可构思只有
一
(2)每次只能走一个格,不能跳格!即使你想后退,也
得一格一格地退!
(3)鼠标左键走格,右键进行标记! (右键标记没有实
际意义,即使格上标记了,仍可以走那一格!不过标记可以帮
个,我们通常称为构思概念!
助你记忆,便于分析。)
(4)每一步都会有提示(像扫雷一样),本程序使用颜
色给出形象直观的提示。你可以根据窗体左侧的颜色进行判
断。如亮绿色表示周围(周围指的是与其相邻的8个格)没有
陷阱,深绿色表示周围有一个陷阱,深黄色表示周围有两个陷
阱等。
如果有了某一个游戏概念,就可以通过使用简单的程序使
其实现,将这一概念表现出来,通常这种概念游戏可以作为构
思的初级给出,让人了解,然后让有想法的人通过其他方法来
实现、丰富和强化,使其成为真正的游戏。
二、设计思路
大家对扫雷游戏一定不陌生吧,其实这就是一种很好的初
级概念,我们可以根据这一概念,做出另一款游戏,同样是方
格地图,地图上随机放置地雷,不同的是游戏的方法,扫雷是
将所有地雷找出,而我这里初始一个出发点和一个目标点,让
(5)因为游戏有难度,如果总是觉得思考的时间不够,可
以作弊,单击窗体上“永恒时间”,就可以不考虑时间的限
制!
三、关于游戏
这款益智游戏便是概念游戏的一个例子,同样是扫雷的概
念,但实现的方法不同,当然这个程序可以加以强化,可以像
扫雷那样设定三个级别,可以加上每走一步的走步声音,使其
更加生动和形象,也可以加上背景音乐等等。如果有兴趣,可
其由出发点开始,穿过雷场, 到达目标点,能到就算取胜。制
定一定的游戏规则并给出有趣的游戏背景。这是一款益智游
戏,下面就是这款游戏的内容。
1.游戏背景 ‘
为了完成任务,你现在需要穿过一片危险地带(布满了陷
以加许多东西!就像开始所讲的那样:这种概念游戏可以作为
阱),当你踏上这片土地的第一步,危险就开始笼罩着你,你
的每一步都危机四伏,你需要仔细留意你的脚下,大地会通过
构思的初级给出,让人了解,然后让有想法的人通过其他方法
来实现、丰富和强化,使其成为真正的游戏。
变化颜色来告诉你,你距离危险的程度,现在你能做的只有考
虑,仔细考虑,这里没有侥幸,完全依靠你的大脑,时间在一
分一秒地过去,你必须快点,否则你的任务在也将无法完成。
2.游戏规则
四、程序实现
程序中通过数组来标记格子,并用数组的取值来标记陷阱
的有无,使用颜色来给出提示。具体的请看程序上的注释。
葡 嚣 与
维普资讯
照攀 馨懋静藤
形图像处 与游戏 程
RA S&(iila l l 妖《)( RAM
程序在Windows系列下均通过。游戏经人测试可行。过关
画面如下图。
初始陷阱数据标志位置
Dim x
trap As Integer,ytrap As Integer
_
_
过关画面
程序如下:
Dima《一5To20,一5To20)AsDouble 标记格子
DimhAsInteger.mAsInteger.SAsInteger
DimD
_
timeAsSingle
Dim Fore_x As Integer,Fore
_
yAs Integer 标记上一步
Dim S_P As Integer
Dim D PAs lnteger
Private Sub Form Load《)
给出提示颜色的定义
Picture2《0)BackColor=QBColor《1 0)
Picture2《1).BackColor=QBColor《3)
Picture2《2).BackColor QBColor《6)
Picture2《3).BackColor;QBColor《14)
Picture2f4).BackColor=QBCotorf4)
Picture2《5).BackColor=QBCotor《5)
Picture2《6).BackColor QBColor《13)
Picture2《7).BackCotor=QBColor《12)
Command2.Enabled=False
EndSub
Private Sub Form Resize《)
Picture1.Scale《0,18)一《18,0) 初始地图范围
EndSub
Private Sub Command 1_j=lick《)
初始场景
Picture1 Enabled=True
Picture1.CIs
画地图格子
D{m iAs Integer
Fori=1 TO 17
Picture1.Line《1,i)一《1 7.i),RGB《0.0,1 91)
Picture1.Line《i,1)一《l,1 7).RGB《 0.0,191)
Nexti
Dfm f0 As Integer.j0 As Integer
Dim_1 Aslnteger
Dim ii As Integer
Dim;2 As Integer,j2 As Integer
Dim sum As Integer
Do
i0=0
sum=0
Fori0=一5To20
Fori0=一5To20
a(i0,i0)=0
Nextj0
Nexti0
用1表示陷阱在这个位置,初始45个陷阱
Forii 1 TO50
Randomize:x_trap=Rnd 15+1
Randomize:y_trap=Rnd¥15+1
a《x__trap y_trap)=1
Nextii
Fori2=1 T0 16
Forl2=1 TO16
sum=¥um+a《i2,I2)
Nextj2
Nexti2
LoopUntilsum>=45
初始起点
DO
Randomize:S
_
P;Rnd, 16+1
LoopUntila《S_P,1)<>1 AndS_P>0AndS_p<1 7
Fore
_
,
x;S_P:Fore
_
y=1
CallDegree__dangerous(S_P.1) 给出起点位置的提示
CallShow
_
trail《S_P 1)
Call Line_Redraw
初始终点
Do
Randomize:D_P=Rnd¥16+1
LoopUntila《D_f),16)<>1 AndD_P>0AndD-P<1 7
CallShow
_
trail《D—P,16)
Call Line_Redraw
初始时间
h 0:m=1 5:S=0
Picture1.Enabled=False
对按钮作用
Command 1.Enabled;False
Command2.Enabled=True
EndSub
Private Sub Command2
_
Click《)
开始游戏
D ime=h 3600+m%60+S+Timer
Time门.Enabled=True
Timer1,Interval;1 000
Picture1.Enabled=True
Command2.Enabled False
l _lll_
获爝黪~嚣麓密
j :
l|
H
维普资讯
熊蛰鬻
}
圈形图像处理
与游戏编程 。
GRAp}lll 菠(jA
EndSub
Private Sub Timer1 J{mer《)
记录时间
Dimh1 AsInteger。ml AsSingle。sl AsInteger
Dim R
_
time As Single
R
_
time D time
一Timer
h1=R time\3600
ml=(R_timeMod3600l\60
s1 R time Mod60
Text1.Text; &FOrmat《h1. OO )& : &FOrn1at《m1,
OO )& : &Form宕t《s1, 00 )
判断是否到时间
lfh1= 00 Andm1= 00 Andsl= 00 Then
MsgBox( youarefailing! )
Timer1.Enabled;False
Text1 Text=…
Cal lShowyap
Call Line Redraw
Picture1.Enabled=False
Command1.Enabled True
EndIf
EndSub
Private Sub picture1 MouseDown(Button As lnteger,Shift As
lnteger,xAsSingle.yAsSingle)
对鼠标左右键的判断
IfButton 1 Then
是否跳步的判断
…nt《x)>=1 AndInt《x)<=1 6AndInt《Y)> 1 AndInt《Y)
< 16Then
IfAbs《Int《x)一Fore_x)<2AndAbs《l nt《Y)一Fore3/)<2Then
取胜与否的判断
IfInt《x)=D-PAndInt《Y)=16Then
MsgBox《 congratulation!you are successful I )
Picture1.Enabled=False
Timer1.Enabled=False
Text1 Text
Picture1.CIs
Command 1.Enabled=True
Command2.Enabled False
ExitSub
EndIf
没有走到陷阱上的判断
Ifa《Int《x),Int《Y))=0Then
CallDegree_dangerous《l九t《x),Int《Y))
FOrm1.FillStyle=0
Form1 FillColor;QBColor(¨
Picture1.Circle《Int《x)+0.5,Int《Y)+0,5)。0.2
Fore x=Int《x):Fore_y=Int(Y)
Call Une Redraw
EndIf
走到陷阱上的判断
Ifa《Int《x),Int《Y))=1 Then
MsgBox《 game over! )
Call Show
_
Map
÷ 圬与II
Cal lLine
_
Redraw
Picture1.Enabled=False
Timer1.Enabled=False
Text1.Text ~
Command1.Enabled=True
ExitSub
EndIf
走过的格子的判断
lfa《lnt《x).1nt《Y))=0.1 Then
Form1.FillStvle 0
Form1.FillColor z QBColorl 1)
Picture1.Circle《lnt《x)+0.5,Int《Y)+0.5),O.2
Fore x Int《x):Fore_y Int《Y)
Endlf
Else
MIsgBox( youcan notdothis! )
EndIf
Endlf
Else
标记“×”方便判断
Picture1.CurrentX=lnt(x)+0.3
Picture1.CurrentY#lnt(Y)+O.7
Picture1.Print ×
EndIf
EndSub
PublicSubDegree dangerous(d_xAsInteger d_yAsInteger)
显示危险程度
Dim symbo As Double
symbo。《a《d 一1,d_y+1)+a《d x;d_y+1)+a《d +1,
d
_
y 4-1)+jId_x一1,d_y)4-aId x,d )+eI 4-1,d_y)+
j《d 一1,d_y一1)+a《d .d_y一1)+a(d +1,d_y一1))
Call Colour Display《d .d_y.symbo)
a《d_x.d_y) 0.1
IfIntlsymbo)>0Then
Else
Call Sho Jip《d ,d_y)
symbo=0
Endlf
EndSub
显示颜色的子程序
PublicSubColour Display《c_xAsInteger,,c_yAsInteger,.symAs
Double)
Dim Colour_NumberAs Integer
SelectCase Int(sym)
Case0
Colour.Nlumber 10
Case1
Colour
_
Number=3
Case2
Colour_Number;6
Cas(e3
Colour_Number 14
Case4
维普资讯
Colour Number=4
Case5
Colour Number=5
Case6
Colour
_
Number=13
Case7
Colour Number 1 2
Case8
Colour Number=0
End Select
Picture1.Line(c x,c y)一(c_x+1.c_y+1).QBColor
(Colour_Number).BF
EndSub
PublicSubSho ]ip(t_xAsInteger t_yAsInteger)
给出提示信息
给出所在格子和其周围8个格子的颜色提示
#, 球 : : : :
: 4{3 :2:。
{ :{ ;, , 0代表当前点击格子
:i:5¥0 1
: 巾水, 水
6 7 8
术啦, ; 水乖水 }=
1
Dimt..xxAs Integer,t
_
yyAs Integer
Form1.Refresh
t_xx=t_x+1:t__yy=t
_
v
Ift
_
xx>墨1 Andt
_
xx< 16And t_yy>=1 Andt_W<=16
Then
Ifa(t_xx,t_yy);0Then
Call Degree
_
dangerous(t_xx,t_yy)
EndIf
EndIf
2
Form1.Refresh
t_xx=t +1:t
_
yy t_y+1
Ift_xx>=1 Andt
_
xx<=16Andt
_
yy>
1 Andt
_
yy<=
16Then
Ifa(t_xx.t_yy)=0Then
Call Degree
_
dangerous(t_xx t_yy)
Endlf
Endlf
3
FOrm1.Refresh
t
_
xx=t x:t
_
yy=t_y+1
Ift
=
_
xx>=1 Andt
.
2(x<=16Andt
_
yy>
1 Andt
_
yy<=
16Then
Ifa(t_xx,t_yy)=0Then
Cal lDegree
_
dangerous(t_xx,t
_
yy)
EndIf
Endlf
4
FOrm1.Refresh
t_xx=t x一1:t
_
yy=t_y+1
阁隳~溺撩黔蘖
图形图像处理与游戏 程
G ^ “fCS&“^ ; RO(]RAM
Ift
_
xx> 1 And Lxx<=16Andt
_
yy> 1 And t
__
yy<=16
Then
Ifa(t..xx.t_yy)=0Then
Call Degree
_
dangerous(t_xx.t )
EndIf
EndIf
5
Form1.Refresh
t
_
xx=t
_
x一1:t_yy=t
_
y
Ift
_
xx> 1 Andt
_
xx<=16 And t
_
yy>=1 And t_yy<=16
Then
Ifa(t_xx.t_yy)=0Then
Cal lDegree_dangerous(t xx,t
_
yy)
EndIf
EndIf
6
FOrm1.Refresh
t
_
xx=t
_
x一1:t
_
yy t_y一1
Ift
..
xx>=1 Andt
_
xx<=16Andt
_
yy>=1 Andt
_
yy<z
16Then
Ifa(t.,xx,t_yy) 0Then
Call Degree
_
dangerous(t_xx.t_yy)
EndIf
EndIf
7
Form1.Refresh
t..xx=t :t
_
yy=t_y一1
Ift_xx> 1 Andt
_
xx<兰16Andt_yy>=1 Andt_yy<
16Then
Ifa(t_,xx,t_yy)=0Then
Call Degree
_
dangerous(t
_
xx,t_yy)
EndIf
EndIf
8
FOrm1.Refresh
t
_
xx=t
_
x+1:t_yy=t
_
y一1
Ift
_
xx> 1 Andt_xx< 16Andt_yy>=1 AndtYY<=
16Then
Ifa(t xx.tWY)=0Then
Call Degree_dangerous(t_xx,t_yy)
EndIf
End If
EndSub
失败后最示陷阱 .
Public Sub Show_Map()
Dim i4As Integer,j4As Integer
Fori4=1 TO16
Fori4=1 TO16
Ifa(i4,j4) 1 Then
Picture1.Line(i4,j4)一(i4+1,j4+1) QBColor(0),BF
Else
Picture1.Line(i4,j4)一(i4+1,j4+1),QBColor(15),BF
EndIf
(下转第86页)
20
06.
6
r电脯-毽技
巧
与簟
护 _-
毋
维普资讯
0.50000).V/8
pingfangcha=temp;
{0.33333.0.37500.0 33333.0.50000.0.22222.
0.41667)//9
}
}
cu rrentN=j:
l:
2.数字校验码程序识别
gNumber【k】=currentN;//保存结果
输入图像模块,预处理模块和分割字符模块与训练集样品
库的建立一节所对应的模块函数是一样的,不再赘述。F面讲
解根据特征码识别校验码模块功能函数。处理流程如图3所
示
三、其它类型校验码识别
应该说,上面提到的校验码是比较简单的,I韭壁蔓皇 这类
校验码虽然加_r点噪声,但去掉噪声并不难识别。如果一卟黑
图3处理流程
色像素上下左右四个方向没有黑色像素,则认为是噪声,计算
图像中各个连通体面积,如果面积小于某个设定的阚值,则认
为是噪声。图4是微软hotmail注册的校验码,用本文提到的方
法识别出来比较困难。
添加一个全局变量:
intgNumber[4】://保存识别出的4个数字
void CJUSTIFYCODEDIg::GetResult()
f
int k,j,t,currentN;
for《k=0:k<4:k++)//4个字符
{
if(gNumber【k1==1OO)//没处理过
{
float pingfangcha 1 00;
图4 hotmail注册校验码
四、结论,
本文论述了数字校验码的模式识别,并给出了核心代码,
同时也阐述了其它类型校验码的模式识别。作者希望从纯技术
的角度看待校验码模式识别,一些人不要用于非法用途。
for(』=O:j<1O j++)//依次比较每个样品的特征码
{
floattemp=O:
for(t z O:t<6:t++)
{
temp+ (gRatio【klIt】一gSample[j】【t】)十(gRatio
【kl【t】一gSample【j】【t1)://依据最小距离法判断
}
参考文献
1.图像模式识别——Vc++技术实现.清华大学出版社
2.MSDN开发文档
if(temp<pingfangcha)//找到特征值相差最小的
{
(收稿日期:2006年3月28日)
(上接第69页)
Nexti4
Nexti4
Unload Form 1
EndSub
让时间停止
Private Sub Label2 Click()
EndSub
MsgBox( 永恒时间! )
Timer1.Enabled=False
Timer1.1nterval=0
重画地图和格子
Public Sub Line
Redraw()
_
DIm iAs Integer
Fori 1 TO17
EndSub
初始起点和终点的标记
PublicSubShow
tra_l(s_t_xAsInteger.s_t_yAsInteger)
Picture1.CurrentX s_j +0.4
._
Picture1.Line(1,i)一《17,i),RGB(0,O,191)
Picture1.Line i 1】一(i,17),RGBf0,0,191)
Nexti
Picture1.CurrentY;sjJ/+0.7
Picture1.Print
EndSub
EndSub
Private Sub Command3
Cliok f)
_
(收稿日期:2006年3月26日)
与
版权声明:本文标题:用VB开发“穿越彩色危险地带”益智游戏 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1714454844a680819.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论