|
用兴趣的同学可以修改下,做毕业设计
插件附带在打包的源码里了,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
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|