A downloadable game for Windows, macOS, Linux, and Android

 MOFIAR / MOFIAR_PVP

(English)

A ZX Spectrum game for the 2024 BASIC 10Liner contest from Homeputerium

https://gkanold.wixsite.com/homeputerium

MOFIAR: EXTREME-256

MOFIAR_PVP: PUR-120 - not in contest, presented after deadline

Introduction

MOFIAR (My Own Four In A Row, or Connect 4) is my 10-line BASIC implementation of  Connect 4 board game whose objective is to line up 4 pieces before your opponent on a 7x6 board either horizontally, vertically or diagonally.

A game for ZX Spectrum 16/48K.

Game description

In this game you play against the ZX Spectrum (MOFIAR) or against other player (MOFIAR_PVP). The first player to line up 4 checkers wins the game.  Each player throws his checker alternately, you can choose any of the 7 columns of the board by pressing the key 1 to 7 corresponding to that column.  The piece falls to the lowest available row in that column.

Be patient, the ZX Spectrum computer is almost the same age as you, and it takes its time to choose the best option, wait your turn to throw your piece.

The game displays messages in Spanish, depending on the message you will have the following options:

    • “Pulsa una tecla” – Press any key to continue.

    • “Su turno” – It's the player's turn, choose column with keys 1 to 7 to drop the tile.

    • “ZX Juega” – It's ZX Spectrum's turn. Wait while he thinks about his move.

    • “Espere” – Wait while the ZX Spectrum checks the board for 4 in a row.

    • “Jugador gana” – Player has won the game, press a key for a new game

    • “ZX gana” – Computer has won the game, press a key for a new game

Loading the game

The game is distributed in a .tap file,  mofiar.tap / mofiar_pvp.tap

You can play it in your favourite ZX Spectrum emulator.  If you do not have one, I recommend FUSE emulator http://fuse-emulator.sourceforge.net/

Dowload and install it.  It is recommendable to use a Spectrum 16K or 48K machine.

Load the game by drag-n-drop the .tap or using the menú option file→open.  

The game starts automatically. 

Play online:


MOFIAR / MOFIAR_PVP

(Español)

Un juego de ZX Spectrum para el concurso BASIC 10Liner 2024 de Homeputerium

https://gkanold.wixsite.com/homeputerium

MOFIAR: EXTREME-256

MOFIAR_PVP: PUR-120 - presentado fuera de plazo, no participa

Introducción

MOFIAR (My Own Four In A Row) Mi Propio Juego de Cuatro en Raya, o Conecta 4, es mi implementación en 10 Líneas de BASIC del juego de mesa Conecta 4 cuyo objetivo es conseguir alinear 4 fichas antes que tu adversario en un tablero de 7x6 ya sea en horizontal, vertical o diagonal.

Un juego para ZX Spectrum 16/48K.

Descripción del juego

En este juego te enfrentas al ZX Spectrum (MOFIAR) o contra otro jugador (MOFIAR_PVP), el primero que consiga alinear 4 fichas gana la partida. Cada jugador lanza su ficha alternativamente, se puede elegir cualquiera de las 7 columnas del tablero pulsando la tecla 1 a 7 correspondiente a dicha columna. La ficha cae a la fila más baja disponible en dicha columna.

Se paciente, el ordenador ZX Spectrum tiene casi la misma edad que tú, y se toma su tiempo para elegir la mejor opción, espera tu turno para echar tu ficha.

El juego muestra mensajes en español, según el mensaje tendrás las siguientes opciones:

  • “Pulsa una tecla” – Pulsa cualquier tecla para continuar
  • “Su turno” – Es el turno del jugador, elige columna con la teclas 1 a 7 para soltar la ficha
  • “ZX Juega” – Es el turno de ZX Spectrum espere mientras piensa su jugada
  • “Espere” – Espere mientras el ZX Spectrum verifica el tablero buscando si hay 4 en raya
  • “Jugador gana” – El jugador ha ganado la partida, pulse una tecla para un nuevo juego
  • “ZX gana” – El ordenador ha ganado la partida, pulse una tecla para un nuevo juego

Cargar el juego

El juego se distribuye en un archivo .tap, mofiar.tap / mofiar_pvp.tap

Puedes jugarlo en tu emulador de ZX Spectrum favorito. Si no tienes uno, te recomiendo el emulador FUSE http://fuse-emulator.sourceforge.net/

