MineSweeper

Here is a little minesweeper game that I have made.
Main:

function setup()
    supportedOrientations(LANDSCAPE_ANY)
    setupGame()
    parameter.boolean("flag")
    parameter.watch("hiddenSquares")
    parameter.watch("numberOfMines")
    parameter.action("reset", function() setupGame() end)
end
function draw()
    if gameOver == false then
        if gameWon == false then
            if hiddenSquares == numberOfMines then
                gameWon = true
            end  
            for i = 1, 5 do
                flood()
            end
            drawSquares()
            fill(0, 0, 0, 255)
            drawSquares()
            font("ArialRoundedMTBold")
            fontSize(100)
            text("You Win!", WIDTH/2, HEIGHT/2)
        end
    else  
        fill(0, 0, 0, 255)
        drawSquares()
        font("ArialRoundedMTBold")
        fontSize(100)
        text("Game Over!", WIDTH/2, HEIGHT/2)
    end
end
function drawSquares()
    background(0, 0, 0, 255)
    for i = 1, rows do
        for ii = 1, cols do
            pushStyle()
            stroke(62, 62, 62, 255)
            strokeWidth(2)
            squarePos.x = i * squareSize + squareSize / 2
            squarePos.y = ii * squareSize + squareSize / 2
            spriteMode(CENTER)
            if squares[i][ii].revealed == false then               
                fill(100, 100, 100, 255)
                rectMode(CORNER)
                spriteMode(CENTER)
sprite("Platformer Art:Crate", i*squareSize-squareSize/2, ii*squareSize-squareSize/2, squareSize, squareSize)
                if squares[i][ii].flag == true then
                    spriteMode(CENTER)
sprite("Small World:Flag",squarePos.x - squareSize, squarePos.y - squareSize, squareSize / 1.32258, squareSize)
                end
            else
                fill(140, 140, 140, 255)
                rectMode(CORNER)
                pushStyle()
                tint(127, 127, 127, 255)                
sprite("Platformer Art:Crate", i*squareSize -squareSize/2, ii*squareSize-squareSize/2, squareSize, squareSize)
                popStyle()
                if squares[i][ii].contents == 1 then                    
                    gameOver = true
                    mineTimer = mineTimer + 1
                    if mineTimer < 10 then
sprite("Tyrian Remastered:Mine Spiked Huge",squarePos.x - squareSize, squarePos.y - squareSize, squareSize, squareSize)
                    else
sprite("Tyrian Remastered:Explosion Huge",squarePos.x - squareSize, squarePos.y - squareSize,     squareSize, squareSize)                  
                    end                
                else
                    if squares[i][ii].minesTouching > 0 then
                        textMode(CENTER)
                        font("ArialRoundedMTBold")
                        fontSize(squareSize)
                        fill(255, 0, 0, 255)
            text(squares[i][ii].minesTouching, squarePos.x - squareSize, squarePos.y  - squareSize)
                    end
                end
            end        
            popStyle()
        end
    end
end
function setupGrid()
    for x = 1, rows do
        squares[x] = {}
        for y = 1, cols do
            squares[x][y] = Square(0)
        end
    end   
    while m < numberOfMines do
        mx = math.random(1, rows)
        my = math.random(1, cols)
        if squares[mx][my].contents == 0 then
            squares[mx][my].contents = 1
            m = m + 1
        end
    end
end
function touched(touch)
    if gameWon == false and gameOver == false then
        if touch.state == ENDED then
            squareTouched = vec2(0,0)
            if touch.x < squareSize * (rows + 1) then
                for i = 1, rows do
                    if touch.x > i * squareSize - squareSize then
                        squareTouched.x = squareTouched.x + 1
                    end
                end
            end
            if touch.y < squareSize * (cols + 1) then
                for i = 1, cols do
                    if touch.y > i * squareSize - squareSize then
                        squareTouched.y = squareTouched.y + 1
                    end
                end
            end
            if squareTouched.x == 0 or squareTouched.y == 0 then
            else
                if flag == false then
                    if squares[squareTouched.x][squareTouched.y].revealed == false then
                        if squares[squareTouched.x][squareTouched.y].flag == false then
                            squares[squareTouched.x][squareTouched.y].revealed = true
                            hiddenSquares = hiddenSquares - 1
                        end
                    end
                else
                    if squares[squareTouched.x][squareTouched.y].flag == false then
                       squares[squareTouched.x][squareTouched.y].flag = true
                    else
                        squares[squareTouched.x][squareTouched.y].flag = false
                    end
                end
            end
        end
    end
