找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 8525|回复: 11

经典游戏再现——扫雷

  [复制链接]
发表于 2016-8-22 18:03:53 | 显示全部楼层 |阅读模式
本帖最后由 “” 于 2016-8-28 19:59 编辑

在电脑还未普及的那个年代里。放学后会很多学生都会去电脑城中蹭一会免费的游戏。
扫雷无疑是最常玩。
今天用Ev3再现Windows平台的经典:扫雷

配置:EV3,触动各1个(可增加2个电机,1个触动)

编程语言:Small Basic
操作说明:(希望大家玩下扫雷这个游戏,更能体会以下的说明)
  • EV3+1个触动:程序块上的上下左右移动光标,确定键相当于鼠标左键,触动(4号口)相当于鼠标右键
  • EV3+2个触动:增配的触动(1号口)相当于鼠标左键
  • 增配1个电机:增加的电机(D号口)操作光标移动。快速旋转:光标上下移动;慢速旋转:光标左右移动。中间会有“嘀”的一声,表示可以重新选择快速或者慢速(多多练习,可以习惯操作)
  • 增配2个电机:电机(A号口)操作光标上下移动,电机(D号口)操作光标左右移动(快速慢速效果相同)


显示说明:
  • EV3屏幕第一行显示游戏状态:左边的数表示还未打开的方格数,当为0时,获胜。右边表示剩余旗子(旗子表示此处有雷)的数,游戏一共有25颗地雷。
  • 屏幕上有10*15的方格,灰色表示还未确定,数表示周围8格中雷的数量,旗子表示认为此处是雷。


游戏过程:
  • 启动时,电机旋转0.05秒,判断电机数量。
  • 运用电机、按键、触动操作光标进行游戏
  • 光标移动到灰色块:左键打开此块,如果是雷即输,游戏结束;右键插上旗子进行标记
  • 光标移动到数字块:如果周围的雷都已标记(插旗),左键则打开剩下未打开的方格,如果有错即输,游戏结束
  • 光标移动到旗子块:左键无效,右键可以恢复成灰色块
  • 当方块全部打开,或者遇到雷,游戏结束,显示结果:胜利或者失败
  • 按确定重新开始;按其他可以复盘,查看错误原因
视频:

附件使用说明:
注意:rbf文件只能在EV3的文件夹中才能被识别。因此下载的时候一定要下载到文件夹内。
步骤:
  • 解压下载文件
  • 打开EV3g软件
  • 连接Ev3
  • 随意下载一个程序(目的是为了产生一个文件夹,如果Ev3内已有存放此游戏的文件夹,可跳过此步)
  • 点击程序块信息
  • 打开内存浏览器
  • 选择要存放的文件夹目录
  • 点击下载
  • 在对话框内选择此游戏文件
完成,可以在EV3中玩了



Minesweeper.rar

3.36 KB, 下载次数: 397

