Code:
@name EGP-Minesweeper
@inputs EGP:wirelink
@outputs Started Lost
@persist UserAllow BoxSize Surround Size Mine Max StartTime Started Lost SafeCount
@persist [Cell Safe Open Hover]:array [Screen Pod]:entity
@persist FillCount
#First stuff
if (first()) {
runOnTick(1)
Size = 5
Mine = 5
Max = maxOfType("wire_egp_elements")
Pod = entity():isWeldedTo()
Screen = EGP:entity()
EGP:egpClear()
EGP:egpBox(1,0,0,512,10,200,200,200,255)
EGP:egpBox(2,0,0,10,512,200,200,200,255)
EGP:egpBox(3,0,502,512,10,200,200,200,255)
EGP:egpBox(4,502,0,10,512,200,200,200,255)
EGP:egpBox(5,10,10,492,75,150,150,150,255)
EGP:egpBox(6,0,85,512,10,200,200,200,255)
EGP:egpBox(7,10,95,492,407,150,150,150,255)
EGP:egpBox(8,20,20,100,55,0,0,0,255)
EGP:egpBox(9,392,20,100,55,0,0,0,255)
EGP:egpBox(10,227.5,20,55,55,0,150,0,255)
String = (Mine-SafeCount):toString()
EGP:egpText(11,"0":repeat(3-String:length())+String,20,15,255,0,0,255)
EGP:egpSetFont(11,"arial",70)
EGP:egpText(12,"000",392,15,255,0,0,255)
EGP:egpSetFont(12,"arial",70)
EGP:egpCircle(Max+1,255,255,10,10,0,255,0,255)
timer("new",10)
timer("unglitch",1000)
}
#Get user
User=Pod:driver()
#Unglitch odd glitch tied to using
if (clk("unglitch")) {
UserAllow = 1
}
#Start a new game
if (clk("new")) {
Cell = array()
Safe = array()
Open = array()
Hover = array()
#fix arrays so I can loop using :count()
for (I=0,Size^2-1) {
Hover[I,number]=0
}
for (I=0,Size^2-1) {
Open[I,number]=0
}
#end of fix
I=1
while (I <= Mine) {
Pos = randint(1,Size^2-1)
if (!Cell[Pos,number]) {
Cell[Pos,number]=1
} else {
I--
}
I++
}
FillCount = 0
RowCount = Size
BoxY=0
BoxX=0
Lost = 0
Started = 0
timer("fill",10)
}
#fill the field with cells
if (clk("fill") & FillCount < Size^2) {
BoxSize = 397/Size
BoxX = (492-BoxSize*Size)/2+(FillCount%Size)*BoxSize
BoxY = floor(FillCount/Size)*BoxSize
EGP:egpBox(15+FillCount,10+BoxX,100+BoxY,BoxSize-5,BoxSize-2,200,200,200,255)
FillCount++
timer("fill",0)
}
#Unhover cells
for (I=0,Hover:count()) {
if (Hover[I,number] & !Open[I,number]) {
BoxX = (492-BoxSize*Size)/2+(I%Size)*BoxSize
BoxY = floor(I/Size)*BoxSize
if (!Safe[I,number]) {
EGP:egpBox(15+I,10+BoxX,100+BoxY,BoxSize-5,BoxSize-2,200,200,200,255)
} else {
EGP:egpBox(15+I,10+BoxX,100+BoxY,BoxSize-5,BoxSize-2,0,0,255,255)
}
}
}
#mine count and time
if (Started & !Lost & clk("on")) {
if (SafeCount < Mine) {
String = (Mine-SafeCount):toString()
} else {
String = "000"
}
EGP:egpText(11,"0":repeat(3-String:length())+String,20,15,255,0,0,255)
EGP:egpSetFont(11,"arial",70)
Time = floor(curtime()-StartTime):toString()
EGP:egpText(12,"0":repeat(3-Time:length())+Time,392,15,255,0,0,255)
EGP:egpSetFont(12,"arial",70)
#Win!!!
for (I=0,Open:count()) {
if (!Open[I,number]) {
if (!Cell[I,number]) {
break
}
} elseif (I == Open:count()) {
print("blah")
Started = 0
}
}
timer("on",100)
}
#Interact
if (UserAllow & User:aimEntity() == Screen) {
Pos2=floor((vec2(Screen:toLocal(User:aimPos()))+vec2(29,37))*(1/0.1835))
Pos = floor(Pos2:y()/BoxSize+1)+Size*floor(Pos2:x()/BoxSize)-1
BoxX = (492-BoxSize*Size)/2+(Pos%Size)*BoxSize
BoxY = floor(Pos/Size)*BoxSize
CursorPos=floor((vec2(Screen:toLocal(User:aimPos()))+vec2(47,47))*(1/0.1835))
EGP:egpCircle(13,CursorPos:y(),CursorPos:x(),10,10,0,255,0,255)
if (Pos == -3 & changed(User:keyAttack1()) & User:keyAttack1()) {
timer("new",10)
}
if (!Lost & inrange(Pos2,vec2(0,0),vec2(397,397))) {
if (!Open[Pos,number] & inrange(Pos,0,Size^2-1)) {
Hover[Pos,number]=1
if (!Safe[Pos,number]) {
EGP:egpBox(15+Pos,10+BoxX,100+BoxY,BoxSize-5,BoxSize-2,225,225,225,255)
} else {
EGP:egpBox(15+Pos,10+BoxX,100+BoxY,BoxSize-5,BoxSize-2,0,0,200,255)
}
}
if (changed(User:keyAttack1()) & User:keyAttack1()) {
if (!Started) {
Started = 1
StartTime = curtime()
timer("on",100)
}
if (inrange(Pos,0,Size^2-1) & !Safe[Pos,number]) {
Col = Pos%Size
Open[Pos,number]=1
if (Cell[Pos,number]) {
Lost = 1
EGP:egpBox(15+Pos,10+BoxX,100+BoxY,BoxSize-5,BoxSize-2,255,0,0,255)
} else {
I = -1
while (I<=1) {
if (Col == 0) {
Surround+=Cell[Pos+(I*Size),number]
Surround+=Cell[Pos+1+(I*Size),number]
} elseif (Col == Size-1) {
Surround+=Cell[Pos-1+(I*Size),number]
Surround+=Cell[Pos+(I*Size),number]
} else {
N = -1
while (N<=1) {
Surround+=Cell[Pos+N+(I*Size),number]
N++
}
}
I++
}
EGP:egpText(15+Pos,Surround:toString(),10+BoxX,100+BoxY,0,0,255,255)
EGP:egpSetFont(15+Pos,"arial",BoxSize)
Surround=0
}
}
} elseif (changed(User:keyAttack2()) & User:keyAttack2()) {
if (inrange(Pos,0,Size^2-1)) {
if (!Open[Pos,number]) {
if (Safe[Pos,number]) {
EGP:egpBox(15+Pos,10+BoxX,100+BoxY,BoxSize-5,BoxSize-2,200,200,200,255)
Safe[Pos,number]=0
SafeCount--
} else {
EGP:egpBox(15+Pos,10+BoxX,100+BoxY,BoxSize-5,BoxSize-2,0,0,255,255)
Safe[Pos,number]=1
SafeCount++
}
}
}
}
}
}
EGP:egpDraw() This is for the egp, so dont even try using it with console screens XD.
Bookmarks