Jump to content

Snake: Difference between revisions

9,528 bytes added ,  1 year ago
m
m (→‎{{header|Rust}}: syntaxhighlight lang="rust")
Line 335:
#include <flow-term.h>
#include <keys.h>
 
#define LIMIT_TIME 120
#define INF_TIME 80 //70
#define ONE_SECOND 1000
#define TOTAL_TIME 100
#define DECREMENT_TIME 10
#define COLOR_FOOD 232
#define BACK_FOOD 255
#define TIME_LEVEL 90000 //90000 // un minuto y medio
#define TIME_CHALLENGE 40000 // 40 segundos
#define TIME_LOST 30000
#define COLUMNA_PRINT 55
#define SIZE_INITIAL -7
 
#enum 1,N,E,S,W
#enum 1,SPACE,FOOD,BORDER
 
DEF-MAIN(argv, argc)
BREAK-ON
STACK 16
CLR-SCR
MSET(C, quit, nHead, dir, Size, SCORE, counter, T,TPlay,ConsPrey )
SET( symbol, " $@" )
 
MSET(C, quit, nHead, dir, Size, SCORE, counter, T, TPlay,TSound, ConsPrey,Consumed stage )
SET( w, 50 ) //50
 
SET( h, 28 ) // 24
SET(len,0)
SET( w, 50)
SET( h, 28)
SET( color food, COLOR_FOOD )
SET( back food, BACK_FOOD )
SET( TIME, 100 )
LET( Size := MUL(w,h) )
SET( TLimit := 100LEVEL,1 )
SET( REAL LEVEL,1 )
FALSE(swPierde)
TRUE(swExtra1,swExtra2)
TRUE( tiles )
SET( back tiles,1 ), MSET(tile1, tile2)
VOID( head back tiles )
MEM("\033[48;5;28m","\033[48;5;29m","\033[48;5;62m","\033[48;5;63m","\033[48;5;70m","\033[48;5;71m","\033[48;5;4m","\033[48;5;27m" )
MEM("\033[48;5;99m","\033[48;5;97m","\033[48;5;17m","\033[48;5;18m","\033[48;5;62m","\033[48;5;63m")
APND-LST(head back tiles)
[back tiles] GET(head back tiles), MOVE-TO(tile1)
[PLUS-ONE(back tiles)] GET(head back tiles), MOVE-TO(tile2)
VOID( big number, numL1, numL2, numL3 )
 
VOID( sounds ), SET( sound index, 1 )
MEM("Snake_music.wav","Snake_music_l3.wav","Snake_music_l5.wav","Snake_music_l4.wav","Snake_music_l6.wav")
APND-LST(sounds)
GOSUB( set score )
 
MSET(tBoard1,tmpLimit,Maze,wM,hM,SizeM)
DIM( Size ) AS-ONES( board )
DIM( Size ) AS-ONES( board ), {board} MOVE-TO(tBoard1)
 
// load and prepare maze for challenge stage:
SET(i,1)
LET( Maze := REPLICATE("3",50) )
PERF-UP(i,26,1)
LET( Maze := CAT( Maze, CAT( CAT("3", REPLICATE("1",48) ), "3") ) )
NEXT
LET( Maze := CAT( Maze, REPLICATE("3",50) ))
GOSUB( prepare maze )
HIDE-CURSOR
CLR-SCR
 
GOSUBSET( putTLimit titles:= LIMIT_TIME )
MEM(SIZE_INITIAL),GOSUB( start )
GOSUBSET( showtime out, TIME_LEVEL)
 