EV3程序

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2016-8-22 18:04:09 | 显示全部楼层
本帖最后由 “” 于 2016-8-28 19:57 编辑
  1. show=0
  2. '光标当前位置
  3. CurrentSquare=0

  4. '光标四周位置
  5. CurrentSquareRound[8]=0

  6. '方格数量设定
  7. SquareWidth=0
  8. SquareHeight=0
  9. SquareTol=0

  10. '地雷数组
  11. MineTol=25
  12. Mines[149]=0

  13. '屏幕显示数组
  14. SquareShow[149]=0

  15. '判断游戏结束
  16. GameOver=0
  17. Opened=0

  18. '循环时间间隔100ms
  19. TimeInterval=100
  20. SelectTime=0

  21. '按键
  22. CurrentClick = ""
  23. LastClick = ""
  24. Clicktime=0

  25. '电机移动光标
  26. LastMoto=0
  27. CurrentMoto=0
  28. MoveMode=0
  29. MoveModeTime=0

  30. LastMoto_2=0
  31. CurrentMoto_2=0

  32. '触动
  33. LastTouch=0
  34. Touch=0
  35. '—————————————————————————————————————————————————————————————————
  36. '判断电机数量
  37. Motor.ResetCount ("AD")
  38. Motor.Start ("AD", 20)
  39. program.delay(50)
  40. if Motor.GetCount ("A")<>0 and Motor.GetCount ("D")<>0 then
  41.         MotoMode=1
  42. endif
  43. Motor.Stop ("AD", "False")

  44. While 0<1
  45.         '初始化
  46.         initialization()
  47.        
  48.         '游戏过程
  49.         GameOver=0
  50.         Opened=0
  51.         Flag=0
  52.         Motor.ResetCount ("D")
  53.         CurrentSquare=Math.Ceiling(SquareTol/2)+Math.Floor(SquareWidth/2)
  54.         Draw_f()
  55.         program.delay(200)
  56.         While GameOver=0
  57.                 LCD.Text(1,0,0,1,squaretol-opened)
  58.                 LCD.text(1,150,0,1,MineTol-Flag)
  59.                 '按键操作
  60.                 CurrentClick=Buttons.Current
  61.                 if CurrentClick  = LastClick then
  62.                         Clicktime=Clicktime+TimeInterval
  63.                 endif
  64.                 if Clicktime=300 or CurrentClick  <> LastClick then
  65.                         if CurrentClick="E" or Sensor.ReadPercent (1) =100 then
  66.                                 if SquareShow[CurrentSquare]=-3 then
  67.                                         '打开
  68.                                         if Mines[CurrentSquare]=-1 then
  69.                                                 SquareShow[CurrentSquare]=Mines[CurrentSquare]
  70.                                                 GameOver=1
  71.                                         else
  72.                                                 if Mines[CurrentSquare] <> 0 then
  73.                                                         Open_1()
  74.                                                         SelectTime=500-TimeInterval
  75.                                                 else
  76.                                                         Open_0()
  77.                                                         SelectTime=500-TimeInterval
  78.                                                 endif
  79.                                         endif
  80.                                 elseif SquareShow[CurrentSquare]=-2 or SquareShow[CurrentSquare]=-1 then
  81.                                         '旗子,不处理
  82.                                 else
  83.                                         '检测周围插旗数量 可以打开周围所有的数
  84.                                         Open_S()
  85.                                 endif
  86.                         elseif CurrentClick <> ""  then
  87.                                 MoveSelect()
  88.                                 LastClick=CurrentClick
  89.                                 Clicktime=0
  90.                                 SelectTime=0-TimeInterval
  91.                         endif
  92.                 endif
  93.                        
  94.                 '电机旋转移动光标
  95.                 if MotoMode=0 then '单个电机
  96.                         CurrentMoto=Motor.GetSpeed ("D")
  97.                         if MoveMode=0 then
  98.                                 if CurrentMoto =0 then
  99.                                 elseif CurrentMoto<-12 or CurrentMoto>12 then
  100.                                         MoveMode=1
  101.                                 else
  102.                                         MoveMode=2
  103.                                 endif
  104.                         elseif MoveMode=1 then '垂直模式
  105.                                 if CurrentMoto>0 then
  106.                                         Draw()
  107.                                         if CurrentSquare-SquareWidth<0 then
  108.                                                 CurrentSquare=CurrentSquare+SquareTol-SquareWidth
  109.                                         else
  110.                                                 CurrentSquare=CurrentSquare-SquareWidth
  111.                                         endif
  112.                                         Draw_f()
  113.                                         SelectTime=0
  114.                                         MoveModeTime=0
  115.                                         program.delay(200)
  116.                                 elseif CurrentMoto<0 then
  117.                                         Draw()
  118.                                         if CurrentSquare+SquareWidth>SquareTol-1 then
  119.                                                 CurrentSquare=CurrentSquare-SquareTol+SquareWidth
  120.                                         else
  121.                                                 CurrentSquare=CurrentSquare+SquareWidth
  122.                                         endif                                       
  123.                                         Draw_f()
  124.                                         SelectTime=0
  125.                                         MoveModeTime=0
  126.                                         program.delay(200)
  127.                                 else
  128.                                         MoveModeTime=MoveModeTime+TimeInterval
  129.                                         if MoveModeTime>500 then
  130.                                                 MoveMode=0
  131.                                                 MoveModeTime=0
  132.                                                 Speaker.Tone(100,1000,100)
  133.                                         endif
  134.                                 endif
  135.                         elseif MoveMode=2 then'水平模式
  136.                                 if CurrentMoto<0 then
  137.                                         Draw()
  138.                                         if CurrentSquare=SquareTol-1 then
  139.                                                 CurrentSquare=0
  140.                                         else
  141.                                                 CurrentSquare=CurrentSquare+1
  142.                                         endif
  143.                                         Draw_f()
  144.                                         SelectTime=0
  145.                                         MoveModeTime=0
  146.                                         program.delay(200)
  147.                                 elseif CurrentMoto>0 then
  148.                                         Draw()
  149.                                         if CurrentSquare=0 then
  150.                                                 CurrentSquare=SquareTol-1
  151.                                         else
  152.                                                 CurrentSquare=CurrentSquare-1
  153.                                         endif
  154.                                         Draw_f()
  155.                                         SelectTime=0
  156.                                         MoveModeTime=0
  157.                                         program.delay(200)
  158.                                 else
  159.                                         MoveModeTime=MoveModeTime+TimeInterval
  160.                                         if MoveModeTime>1000 then
  161.                                                 MoveMode=0
  162.                                                 MoveModeTime=0
  163.                                                 Speaker.Tone(100,1000,100)
  164.                                         endif
  165.                                 endif
  166.                         endif
  167.                 else '多个电机
  168.                         '上下移动
  169.                         CurrentMoto=Motor.GetSpeed ("A")
  170.                        
  171.                         if CurrentMoto <-3 then
  172.                                 CurrentMoto=-1
  173.                         elseif CurrentMoto >3 then
  174.                                 CurrentMoto=1
  175.                         else
  176.                                 CurrentMoto=0
  177.                         endif
  178.                        
  179.                         if CurrentMoto > 0 then
  180.                                 Draw()
  181.                                 if CurrentSquare+SquareWidth > SquareTol-1 then
  182.                                         CurrentSquare=CurrentSquare+SquareWidth-SquareTol
  183.                                 else
  184.                                         CurrentSquare=CurrentSquare+SquareWidth
  185.                                 endif
  186.                                 Draw_f()
  187.                                 program.delay(200)
  188.                                 SelectTime=0
  189.                         elseif CurrentMoto < 0 then
  190.                                 Draw()
  191.                                 if CurrentSquare-SquareWidth<0 then
  192.                                         CurrentSquare=CurrentSquare-SquareWidth+SquareTol
  193.                                 else
  194.                                         CurrentSquare=CurrentSquare-SquareWidth
  195.                                 endif
  196.                                 Draw_f()
  197.                                 program.delay(200)
  198.                                 SelectTime=0
  199.                         endif
  200.                        
  201.                         '左右移动
  202.                         CurrentMoto_2=Motor.GetSpeed ("D")
  203.                        
  204.                         if CurrentMoto_2 <-3 then
  205.                                 CurrentMoto_2=-1
  206.                         elseif CurrentMoto_2 >3 then
  207.                                 CurrentMoto_2=1
  208.                         else
  209.                                 CurrentMoto_2=0
  210.                         endif
  211.                        
  212.                         if CurrentMoto_2 > 0 then
  213.                                 Draw()
  214.                                 if Math.Remainder(CurrentSquare,SquareWidth)=0  then
  215.                                         CurrentSquare=CurrentSquare+SquareWidth-1
  216.                                 else
  217.                                         CurrentSquare=CurrentSquare-1
  218.                                 endif
  219.                                 Draw_f()
  220.                                 program.delay(200)
  221.                                 SelectTime=0
  222.                         elseif CurrentMoto_2 < 0 then
  223.                                 Draw()
  224.                                 if Math.Remainder(CurrentSquare,SquareWidth)=SquareWidth-1 then
  225.                                         CurrentSquare=CurrentSquare-SquareWidth+1
  226.                                 else
  227.                                         CurrentSquare=CurrentSquare+1
  228.                                 endif
  229.                                 Draw_f()
  230.                                 program.delay(200)
  231.                                 SelectTime=0
  232.                         endif
  233.                 endif
  234.                
  235.                 '触动操作(按下100,弹出0)
  236.                 Touch=Sensor.ReadPercent (4)
  237.                 if Touch=100 and LastTouch=0 then
  238.                         if SquareShow[CurrentSquare]=-3 then
  239.                                 SquareShow[CurrentSquare]=-2
  240.                                 Flag=Flag+1
  241.                                 Draw()
  242.                         elseif SquareShow[CurrentSquare]=-2 then
  243.                                 SquareShow[CurrentSquare]=-3
  244.                                 Draw()
  245.                                 Flag=Flag-1
  246.                         endif
  247.                 endif
  248.                 LastTouch=Touch
  249.        
  250.                 if Sensor.ReadPercent (1) =100 then
  251.                         if SquareShow[CurrentSquare]=-3 then
  252.                                 '打开
  253.                                 if Mines[CurrentSquare]=-1 then
  254.                                         SquareShow[CurrentSquare]=Mines[CurrentSquare]
  255.                                         GameOver=1
  256.                                 else
  257.                                         if Mines[CurrentSquare] <> 0 then
  258.                                                 Open_1()
  259.                                                 SelectTime=500-TimeInterval
  260.                                         else
  261.                                                 Open_0()
  262.                                                 SelectTime=500-TimeInterval
  263.                                         endif
  264.                                 endif
  265.                         elseif SquareShow[CurrentSquare]=-2 or SquareShow[CurrentSquare]=-1 then
  266.                                 '旗子,不处理
  267.                         else
  268.                                 '检测周围插旗数量 可以打开周围所有的数
  269.                                 Open_S()
  270.                         endif
  271.                 endif
  272.        
  273.        
  274.        
  275.        
  276.        
  277.        
  278.        
  279.        
  280.        
  281.                 '时间间隔,500毫秒闪烁
  282.                 SelectTime=SelectTime+TimeInterval
  283.                 if SelectTime=0 then
  284.                         Draw_f()
  285.                 elseif SelectTime=500 then
  286.                         Draw()
  287.                 elseif SelectTime=1000 then
  288.                         SelectTime=0-TimeInterval
  289.                 endif
  290.                 Program.Delay (TimeInterval)
  291.                
  292.                 if opened=SquareTol-MineTol then
  293.                         GameOver=1
  294.                 endif
  295.         endWhile
  296.        
  297.         '显示结果
  298.         LCD.Clear()
  299.         if opened=SquareTol-MineTol then
  300.                 LCD.text(1,28,70,2,"YOU WIN")
  301.         else
  302.                 LCD.text(1,20,70,2,"YOU LOST")
  303.         endif
  304.         Program.delay(1000)
  305.         '重玩或者显示错误结果
  306.         CurrentClick=""
  307.         show=0
  308.         while CurrentClick <> "E"
  309.                 CurrentClick=Buttons.Current
  310.                 if Sensor.ReadPercent (1) >30 then
  311.                         CurrentClick = "E"
  312.                 endif
  313.                 if Sensor.ReadPercent (4) >30 then
  314.                         CurrentClick = "L"
  315.                 endif
  316.                
  317.                 if CurrentClick <>"E" and CurrentClick<>""  and show = 0 then
  318.                         LCD.Clear()
  319.                         '画所有格子
  320.                         for i=0 to 178 step 2
  321.                                 LCD.Line(1,0+i,0+10,178,178+10-i)
  322.                         endfor
  323.                         for i= 2 to 118 step 2
  324.                                 LCD.Line(1,0,i+10,118-i,118+10)
  325.                         endfor
  326.                         for i=0 to SquareWidth
  327.                                 LCD.FillRect(0,i*12+10,10,2,118)
  328.                                 LCD.FillRect(0,0,i*12+20,178,2)
  329.                         endfor
  330.                        
  331.                         for CurrentSquare=0 to SquareTol-1
  332.                                 if SquareShow[CurrentSquare]=-3 and Mines[CurrentSquare]=-1 then
  333.                                         DrawMine()
  334.                                 elseif SquareShow[CurrentSquare]=-1 then
  335.                                         DrawMine_f()
  336.                                 elseif SquareShow[CurrentSquare]=-2 and Mines[CurrentSquare]=-1 then
  337.                                         DrawFlag()
  338.                                 elseif SquareShow[CurrentSquare]=-2 and Mines[CurrentSquare]<>-1 then
  339.                                         DrawFlag_f()
  340.                                 elseif SquareShow[CurrentSquare]<>-3 then
  341.                                         DrawNum()
  342.                                 endif
  343.                         endfor
  344.                         show =1
  345.                 endif
  346.         endwhile
  347. endwhile

  348. sub initialization
  349.         LCD.clear()
  350.         show =0
  351.         '观察扫雷界面
  352.         'if show=1 then       
  353.         '        for i=0 to 178 step 12
  354.         '                for j=0 to 119 step 12
  355.         '                        LCD.FillRect (1, i, j+10, 10, 10)
  356.         '                endfor
  357.   '        endfor
  358.         'endif
  359.        
  360.         '扫雷界面长宽数量
  361.         SquareWidth=15
  362.         SquareHeight=10
  363.         SquareTol=SquareWidth*SquareHeight
  364.        
  365.         '画所有格子
  366.         for i=0 to 178 step 2
  367.                 LCD.Line(1,0+i,0+10,178,178+10-i)
  368.         endfor
  369.         for i= 2 to 118 step 2
  370.                 LCD.Line(1,0,i+10,118-i,118+10)
  371.         endfor
  372.         for i=0 to SquareWidth
  373.                 LCD.FillRect(0,i*12+10,10,2,118)
  374.                 LCD.FillRect(0,0,i*12+20,178,2)
  375.         endfor
  376.                
  377.         '生成地雷数组
  378.         for i=0 to SquareTol-1
  379.                 Mines[i]=0
  380.         endfor
  381.        
  382.         '随机生成地雷
  383.         i=0
  384.         while MineTol <> i
  385.                 Rand=Math.GetRandomNumber (SquareTol)-1
  386.                 '可以让地雷周围的8格增加1
  387.                 if Mines[Rand] =0 then
  388.                         Mines[Rand] =-1
  389.                         i=i+1
  390.                         CurrentSquare=Rand
  391.                         GetCurrentSquareRound()
  392.                         for j= 0 to 7
  393.                                 if CurrentSquareRound[j]<>-1 then
  394.                                                 Mines[CurrentSquareRound[j]]=Mines[CurrentSquareRound[j]]+1
  395.                                 endif
  396.                         endfor
  397.                 endif
  398.         endWhile
  399.        
  400.         '设定显示状态
  401.         for i=0 to SquareTol -1
  402.                 SquareShow[i]=-3
  403.         endfor
  404. endsub

  405. sub GetCurrentSquareRound
  406.         '左上
  407.         if Math.Remainder(CurrentSquare,SquareWidth)>0 and CurrentSquare-SquareWidth>=0 then
  408.                 CurrentSquareRound[0]=CurrentSquare-SquareWidth-1
  409.         else
  410.                  CurrentSquareRound[0]=-1
  411.         endif
  412.        
  413.         '上
  414.         if CurrentSquare-SquareWidth>=0 then
  415.                 CurrentSquareRound[1]=CurrentSquare-SquareWidth
  416.         else
  417.                 CurrentSquareRound[1]=-1
  418.         endif
  419.        
  420.         '右上
  421.         if Math.Remainder(CurrentSquare,SquareWidth)<SquareWidth-1 and CurrentSquare-SquareWidth>=0 then
  422.                 CurrentSquareRound[2]=CurrentSquare-SquareWidth+1
  423.         else
  424.                 CurrentSquareRound[2]=-1
  425.         endif
  426.        
  427.         '左
  428.         if Math.Remainder(CurrentSquare,SquareWidth)>0 then
  429.                 CurrentSquareRound[3]=CurrentSquare-1
  430.         else
  431.                 CurrentSquareRound[3]=-1
  432.         endif
  433.        
  434.         '右
  435.         if Math.Remainder(CurrentSquare,SquareWidth)<SquareWidth-1 then
  436.                 CurrentSquareRound[4]=CurrentSquare+1
  437.         else
  438.                 CurrentSquareRound[4]=-1
  439.         endif
  440.        
  441.          '左下
  442.         if Math.Remainder(CurrentSquare,SquareWidth)>0 and CurrentSquare+SquareWidth <150 then
  443.                 CurrentSquareRound[5]=CurrentSquare+SquareWidth-1
  444.         else
  445.                 CurrentSquareRound[5]=-1
  446.         endif
  447.        
  448.         '下
  449.         if CurrentSquare+SquareWidth <150 then
  450.                 CurrentSquareRound[6]=CurrentSquare+SquareWidth
  451.         else
  452.                 CurrentSquareRound[6]=-1
  453.         endif
  454.        
  455.         '右下
  456.         if Math.Remainder(CurrentSquare,SquareWidth)<SquareWidth-1 and CurrentSquare+SquareWidth <150 then
  457.                 CurrentSquareRound[7]=CurrentSquare+SquareWidth+1
  458.         else
  459.                 CurrentSquareRound[7]=-1
  460.         endif
  461. endSub

  462. sub MoveSelect
  463.         Draw()
  464.         if CurrentClick="U" then
  465.                 if CurrentSquare > SquareWidth-1  then
  466.                         CurrentSquare=CurrentSquare-SquareWidth
  467.                 else
  468.                         CurrentSquare=CurrentSquare+SquareTol-SquareWidth
  469.                 endif
  470.                
  471.         elseif CurrentClick="D" then
  472.                 if CurrentSquare < SquareTol-SquareWidth  then
  473.                         CurrentSquare=CurrentSquare+SquareWidth
  474.                 else
  475.                         CurrentSquare=CurrentSquare+SquareWidth-SquareTol
  476.                 endif
  477.        
  478.         elseif CurrentClick="L" then
  479.                 if Math.Remainder(CurrentSquare,SquareWidth)>0  then
  480.                         CurrentSquare=CurrentSquare-1
  481.                 else
  482.                         CurrentSquare=CurrentSquare+SquareWidth-1
  483.                 endif
  484.                
  485.         elseif CurrentClick="R" then
  486.                 if Math.Remainder(CurrentSquare,SquareWidth)<SquareWidth-1  then
  487.                         CurrentSquare=CurrentSquare+1
  488.                 else
  489.                         CurrentSquare=CurrentSquare+1-SquareWidth
  490.                 endif
  491.                
  492.         endif
  493. endsub
  494. sub Draw
  495.         if SquareShow[CurrentSquare]=-3 then
  496.                 DrawGray()
  497.         elseif SquareShow[CurrentSquare]=-2 then
  498.                 DrawFlag()
  499.         elseif SquareShow[CurrentSquare]=-1 then
  500.         elseif SquareShow[CurrentSquare]=0 then
  501.                 DrawWhite()
  502.         else
  503.                 DrawNum()
  504.         endif
  505. endsub
  506. sub Draw_f
  507.         if SquareShow[CurrentSquare]=-3 then
  508.                 DrawGray_f()
  509.         elseif SquareShow[CurrentSquare]=-2 then
  510.                 DrawFlag_f()
  511.         elseif SquareShow[CurrentSquare]=0 then
  512.                 DrawWhite_f()
  513.         else
  514.                 DrawNum_f()
  515.         endif
  516. endsub
  517. sub DrawGray
  518.         DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  519.         DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  520.         LCD.FillRect (0, DrawX, DrawY, 10, 10)
  521.         for i=0 to 8 step 2
  522.                 LCD.Line(1,DrawX+i, DrawY,DrawX+10-1, DrawY+10-i-1)
  523.                 LCD.Line(1,DrawX, DrawY+i,DrawX+10-i-1, DrawY+10-1)
  524.         endfor
  525. endsub
  526. sub DrawGray_f
  527.         DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  528.         DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  529.         LCD.FillRect (1, DrawX, DrawY, 10, 10)
  530.         'for i=0 to 10 step 2
  531.                 'LCD.Line(0,DrawX+i, DrawY,DrawX+10, DrawY+10-i)
  532.                 'LCD.Line(0,DrawX, DrawY+i,DrawX+10-i, DrawY+10)
  533.         'endfor
  534. endsub
  535. sub DrawNum
  536.         if SquareShow[CurrentSquare]<>-1 then
  537.                 DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  538.                 DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  539.                 LCD.FillRect (0, DrawX, DrawY, 10, 10)
  540.                 LCD.Text(1,DrawX+1, DrawY+1,1,Mines[CurrentSquare])
  541.         endif
  542. endsub
  543. sub DrawNum_f
  544.         if SquareShow[CurrentSquare]<>-1 then
  545.                 DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  546.                 DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  547.                 LCD.FillRect (1, DrawX, DrawY, 10, 10)
  548.                 LCD.Text(0,DrawX+1, DrawY+1,1,Mines[CurrentSquare])
  549.         endif
  550. endsub
  551. sub DrawFlag
  552.         DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  553.         DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  554.         LCD.FillRect (0, DrawX, DrawY, 10, 10)
  555.         LCD.Line(1,DrawX+3, DrawY,DrawX+3, DrawY+8)
  556.         LCD.Line(1,DrawX+4, DrawY+1,DrawX+4, DrawY+8)
  557.         LCD.Line(1,DrawX+5, DrawY+2,DrawX+5, DrawY+4)
  558.         LCD.Line(1,DrawX+6, DrawY+3,DrawX+6, DrawY+4)
  559.         LCD.Line(1,DrawX+7, DrawY+4,DrawX+7, DrawY+4)
  560.         LCD.Line(1,DrawX+3, DrawY,DrawX+8, DrawY+4)
  561.         LCD.Line(1,DrawX+1, DrawY+7,DrawX+7, DrawY+7)
  562.         LCD.Line(1,DrawX+1, DrawY+8,DrawX+7, DrawY+8)
  563. endsub
  564. sub DrawFlag_f
  565.         DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  566.         DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  567.         LCD.FillRect (1, DrawX, DrawY, 10, 10)
  568.         LCD.Line(0,DrawX+3, DrawY,DrawX+3, DrawY+8)
  569.         LCD.Line(0,DrawX+4, DrawY+1,DrawX+4, DrawY+8)
  570.         LCD.Line(0,DrawX+5, DrawY+2,DrawX+5, DrawY+4)
  571.         LCD.Line(0,DrawX+6, DrawY+3,DrawX+6, DrawY+4)
  572.         LCD.Line(0,DrawX+7, DrawY+4,DrawX+7, DrawY+4)
  573.         LCD.Line(0,DrawX+3, DrawY,DrawX+8, DrawY+4)
  574.         LCD.Line(0,DrawX+1, DrawY+7,DrawX+7, DrawY+7)
  575.         LCD.Line(0,DrawX+1, DrawY+8,DrawX+7, DrawY+8)
  576. endsub
  577. sub DrawWhite
  578.         DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  579.         DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  580.         LCD.FillRect (0, DrawX, DrawY, 10, 10)
  581. endsub
  582. sub DrawWhite_f
  583.         DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  584.         DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  585.         LCD.FillRect (1, DrawX, DrawY, 10, 10)
  586. endsub
  587. sub DrawMine
  588.         DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  589.         DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  590.         LCD.FillRect (0, DrawX, DrawY, 10, 10)
  591.         LCD.FillCircle (1, DrawX+4+1,DrawY+6, 3)
  592.         LCD.FillRect(1,DrawX+4+1,DrawY+1,2,5)
  593. endsub
  594. sub DrawMine_f
  595.         DrawX=Math.Remainder(CurrentSquare,SquareWidth)*12
  596.         DrawY=Math.Floor(CurrentSquare/ SquareWidth)*12+10
  597.         LCD.FillRect (1, DrawX, DrawY, 10, 10)
  598.         LCD.FillCircle (0, DrawX+4+1,DrawY+6, 3)
  599.         LCD.FillRect(0,DrawX+4+1,DrawY+1,2,5)
  600. endsub

  601. sub Open_1
  602.         SquareShow[CurrentSquare]=Mines[CurrentSquare]
  603.         Opened=Opened+1
  604.         Draw()
  605. endsub

  606. sub Open_0
  607.         '选中的是0,打开周围都是0的方格
  608.         CurrentSquare0=CurrentSquare
  609.         for i=0 to 150
  610.                 Select0[i]=0
  611.         endfor
  612.         Select0Head=0
  613.         Select0Tail=0
  614.        
  615.         Select0[Select0Head]=CurrentSquare
  616.         Select0Head=Select0Head+1
  617.         open_1()
  618.        
  619.         while Select0Head <> Select0Tail
  620.                 CurrentSquare=Select0[Select0Tail]
  621.                 GetCurrentSquareRound()
  622.                
  623.                 for i=0 to 7
  624.                         CurrentSquare=CurrentSquareRound[i]
  625.                         if Mines[CurrentSquare]=0 and SquareShow[CurrentSquare]=-3 then
  626.                                 Open_1()
  627.                                 Select0[Select0Head]=CurrentSquare
  628.                                 Select0Head=Select0Head+1
  629.                         elseif Mines[CurrentSquare] <> 0 and SquareShow[CurrentSquare]=-3 then
  630.                                 Open_1()
  631.                         endif
  632.                 endfor
  633.                 Select0Tail=Select0Tail+1
  634.         endwhile
  635.         CurrentSquare=CurrentSquare0
  636. Endsub

  637. sub Open_S
  638.         GetCurrentSquareRound()
  639.         MineFlag=0
  640.         for i =0 to 7
  641.                 if SquareShow[CurrentSquareRound[i]]=-2 then
  642.                         MineFlag=MineFlag+1
  643.                 endif
  644.         endfor
  645.        
  646.         if MineFlag= SquareShow[CurrentSquare] then
  647.                 CurrentSquareS=CurrentSquare
  648.                 for i =0 to 7
  649.                         if Squareshow[CurrentSquareRound[i]]=-3 then
  650.                                 CurrentSquare=CurrentSquareRound[i]
  651.                                 Squareshow[CurrentSquare]=Mines[CurrentSquare]
  652.                                 if Squareshow[CurrentSquare]=-1 then
  653.                                         GameOver=1
  654.                                 elseif Squareshow[CurrentSquare]=0 then
  655.                                         open_0()
  656.                                 else
  657.                                         open_1()
  658.                                 endif
  659.                         endif
  660.                 endfor
  661.                 CurrentSquare=CurrentSquareS
  662.         endif
  663. endsub
