Top

Minesweeper


mIRC Code
+ 5 likes
Please Register to submit score.
Bookmark and Share
Average Score  8.3 (of 3 scores)
Date Added  Jul 26, 2009
Last Updated  Jul 26, 2009
Tags  firstmate  game  mines  minesweeper  windows 

Introduction

It's minesweeper. Pretty simple, I'm sure we've all played it.
Has nearly every feature as the windows one.
Right click, flag

Crappy graphics though

To start:
/mines [# of mines] [s | m | l]
s(small), m(medium), large(large)

Grab the Code

alias mines {
  set %m.mines $iif($1 < 40,$1,15)
  set %m.size $iif($istok(s m l,$2,32),$2,m)
  set %m.time 0
  set %m.gameOn 1
  window -pdCk0 @mines 1 1 $replace(%m.size,s,155,m,260,l,470) $replace(%m.size,s,220,m,320,l,320)
  drawfill -r @mines $rgb(255,255,255) $rgb(255,255,255) 1 1
  .timermtime 0 1 m.time
  if ($hget(mines)) { hfree mines }
  hadd -m mines mines %m.mines
  hadd -m mines size %m.size
  m.drawMap
  m.makeMines
}
menu @mines {
  uclick: {
    ;Show mine
    if ($getdot(@mines,$mouse.x,$mouse.y) == 8421504 && %m.gameOn == 1) {
      var %xy = $m.getCoord($mouse.x,$mouse.y)
      tokenize 32 %xy
      ;Check if cell is flagged.
      if (!$hget(mines,$+(flag.,$1,.,$2))) {
        if ($hget(mines,$+(cell.,$1,.,$2)) == m) { m.gameOver }
        else if ($hget(mines,$+(cell.,$1,.,$2)) == 0) { 
          drawrect -fr @mines $rgb(192,192,192) 1 $calc(6+(($1 -1)*15)) $calc(46+(($2 -1)*15)) 14 14
          ;Show nearby clear ones?
        }
        else {
          if ($hget(mines,$+(cell.,$1,.,$2))) { drawtext -r @mines $rgb(0,0,0) Tahoma 12 $calc(9+ (($1 -1) *15)) $calc(45+ (($2 -1) *15)) $hget(mines,$+(cell.,$1,.,$2)) }
          hdel mines $+(cell.,$1,.,$2) 
        }
      }
    }
    if ($inellipse($mouse.x,$mouse.y,$calc(($window(@mines).w /2) -20),5,25,25)) {
      ;new Game
      window -c @mines
      mines $hget(mines,mines) $hget(mines,size)
    }
  }
  rclick: {
    ;Show flag/question mark/none
    if ($getdot(@mines,$mouse.x,$mouse.y) == 8421504 || $getdot(@mines,$mouse.x,$mouse.y) == 255 && %m.gameOn == 1) {
      var %xy = $m.getCoord($mouse.x,$mouse.y)
      tokenize 32 %xy
      ;Flag is there already
      if ($hget(mines,$+(flag.,$1,.,$2)) && $istok(0 1 2 3 4 5 6 m,$hget(mines,$+(cell.,$1,.,$2)),32)) {
        hdel mines $+(flag.,$1,.,$2)
        drawfill -r @mines $rgb(128,128,128) $rgb(0,0,0) $calc((($1 -1) * 15) + 9) $calc((($2 -1) * 15) + 49)
        drawline -r @mines $rgb(255,255,255) 1 $calc(6+(($1 -1)*15)) $calc(46+(($2 -1)*15)) $calc(19+(($1 -1)*15)) $calc(46+(($2 -1)*15))
        drawline -r @mines $rgb(255,255,255) 1 $calc(6+(($1 -1)*15)) $calc(46+(($2 -1)*15)) $calc(6+(($1 -1)*15)) $calc(59+(($2 -1)*15))
 
        inc %m.mines
        drawrect -rf @mines $rgb(0,0,0) 1 5 5 40 25
        drawtext -r @mines $rgb(142,0,0) Tahoma 18 6 6 %m.mines
      }
      ;Add flag
      else {
        hadd mines $+(flag.,$1,.,$2) 1
        drawrect -fer @mines $rgb(255,0,0) 1 $calc(10+(($1 -1)*15)) $calc(50+(($2 -1)*15)) 5 5
 
        dec %m.mines
        drawrect -rf @mines $rgb(0,0,0) 1 5 5 40 25
        drawtext -r @mines $rgb(142,0,0) Tahoma 18 6 6 %m.mines
      }
    }
  }
}
alias m.time {
  inc %m.time
  if (%m.time == 1000) {
    ;game over
    .timermtime off
  }
  else {
    drawrect -rf @mines $rgb(0,0,0) 1 $calc($window(@mines).w - 55) 5 40 25
    drawtext -r @mines $rgb(142,0,0) Tahoma 18 $calc($window(@mines).w - 50) 6 %m.time
  }
}
alias m.drawMap {
  ;draw top
  ;Flags left
  drawrect -rf @mines $rgb(0,0,0) 1 5 5 40 25
  drawtext -r @mines $rgb(142,0,0) Tahoma 18 6 6 %m.mines
  ;Time
  drawrect -rf @mines $rgb(0,0,0) 1 $calc($window(@mines).w - 55) 5 40 25
  ;New Game
  drawrect -ref @mines $rgb(255,255,0) 1 $calc(($window(@mines).w /2) -20) 5 25 25
  drawrect -ref @mines $rgb(0,0,0) 1 $calc(($window(@mines).w /2) -15) 12 5 5
  drawrect -ref @mines $rgb(0,0,0) 1 $calc(($window(@mines).w /2) -5) 12 5 5
  drawrect -re @mines $rgb(0,0,0) 1 $calc(($window(@mines).w /2) -10) 20 5 5
 
  drawline -r @mines $rgb(0,0,0) 1 0 35 $window(@mines).w 35
 
  var %x 5, %y 45, %w $replace(%m.size,s,9,m,16,l,30), %h $replace(%m.size,s,9,m,16,l,16)
  var %i 1
  while (%i <= %w) {
    var %j 1
    while (%j <= %h) {
      ;draw cells
      drawrect -r @mines $rgb(0,0,0) 1 $calc(((%i -1) * 15) + %x) $calc(((%j -1) * 15) + %y) 15 15
      drawfill -r @mines $rgb(128,128,128) $rgb(0,0,0) $calc(((%i -1) * 15) + %x + 1) $calc(((%j -1) * 15) + %y + 1)
      drawline -r @mines $rgb(255,255,255) 1 $calc(6+((%i -1)*15)) $calc(46+((%j -1)*15)) $calc(19+((%i -1)*15)) $calc(46+((%j -1)*15))
      drawline -r @mines $rgb(255,255,255) 1 $calc(6+((%i -1)*15)) $calc(46+((%j -1)*15)) $calc(6+((%i -1)*15)) $calc(59+((%j -1)*15))
      hadd -m mines $+(cell.,%i,.,%j) 0
      hadd -m mines cells $hget(mines,cells) $+(%i,.,%j)
      inc %j
    }
    inc %i
  }
}
alias m.makeMines {
  var %zyx %m.mines
  while (%m.mines > 0) {
    var %xy = $m.getRandMineCoord
    tokenize 32 %xy 
    hadd mines $+(cell.,$1,.,$2) m
    var %z $hget(mines,cells)
    hdel mines cells
    hadd mines cells $remove(%z,$+($1,.,$2))
 
    ;increment surrounding mines
    ;(-1,-1) (0,-1) (+1,-1)
    ;(-1,0) (x,y) (+1,0)
    ;(-1,+1) (0,+1) (+1,+1) 
    if ($hget(mines,$+(cell.,$calc($1 -1),.,$calc($2 -1))) != m) { hinc mines $+(cell.,$calc($1 -1),.,$calc($2 -1)) }
    if ($hget(mines,$+(cell.,$1,.,$calc($2 -1))) != m) { hinc mines $+(cell.,$1,.,$calc($2 -1)) }
    if ($hget(mines,$+(cell.,$calc($1 +1),.,$calc($2 -1))) != m) { hinc mines $+(cell.,$calc($1 +1),.,$calc($2 -1)) }
 
    if ($hget(mines,$+(cell.,$calc($1 +1),.,$2)) != m) { hinc mines $+(cell.,$calc($1 +1),.,$2) }
 
    if ($hget(mines,$+(cell.,$calc($1 +1),.,$calc($2 +1))) != m) { hinc mines $+(cell.,$calc($1 +1),.,$calc($2 +1)) }
    if ($hget(mines,$+(cell.,$1,.,$calc($2 +1))) != m) { hinc mines $+(cell.,$1,.,$calc($2 +1)) }
    if ($hget(mines,$+(cell.,$calc($1 -1),.,$calc($2 +1))) != m) { hinc mines $+(cell.,$calc($1 -1),.,$calc($2 +1)) }
 
    if ($hget(mines,$+(cell.,$calc($1 -1),.,$2)) != m) { hinc mines $+(cell.,$calc($1 -1),.,$2) }
    dec %m.mines
  }
  set %m.mines %zyx
}
alias m.getRandMineCoord {
  var %x $hget(mines,cells)
  return $replace($gettok(%x,$r(1,$numtok(%x,32)),32),$chr(46),$chr(32))
}
alias m.getCoord {
  return $ceil($calc(($1 -5) /15)) $ceil($calc(($2 -45) /15))
}
alias m.gameOver {
  set %m.gameOn 0
  .timermtime off
  ;show Mines
  var %x $hfind(mines,cell.*,0,w), %p
  while (%x > 0) {
    %p = $hfind(mines,cell.*,%x,w)
    if ($hget(mines,%p) == m) { 
      tokenize 32 $gettok(%p,2,46) $gettok(%p,3,46)
      drawrect -fer @mines $rgb(0,0,0) 1 $calc(10+(($1 -1)*15)) $calc(50+(($2 -1)*15)) 5 5
    }
    dec %x
  }
  drawrect -ref @mines $rgb(255,255,0) 1 $calc(($window(@mines).w /2) -20) 5 25 25
  drawrect -ref @mines $rgb(0,0,0) 1 $calc(($window(@mines).w /2) -15) 12 5 5
  drawrect -ref @mines $rgb(0,0,0) 1 $calc(($window(@mines).w /2) -5) 12 5 5
  drawline -r @mines $rgb(0,0,0) 1 $calc(($window(@mines).w /2) -15) 23 $calc(($window(@mines).w /2)) 23
}
on 1:CLOSE:@mines: {
  unset %m.*
  .timermtime off
}
 

Comments

  (11)  RSS
knoeki
Comments: 120
 
mIRC Snippet:  Minesweeper
Posted on Jul 26, 2009 2:13 pm
wow, awesome! nice job. :_)
FordLawnmower
Comments: 411
 