GOSUB( ready ), SLEEP(3)
SYS( CAT(CAT("aplay fl/",[sound index]CGET(sounds)), "</dev/null >/dev/null 2>&1 &"))
TIC( T ), TIC( TPlay )
WHILEGOSUB( NOTtitles (quit) )
DEVIATE-IF( TLimit ~= TPlay ){
/* PLAY GAME!! */
GOSUB( show )
SET(lives,3)
WHEN( KEY-PRESSED? ){
SCAN-CODEWHILE( Clives )
SWITCHGOSUB( Cshow )
GOSUB( put titles )
CASE( K_UP ) { dir = N, EXIT }
CASEGOSUB( K_RIGHTready ){ dir = E, EXIT }SLEEP(1.5)
TIC( T ), CASETIC( K_DOWNTPlay ) { dir = S, EXIT }TIC(TSound)
KBD-FREE
CASE( K_LEFT ) { dir = W, EXIT }
WHILE( NOT CASE( K_ESCquit) ) { quit = 1, EXIT }
ON-TIME( TLimit ~= CASE( 32TPlay ) { PAUSE, EXIT }
SWENDGOSUB( show )
WHEN( KEY-PRESSED? ){
SCAN-CODE( C )
SELECT( C )
CASE( K_UP ) { dir = N, EXIT }
CASE( K_RIGHT ){ dir = E, EXIT }
CASE( K_DOWN ) { dir = S, EXIT }
CASE( K_LEFT ) { dir = W, EXIT }
CASE( K_ESC ) { quit = 1, EXIT }
CASE( 32 ) { PAUSE, EXIT }
SELEND
}
GOSUB( step )
}
GOSUBON-TIME( stepONE_SECOND ~= T ) {
TIME-=DECREMENT_TIME, CLAMP(0,TOTAL_TIME,TIME)
}
{TIME, 12, COLUMNA_PRINT} GOSUB( put time )
DEVIATE-IF( 800 ~= T ) {
TIME-=10, CLAMP(0,100,TIME)}
{ON-TIME,( 12,time 52}out GOSUB(~= put timeTSound ){
} GOSUB(LEVELCLEAR)
}
WEND
COND( OR(EQ?(LEVEL,3),EQ?(LEVEL,6)) )
GOSUB(you lost),SLEEP(3)
SET(quit,0), [nHead]{len}CPUT(board)
LOCATE(1,1), FILL-BOX(" ",29,54)
GOSUB( another play )
ELS
GOSUB(you lost), SLEEP(3)
--lives
SET(quit,0)
TRUE(swPierde)
{len}GOSUB( start )
COND( IS-NOT-ZERO?(lives) )
SYS("aplay fl/Snake_music_vida_repechaje.wav </dev/null >/dev/null 2>&1 &")
CEND
CEND
 
WEND
GOSUB(you lost), SLEEP(1)
/* GAME OVER */
GOSUB(game over ), SLEEP(2)
LOCATEGOSUB(ADD(h,1game over ),1) PRNLSLEEP(7)
SET-VIDEO-TEXT
SHOW-CURSOR
PRNL
Line 391 ⟶ 470:
 
RUTINES
 
DEF-FUN( KILLSOUND )
SET( PID,0 )
LET( PID := ONLY-CHR("0123456789 ", EXEC( "pidof aplay" )))
COND( LEN(PID) )
SYS( CAT(CAT("kill ",PID), " </dev/null >/dev/null 2>&1"))
CEND
RET
 
// initialize the board, plant a very first food item
DEF-FUN( start, initial pos )
SET( i,1 )
 
COND( NOT-EQ?(LEVEL,3) )
[1:w] {BORDER} CPUT(board) // top
[ SUB(MUL(h,w),MINUS-ONE(w)) : end] {BORDERtBoard1} CPUTMOVE-TO(board) // bottom
{50,28},MUL(50,28), MOVE-TO( w, h, Size )
[1:w:end] {BORDER} CPUT(board) // left
[1:w] {BORDER} CPUT(board) // top
[ SUB(MUL(h,w),MINUS-ONE(w)) : end] {BORDER} CPUT(board) // bottom
[1:w:end] {BORDER} CPUT(board) // left
 
SET(i, 1)
FOR( LE?(i, h), ++i )
[ MUL(i, w )] {BORDER} PUT(board) // right
NEXT
LET( time out:=TIME_LEVEL )
ELS
TRASH(board)
CEND
SELECT(LEVEL)
CASE(2){
SET(i,3)
PERF-UP(i,5,1)
// laterales extremos:
[ADD(MUL(i,w),5):ADD(MUL(i,w),8)] {BORDER} CPUT(board)
[ADD(MUL(i,w),SUB(w,7)):ADD(MUL(i,w),SUB(w,4))] {BORDER} CPUT(board)
// laterales fondo
[ADD(MUL(ADD(i,19),w),5):ADD(MUL(ADD(i,19),w),8)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,19),w),SUB(w,7)):ADD(MUL(ADD(i,19),w),SUB(w,4))] {BORDER} CPUT(board)
 
