1  REM  ****  HP BASIC PROGRAM LIBRARY  **********************************
2  REM
3  REM        GAME:  CLASSIC MATRIX OF GAME THEORY
4  REM
5  REM        36265  REV A  --  2/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  **************************************
1000  DIM A[20,20],B[20,20],C[20],D[20,20],F[20],G[20]
1005  PRINT "     THIS PROGRAM PLAYS THE CLASSIC MATRIX GAME.  SEE S. VAJDA"
1010  PRINT "AN INTRODUCTION TO LINEAR PROGRAMMING AND THE THEORY OF GAMES"
1015  PRINT "OR ANY BOOK ON FINITE MATHEMATICS FOR A DESCRIPTION."
1020  PRINT '10'10'10"INPUT NUMBER OF YOUR STRATEGIES";
1025  INPUT M
1030  PRINT "AND THE NUMBER OF MINE";
1035  INPUT N
1040  PRINT '10'10"INPUT THE GAME MATRIX ROW BY ROW, YOU HAVE ROW STRATEGIES,"
1045  PRINT "AND RECEIVE PAYOFFS";
1050  MAT  INPUT A[M,N]
1052  PRINT '13'10'10"HERE IS A COPY OF THE GAME MATRIX."
1054  PRINT 
1055  MAT  PRINT A
1060  MAT B=ZER[M,N]
1065  MAT B=A
1070  M1=M
1075  N1=N
1080  GOSUB 1090
1085  GOTO 1160
1090  MAT C=ZER[M1]
1095  Q9=B[1,1]
1100  FOR A=1 TO M1
1105  C[A]=B[A,1]
1110  FOR B=1 TO N1
1115  C[A]=(C[A]) MIN (B[A,B])
1120  Q9=(Q9) MAX (B[A,B])
1125  NEXT B
1130  NEXT A
1135  M3=C[1]
1140  FOR A=1 TO M1
1145  M3=(M3) MAX (C[A])
1150  NEXT A
1155  RETURN 
1160  M9=M3
1165  MAT B=ZER[N,M]
1170  MAT B=TRN(A)
1175  MAT B=(-1)*B
1180  M1=N
1185  N1=M
1190  GOSUB 1090
1195  MAT B=(-1)*B
1200  IF M9+M3=0 THEN 1570
1205  MAT D=CON[M,N]
1210  Q9=Q9+1
1215  MAT D=(Q9)*D
1220  MAT B=ZER[M,N]
1225  MAT B=A+D
1230  MAT D=CON[M+1,N+1]
1235  D[M+1,N+1]=0
1240  FOR A=1 TO M
1245  FOR B=1 TO N
1250  D[A,B]=B[A,B]
1255  NEXT B
1260  NEXT A
1265  MAT B=ZER[M+1,N+1]
1270  MAT B=D
1275  MAT F=ZER[M]
1280  MAT G=ZER[N]
1285  FOR A=1 TO M
1290  F[A]=-A
1295  NEXT A
1300  FOR A=1 TO N
1305  G[A]=A
1310  NEXT A
1315  J=1
1320  IF B[M+1,J]>0 THEN 1340
1325  J=J+1
1330  IF J<N+1 THEN 1320
1335  GOTO 1525
1340  K1=0
1345  FOR A=1 TO M
1350  IF B[A,N+1]=0 THEN 1360
1355  K1=(K1) MIN (B[A,J]/B[A,N+1])
1360  NEXT A
1365  FOR A=1 TO M
1370  IF B[A,J] <= 0 OR B[A,N+1]=0 THEN 1380
1375  K1=(K1) MAX (B[A,J]/B[A,N+1])
1380  NEXT A
1385  FOR A=1 TO M
1390  IF B[A,N+1]=0 THEN 1400
1395  IF K1=B[A,J]/B[A,N+1] THEN 1405
1400  NEXT A
1405  I=A
1410  FOR A=1 TO M+1
1415  IF A=I THEN 1455
1420  FOR B=1 TO N+1
1425  IF B=J THEN 1450
1430  K=B[A,B]
1435  B[A,B]=B[A,B]-B[I,B]*B[A,J]/B[I,J]
1440  IF ABS(K)*.000001 <= ABS(B[A,B]) THEN 1450
1445  B[A,B]=0
1450  NEXT B
1455  NEXT A
1460  FOR A=1 TO M+1
1465  IF A=I THEN 1475
1470  B[A,J]=-1*B[A,J]/B[I,J]
1475  NEXT A
1480  FOR A=1 TO N+1
1485  IF A=J THEN 1495
1490  B[I,A]=B[I,A]/B[I,J]
1495  NEXT A
1500  B[I,J]=1/B[I,J]
1505  K=F[I]
1510  F[I]=G[J]
1515  G[J]=K
1520  GOTO 1315
1525  MAT G=ZER[N]
1530  FOR A=1 TO M
1535  IF F[A]<0 THEN 1545
1540  G[F[A]]=B[A,N+1]
1545  NEXT A
1550  MAT G=(-1/B[M+1,N+1])*G
1555  V=-1/B[M+1,N+1]
1560  V=V-Q9
1565  GOTO 1600
1570  MAT G=ZER[N]
1575  FOR A=1 TO N
1580  IF M3=C[A] THEN 1590
1585  NEXT A
1590  G[A]=1
1595  V=M9
1600  S2=S=V1=0
1605  IF V <= 0 THEN 1620
1610  PRINT "YOU PAY ME "V" FOR EACH PLAY."
1615  V1=1
1620  ENTER 5,V2,V$
1625  IF V2<0 THEN 1640
1630  IF V$ <> "CAESAR" THEN 1640
1635  V1=1
1640  DIM V$[10]
1645  X=1
1650  PRINT 
1655  PRINT "HOW MANY TIMES WILL WE PLAY THE GAME";
1660  INPUT X1
1665  X2=0
1670  X3=RND(1)
1675  FOR A=1 TO N
1680  X2=X2+G[A]
1685  IF X3 <= X2 THEN 1695
1690  NEXT A
1695  PRINT '10'10'10"WHAT ROW DO YOU PLAY";
1700  INPUT Y1
1705  PRINT LIN(2);"I CHOSE COLUMN "A" ."
1710  S1=A[Y1,A]-V*V1
1715  PRINT '10"PAY-OFF IS "A[Y1,A]" ."
1720  S=S+S1
1725  S2=S2-S1
1730  IF S1>0 THEN 1745
1735  PRINT "MY NET GAIN IS "ABS(S1)"UNITS."
1740  GOTO 1765
1745  IF S1=0 THEN 1760
1750  PRINT "YOUR NET GAIN IS "S1" UNITS."
1755  GOTO 1765
1760  PRINT "NEITHER OF US GAINS ANYTHING."
1765  PRINT "YOU HAVE A TOTAL OF "S" POINTS,"
1770  PRINT "I HAVE "S2" POINTS."
1775  X=X+1
1780  IF X1<X THEN 1790
1785  GOTO 1665
1790  PRINT '10'10'10'10'10"******************************************************"'13'10'10
1795  IF S=S2 THEN 1835
1800  IF S<S2 THEN 1820
1805  PRINT "YOU WIN BY A TOTAL OF "S" TO "S2" ."
1810  PRINT "GOOD GOING.."
1815  GOTO 1840
1820  PRINT "I WIN BY A TOTAL OF "S2" TO "S"."
1825  PRINT "DON'T FEEL BAD..."
1830  GOTO 1840
1835  PRINT "IT IS A "S" -ALL TIE...CONGRATULATIONS."
1840  END 
