Minesweeper adalah game mini yang cukup menarik untuk dimainkan diwaktu senggang. Program yang untuk memenangkannya terkadang membutuhkan sedikit keberuntungan ini cukup terkenal dizaman Windows95. Meski kini sepertinya sudah jarang dimainkan, namun game ini tetap dipertahankan keberadaannya sehingga game ini tetap masuk dalam daftar game bawaan Windows 7.
XSweeper adalah Minesweeper’s Clone yang dibuat menggunakan kompiler open-source XBLite. Program ini sangat cocok untuk melatih keterampilan pemrograman. Meskipun aturan mainnya tidak persis seperti Minesweeper, namun algoritmanya tak jauh beda dengan Minesweeper.

Listing Program
' XSWEEPER.X
' Minesweeper's Clone
' Dibuat menggunakan kompiler open-source XBLite
' Chandra MDE
' Teknik Elektro Links - Link Tepat Untuk Teknik Elektro
' http://telinks.ds4a.com
' http://telinks.wordpress.com
' http://starduino.wordpress.com
' http://code4shared.wordpress.com
PROGRAM "xsweeper"
CONSOLE
IMPORT "xio"
IMPORT "xsx"
IMPORT "xst"
IMPORT "kernel32"
$$BOMB = -1
$$EMPTY = 0
DECLARE FUNCTION MainProgram()
DECLARE FUNCTION PutTextAttributes (hStdOut, attribute, length, x, y)
FUNCTION MainProgram()
SBYTE Cell[16, 12]
UBYTE CellStatus[16, 12]
COORD coord
Title$ = "X-SWEEPER - By Chandra MDE"
DIM B$[25]
B$[0] = "ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
B$[1] = "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ÕÍÍÍÍÍÍÍÍÍÍÍ͸³"
B$[2] = "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅ´ XSWEEPER ô"
B$[3] = "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ÔÍÍÍÍÍÍÍÍÍÍÍ;³"
B$[4] = "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ ³"
B$[5] = "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ÕÍÍÍÍÍÍÍÍÍÍÍ͸³"
B$[6] = "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅ´ By ô"
B$[7] = "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³³ ChandraMDE ³³"
B$[8] = "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅ´ XBLite-Pro ô"
B$[9] = "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ÔÍÍÍÍÍÍÍÍÍÍÍ;³"
B$[10]= "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ ³"
B$[11]= "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ÕÍÍÍÍÍÍÍÍÍÍÍ͸³"
B$[12]= "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅ´ STATUS ô"
B$[13]= "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ÆÍÍÍÍÍÍÍÍÍÍÍ͵³"
B$[14]= "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´³ XMine [ ] ³³"
B$[15]= "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³³ Found [ ] ³³"
B$[16]= "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´³ Left [ ] ³³"
B$[17]= "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³³ Skor[ ] ³³"
B$[18]= "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÅÄÄÄÄÄÄÄÄÄÄÄÄÅ´"
B$[19]= "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³³ ÛÛÛÛÛÛÛÛÛÛ ³³"
B$[20]= "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ³"
B$[21]= "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ VISIT MYBLOG ³"
B$[22]= "ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ /telinks ³"
B$[23]= "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ @WordPress ³"
B$[24]= "ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
'*****************************
'Subrutin Inisialisasi Program
'*****************************
SUB InitProgram
DIM args[3]
hSO = XioGetStdOut()
XioSetCursorType(hSO, $$NOCURSOR)
SetConsoleTitleA(&Title$)
XioClearConsole(hSO)
XioSetConsoleBufferSize(hSO, 80, 25)
args[0] = hSO
args[1] = 1
args[2] = &coord
XstCall("SetConsoleDisplayMode", "kernel32.dll", @args[])
FOR i = 0 TO 24
XioPutConsoleText(hSO, B$[i], 0, i)
NEXT
FillConsoleOutputAttribute (hSO, 0x0F, 0xFFFFFF, 0, &written)
FOR x = 66 TO 77
PutTextAttributes(hSO, 14, 1, x, 2)
PutTextAttributes(hSO, 14, 1, x, 6)
PutTextAttributes(hSO, 10, 1, x, 7)
PutTextAttributes(hSO, 12, 1, x, 8)
PutTextAttributes(hSO, 14, 1, x, 12)
PutTextAttributes(hSO, 13, 1, x, 14)
PutTextAttributes(hSO, 9, 1, x, 15)
PutTextAttributes(hSO, 12, 1, x, 16)
PutTextAttributes(hSO, 11, 1, x, 17)
PutTextAttributes(hSO, 13, 1, x, 21)
PutTextAttributes(hSO, 14, 1, x, 22)
PutTextAttributes(hSO, 10, 1, x, 23)
NEXT
END SUB
SUB ExitProgram
'DO : LOOP UNTIL XioInkey() = 27
XioCloseStdHandle(hSO)
END SUB
'Subrutin Inisialisasi Cell
SUB InitCell
FOR x = 0 TO 15
FOR y = 0 TO 11
Cell[x, y] = 0
CellStatus[x, y] = 0
NEXT
NEXT
JumlahRanjau = XstRandomRange(5, 45)
FOR i = 1 TO JumlahRanjau
x = XstRandomRange(0, 15)
y = XstRandomRange(0, 11)
Cell[x, y] = -1
NEXT
Skor = 0
Ketemu = 0
Sisa = JumlahRanjau
FOR x = 0 TO 15
FOR y = 0 TO 11
IF Cell[x, y] = -1 THEN DO NEXT
nb = 0
xp = x + 1
xm = x - 1
yp = y + 1
ym = y - 1
IF xp=0 THEN
IF Cell[xm, y] = -1 THEN INC nb
END IF
IF yp=0 THEN
IF Cell[x, ym] = -1 THEN INC nb
END IF
IF (xp=0) THEN
IF Cell[xp, ym] = -1 THEN INC nb
END IF
IF (xm>=0) AND (yp=0) AND (ym>=0) THEN
IF Cell[xm, ym] = -1 THEN INC nb
END IF
Cell[x, y] = nb
NEXT
NEXT
END SUB
'*******************************
'Subrutin Print Status Permainan
'*******************************
SUB PrintStatus
XioSetTextColor(hSO, 14)
XioSetConsoleCursorPos(hSO, 74, 14)
XioWriteConsole(hSO, FORMAT$ ("##", JumlahRanjau))
XioSetConsoleCursorPos(hSO, 74, 15)
XioWriteConsole(hSO, FORMAT$ ("##", Ketemu))
XioSetConsoleCursorPos(hSO, 74, 16)
XioWriteConsole(hSO, FORMAT$ ("##", Sisa))
XioSetConsoleCursorPos(hSO, 72, 17)
XioWriteConsole(hSO, FORMAT$ ("####", Skor))
END SUB
'*********************************
'Subrutin tampilkan isi semua Cell
'*********************************
SUB PrintCell
FOR x = 0 TO 15
FOR y = 0 TO 11
XioSetConsoleCursorPos(hSO, 2+x*4, 1+2*y)
SELECT CASE Cell[x, y]
CASE -1
XioSetTextColor(hSO, 12)
XioWriteConsole(hSO, CHR$ (1))
CASE 0
XioSetTextColor(hSO, 7)
XioWriteConsole(hSO, CHR$ (249))
CASE ELSE
XioSetTextColor(hSO, 8+Cell[x, y])
XioWriteConsole(hSO, FORMAT$ ("#", Cell[x, y]))
END SELECT
NEXT
NEXT
END SUB
'**********************************
'Subrutin tampilkan board permainan
'**********************************
SUB PrintClosedCell
XioSetTextColor(hSO, 4)
XioSetTextBackColor(hSO, 0)
FOR x = 0 TO 15
FOR y = 0 TO 11
XioSetConsoleCursorPos(hSO, 4*x+2, 2*y+1)
XioWriteConsole(hSO, CHR$ (254))
NEXT
NEXT
END SUB
'****************************
'Subrutin Playing the game...
'****************************
SUB Playing
px = 7
py = 5
DO
GOSUB PrintStatus
'*****************************************************************
'Pointer Cell yang berkedip-kedip sambil menunggu penekanan tombol
'*****************************************************************
DO
PutTextAttributes(hSO, 0x4, 1, 4*px+1, 2*py)
PutTextAttributes(hSO, 0x4, 1, 4*px+2, 2*py)
PutTextAttributes(hSO, 0x4, 1, 4*px+3, 2*py)
PutTextAttributes(hSO, 0x4, 1, 4*px+1, 2*py+2)
PutTextAttributes(hSO, 0x4, 1, 4*px+2, 2*py+2)
PutTextAttributes(hSO, 0x4, 1, 4*px+3, 2*py+2)
PutTextAttributes(hSO, 0x4, 1, 4*px, 2*py+1)
PutTextAttributes(hSO, 0x4, 1, 4*px+4, 2*py+1)
IF CellStatus[px, py] = 0 THEN
XioSetTextColor(hSO, 14)
XioSetConsoleCursorPos(hSO, 4*px+2, 2*py+1)
XioWriteConsole(hSO, "\\")
Sleep(5)
XioSetConsoleCursorPos(hSO, 4*px+2, 2*py+1)
XioWriteConsole(hSO, CHR$ (196))
Sleep(5)
XioSetConsoleCursorPos(hSO, 4*px+2, 2*py+1)
XioWriteConsole(hSO, "/")
ELSE
Sleep(5)
END IF
PutTextAttributes(hSO, 15, 1, 4*px+1, 2*py)
PutTextAttributes(hSO, 15, 1, 4*px+2, 2*py)
PutTextAttributes(hSO, 15, 1, 4*px+3, 2*py)
PutTextAttributes(hSO, 15, 1, 4*px+1, 2*py+2)
PutTextAttributes(hSO, 15, 1, 4*px+2, 2*py+2)
PutTextAttributes(hSO, 15, 1, 4*px+3, 2*py+2)
PutTextAttributes(hSO, 15, 1, 4*px, 2*py+1)
PutTextAttributes(hSO, 15, 1, 4*px+4, 2*py+1)
Sleep(5)
KEY = XioInkey()
LOOP UNTIL KEY <> 0
IF CellStatus[px, py] = 0 THEN
XioSetTextColor(hSO, 4)
XioSetConsoleCursorPos(hSO, 4*px+2, 2*py+1)
XioWriteConsole(hSO, CHR$ (254))
END IF
'Seleksi tombol yang ditekan
SELECT CASE KEY
CASE -72 'atas
Beep(400, 5)
DEC py
IF py = -1 THEN py = 11
CASE -80 'bawah
Beep(200, 5)
INC py
IF py = 12 THEN py = 0
CASE -77 'kanan
Beep(300, 5)
INC px
IF px = 16 THEN px = 0
CASE -75 'kiri
Beep(300, 5)
DEC px
IF px = -1 THEN px = 15
CASE 32
XioSetConsoleCursorPos(hSO, 4*px+2, 1+2*py)
SELECT CASE Cell[px, py]
CASE -1 'bomb
FOR x = 66 TO 77
PutTextAttributes(hSO, 10, 1, x, 19)
NEXT
GOSUB PrintCell
DO
'Beep(300, 100)
'Beep(1000, 100)
LOOP WHILE XioInkey() = 0
GOSUB InitCell
GOSUB PrintClosedCell
FOR x = 66 TO 77
PutTextAttributes(hSO, 15, 1, x, 19)
NEXT
CASE 0 'empty cell
FOR x = 66 TO 77
PutTextAttributes(hSO, 10, 1, x, 19)
NEXT
XioSetTextColor(hSO, 14)
XioWriteConsole(hSO, CHR$ (249))
CellStatus[px, py] = 1
'FOR i = 1000 TO 1500 STEP 50
' Beep(i, 1)
'NEXT
'FOR i = 1000 TO 1500 STEP 30
' Beep(i, 1)
'NEXT
'FOR i = 1500 TO 1250 STEP -50
' Beep(i, 1)
'NEXT
FOR x = 66 TO 77
PutTextAttributes(hSO, 15, 1, x, 19)
NEXT
pxe = px : pye = py
DO
INC pxe
IF pxe 15
pxe = px
DO
INC pye
IF pye 11
pye = py
DO
DEC pxe
IF pxe>=0 THEN
IF Cell[pxe, pye] = 0 THEN
XioSetTextColor(hSO, 14)
XioSetConsoleCursorPos(hSO, 4*pxe+2, 1+2*pye)
XioWriteConsole(hSO, CHR$ (249))
CellStatus[pxe, pye] = 1
Beep(400, 5)
Sleep(100)
ELSE
EXIT DO
END IF
END IF
LOOP UNTIL pxe < 0 pxe = px DO DEC pye IF pye>=0 THEN
IF Cell[pxe, pye] = 0 THEN
XioSetTextColor(hSO, 14)
XioSetConsoleCursorPos(hSO, 4*pxe+2, 1+2*pye)
XioWriteConsole(hSO, CHR$ (249))
CellStatus[pxe, pye] = 1
Beep(400, 5)
Sleep(100)
ELSE
EXIT DO
END IF
END IF
LOOP UNTIL pye < 0
CASE ELSE 'number
FOR x = 66 TO 77
PutTextAttributes(hSO, 10, 1, x, 19)
NEXT
XioSetTextColor(hSO, 8+Cell[px, py])
XioWriteConsole(hSO, FORMAT$ ("#", Cell[px, py]))
CellStatus[px, py] = 1
Skor = Skor + 10*Cell[px, py]
'FOR i = 1000 TO 1500 STEP 50
' Beep(i, 1)
'NEXT
'FOR i = 1000 TO 1500 STEP 30
' Beep(i, 1)
'NEXT
'FOR i = 1500 TO 1250 STEP -50
' Beep(i, 1)
'NEXT
FOR x = 66 TO 77
PutTextAttributes(hSO, 15, 1, x, 19)
NEXT
END SELECT
CASE 13
IF Cell[px, py] = -1 THEN
FOR x = 66 TO 77
PutTextAttributes(hSO, 10, 1, x, 19)
NEXT
XioSetTextColor(hSO, 12)
XioSetConsoleCursorPos(hSO, 4*px+2, 1+2*py)
XioWriteConsole(hSO, CHR$ (1))
CellStatus[px, py] = 1
Skor = Skor + 25
'FOR i = 1000 TO 1500 STEP 50
' Beep(i, 1)
'NEXT
'FOR i = 1000 TO 1500 STEP 30
' Beep(i, 1)
'NEXT
'FOR i = 1500 TO 1250 STEP -50
' Beep(i, 1)
'NEXT
FOR x = 66 TO 77
PutTextAttributes(hSO, 15, 1, x, 19)
NEXT
ELSE
FOR x = 66 TO 77
PutTextAttributes(hSO, 10, 1, x, 19)
NEXT
GOSUB PrintCell
DO
'Beep(300, 100)
'Beep(1000, 100)
LOOP WHILE XioInkey() = 0
GOSUB InitCell
GOSUB PrintClosedCell
FOR x = 66 TO 77
PutTextAttributes(hSO, 15, 1, x, 19)
NEXT
END IF
END SELECT
LOOP UNTIL KEY = 27
END SUB
'Program mulai dari sini...
'**************************
GOSUB InitProgram
GOSUB InitCell
GOSUB PrintClosedCell
GOSUB Playing
GOSUB ExitProgram
END FUNCTION
'**********************************************************************
'Fungsi PutTextAttributes sebagai pengganti XioPutConsoleTextAttributes
'**********************************************************************
FUNCTION PutTextAttributes (hStdOut, attribute, length, x, y)
writeCoord = MAKELONG (x, y)
IFZ WriteConsoleOutputAttribute (hStdOut, &attribute, length, writeCoord, &attrsWritten) THEN GOSUB Error
' ***** Error *****
SUB Error
errno = GetLastError ()
XstSystemErrorToError (errno, @error)
lastErr = ERROR (error)
RETURN ($$TRUE)
END SUB
END FUNCTION
END PROGRAM