复制代码

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-22 19:02:49 | 显示全部楼层
火前留名
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-23 15:47:28 | 显示全部楼层
这个解压后用什么软件打开啊?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2016-8-23 16:43:25 | 显示全部楼层
wuchu 发表于 2016-8-23 15:47
这个解压后用什么软件打开啊?

注意:rbf文件只能在EV3的文件夹中才能被识别。因此下载的时候一定要下载到文件夹内。

步骤:
解压下载文件
打开EV3g软件
连接Ev3
随意下载一个程序(目的是为了产生一个文件夹,如果Ev3内已有存放此游戏的文件夹,可跳过此步)
点击程序块信息
打开内存浏览器
选择要存放的文件夹目录
点击下载
在对话框内选择此游戏文件
完成,可以在EV3中玩了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-23 17:12:37 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-27 10:27:24 | 显示全部楼层
这个真的是太牛了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-9-2 13:40:08 | 显示全部楼层
高手在民间啊
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-9-12 16:22:22 | 显示全部楼层
“” 发表于 2016-8-23 16:43
注意:rbf文件只能在EV3的文件夹中才能被识别。因此下载的时候一定要下载到文件夹内。

步骤:

谢谢啦,受教啦!!!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-12-14 15:20:16 | 显示全部楼层
谢谢
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-6-6 18:57:39 | 显示全部楼层
完全看不懂,膜拜
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2019-8-15 22:01:27 | 显示全部楼层
这个贴不错!!!!!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-3-29 13:51 , Processed in 0.093462 second(s), 25 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表