Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
436
Task/2048/Ring/2048.ring
Normal file
436
Task/2048/Ring/2048.ring
Normal file
|
|
@ -0,0 +1,436 @@
|
|||
# Project : 2048 Game
|
||||
|
||||
load "stdlib.ring"
|
||||
load "guilib.ring"
|
||||
|
||||
C_GAMETITLE = '2048 Game'
|
||||
C_WINDOWBACKGROUND = "background-color: gray;"
|
||||
if isMobile()
|
||||
C_LABELFONTSIZE = "font-size:120px;"
|
||||
C_BUTTONFONTSIZE = "font-size:160px;"
|
||||
else
|
||||
C_LABELFONTSIZE = "font-size:50px;"
|
||||
C_BUTTONFONTSIZE = "font-size:80px;"
|
||||
ok
|
||||
C_PLAYERSCORESTYLE = "color:white;background-color:rgb(50,50,50);border-radius:17px;" + C_LABELFONTSIZE
|
||||
C_NEWGAMESTYLE = 'color:white;background-color:rgb(50,50,50);border-radius:17px;' + C_LABELFONTSIZE
|
||||
C_EMPTYBUTTONSTYLE = 'border-radius:17px;background-color:silver;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON2STYLE = 'border-radius:17px;color:black; background-color: yellow ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON4STYLE = 'border-radius:17px;color:black; background-color: violet ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON8STYLE = 'border-radius:17px;color:white; background-color: purple ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON16STYLE = 'border-radius:17px;color:white; background-color: blue ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON32STYLE = 'border-radius:17px;color:white; background-color: red ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON64STYLE = 'border-radius:17px;color:black; background-color: lightgray ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON128STYLE = 'border-radius:17px;color:black; background-color: white ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON256STYLE = 'border-radius:17px;color:white; background-color: black ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON512STYLE = 'border-radius:17px;color:white; background-color: Purple ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON1024STYLE = 'border-radius:17px;color:black; background-color: Yellow ;' + C_BUTTONFONTSIZE
|
||||
C_BUTTON2048STYLE = 'border-radius:17px;color:white; background-color: Green ;' + C_BUTTONFONTSIZE
|
||||
C_LAYOUTSPACING = 10
|
||||
C_PLAYERSCORE = 'Player Score : '
|
||||
|
||||
size = 4
|
||||
limit = 2
|
||||
num = 0
|
||||
flag = 0
|
||||
x1 = 0
|
||||
x2 = 0
|
||||
y1 = 0
|
||||
y2 = 0
|
||||
nScore = 0
|
||||
button = newlist(size,size)
|
||||
buttonsave = newlist(size,size)
|
||||
LayoutButtonRow = list(size+2)
|
||||
moveleft = []
|
||||
moveright = []
|
||||
moveup = []
|
||||
movedown = []
|
||||
myfilter2 = null
|
||||
myfilter3 = null
|
||||
winheight = 0
|
||||
winwidth = 0
|
||||
|
||||
app = new qApp {
|
||||
StyleFusion()
|
||||
processevents()
|
||||
win = new qWidget() {
|
||||
setWindowTitle(C_GAMETITLE)
|
||||
setgeometry(100,100,600,700)
|
||||
setminimumwidth(300)
|
||||
setminimumheight(300)
|
||||
if not isMobile()
|
||||
grabkeyboard()
|
||||
ok
|
||||
setstylesheet(C_WINDOWBACKGROUND)
|
||||
move(490,100)
|
||||
for n = 1 to size
|
||||
for m = 1 to size
|
||||
button[n][m] = new MyButton(win)
|
||||
next
|
||||
next
|
||||
newgame = new qLabel(win)
|
||||
playerscore = new qLabel(win)
|
||||
myfilter3 = new qAllEvents(win) {
|
||||
setMouseButtonPressEvent("pPress()")
|
||||
setMouseButtonReleaseEvent("pRelease()")}
|
||||
installeventfilter(myfilter3)
|
||||
myfilter2 = new qAllEvents(win) {
|
||||
setkeypressevent("keypress()") }
|
||||
installeventfilter(myfilter2)
|
||||
winwidth = win.width()
|
||||
winheight = win.height()
|
||||
for n = 1 to size + 2
|
||||
LayoutButtonRow[n] = new QHBoxLayout() {
|
||||
setSpacing(C_LAYOUTSPACING)
|
||||
}
|
||||
next
|
||||
for n = 1 to size
|
||||
for m = 1 to size
|
||||
button[n][m] { temp = text() }
|
||||
buttonsave[n][m] = temp
|
||||
button[n][m] = new MyButton(win) {
|
||||
setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
|
||||
setstylesheet(C_EMPTYBUTTONSTYLE)
|
||||
show()
|
||||
}
|
||||
next
|
||||
next
|
||||
for n = 1 to size
|
||||
for m = 1 to size
|
||||
LayoutButtonRow[n].AddWidget(button[m][n])
|
||||
win.show()
|
||||
temp = buttonsave[n][m]
|
||||
button[n][m].settext(temp)
|
||||
next
|
||||
LayoutButtonRow[n].setSpacing(C_LAYOUTSPACING)
|
||||
next
|
||||
playerscore {
|
||||
setGeometry(0,4*floor(winheight/6),winwidth,floor(winheight/6))
|
||||
setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
|
||||
settext(C_PLAYERSCORE + nScore)
|
||||
setStylesheet(C_PLAYERSCORESTYLE)
|
||||
show()
|
||||
}
|
||||
newgame {
|
||||
setGeometry(0,5*floor(winheight/6),winwidth,floor(winheight/6))
|
||||
setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
|
||||
setstylesheet(C_NEWGAMESTYLE)
|
||||
settext('New Game')
|
||||
myfilter4 = new qallevents(newgame)
|
||||
myfilter4.setMouseButtonPressEvent("pbegin()")
|
||||
installeventfilter(myfilter4)
|
||||
show()
|
||||
}
|
||||
LayoutButtonRow[size+1].AddWidget(playerscore)
|
||||
LayoutButtonRow[size+2].AddWidget(newgame)
|
||||
LayoutButtonMain = new QVBoxLayout() {
|
||||
setSpacing(C_LAYOUTSPACING)
|
||||
for n = 1 to size+2
|
||||
AddLayout(LayoutButtonRow[n])
|
||||
win.show()
|
||||
next
|
||||
}
|
||||
win.setLayout(LayoutButtonMain)
|
||||
win.show()
|
||||
pbegin()
|
||||
show()
|
||||
}
|
||||
exec()
|
||||
}
|
||||
|
||||
func pPress()
|
||||
x1 = myfilter3.getglobalx()
|
||||
y1 = myfilter3.getglobaly()
|
||||
|
||||
func pRelease()
|
||||
x2 = myfilter3.getglobalx()
|
||||
y2 = myfilter3.getglobaly()
|
||||
difx = x2 - x1
|
||||
dify = y2 - y1
|
||||
if fabs(difx) > fabs(dify)
|
||||
if difx < 0
|
||||
pleft()
|
||||
else
|
||||
pRight()
|
||||
ok
|
||||
else
|
||||
if dify < 0
|
||||
pUp()
|
||||
else
|
||||
pDown()
|
||||
ok
|
||||
ok
|
||||
|
||||
func keypress()
|
||||
nKey = myfilter2.getkeycode()
|
||||
switch nKey
|
||||
on 16777234 pleft()
|
||||
on 16777236 pright()
|
||||
on 16777235 pup()
|
||||
on 16777237 pdown()
|
||||
off
|
||||
|
||||
func pbegin()
|
||||
numbers = [['2','2'],['2','4']]
|
||||
randnew = newlist(2,2)
|
||||
for n = 1 to size
|
||||
for m = 1 to size
|
||||
button[n][m].setStylesheet(C_EMPTYBUTTONSTYLE)
|
||||
button[n][m].settext('')
|
||||
next
|
||||
next
|
||||
while true
|
||||
rn1 = random(size - 1) + 1
|
||||
rm1 = random(size - 1) + 1
|
||||
rn2 = random(size - 1) + 1
|
||||
rm2 = random(size - 1) + 1
|
||||
bool = (rn1 = rn2) and (rm1 = rm2)
|
||||
if not bool
|
||||
exit
|
||||
ok
|
||||
end
|
||||
rand = random(limit - 1) + 1
|
||||
button[rn1][rm1].settext(numbers[rand][1])
|
||||
button[rn2][rm2].settext(numbers[rand][2])
|
||||
nScore = 0
|
||||
playerscore.settext(C_PLAYERSCORE)
|
||||
|
||||
func pMoveInDirection cFunc
|
||||
num = gameover()
|
||||
if num = size*size
|
||||
flag = 1
|
||||
msgBox('You lost!')
|
||||
pbegin()
|
||||
ok
|
||||
if flag = 0
|
||||
call cFunc()
|
||||
sleep(0.5)
|
||||
newnum()
|
||||
ok
|
||||
|
||||
func pdown()
|
||||
pMoveInDirection(:pMoveDown)
|
||||
|
||||
func pup()
|
||||
pMoveInDirection(:pMoveUp)
|
||||
|
||||
func pleft()
|
||||
pMoveInDirection(:pMoveLeft)
|
||||
|
||||
func pright()
|
||||
pMoveInDirection(:pMoveRight)
|
||||
|
||||
func pmoveleft()
|
||||
for n = 1 to size
|
||||
moveleft = []
|
||||
for m = 1 to size
|
||||
button[m][n] {temp = text()}
|
||||
if temp != ''
|
||||
add(moveleft,temp)
|
||||
ok
|
||||
next
|
||||
movetilesleft(n,moveleft)
|
||||
next
|
||||
|
||||
func pmoveright()
|
||||
for n = 1 to size
|
||||
moveright = []
|
||||
for m = size to 1 step -1
|
||||
button[m][n] {temp = text()}
|
||||
if temp != ''
|
||||
add(moveright,temp)
|
||||
ok
|
||||
next
|
||||
movetilesright(n,moveright)
|
||||
next
|
||||
return
|
||||
|
||||
func pmoveup()
|
||||
for n = 1 to size
|
||||
moveup = []
|
||||
for m = 1 to size
|
||||
button[n][m] {temp = text()}
|
||||
if temp != ''
|
||||
add(moveup,temp)
|
||||
ok
|
||||
next
|
||||
movetilesup(n,moveup)
|
||||
next
|
||||
return
|
||||
|
||||
func pmovedown()
|
||||
for n = 1 to size
|
||||
movedown = []
|
||||
for m = size to 1 step -1
|
||||
button[n][m] {temp = text()}
|
||||
if temp != ''
|
||||
add(movedown,temp)
|
||||
ok
|
||||
next
|
||||
movetilesdown(n,movedown)
|
||||
next
|
||||
return
|
||||
|
||||
func movetilesleft(nr,moveleft)
|
||||
for p = 1 to len(moveleft) - 1
|
||||
temp1 = moveleft[p]
|
||||
temp2 = moveleft[p+1]
|
||||
temp = string(number(temp1) + number(temp2))
|
||||
if (temp1 = temp2) and (temp1 != '0') and (temp2 != '0') and (temp1 != '') and (temp2 != '')
|
||||
if temp != '0' and temp != ''
|
||||
nScore = nScore + temp
|
||||
playerscore.settext(C_PLAYERSCORE + nScore)
|
||||
flag = 1
|
||||
moveleft[p] = temp
|
||||
del(moveleft,p+1)
|
||||
ok
|
||||
ok
|
||||
next
|
||||
for n = 1 to len(moveleft)
|
||||
button[n][nr].settext(moveleft[n])
|
||||
next
|
||||
for n = len(moveleft) + 1 to size
|
||||
if n <= size
|
||||
button[n][nr].setStylesheet(C_EMPTYBUTTONSTYLE)
|
||||
button[n][nr].settext('')
|
||||
ok
|
||||
next
|
||||
return
|
||||
|
||||
func movetilesright(nr,moveright)
|
||||
flag = 0
|
||||
for p = 2 to len(moveright)
|
||||
temp1 = moveright[p]
|
||||
temp2 = moveright[p-1]
|
||||
if (temp1 = temp2) and (temp1 != '0') and (temp2 != '0') and (temp1 != '') and (temp2 != '')
|
||||
temp = string(number(temp1) + number(temp2))
|
||||
if temp != '0' and temp != ''
|
||||
nScore = nScore + temp
|
||||
playerscore.settext(C_PLAYERSCORE + nScore)
|
||||
flag = 1
|
||||
moveright[p] = temp
|
||||
del(moveright,p-1)
|
||||
ok
|
||||
ok
|
||||
next
|
||||
for n = 1 to len(moveright)
|
||||
button[size-n+1][nr].settext(moveright[n])
|
||||
next
|
||||
for n = 1 to size - len(moveright)
|
||||
if n <= size
|
||||
button[n][nr].setStylesheet(C_EMPTYBUTTONSTYLE)
|
||||
button[n][nr].settext('')
|
||||
ok
|
||||
next
|
||||
|
||||
|
||||
func movetilesup(nr,moveup)
|
||||
flag = 0
|
||||
for p = 1 to len(moveup) - 1
|
||||
temp1 = moveup[p]
|
||||
temp2 = moveup[p+1]
|
||||
if (temp1 = temp2) and (temp1 != '0') and (temp2 != '0') and (temp1 != '') and (temp2 != '')
|
||||
temp = string(number(temp1) + number(temp2))
|
||||
if temp != '0' and temp != ''
|
||||
nScore = nScore + temp
|
||||
playerscore.settext(C_PLAYERSCORE + nScore)
|
||||
flag = 1
|
||||
moveup[p] = temp
|
||||
del(moveup,p+1)
|
||||
ok
|
||||
ok
|
||||
next
|
||||
for n = 1 to len(moveup)
|
||||
button[nr][n].settext(moveup[n])
|
||||
next
|
||||
for n = len(moveup) + 1 to size
|
||||
if n <= size
|
||||
button[nr][n].setStylesheet(C_EMPTYBUTTONSTYLE)
|
||||
button[nr][n].settext('')
|
||||
ok
|
||||
next
|
||||
|
||||
func movetilesdown(nr,movedown)
|
||||
flag = 0
|
||||
for p = 1 to len(movedown) - 1
|
||||
temp1 = movedown[p]
|
||||
temp2 = movedown[p+1]
|
||||
if (temp1 = temp2) and (temp1 != '0') and (temp2 != '0') and (temp1 != '') and (temp2 != '')
|
||||
temp = string(number(temp1) + number(temp2))
|
||||
if temp != '0' and temp != ''
|
||||
nScore = nScore + temp
|
||||
playerscore.settext(C_PLAYERSCORE + nScore)
|
||||
flag = 1
|
||||
movedown[p] = temp
|
||||
del(movedown,p+1)
|
||||
ok
|
||||
ok
|
||||
next
|
||||
for n = 1 to len(movedown)
|
||||
button[nr][size-n+1].settext(movedown[n])
|
||||
next
|
||||
for n = size - len(movedown) to 1 step -1
|
||||
if n <= size
|
||||
button[nr][n].setStylesheet(C_EMPTYBUTTONSTYLE)
|
||||
app.processevents()
|
||||
button[nr][n].settext('')
|
||||
ok
|
||||
next
|
||||
|
||||
func newnum()
|
||||
while true
|
||||
rn = random(size - 1) + 1
|
||||
rm = random(size - 1) + 1
|
||||
if button[rn][rm].text() = ''
|
||||
button[rn][rm].settext('2')
|
||||
exit
|
||||
ok
|
||||
end
|
||||
return
|
||||
|
||||
func gameover()
|
||||
num = 0
|
||||
flag = 0
|
||||
for n = 1 to size
|
||||
for m = 1 to size
|
||||
if button[n][m].text() != ''
|
||||
num = num + 1
|
||||
ok
|
||||
next
|
||||
next
|
||||
return num
|
||||
|
||||
func msgBox(text) {
|
||||
m = new qMessageBox(win) {
|
||||
setWindowTitle('2048 Game')
|
||||
setText(text)
|
||||
show()
|
||||
}
|
||||
}
|
||||
|
||||
func showarray(vect)
|
||||
see "["
|
||||
svect = ""
|
||||
for n = 1 to len(vect)
|
||||
svect = svect + vect[n] + " "
|
||||
next
|
||||
svect = left(svect, len(svect) - 1)
|
||||
see svect
|
||||
see "]" + nl
|
||||
|
||||
class MyButton from qLabel
|
||||
func setText(cValue)
|
||||
Super.setText(cValue)
|
||||
switch cValue
|
||||
on '2' setStyleSheet(C_BUTTON2STYLE)
|
||||
on '4' setStylesheet(C_BUTTON4STYLE)
|
||||
on '8' setStylesheet(C_BUTTON8STYLE)
|
||||
on '16' setStylesheet(C_BUTTON16STYLE)
|
||||
on '32' setStylesheet(C_BUTTON32STYLE)
|
||||
on '64' setStylesheet(C_BUTTON64STYLE)
|
||||
on '128' setStylesheet(C_BUTTON128STYLE)
|
||||
on '256' setStylesheet(C_BUTTON256STYLE)
|
||||
on '512' setStylesheet(C_BUTTON512STYLE)
|
||||
on '1024' setStylesheet(C_BUTTON1024STYLE)
|
||||
on '2048' setStylesheet(C_BUTTON2048STYLE)
|
||||
off
|
||||
Loading…
Add table
Add a link
Reference in a new issue