NEXT
EXIT
}
CASE(3){ // challenge stage!
SPLIT(Maze,board, "" ), VAL(board), MOVE-TO(board)
[1:w] {BORDER}CPUT(board)
SET(i,1)
PERF-UP(i,19,1)
GOSUB(plant)
NEXT
LET(time out := TIME_CHALLENGE)
EXIT
}
CASE(4){
SET(i,3)
PERF-UP(i,5,1)
// laterales medios
[ADD(MUL(ADD(i,9),w),5):ADD(MUL(ADD(i,9),w),8)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,9),w),SUB(w,7)):ADD(MUL(ADD(i,9),w),SUB(w,4))] {BORDER} CPUT(board)
// medio arriba
[ADD(MUL(i,w),17):ADD(MUL(i,w),20)] {BORDER} CPUT(board)
[ADD(MUL(i,w),31):ADD(MUL(i,w),34)] {BORDER} CPUT(board)
// medio abajo
[ADD(MUL(ADD(i,19),w),17):ADD(MUL(ADD(i,19),w),20)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,19),w),31):ADD(MUL(ADD(i,19),w),34)] {BORDER} CPUT(board)
NEXT
EXIT
}
CASE(5){
SET(i,3)
PERF-UP(i,5,1)
// laterales extremos:
[ADD(MUL(i,w),5):ADD(MUL(i,w),8)] {BORDER} CPUT(board)
[ADD(MUL(i,w),SUB(w,7)):ADD(MUL(i,w),SUB(w,4))] {BORDER} CPUT(board)
// laterales medios
[ADD(MUL(ADD(i,9),w),5):ADD(MUL(ADD(i,9),w),8)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,9),w),SUB(w,7)):ADD(MUL(ADD(i,9),w),SUB(w,4))] {BORDER} CPUT(board)
// laterales fondo
[ADD(MUL(ADD(i,19),w),5):ADD(MUL(ADD(i,19),w),8)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,19),w),SUB(w,7)):ADD(MUL(ADD(i,19),w),SUB(w,4))] {BORDER} CPUT(board)
// medio arriba
[ADD(MUL(i,w),17):ADD(MUL(i,w),20)] {BORDER} CPUT(board)
[ADD(MUL(i,w),31):ADD(MUL(i,w),34)] {BORDER} CPUT(board)
// medio abajo
[ADD(MUL(ADD(i,19),w),17):ADD(MUL(ADD(i,19),w),20)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,19),w),31):ADD(MUL(ADD(i,19),w),34)] {BORDER} CPUT(board)
NEXT
EXIT
}
CASE(6){
SET(i,1)
PERF-UP(i,29,1)
GOSUB(plant)
NEXT
LET(time out := TIME_CHALLENGE)
}
CASE(7){
SET(i,3)
PERF-UP(i,5,1)
// laterales extremos:
[ADD(MUL(i,w),5):ADD(MUL(i,w),8)] {BORDER} CPUT(board)
[ADD(MUL(i,w),SUB(w,7)):ADD(MUL(i,w),SUB(w,4))] {BORDER} CPUT(board)
// laterales medios
[ADD(MUL(ADD(i,9),w),5):ADD(MUL(ADD(i,9),w),8)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,9),w),SUB(w,7)):ADD(MUL(ADD(i,9),w),SUB(w,4))] {BORDER} CPUT(board)
// laterales fondo
[ADD(MUL(ADD(i,19),w),5):ADD(MUL(ADD(i,19),w),8)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,19),w),SUB(w,7)):ADD(MUL(ADD(i,19),w),SUB(w,4))] {BORDER} CPUT(board)
// medio arriba
[ADD(MUL(i,w),17):ADD(MUL(i,w),20)] {BORDER} CPUT(board)
[ADD(MUL(i,w),31):ADD(MUL(i,w),34)] {BORDER} CPUT(board)
// medio medio
[ADD(MUL(ADD(i,9),w),17):ADD(MUL(ADD(i,9),w),20)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,9),w),31):ADD(MUL(ADD(i,9),w),34)] {BORDER} CPUT(board)
// medio abajo
[ADD(MUL(ADD(i,19),w),17):ADD(MUL(ADD(i,19),w),20)] {BORDER} CPUT(board)
[ADD(MUL(ADD(i,19),w),31):ADD(MUL(ADD(i,19),w),34)] {BORDER} CPUT(board)
NEXT
EXIT
}
SELEND
COND( NOT-EQ?(LEVEL,3) )
LET( nHead := MUL( w, SUB( SUB( h, 1 ), MOD(h,2) )) DIV-INTO(2) )
LET( dir := N )
ELS
LET( nHead := ADD( MUL( w, 13 ), 26 ) )
LET( dir := N )
CEND
[ nHead ] {initial pos} CPUT( board )
 
IF( swPierde, SRAND( ~SECONDS); FALSE(swPierde); {TIME_LOST} »» (time out),\
SRAND( 26785 ) )
 