Descárgalo e instálalo. Es recomendable utilizar una máquina Spectrum 16K o 48K.

Carga el juego arrastrando y soltando el .tap o usando la opción del menú file→open.

El juego se inicia automáticamente.

Si paras el juego para ver el listado, debes ejecutarlo de nuevo con RUN.

Sources / Código fuente

MOFIAR:

10 DIM h(12,13): DIM r(3,13): DIM f$(3,8): DEF FN c(x,y,w,z)=h(y,x)+h(y+z,x+w)+h(y+2*z,x+2*w)+h(y+3*z,x+3*w): LET t=0: GO TO 100: DATA 1+INT (RND*2),-1,1,0,0,0,0," MOFIAR - Conecta 4"," 1234567"," ---------","Su turno","ZX juega","Espere"
20 RESTORE 60: READ s,a,g,l,m,o,p: FOR i=(20*(g+(k=3))+j-3) TO j: PRINT ".";: RESTORE 30: READ o,p,b,u,d,g,g,g,l,m,i: LET a=(ABS s>ABS b)+(s<b)*(ABS s=ABS b): LET s=s*a+b*NOT a: LET a=(ABS s>ABS u)+(s<u)*(ABS s=ABS u): LET s=s*a+u*NOT a: LET a=(ABS s>ABS d)+(s<d)*(ABS s=ABS d): LET s=s*a+d*NOT a: NEXT i: RETURN
30 FOR n=4 TO 10: LET j=n: LET k=r(1,j): LET r(2,j)=0: IF k>3 THEN GO SUB 20: LET r(2,j)=s: LET k=k-1: LET r(3,j)=0: IF k>3 THEN GO SUB 20: LET r(3,j)=s: DATA o+1,p-1,FN c(i,k,1,0),FN c(i,o,1,1),FN c(i,p,1,-1),2*(ABS b=4),g+(g=0)*3*(ABS u=4),g+(g=0)*4*(ABS d=4),(i-1)*(g>0),k*(g=2)+o*(g=3)+p*(g=4)-1,i+g*j
40 NEXT n: LET c=4: LET e=r(2,c): FOR q=5 TO 10: LET f=r(2,q): LET l=(ABS f>=ABS e)*((r(3,q)<>3)*(INT (RND*2)) OR (ABS f=3)): LET l=l-l*(f=3)*(e=-3): LET c=q*l+c*NOT l: LET e=f*l+e*NOT l: NEXT q: RETURN
50 PRINT AT 18,0;f$(3);AT 19,0,,,,;AT 19,0;: LET k=r(1,j): LET r(1,j)=k-1: LET h(k,j)=w: LET l=j: GO SUB 90: LET j=l: GO SUB 20: FOR i=1 TO 4: PRINT INK 8;AT m,l; OVER 1; INVERSE (g>0);" ": LET l=l+(g>1): LET m=m+(g<>2)-2*(g=4): NEXT i: RETURN
60 LET w=-1+2*(t=1): GO SUB 50: LET t=1+(t=1): PRINT AT 18,0; FLASH (t=1);f$(t): GO TO 70+10*(t=1)+20*(g>0)+10*(g>0)*(t=2): DATA FN c(j,k,0,1),ABS s,(a=4),j-1,k-1,k-4,k+4
70 LET e=0: GO SUB 30: FOR i=0 TO 1: LET j=(e=0)*(4+INT (RND*7))+(e<>0)*c: LET i=i-(h(4,j)<>0): NEXT i: GO TO 60
80 FOR i=-1 TO 0 STEP 0: LET i$=INKEY$: LET i=i+(i$>"0" AND i$<"8"): NEXT i: LET j=3+VAL i$: GO TO 60+20*(h(4,j)<>0)
90 PRINT AT 0,0;b$,,,c$: FOR i=4 TO 9: PRINT AT i-1,2;"|";: FOR j=4 TO 10: PRINT INK 2+4*(h(i,j)=1);"\* \*"(2+h(i,j));: NEXT j: PRINT "|": NEXT i: PRINT d$;AT 19,0;: RETURN
100 PAUSE 1: PRINT FLASH 1;AT 18,0;"ZX Gana" AND (t=1);"Jugador Gana" AND (t=2);" Pulsa una tecla ": PAUSE 0: PAPER 5: BORDER 5: CLS : RESTORE : READ t,w,v,k,g,l,m,b$,c$,d$,f$(1),f$(2),f$(3): FOR i=4 TO 10: FOR j=4 TO 10: LET h(i,j)=0: LET r(v,j)=9*(v=1): NEXT j: LET v=v+(v<3): NEXT i: GO SUB 90: PRINT AT 18,0; FLASH (t=1);f$(t): GO TO 70+10*(t=1)