mIRC Snippet:  Minesweeper
Posted on Jul 26, 2009 5:13 pm
Cool script Firstmate :)
_Daniel_
Comments: 42
 
mIRC Snippet:  Minesweeper
Posted on Jul 26, 2009 9:07 pm
awesome!
blitzz
Comments: 122
 
mIRC Snippet:  Minesweeper
Posted on Jul 27, 2009 12:17 am
Wow..:)
Ayon
Comments: 21
 
mIRC Snippet:  Minesweeper
Posted on Jul 27, 2009 1:51 am
i take my hat off for this one Firstmate!
The_Almighty_Duelist
Comments: 84
 
mIRC Snippet:  Minesweeper
Posted on Jul 27, 2009 11:59 am
awsome script, but i can't right-click for some reason :(
and when i click on an empty spot, it doesn't open up all other empty spots beside it.

other than that, amazing! ^_^
Firstmate
Comments: 119
 
mIRC Snippet:  Minesweeper
Posted on Jul 27, 2009 7:29 pm
The_Almight_Duelist, I am working on the second thing, it's kinda weird.

Are there any errors when right-clicking.
mountaindew
Comments: 1,826
 
mIRC Snippet:  Minesweeper
Posted on Jul 27, 2009 8:51 pm
Nice job, I'm nasty at minesweeper :)

I just wish that the numbered tiles were indented in like the blank spaces, because they kind of blend in with the unclicked blocks.

Edit: I did /mines 20 m and looks like it's a little buggy



(There's some dots above the board and where I lost, the numbers were wrong.)
Firstmate
Comments: 119
 
mIRC Snippet:  Minesweeper
Posted on Jul 27, 2009 10:57 pm
mhm, Yeah I fixed that just recently (updated code)

I'll also take your suggestion in about indenting the blocks.
I included a feature to show empty blocks. I still am going to add the part to show the cells on the border.
eyiezinc
Comments: 38
 
mIRC Snippet:  Minesweeper
Posted on Jul 28, 2009 11:21 am
awesome! good Firstmate 9/10
asakura
Comments: 66
 
mIRC Snippet:  Minesweeper
Posted on Aug 2, 2009 5:04 pm
i always wanted to make a mine sweeper just dint know how ): but very nice! :D 9/10

Commenting Options

Register or Login to Hawkee.com or use your Facebook or Twitter account by clicking the corresponding button below.

  
Bottom