TC官方合作论坛
标题:
【有源码】TC扫雷游戏,开源
[打印本页]
作者:
lyf1314
时间:
2012-9-20 21:34
标题:
【有源码】TC扫雷游戏,开源
用兴趣的同学可以修改下,做毕业设计
插件附带在打包的源码里了,TC毕业设计要求纯TC,所以需要的同学可以用控件来完成,我这里偷懒,直接写了个插件,画上去的
#import "T.Class" x
//此为画图插件,将图片画到主显示画面上
//函数1 画图(来源句柄,绘图句柄,绘图x位置,绘图y位置,图片宽,图片高)
//函数2 画图2(来源句柄,绘图句柄,绘图x位置,绘图y位置,图片宽,图片高)
namespace dd
//*************这里是全局变量***********************
int[][] What //点
int[][] Save //存
int mX //x坐标
int mY //y坐标
int mTime //时间
int MineFlag //标记雷数量
int OpenFlag //标记已打开的
int NowWidth //宽度,横向数量
int NowHeight //高度,纵向数量
int TotMine //总雷数
bool Game //控制游戏
bool pick //控制小红旗不为负数
//************变量定义结束********************
//******自定义功能区开始********************************
//预设雷位置
function int ClearStart(int mWidth,int mHeight,int MineNumber)
int T,X,Y
mTime = 0
MineFlag = 0
OpenFlag = 0
Game=true
timer.register("timer0",1000)
for(int i=0;i<=31;i++)
for(int j=0;j<=17;j++)
What[i][j]=0
Save[i][j]=0
endfor
endfor
//清空数组
while(T<=MineNumber)
//任意取一个坐标(X,Y)
X=help.randto(0,mWidth-1)
Y=help.randto(0,mHeight-1)
//如果已经取过该坐标则重新再取
if(What[X+1][Y+1]==10)
continue
endif
//将当前坐标标记为有雷
What[X+1][Y+1]=10
Save[X+1][Y+1]=10
T=T+1
endwhile
return 0
endfunction
//写入数据
function int WriteNumber(int mWidth,int mHeight)
int StartX
int StartY
int EndX
int EndY
int mNumber
for(int X=1;X<=mWidth;X++)
//从当前列的上一列开始
StartX=X-1
if(StartX==0)
StartX=1
endif
//在当前列的下一列结束
EndX=X+1
if(EndX>mWidth)
EndX=mWidth
endif
for(int Y=1;Y<=mHeight;Y++)
//如果当前位置不是雷则开始计算
if(What[X][Y]!=10)
//从当前行的上一行开始
StartY=Y-1
if(StartY==0)
StartY=1
endif
//在当前行的下一行结束
EndY=Y+1
if(EndY>mHeight)
EndY=mHeight
endif
//累加器置0
mNumber=0
//计算四周有多少颗雷
for(int T=StartX;T<=EndX;T++)
for(int TT=StartY;TT<=EndY;TT++)
if(TT==Y&&T==X)
//如果是当前位置则不计入
else
//如果是雷则计入
if(What[T][TT]==10)
mNumber=mNumber+1
endif
endif
endfor
endfor
if(mNumber==0)
//如果没有雷在其四周则打开当前位置
What[X][Y]=0
Save[X][Y]=0
else
//写入雷数
What[X][Y]=mNumber
Save[X][Y]=mNumber
endif
endif
endfor
endfor
return 0
endfunction
//雷区打开,模拟windows扫雷点击展开临近一片区域
function int OpenBlank(int zmX,int zmY)
bool Continues
OpenFlag = OpenFlag + 1
while(true)
Continues = false
for(mY=1;mY<=NowHeight;mY++)
for(mX=1;mX<=NowWidth;mX++)
if(What[mX][mY]==11)
//如果存在未判断的空
Continues = true
//把它周围的8个点打开
//先打开左面的点
if(mX-1>=1)
if(What[mX-1][mY]==0)
What[mX-1][mY]=11
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),(mX-2)*15,(mY-1)*15,16,16)
OpenFlag = OpenFlag + 1
else
if(What[mX-1][mY]>=1&&What[mX-1][mY]<=9)
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX-1][mY]+2)),控件.获得句柄("picture0"),(mX-2)*15,(mY-1)*15,16,16)
What[mX-1][mY]=-What[mX-1][mY]
OpenFlag = OpenFlag + 1
endif
endif
endif
//打开左上的点
if(mX-1>=1&&mY-1>=1)
if(What[mX-1][mY-1]==0)
What[mX-1][mY-1]=11
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),(mX-2)*15,(mY-2)*15,16,16)
OpenFlag=OpenFlag+1
else
if(What[mX-1][mY-1]>=1&&What[mX-1][mY-1]<=9)
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX-1][mY-1]+2)),控件.获得句柄("picture0"),(mX-2)*15,(mY-2)*15,16,16)
What[mX-1][mY-1]=-What[mX-1][mY-1]
OpenFlag=OpenFlag+1
endif
endif
endif
//再打开上面的点
if(mY-1>=1)
if(What[mX][mY-1]==0)
What[mX][mY-1]=11
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),(mX-1)*15,(mY-2)*15,16,16)
OpenFlag=OpenFlag+1
else
if(What[mX][mY-1]>=1&&What[mX][mY-1]<=9)
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX][mY-1]+2)),控件.获得句柄("picture0"),(mX-1)*15,(mY-2)*15,16,16)
What[mX][mY-1]=-What[mX][mY-1]
OpenFlag=OpenFlag+1
endif
endif
endif
//打开右上的点
if(mY-1>=1&&mX+1<=NowWidth)
if(What[mX+1][mY-1]==0)
What[mX+1][mY-1]=11
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),(mX)*15,(mY-2)*15,16,16)
OpenFlag=OpenFlag+1
else
if(What[mX+1][mY-1]>=1&&What[mX+1][mY-1]<=9)
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX+1][mY-1]+2)),控件.获得句柄("picture0"),(mX)*15,(mY-2)*15,16,16)
What[mX+1][mY-1]=-What[mX+1][mY-1]
OpenFlag=OpenFlag+1
endif
endif
endif
//再打开右面的点
if(mX+1<=NowWidth)
if(What[mX+1][mY]==0)
What[mX+1][mY]=11
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),(mX)*15,(mY-1)*15,16,16)
OpenFlag=OpenFlag+1
else
if(What[mX+1][mY]>=1&&What[mX+1][mY]<=9)
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX+1][mY]+2)),控件.获得句柄("picture0"),(mX)*15,(mY-1)*15,16,16)
What[mX+1][mY]=-What[mX+1][mY]
OpenFlag=OpenFlag+1
endif
endif
endif
//再打开右下的点
if(mY+1<=NowHeight&&mX+1<=NowWidth)
if(What[mX+1][mY+1]==0)
What[mX+1][mY+1]=11
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
OpenFlag=OpenFlag+1
else
if(What[mX+1][mY+1]>=1&&What[mX+1][mY+1]<=9)
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX+1][mY+1]+2)),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
What[mX+1][mY+1]=-What[mX+1][mY+1]
OpenFlag=OpenFlag+1
endif
endif
endif
//打开下面的点
if(mY+1<=NowHeight)
if(What[mX][mY+1]==0)
What[mX][mY+1]=11
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),(mX-1)*15,(mY)*15,16,16)
OpenFlag=OpenFlag+1
else
if(What[mX][mY+1]>=1&&What[mX][mY+1]<=9)
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX][mY+1]+2)),控件.获得句柄("picture0"),(mX-1)*15,(mY)*15,16,16)
What[mX][mY+1]=-What[mX][mY+1]
OpenFlag=OpenFlag+1
endif
endif
endif
//最后打开左下的点
if(mY+1<=NowHeight&&mX-1>=1)
if(What[mX-1][mY+1]==0)
What[mX-1][mY+1]=11
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),(mX-2)*15,(mY)*15,16,16)
OpenFlag=OpenFlag+1
else
if(What[mX-1][mY+1]>=1&&What[mX-1][mY+1]<=9)
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX-1][mY+1]+2)),控件.获得句柄("picture0"),(mX-2)*15,(mY)*15,16,16)
What[mX-1][mY+1]=-What[mX-1][mY+1]
OpenFlag=OpenFlag+1
endif
endif
endif
//四点判断完后将本点标记为已判断过
What[mX][mY]=12
endif
endfor
endfor
if(Continues==false)
break
endif
endwhile
return 0
endfunction
//游戏结束,显示所有雷,并且标记雷错误显示
function int EndGame()
for(int Y=1;Y<=NowHeight;Y++)
for(int X=1;X<=NowWidth;X++)
if(What[X][Y]==10)
x.画图2(控件.获得句柄("picture15"),控件.获得句柄("picture0"),(X-1)*15,(Y-1)*15,16,16)
else
if(What[X][Y]==13)
if(Save[X][Y]!=10)
x.画图2(控件.获得句柄("picture14"),控件.获得句柄("picture0"),(X-1)*15,(Y-1)*15,16,16)
endif
else
if(What[X][Y]==14)
if(Save[X][Y]==10)
x.画图2(控件.获得句柄("picture15"),控件.获得句柄("picture0"),(X-1)*15,(Y-1)*15,16,16)
endif
endif
endif
endif
endfor
endfor
return 0
endfunction
//*******自定义功能区结束***************************************
function bool start_click()
int a
a=combo.getcursel("ComboBox0")
select(a)
case 0:
NowHeight = 9
NowWidth = 9
TotMine = 10
case 1:
NowHeight = 16
NowWidth = 16
TotMine = 40
case 2:
NowHeight = 16
NowWidth = 30
TotMine = 99
endselect
edit.settext("edit1",convert.inttostr(TotMine))
edit.settext("edit0","0")
window.setwindowsize(控件.获得句柄("picture0"),NowWidth*15,NowHeight*15)
for(int X=0;X<=NowWidth-1;X++)
for(int Y=0;Y<=NowHeight-1;Y++)
x.画图2(控件.获得句柄("picture11"),控件.获得句柄("picture0"),X*15,Y*15,16,16)
endfor
endfor
dd.ClearStart(NowWidth,NowHeight,TotMine)
dd.WriteNumber(NowWidth,NowHeight)
return true
endfunction
function bool exit_click()
help.exit()
return true
endfunction
function bool init()
help.regdll("rc:T.dll",true)
What=int[32][18]
Save=int[32][18]
combo.setcursel("ComboBox0",0)
int i
for(i=0;i<=14;i++)
picture.setpicture("picture"+convert.inttostr(i+2),"rc:"+convert.inttostr(i)+".bmp")
endfor
return true
endfunction
function bool dd_pretranslatemessage(int hwnd,int message,int wParam,int lParam,int time,int x,int y)
int T
int X1
int Y1
int x2
int y2
if(Game==true)
if(hwnd==控件.获得句柄("picture0"))
window.screentoclient(控件.获得句柄("picture0"),x,y,x,y)
mX=x/15
mY=y/15
//左键按下
if(message==513)
if(What[mX+1][mY+1]>=0&&What[mX+1][mY+1]<=10)
x.画图2(控件.获得句柄("picture16"),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
endif
endif
//左键弹起
if(message==514)
if(What[mX+1][mY+1]==10)
//点到雷
x.画图2(控件.获得句柄("picture15"),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
dd.EndGame()
Game=false //游戏结束,路由消息停止响应
timer.kill("timer0")//销毁定时器,停止时间
endif
if(What[mX+1][mY+1]>=1&&What[mX+1][mY+1]<=9)
//点到数字
OpenFlag=OpenFlag+1
x.画图2(控件.获得句柄("picture"+convert.inttostr(What[mX+1][mY+1]+2)),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
What[mX+1][mY+1]=-What[mX+1][mY+1]
endif
if(What[mX+1][mY+1]==0)
//点到空
x.画图2(控件.获得句柄("picture2"),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
What[mX+1][mY+1]=11
dd.OpenBlank(mX+1,mY+1)
endif
if(MineFlag+OpenFlag==NowHeight*NowWidth)
//通关
endif
endif
//右键按下
if(message==516)
if(What[mX+1][mY+1]>=-9&&What[mX+1][mY+1]<=-1)
T = 0
//计算标记的雷
for(X1=mX;X1<=mX + 2;X1++)
for(Y1=mY;Y1<=mY+2;Y1++)
if(X1==mX+1&&Y1==mY+1)
else
if(X1>=1&&X1<=NowWidth)
if(Y1>=1&&Y1<=NowHeight)
if(What[X1][Y1]==13)
T=T+1
endif
endif
endif
endif
endfor
endfor
//如果标记数大于等于雷数则不处理
if(T>=-What[mX+1][mY+1])
//这里不处理,有全局变量控制
endif
//如果标记数等于雷数则打开
if(T==-What[mX+1][mY+1])
for(X1=mX;X1<=mX+2;X1++)
for(Y1=mY;Y1<=mY+2;Y1++)
if(X1==mX+1&&Y1==mY+1)
else
if(X1>=1&&X1<=NowWidth)
if(Y1>=1&&Y1<=NowHeight)
x2=X1
y2=Y1
//获胜
endif
endif
endif
endfor
endfor
endif
//如果标记数小于雷数则按下余下的
for(X1=mX;X1<=mX+2;X1++)
for(Y1=mY;Y1<=mY+2;Y1++)
if(X1==mX+1&&Y1==mY+1)
else
if(X1>=1&&X1<=NowWidth)
if(Y1>=1&&Y1<=NowHeight)
if(What[X1][Y1]>=0&&What[X1][Y1]<=10)
endif
endif
endif
endif
endfor
endfor
endif
endif
//右键弹起
if(message==517)
if(What[mX+1][mY+1]>=0&&What[mX+1][mY+1]<=10)
if(pick==true)//这里控制了小红旗数量
//未标记过的进行标记
Save[mX+1][mY+1]=What[mX+1][mY+1]
What[mX+1][mY+1]=13
x.画图2(控件.获得句柄("picture12"),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
MineFlag=MineFlag+1
edit.settext("edit1",convert.inttostr(TotMine-MineFlag))
endif
else
if(What[mX+1][mY+1]==13)
//已经标记过则改为?
What[mX+1][mY+1]=14
MineFlag=MineFlag-1
edit.settext("edit1",convert.inttostr(TotMine-MineFlag))
x.画图2(控件.获得句柄("picture13"),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
else
if(What[mX+1][mY+1]==14)
//标记过?号的则
What[mX+1][mY+1]=Save[mX+1][mY+1]
x.画图2(控件.获得句柄("picture11"),控件.获得句柄("picture0"),mX*15,mY*15,16,16)
endif
endif
endif
endif
endif
endif
return false
endfunction
function bool timer0_ontime()
mTime=mTime+1
edit.settext("edit0",convert.inttostr(mTime))
return true
endfunction
function bool edit1_enchange()
int a
a=convert.strtoint(edit.gettext("edit1"),0)
if(a>0)
pick=true
else
pick=false
endif
return true
endfunction
endnamespace
复制代码
作者:
zgzjwzlx
时间:
2012-9-20 21:39
作者:
964430272
时间:
2012-9-20 21:41
顶顶
作者:
陌上青衣。
时间:
2012-9-20 21:47
***** 该内容需会员权限高于300才可浏览 *****
作者:
mengtianxi
时间:
2012-9-21 00:08
kkkkkkkkkkkkkkkk
作者:
lt729541702
时间:
2012-9-21 10:14
作者:
郑州小兵
时间:
2012-9-21 10:50
新手报到
作者:
qq06314488
时间:
2012-10-1 19:17
我勒个去
作者:
tlkb
时间:
2012-10-3 20:20
复杂么
作者:
TC-y
时间:
2012-10-11 14:54
看看
作者:
icesun2012
时间:
2012-10-13 22:33
新人表示~ 完全看不懂~
作者:
tclhs
时间:
2012-10-14 02:44
太难了,还是手动玩了
作者:
舍我其谁
时间:
2012-10-14 17:19
看下
作者:
503254
时间:
2012-11-23 17:00
看看
作者:
a8801353
时间:
2012-12-3 21:28
顶顶
作者:
jnay888
时间:
2013-1-12 04:08
学习学习
作者:
nxjclement
时间:
2013-2-24 08:53
支持
作者:
tomtommotmot
时间:
2013-3-4 14:27
看看
作者:
tomtommotmot
时间:
2013-3-6 08:49
来看看
作者:
icc
时间:
2013-3-8 17:27
正在找呢,太感谢了!!
作者:
laowantong
时间:
2013-4-5 14:03
作者:
lcy944046
时间:
2013-4-5 16:56
dddddddddddddd
作者:
349559545
时间:
2013-4-12 01:17
神人啊,学多久才能到这水平啊??
作者:
dana136
时间:
2013-4-20 22:55
回复看看
作者:
心不在焉
时间:
2013-4-25 21:14
顶顶
作者:
s463813442
时间:
2013-4-26 20:19
asdasdasd
作者:
mitu
时间:
2013-4-26 23:30
咯弄
作者:
s52o1
时间:
2013-5-4 11:21
ddddddddddd
作者:
f13lchen
时间:
2013-7-4 08:54
xuexi
作者:
317146487
时间:
2013-7-4 20:20
RE:【有源码】TC扫雷游戏,开源
作者:
ycma2009
时间:
2013-7-4 21:39
看看再说
作者:
亮哥
时间:
2013-7-19 13:15
......................................
作者:
kks1993
时间:
2013-7-19 13:36
自己刚建的网站,希望大家来点人气!不胜感激!521网赚之家 :
www.wangzhuan521.com
欢迎大家提意见,我正在不断学习当中,努力做得更好!希望能够得到您的支持,谢谢!
作者:
z1481281370
时间:
2013-7-19 16:31
不错
作者:
jwzhangsir
时间:
2013-10-6 19:40
学习学习,感谢分享…………
作者:
qq1105228467
时间:
2013-11-15 06:59
熙情
作者:
lanhu916
时间:
2013-11-15 12:55
学习一下
作者:
一川死水
时间:
2013-12-5 22:26
回复带走
作者:
xinm1ng
时间:
2013-12-5 22:39
我看看
作者:
JSDYWZ
时间:
2014-1-16 15:03
TC扫雷游戏
作者:
rainshine
时间:
2014-1-20 10:21
咳咳。看下多老的东西
作者:
yuki2500
时间:
2014-2-3 22:21
新手来看看学习学习
作者:
狂傲的小馋
时间:
2014-2-4 20:53
回复可见·
作者:
chm251852033
时间:
2014-2-9 13:47
wadasdasd
作者:
zhangtieben
时间:
2014-2-10 21:58
学习
作者:
aqyzjz
时间:
2014-2-23 01:22
作者:
逸杭希伯来
时间:
2014-3-1 09:45
ahhhhk
作者:
faithk
时间:
2014-3-17 18:08
回复看看啊
作者:
geargg
时间:
2014-3-18 19:48
学习
作者:
如此美丽。
时间:
2014-4-7 14:18
学习
作者:
注册嫌麻烦
时间:
2014-4-15 21:59
感谢楼主分享
作者:
6897293
时间:
2014-4-20 15:08
谢谢分享
作者:
810896809
时间:
2014-4-25 22:04
egeasnbzsxnbzdnz
作者:
小小小小菜鸟
时间:
2014-5-11 21:44
厉害啊啊啊
作者:
a1648004555
时间:
2014-5-29 07:16
顶顶顶顶顶顶顶顶顶
作者:
xiaoling2013
时间:
2014-7-31 12:11
看看
作者:
幽灵学者
时间:
2014-7-31 13:29
看看 扫雷 霸气的懂god那个
作者:
b44412545
时间:
2014-8-3 21:58
...此贴爆了,快爆了
作者:
紫㈩龍
时间:
2014-8-3 22:01
插件附带在打包的源码里
作者:
adamyun
时间:
2014-9-24 13:36
看那哪款是大额啊
作者:
730929w
时间:
2014-10-3 19:36
牛! !
作者:
fjshwr
时间:
2014-10-10 11:33
10100100111010101110001010101101010
作者:
sf8017
时间:
2014-11-2 18:37
TC扫雷游戏,开源
作者:
fanlele
时间:
2014-11-24 12:44
作者:
伊泽
时间:
2014-12-2 15:44
1111111111111
作者:
134564678
时间:
2014-12-2 16:19
1111111111111
作者:
jiangyutao1999
时间:
2014-12-5 21:38
作者:
zh249883717
时间:
2015-1-19 13:58
悄悄
作者:
tanghsa
时间:
2015-1-19 17:35
下载看看
作者:
itsok
时间:
2015-1-22 20:39
ddddd
作者:
wbdd
时间:
2015-3-10 22:43
看看
作者:
leng123
时间:
2015-3-13 19:32
TC扫雷游戏,开源
作者:
忠心未改
时间:
2016-5-29 08:12
哇擦,厉害
作者:
930929110
时间:
2016-6-22 15:07
666666666
作者:
tbmbx2017
时间:
2016-9-12 12:26
牛逼,我是自愧不如
作者:
爱上老公
时间:
2016-10-15 15:59
学习
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1