SET(i, 1)
FOR( LE?(i, h), ++i )
[ MUL(i, w )] {BORDER} PUT(board) // right
NEXT
LET( nHead := MUL( w, SUB( SUB( h, 1 ), MOD(h,2) )) DIV-INTO(2) )
[ nHead ] {-5} CPUT( board )
LET( dir := N )
SRAND( ~SECONDS)
GOSUB( plant )
RET
Line 413 ⟶ 613:
DEF-FUN( you lost )
SET(i,1), SET(k,0), SET(n,1)
LOCATE(1,1)
FOR( LE?(i, h), ++i)
SET(j,1)
Line 420 ⟶ 619:
COND( IS-NEG?( k ))
LOCATE(i,j)
PRNLPRN("\033[38;15;3m\033[48;5;9m~\OFF")
CEND
++n
NEXT
NEXT
SYS("aplay fl/Snake_dolor.wav </dev/null >/dev/null 2>&1 &")
RET
 
DEF-FUN( show )
 
SET(i,1)
MSET(j, k)
 
SET(n,1)
LOCATE(1,1)
FOR( LE?(i, h), ++i)
SET(j,1),LOG-INV(tiles)
FOR( LE?(j, w), ++j)
LET( k := [ n ] GET(board) )
COND( IS-NEG?( k ))
PRNCOND("\033[38;5;3m\033[48;5;15m~\OFF" NOT-EQ?(n,nHead) )
IF(GT?(k,-3),IF(tiles,{tile1},{tile2});{"\033[38;5;15m+\OFF"},"\033[38;5;6m\033[48;5;11m \OFF")
ELS
COND( EQ?(dir,N))
IF(tiles,"\033[38;5;9m\033[48;5;15mv\OFF","\033[38;5;9m\033[48;5;15m|\OFF")
 
ELS-COND( EQ?(dir,S))
IF(tiles,"\033[38;5;9m\033[48;5;15m|\OFF","\033[38;5;9m\033[48;5;15m^\OFF")
 
ELS-COND( EQ?(dir,E))
IF(tiles,"\033[38;5;9m\033[48;5;15m<\OFF","\033[38;5;9m\033[48;5;15m-\OFF")
 
ELS
IF(tiles,"\033[38;5;9m\033[48;5;15m-\OFF","\033[38;5;9m\033[48;5;15m>\OFF")
 
CEND
CEND
ELS-COND( {k} IS-EQ?(BORDER))
{"\033[38;5;4m82m\033[48;5;2m57m \OFF"}
 