MOFIAR_PVP:

10 DEF FN c(x,y,w,z)=h(y,x)+h(y+z,x+w)+h(y+2*z,x+2*w)+h(y+3*z,x+3*w): DIM h(12,13): DIM r(3,13): DIM f$(3,9): LET t=0: GO TO 90: DATA 1+INT (RND*2),-1,1,0,0
20 RESTORE 80: READ s,a,g,l,m,o,p: FOR i=(20*(g+(k=3))+j-3) TO j: DATA 0,0," Connect 4"," 1234567"," ---------","Player 1","Player 2","Wait"
30 PRINT ".";: RESTORE 40: READ o,p,b,u,d,g,g,g,l,m,i: LET a=FN e(s,b): LET s=s*a+b*NOT a: LET a=FN e(s,u): LET s=s*a+u*NOT a: LET a=FN e(s,d): LET s=s*a+d*NOT a: NEXT i: RETURN
40 DEF FN e(s,b)=(ABS s>ABS b)+(s<b)*(ABS s=ABS b): PRINT AT 18,0;f$(3);AT 19,0,,,,;AT 19,0;: DATA o+1,p-1,FN c(i,k,1,0),FN c(i,o,1,1),FN c(i,p,1,-1)
50 LET k=r(1,j): LET r(1,j)=k-1: LET h(k,j)=w: LET l=j: GO SUB 80: LET j=l: GO SUB 20: FOR i=1 TO 4: PRINT INK 8;AT m,l; OVER 1; INVERSE (g>0);" ": LET l=l+(g>1): LET m=m+(g<>2)-2*(g=4): NEXT i: RETURN
60 LET w=-1+2*(t=1): GO SUB 40: LET t=1+(t=1): PRINT AT 18,0; FLASH 1; PAPER 2+4*(t=1);f$(t): GO TO 70+20*(g>0): DATA 2*(ABS b=4),g+(g=0)*3*(ABS u=4),g+(g=0)*4*(ABS d=4)
70 FOR i=-1 TO 0 STEP 0: LET i$=INKEY$: LET i=i+(i$>"0" AND i$<"8"): NEXT i: LET j=3+VAL i$: GO TO 60+10*(h(4,j)<>0): DATA (i-1)*(g>0),k*(g=2)+o*(g=3)+p*(g=4)-1,i+g*j
80 PRINT AT 0,0;b$,,,,c$: FOR i=4 TO 9: PRINT AT i-1,2;"|";: FOR j=4 TO 10: PRINT INK 2+4*(h(i,j)=1);"\* \*"(2+h(i,j));: NEXT j: PRINT "|": NEXT i: PRINT d$;AT 19,0;: RETURN : DATA FN c(j,k,0,1),ABS s
90 PAUSE 1: PRINT FLASH 1;AT 18,0;f$(1+(t=1)) AND (t>0);"Wins." AND (t>0);" Press any key ": PAUSE 0: PAPER 5: BORDER 5: CLS : RESTORE : READ t,w,v,k,g,l: DATA (a=4),j-1,k-1,k-4,k+4
100 READ m,b$,c$,d$,f$(1),f$(2),f$(3): FOR i=4 TO 10: FOR j=4 TO 10: LET h(i,j)=0: LET r(v,j)=9*(v=1): NEXT j: LET v=v+(v<3): NEXT i: GO SUB 80: PRINT AT 18,0; FLASH (t=1);f$(t): GO TO 70


StatusReleased
PlatformsWindows, macOS, Linux, Android
Rating
Rated 5.0 out of 5 stars
(1 total ratings)
AuthorAvlixa
GenrePuzzle
Tags10liner, basic, conecta4, juegos-de-mesa, ZX Spectrum

Download

Download
mofiar_pvp.zip 492 kB
Download
mofiar-basic10liner 2024.zip 561 kB
Download
Play online files 4.5 kB

Leave a comment

Log in with itch.io to leave a comment.