- Beranda
- Komunitas
- Tech
- Programmer Forum
Sokoban (Javascript)


TS
terakhirx
Sokoban (Javascript)
PHP Code:
<style>
#sokoban { line-height:100%; font-family:monospace; vertical-align:middle }
#sokoban span { width:1em; display:inline-block; text-align:center }
</style>
<div id=sokoban></div>
[removed]
let d = ` ####
# ##
49 # ##
# OO ##
###O O ##
#### O #
### # ##### #
# # #XXXXO #
# # O XXXX# #
# O # #X$XX# #
### #### ### #
#### KO ##O##
### O #
# ## #
#########`.replace( /.|
/g, c => Math.max( 0, " XO$KR#
".indexOf( c ) ) )
let render = d => {
let s = ''
let y = 0
let e = 0
let col = [
'#000','_',
'#F11', render.ascii ? '#' : '🮽',
'#11F', render.ascii ? '#' : '🮽',
'#11F', render.ascii ? 'X' : '🯅',
'#CCC','#EEE',
'#6A6','#6C6',
'#111','#111',
]
let fr = [ 4, 8, 5, 10, 7, 11, 12 ]
d.split( '' ).forEach( v => {
e++
e %= 2
if ( fr[v] ){
let b = col[ ( ( fr[v] >> 2 ) + 3 << 1 ) + e ]
let f = ( fr[v] & 3 ) << 1
let o = col[f+1]
f = col[f]
s += `<span style=color:${ f };background:${ b }>${ o }</span>`
} else {
y++
e = y
s += "<br/>"
}
} )
document.querySelector('#sokoban')[removed] = s.replace(/_/g,' ')
console.log( 'rendered' )
}
//render.ascii = true // aktifkan bila browser tidak support unicode character
render( d )
let transpose = a => {
a = a.split( 7 ).map( x => x.split('') )
a = a[0].map( (_, x) => a.map( row => row[x] ) )
return a.map( x => x.join('') ).join( 7 )
}
let left = d => d.replace( /([01])([23]?)([45])/, (_, a, b, c ) => '' + ( +a + ( b ? 2 : 4 ) ) + ( b ? + b + 2 : '' ) + ( c - 4 ) )
let right = d => d.replace( /([45])([23]?)([01])/, (_, a, b, c ) => '' + ( a - 4 ) + ( b ? + b + 2 : '' ) + ( +c + ( b ? 2 : 4 ) ) )
let up = d => transpose( left( transpose( d ) ) )
let down = d => transpose( right( transpose( d ) ) )
document.onkeydown = e => {
console.log( e.keyCode )
if ( e.keyCode == 37 ){
d = left( d )
render( d )
} else if ( e.keyCode == 38 ){
d = up( d )
render( d )
} else if ( e.keyCode == 39 ){
d = right( d )
render( d )
} else if ( e.keyCode == 40 ){
d = down( d )
render( d )
}
}
/*
// SOLUTION: //
let sol = function(){
if (sol.dat){
let s = sol.dat.shift()
if ( s == 'l' ){
d = left( d )
render( d )
} else if ( s == 'u' ){
d = up( d )
render( d )
} else if ( s == 'r' ){
d = right( d )
render( d )
} else if ( s == 'd'){
d = down( d )
render( d )
}
setTimeout( sol, 100 )
}
}
sol.dat = `RdRRRRdrruLUUUUULLdllldRRldDlddrUUUUluurDldRurrurr
dddddLLLullddrUUUUddrdrrruuuuulldlLulDlLrrrrruruuu
LrdddlLLrrruurDDDDDDuuuullllddddrdrrdrruLLLLullddr
UUUUUllluuurrrRRurDDulllllldddrrrrurRurDDDDDuuuull
ldldddrdrrdrruLLLLullddrUUUUddrdrrruuuuuuullllllld
ddrrRRurruullluUlDrdrrrddlldlllluuurRRRRurDDulllll
ldddrrrrurRurDDDDDuuuullldldddrdrrdrruLLLLrrruuuuu
uululLdlluurDldRRRurDDulllllldddrrrrurRurDDDDDuuuu
llldldddrdrrdrruLuuuuuuulullluluurDldddlldddrrrddd
lddrUUUdrdrRdrruLLLLrrruuuuuuululllluurDDldRRRurDD
rdLLruuullluurDDldRRurDDrdLuulllllldddLLulllddrRdr
UlURRRRRRlllllldlluurRurDldRRRRluuurrrrrrrdddddddl
lluluUddlddrUUU`.toLowerCase().split('')
sol()
*/
[removed]
Diubah oleh terakhirx 24-01-2024 17:49
0
18
0


Komentar yang asik ya


Komentar yang asik ya
Komunitas Pilihan