PRN( [k] GET(symbol),"\OFF")
ELS-COND( {k}IS-EQ?(FOOD) )
COLOR-FG(color food ),IF(tiles,{tile1},{tile2}) //back food)
{"\033[38;5;15m\033[48;5;9m"}
PRN( [k] GET(symbol),{"@\OFF")}
ELS
IF(tiles,{"\033[48;5;28m"tile1},{tile2})
{" PRN( [k] GET(symbol),"\OFF")}
CEND
PRN
LOG-INV(tiles)
++n
NEXT
PRNL
NEXT
color food+=2,
back food-=2, WHEN( EQ?(color food, PLUS-ONE(BACK_FOOD))){
LET( color food:=COLOR_FOOD)
LET( back food:=BACK_FOOD)
}
RET
 
Line 464 ⟶ 689:
 
GET( board ) PLUS(1) »» (jAge)
// this is necessary, because Hopper arrays begining in 1
CART( IS-ZERO?(jAge) ) »» (jR)
Line 471 ⟶ 697:
// ******
{jAge} PUT(board), CLR-RANGE
 
RET
 
DEF-FUN( step )
SET(len,0)
LET( len := [nHead] GET(board) )
SWITCHSELECT(dir)
CASE (N){ nHead -= w, EXIT }
CASE (S){ nHead += w, EXIT }
CASE (W){ --nHead, EXIT }
CASE (E){ ++nHead, EXIT }
SWENDSELEND
SWITCHSELECT( [nHead]CGET(board))
CASE (SPACE){
--len, LET( len := IF( IS-ZEROEQ?(len,0), 1, len) )
[nHead] { len }, CPUT(board) // keep in mind len is negative
GOSUB( age )
Line 490 ⟶ 716:
}
CASE (FOOD){
--len, LETCOND( len := IFNOT(OR( IS-ZEROEQ?(lenLEVEL,3), 1EQ?(LEVEL, len6))) )
--len, LET( len := IF( IS-ZERO?(len), 1, len) )
ELS
++len // quita celda del cuerpo: suma vida!
CEND
[nHead] { len }, CPUT(board)
WHEN(AND(NOT-EQ?(LEVEL,3),NOT-EQ?(LEVEL,6))){ GOSUB( plant ) }
ADD(SCORE,TIME), MOVE-TO(SCORE)
 
{SCORE, 4, 52COLUMNA_PRINT} GOSUB( put score )
LET( TIME := 100 )
++counter, COND( GTEQ?( counter, 525 ) )
LET( TLimit := SUB( TLimit,5 ))
CLAMP(30INF_TIME,100 LIMIT_TIME, TLimit)
LET( counter := 0 )
CEND
WHEN( OR(EQ?(LEVEL,3),EQ?(LEVEL,6))){ ++Consumed stage }
++ConsPrey
COLOR-FG(10)
LOCATE(20,52COLUMNA_PRINT) PRNLPRN("SPEED: ")
LOC-ROW(21), SET-PRN( ROUND(MUL(INV(TLimit),LIMIT_TIME),2), " M/S " )
PRNL( MUL(INV(TLimit),100), " M/S" )
LOC-ROW(23) PRN("CONSUMED SET-ROUND(-1PREY:")
LOC-ROW(2324) PRNLPRN(ConsPrey,"CONSUMED PREY:\OFF")
LOC-ROW(24) PRNL(ConsPrey,"\OFF")
LET( color food:=COLOR_FOOD)
LET( back food:=BACK_FOOD)
SYS("aplay fl/Snake_mascada.wav </dev/null >/dev/null 2>&1 &")
TIC( T ),{TIME, 12, COLUMNA_PRINT} GOSUB( put time )
 
TIC( T ),{TIME, 12, 52} GOSUB( put time )
EXIT
}
LET(CASE-NEGATIVE quit := 1 ){
GOSUB(KILLSOUND)
SYS("aplay fl/Snake_mascada.wav </dev/null >/dev/null 2>&1")
SWEND
LET( quit := 1 )
EXIT
}
DEFAULT {
GOSUB(KILLSOUND)
SYS("aplay fl/Snake_golpe.wav </dev/null >/dev/null 2>&1")
 
LET( quit := 1 )
}
SELEND
RET
 
DEF-FUN( LEVELCLEAR )
GOSUB(KILLSOUND)
GOSUB( level clear )
SYS("aplay fl/Snake_level_clear.wav </dev/null >/dev/null 2>&1")
SLEEP(1)
WHEN( OR( EQ?(LEVEL,3), EQ?(LEVEL,6))){
WHEN( EQ?(Consumed stage,20)){
GOSUB( show )
SYS( "aplay fl/Snake_bono.wav </dev/null >/dev/null 2>&1 &" )
GOSUB(GANA BONO),SLEEP(3)
ADD(SCORE,1000), MOVE-TO(SCORE)
{SCORE, 4, COLUMNA_PRINT} GOSUB( put score )
}
}
GOSUB( another play )
RET
 
DEF-FUN( another play )
++sound index, WHEN( EQ?(sound index,6)){ LET(sound index := 2) }
back tiles+=2, WHEN( EQ?(back tiles,15)){ LET(back tiles:=1) }
 
[back tiles] GET(head back tiles), MOVE-TO(tile1)
[PLUS-ONE(back tiles)] GET(head back tiles), MOVE-TO(tile2)
++LEVEL, WHEN( GT?(LEVEL,7)){ LET(LEVEL:=1) }
++ REAL LEVEL
COLOR-FG(15),LOCATE(26,COLUMNA_PRINT) SET-ITALIC, PRN("LEVEL: ",REAL LEVEL,"\OFF")
 
LET( len := [nHead] GET(board) )
[1:Size] MEM(1) CPUT(board)
CLR-INTERVAL
MEM(len), GOSUB( start )
GOSUB( show )
COND( OR( EQ?(LEVEL,3), EQ?(LEVEL,6)))
GOSUB(challenge stage)
ELS
GOSUB( ready )
CEND
SLEEP(2)
SYS( CAT(CAT("aplay fl/",[sound index]CGET(sounds)), "</dev/null >/dev/null 2>&1 &"))
LET( TIME := TOTAL_TIME )
{TIME, 12, COLUMNA_PRINT} GOSUB( put time )
RET
 
Line 529 ⟶ 822:
 
DEF-FUN( put titles )
LOCATE(2,52COLUMNA_PRINT) PRNLPRN("\033[38;5;15mSCORE\OFF")
{SCORE, 4, 52COLUMNA_PRINT} GOSUB( put score )
LOCATE(10,52COLUMNA_PRINT) PRNLPRN("\033[38;5;11mTIME\OFF")
{TIME, 12, 52COLUMNA_PRINT} GOSUB( put time )
 
COLOR-FG(15)
LOCATE(26,52COLUMNA_PRINT) SET-ITALIC, PRNL PRN("LEVEL: ",REAL S P E E DLEVEL,"\OFF")
LOC-ROWLOCATE(27,COLUMNA_PRINT) SET-INVERSE, PRNLPRN("SLIVES: N A K E!",lives,"\OFF")
 
RET
 
Line 550 ⟶ 844:
LET( p4 := ADD( posx, 4 ))
COLOR-FG(11)
{"\033[38;5;11m\ENF"}
PERF-UP(k, lsb, 1)
LET( nB := VAL( MID( 1, k, sb )) )
Line 557 ⟶ 851:
SET( j, rx )
FOR( LE?(j, ADD( rx, 2 ) ), ++j )
LOCATE(i, j) PRNLPRN( STR-TO-UTF8(CHAR( [ PLUS-ONE(nB), x] CGET(big number) MUL-BY(219) )))
++x
NEXT
Line 563 ⟶ 857:
rx += 4
NEXT
PRNLPRN("\OFF")
RET
 
Line 574 ⟶ 868:
LOCATE ( posx, posy ) FILL-BOX(" ",4,20)
SET(i, 1)
COLOR-FG(15)
{"\033[38;5;15m"}
PERF-UP( i, ln, 1)
LET( s := VAL( MID( 1, i, sp )) )
[ PLUS-ONE(s) ] // set interval to read element of arrays
LOCATE( posx, posy ), PRN ( STR-TO-UTF8( GET(numL1) ))
PRNLLOC-ROW( PLUS-ONE(posx) ), PRN ( STR-TO-UTF8( GET(numL1numL2) ))
LOCATELOC-ROW( PLUS-ONETWO(posx) ),posy PRN ( STR-TO-UTF8( GET(numL3) ))
PRNL ( STR-TO-UTF8( GET(numL2) ))
LOCATE( PLUS-TWO(posx),posy )
PRNL ( STR-TO-UTF8( GET(numL3) ))
posy += 2
NEXT
PRNLPRN("\OFF")
COND( swExtra1 )
COND( GE?(SCORE,5000) )
++lives
FALSE(swExtra1)
SYS( "aplay fl/Snake_bono.wav </dev/null >/dev/null 2>&1 &" )
LOCATE(27,COLUMNA_PRINT) SET-INVERSE, PRN("LIVES: ",lives,"\OFF")
CEND
ELS-COND(swExtra2)
COND( GE?(SCORE,10000) )
++lives
FALSE(swExtra2)
SYS( "aplay fl/Snake_bono.wav </dev/null >/dev/null 2>&1 &" )
LOCATE(27,COLUMNA_PRINT) SET-INVERSE, PRN("LIVES: ",lives,"\OFF")
CEND
CEND
RET
 
Line 611 ⟶ 917:
{"\033[38;5;4m\033[48;5;11m"}
LOC-COL(16)
LOC-ROW(13); PRNLPRN( STR-TO-UTF8(" ▄ ▄▄ ▄ ▄▄ ▄ ▄ "))
LOC-ROW(14); PRNLPRN( STR-TO-UTF8(" █▄▀ █▀ █▄█ █ █ ▀▄▀ "))
LOC-ROW(15); PRNLPRN( STR-TO-UTF8(" ▀ ▀ ▀▀ ▀ ▀ ▀▄▀ ▀ "))
PRNLPRN("\OFF")
RET
 
DEF-FUN( level clear )
{"\033[38;5;4m\033[48;5;11m"}
LOC-COL(17)
LOC-ROW(12); PRN( STR-TO-UTF8( " ▄ ▄▄ ▄ ▄ ▄▄ ▄ "))
LOC-ROW(13); PRN( STR-TO-UTF8( " █ █▀ █ █ █▀ █ "))
LOC-ROW(14); PRN( STR-TO-UTF8( " ▀ ▀▀ ▀ ▀▀ ▀ "))
LOC-ROW(15); PRN( STR-TO-UTF8( " ▄ ▄ ▄▄ ▄ ▄ "))
LOC-ROW(16); PRN( STR-TO-UTF8( " █ █ █▀ █▄█ █▄▀ "))
LOC-ROW(17); PRN( STR-TO-UTF8( " ▀ ▀ ▀▀ ▀ ▀ ▀ ▀ "))
PRN("\OFF")
RET
 
DEF-FUN( challenge stage )
{"\033[38;5;4m\033[48;5;11m"}
LOC-COL(9)
LOC-ROW(12); PRN( STR-TO-UTF8( " ▄ ▄ ▄ ▄ ▄ ▄ ▄▄ ▄ ▄▄ ▄▄ "))
LOC-ROW(13); PRN( STR-TO-UTF8( " █ █▄█ █▄█ █ █ █▀ █ █ █ ▄ █▀ "))
LOC-ROW(14); PRN( STR-TO-UTF8( " ▀ ▀ ▀ ▀ ▀ ▀ ▀ ▀▀ ▀ ▀ ▀▀ ▀▀ "))
LOC-ROW(15); PRN( STR-TO-UTF8( " ▄ ▄ ▄ ▄ ▄▄ ▄▄ "))
LOC-ROW(16); PRN( STR-TO-UTF8( " ▀▄ █ █▄█ █ ▄ █▀ "))
LOC-ROW(17); PRN( STR-TO-UTF8( " ▀ ▀ ▀ ▀ ▀▀ ▀▀ "))
PRN("\OFF")
RET
 
DEF-FUN( GANA BONO )
{"\033[38;5;11m\033[48;5;196m"}
LOC-COL(17)
LOC-ROW(12); PRN( STR-TO-UTF8(" ▄ ▄ ▄ ▄ ▄ ▄ "))
LOC-ROW(13); PRN( STR-TO-UTF8(" █▄▀ █ █ █ █ █ █ ▀▄ "))
LOC-ROW(14); PRN( STR-TO-UTF8(" ▀▄▀ ▀ ▀ ▀ ▀ ▀ "))
LOC-ROW(15); PRN( STR-TO-UTF8(" ▄ ▄ ▄ ▄ "))
LOC-ROW(16); PRN( STR-TO-UTF8(" █ █ █ █ █ █ █ "))
LOC-ROW(17); PRN( STR-TO-UTF8(" █ ▄ ▀▄▀ ▀▄▀ ▀▄▀ "))
PRN("\OFF")
RET
 
Line 620 ⟶ 962:
{"\033[38;5;15m\033[48;5;9m"}
LOC-COL(17)
LOC-ROW(12); PRNLPRN( STR-TO-UTF8(" ▄▄ ▄ ▄ ▄ ▄▄ "))
LOC-ROW(13); PRNLPRN( STR-TO-UTF8(" █ ▄ █▄█ █ █ █ █▀ "))
LOC-ROW(14); PRNLPRN( STR-TO-UTF8(" ▀▀ ▀ ▀ ▀ ▀ ▀ ▀▀ "))
LOC-ROW(15); PRNLPRN( STR-TO-UTF8(" ▄ ▄ ▄ ▄▄ ▄ "))
LOC-ROW(16); PRNLPRN( STR-TO-UTF8(" █ █ █ █ █▀ █▄▀ "))
LOC-ROW(17); PRNLPRN( STR-TO-UTF8(" ▀ ▀ ▀▀ ▀ ▀ "))
PRNLPRN("\OFF")
RET
</syntaxhighlight>
{{out}}
Init game:
<pre>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @ SCORE
@ @
@ @ ┌┐
@ @ ││
@ @ └┘
@ @
@ @
@ @
@ @ TIME
@ @
@ @ ██ ███ ███
@ ▄ ▄▄ ▄ ▄▄ ▄ ▄ @ █ █ █ █ █
@ █▄▀ █▀ █▄█ █ █ ▀▄▀ @ █ █ █ █ █
@ ▀ ▀ ▀▀ ▀ ▀ ▀▄▀ ▀ @ █ █ █ █ █
@ @ ███ ███ ███
@ @
@ $ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @ S P E E D
@ @ S N A K E!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
DEF-FUN( titles )
</pre>
#define COLOR_INI 232
Play game:
#define COLOR_FIN 255
<pre>
SET(k,1)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
PERF-UP(k,2,1)
@ @ SCORE
SET(j,COLOR_INI), SET(jbg,COLOR_FIN)
@ @
PERF-UP(j,COLOR_FIN,1)
@ @ ┌┐┌┐┌┐
COLOR(j, jbg--)
@ @ ├┐┌┘││
LOC-COL(17)
@ @ └┘└┘└┘
@ LOC-ROW(12); PRN(STR-TO-UTF8(" @ "))
@ LOC-ROW(13); PRN(STR-TO-UTF8(" ▄▄ @"))
LOC-ROW(14); PRN(STR-TO-UTF8(" ▀▄ █ █ █▄█ █▄ █▀ "))
@ @
@ LOC-ROW(15); PRN(STR-TO-UTF8(" ▀▀ @ TIME"))
@ LOC-ROW(16); PRN(STR-TO-UTF8(" ▄▄ ▄▄ ▄▄ @"))
LOC-ROW(17); PRN(STR-TO-UTF8(" ▀▄ █▄█ █▀ █▀ █ █ "))
@ @ ███ ███
LOC-ROW(18); PRN(STR-TO-UTF8(" ▀ ▀ ▀▀ ▀▀ ▀▄▀ "))
@ @ █ █ █
@ LOC-ROW(19); PRN(STR-TO-UTF8(" @ █ █ █ "))
MICROSECS(20000)
@ @ █ █ █
NEXT
@ @ █ ███
SET(j,COLOR_FIN), SET(jbg,COLOR_INI)
@ @
PERF-DOWN(j,COLOR_INI,1)
@ @
COLOR(j, jbg++)
@ @
LOC-COL(17)
@ ~~~~~~ @ SPEED:
@ ~ LOC-ROW(12); PRN(STR-TO-UTF8(" @ 1.00 M/S"))
@ ~ LOC-ROW(13); PRN(STR-TO-UTF8(" ▄▄ @ "))
LOC-ROW(14); PRN(STR-TO-UTF8(" ▀▄ █ █ █▄█ █▄ █▀ "))
@ ~~~~~~ $ @ CONSUMED PREY:
@ LOC-ROW(15); PRN(STR-TO-UTF8(" ▀▀ @ 11"))
@ LOC-ROW(16); PRN(STR-TO-UTF8(" ▄▄ ▄▄ ▄▄ @"))
LOC-ROW(17); PRN(STR-TO-UTF8(" ▀▄ █▄█ █▀ █▀ █ █ "))
@ @ S P E E D
@ LOC-ROW(18); PRN(STR-TO-UTF8(" ▀▀ ▀▀ ▀▄▀ @ S N A K E!"))
LOC-ROW(19); PRN(STR-TO-UTF8(" "))
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
MICROSECS(20000)
NEXT
NEXT
PRN("\OFF")
RET
 
DEF-FUN( prepare maze )
</pre>
REPL(12,ADD(MUL(w, 3),20),"333333333333",Maze), MOVE-TO(Maze)
Game over:
REPL(12,ADD(MUL(w, 24),20),"333333333333",Maze), MOVE-TO(Maze)
<pre>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
REPL(12,ADD(MUL(w, 6),7),"333333333333",Maze), MOVE-TO(Maze)
@ @ SCORE
REPL(12,ADD(MUL(w, 6),33),"333333333333",Maze), MOVE-TO(Maze)
@ @
@ @ ┐┌┐┌┐┌┐
@ @ │└┐└┐││
@ @ ┴└┘└┘└┘
@ @
@ @
@ @
@ @ TIME
@ @
@ ▄▄ ▄ ▄ ▄ ▄▄ @ █ █ ███
@ █ ▄ █▄█ █ █ █ █▀ @ █ █ █ █
@ ▀▀ ▀ ▀ ▀ ▀ ▀ ▀▀ @ ███ █ █
@ ▄ ▄ ▄ ▄▄ ▄ @ █ █ █
@ █ █ █ █ █▀ █▄▀ @ █ ███
@ ~ ▀ ▀ ▀▀ ▀ ▀ @
@ ~ @
@ ~ @
@ ~ @ SPEED:
@ ~ @ 1.10 M/S
@ ~~~~~~~~~~~~~ @
@ ~ @ CONSUMED PREY:
@ ~ @ 17
@ ~ @
@ ~ @ S P E E D
@ ~ $ @ S N A K E!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
REPL(12,ADD(MUL(w, 21),7),"333333333333",Maze), MOVE-TO(Maze)
</pre>
REPL(12,ADD(MUL(w, 21),33),"333333333333",Maze), MOVE-TO(Maze)
SET(i,7)
PERF-UP(i,10,1)
REPL(1,ADD(MUL(w, i),7),"3",Maze), MOVE-TO(Maze)
REPL(1,ADD(MUL(w, i),44),"3",Maze), MOVE-TO(Maze)
REPL(1,ADD(MUL(w, ADD(i,10)),44),"3",Maze), MOVE-TO(Maze)
REPL(1,ADD(MUL(w, ADD(i,10)),7),"3",Maze), MOVE-TO(Maze)
NEXT
RET
</syntaxhighlight>
{{out}}
[[File:Captura_de_pantalla_de_2022-10-07_14-13-27.png]]
 
=={{header|AutoHotkey}}==
543

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.