Apagada docs

Aprendiendo a programar el pasado

Herramientas de usuario

Herramientas del sitio


es:basic:mini_mancala
Mini Mancala para Chipmunk Basic

por José GMY (Nepenthes)

Mancala es un juego de fichas en el que cada jugador toma una pila de monedas, semillas o fichas de un círculo de “pozos” y redistribuye las monedas, fichas o semillas colocando una en cada pozo, comenzando desde el pozo siguiente al de origen de las fichas. Las semillas que caen en dos pozos especiales en los extremos del tablero se consideran ganadas por los jugadores. Gana el jugador con más semillas en su pozo especial.

Este es un programa para Chipmunk Basic que juega una versión mínima de mancala, llamada MiniMancala, que appareció en la revista Investigación y Ciencia (Scientific American).

10 rem MINI MANCALA
20 rem BASED ON CHRISTIAN FREELING "Glassbead and company" document.
30 dim pit(4)
40 for f = 1 to 4 : pit(f) = 2 : next f
50 input "Select starting player: Computer or Human (C/H)";r$
60 start = -1
70 if r$ = "C" or r$ = "c" then start = 1
80 if r$ = "H" or r$ = "h" then start = 0
90 if start = -1 then 50
100 print "Me:  [";pit(4);"] [";pit(3);"]"
110 print "You: [";pit(1);"] [";pit(2);"]"
120 if start = 0 then gosub 1000
130 if start = 1 then gosub 2000
135 winner = -1
140 if (pit(4) or pit(3)) = 0 then winner = 0
150 if (pit(1) or pit(2)) = 0 then winner = 1
160 start = (start+1) mod 2
170 if winner = -1 then 100
180 if winner = 1 then print "I "; :  else print "You ";
190 print "win"
999 end
1000 rem Human plays
1010 input "Take stones from which pit (1 or 2)";r
1020 b = pit(r)
1030 if b > 0 then 1050
1040 print "That pit is out of stones!" : goto 1010
1050 b = pit(r) : pit(r) = 0 : for f = 1 to b
1060 r = r+1 : if r > 4 then r = 1
1070 pit(r) = pit(r)+1
1080 next f
1090 return
2000 rem Computer plays
2010 rem Take from pit 4 or pit 3?
2020 rem Strategy:
2030 rem a) if a pit is empty, take from the other (it's compulsory).
2040 rem b) if pit3 has 1, take from pit3 to pit4
2050 rem c) if pit4 has 3
2060 if pit(3) = 0 then r = 4 : goto 1050
2070 if pit(4) = 0 then r = 3 : goto 1050
2080 if pit(3) = 1 then r = 3 : goto 1050
2090 rem PROBAR 2 MOVIMIENTOS
2100 dim ph(4) : dim score(4)
2110 for r1 = 3 to 4
2120 for f = 1 to 4 : ph(h) = pit(h) : next f
2130 r = r1
2140 gosub 2500
2150 for r2 = 1 to 2
2160 r = r2
2170 gosub 2500
2180 if ph(1) = 0 and ph(2) = 0 then score(r1) = score(r1)+1
2190 if ph(3) = 0 and ph(4) = 0 then score(r1) = score(r1)-2
2200 next r2 : next r1
2210 maxscore = -999
2220 for f = 3 to 4
2230 if score(f) > maxscore then r = f : maxscore = score(f)
2240 next f
2250 print "Computer has its move:"
2260 goto 1050
2500 b = ph(r) : ph(r) = 0 : for f = 1 to b
2510 r = r+1 : if r > 4 then r = 1
2520 ph(r) = ph(r)+1
2530 next f
2540 return
5000 dim p(4)
5010 for f = 1 to 4
5020 p(f) = 0
5030 next f
5040 n = 1
5050 p(n) = p(n)+1
5060 if p(n) > 8 then p(n) = 0 : n = n+1 : if n <= 4 then 5050
5070 if p(1)+p(2)+p(3)+p(4) = 8 then print p(1);p(2);p(3);p(4)
5080 if n <= 4 then 5040

Análisis de la estrategia

Juego de los pozos
(cuatro pozos con reglas tipo mancala/kalah)

Jugadas ganadoras (gana el que las produce si juega las piezas de la izquierda)

1) Gana el que produce una combinación como
    XX/0n, donde n<3. Por tanto, son ganadoras las jugadas:
    
    XX/01=07/0116/01 25/01 34/01 43/01 52/01 61/01 70/01
    
    XX/02=08/0217/02 26/02 35/02 44/02 53/02 62/02 71/02 80/02 
 
0 4 /3 1:
    Los movimientos posibles son:
    
    a) 04/31>15/02>06/02>26/00 pierde.
    
    b) 04/31>14/30>05/30>16/01, entonces > 26/00 pierde.
Este sitio web utiliza cookies. Al utilizar el sitio web, usted acepta almacenar cookies en su computadora. También reconoce que ha leído y entendido nuestra Política de privacidad. Si no está de acuerdo abandone el sitio web.Más información
es/basic/mini_mancala.txt · Última modificación: 2015/05/03 11:15 por nepenthes