end
function checkForAdjacentMines()
    for i = 1, rows do
        for ii = 1, cols do
            if squares[i][ii].contents == 0 then
                if i>1 then
                    if squares[i-1][ii].contents == 1 then --left
                        squares[i][ii].minesTouching = squares[i][ii].minesTouching + 1
                    end
                end
                if i>1 and ii>1 then
                    if squares[i-1][ii-1].contents == 1 then --bottom left
                        squares[i][ii].minesTouching = squares[i][ii].minesTouching + 1
                    end
                end
                
                if ii>1 then
                    if squares[i][ii-1].contents == 1 then --bottom
                        squares[i][ii].minesTouching = squares[i][ii].minesTouching + 1
                    end
                end
                if i<rows and ii>1 then
                    if squares[i+1][ii-1].contents == 1 then --bottom right
                        squares[i][ii].minesTouching = squares[i][ii].minesTouching + 1
                    end
                end
                if i<rows then
                    if squares[i+1][ii].contents == 1 then --right
                        squares[i][ii].minesTouching = squares[i][ii].minesTouching + 1
                    end
                end
                if i<rows and ii<cols then
                    if squares[i+1][ii+1].contents == 1 then --top right
                        squares[i][ii].minesTouching = squares[i][ii].minesTouching + 1
                    end
                end
                if ii<cols then
                    if squares[i][ii+1].contents == 1 then --top
                        squares[i][ii].minesTouching = squares[i][ii].minesTouching + 1
                    end
                end
                if i>1 and ii<cols then
                    if squares[i-1][ii+1].contents == 1 then --top left
                        squares[i][ii].minesTouching = squares[i][ii].minesTouching + 1
                    end
                end
            end
        end
    end
end

Here is the rest of Main:

function flood()
    for i = 1, rows do
        for ii = 1, cols do
            if squares[i][ii].revealed == true and squares[i][ii].contents == 0 then 
                if squares[i][ii].minesTouching == 0 then
                    if i>1 then
                        if squares[i-1][ii].contents == 0 then --left
                            if squares[i-1][ii].revealed == false then
                                squares[i-1][ii].revealed = true
                                hiddenSquares = hiddenSquares - 1
                            end
                        end
                    end
                    if i>1 and ii>1 then
                        if squares[i-1][ii-1].contents == 0 then --bottom left
                            if squares[i-1][ii-1].revealed == false then
                                squares[i-1][ii-1].revealed = true
                                hiddenSquares = hiddenSquares - 1
                            end
                        end
                    end
                    
                    if ii>1 then
                        if squares[i][ii-1].contents == 0 then --bottom
                            if squares[i][ii-1].revealed == false then
                                squares[i][ii-1].revealed = true
                                hiddenSquares = hiddenSquares - 1
                            end
                        end
                    end
                    if i<rows and ii>1 then
                        if squares[i+1][ii-1].contents == 0 then --bottom right
                            if squares[i+1][ii-1].revealed == false then
                                squares[i+1][ii-1].revealed = true
                                hiddenSquares = hiddenSquares - 1
                            end
                        end
                    end
                    if i<rows then
                        if squares[i+1][ii].contents == 0 then --right
                            if squares[i+1][ii].revealed == false then
                                squares[i+1][ii].revealed = true
                                hiddenSquares = hiddenSquares - 1
                            end
                        end
                    end
                    if i<rows and ii<cols then
                        if squares[i+1][ii+1].contents == 0 then --top right
                            if squares[i+1][ii+1].revealed == false then
                                squares[i+1][ii+1].revealed = true
                                hiddenSquares = hiddenSquares - 1
                            end
                        end
                    end
                    if ii<cols then
                        if squares[i][ii+1].contents == 0 then --top
                            
                                if squares[i][ii+1].revealed == false then
                                    squares[i][ii+1].revealed = true
                                    hiddenSquares = hiddenSquares - 1
                                end
                            
                        end
                    end
                    if i>1 and ii<cols then
                        if squares[i-1][ii+1].contents == 0 then --top left
                            if squares[i-1][ii+1].revealed == false then
                                squares[i-1][ii+1].revealed = true
                                hiddenSquares = hiddenSquares - 1
                            end
                        end
                    end
                    
                end
            end
        end
    end
end

function setupGame()
    flag = false
    gameOver = false
    gameWon = false
    rows = 10
    cols = rows
    hiddenSquares = rows * cols
    m = 0
    mx = 0
    my = 0
    squareTouched = vec2(0,0)
    squareSize = WIDTH / rows
    squares = {}
    numberOfMines = 10
    squarePos = vec2(0,0)
    setupGrid()
    checkForAdjacentMines()
    mineTimer = 0
end

And here is the Square class

Square = class()

function Square:init(c) 
    self.contents = c -- 0=empty 1=mine
    self.flag = false
    self.revealed = false
    self.minesTouching = 0
end

Wow, that’so totally awesome. It’s been a long time since I enjoyed a good game of minesweeper. We need to get you hooked up with the Codea Community so it’s easier to share your code.

Really good!

@MrScience101 and @RandD thanks!
As for Cc I did try that but it seemed to upload the tabs twice, will try again though.

Wow! Did you type all that?

@code_maker yep but there are much longer programs on here.

haven’t tryed it yet… I will do that now!