home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
551-575
/
apd559
/
amoner3
/
pegs.amos
/
pegs.amosSourceCode
Wrap
AMOS Source Code
|
1993-11-29
|
6KB
|
302 lines
'
' Pegs - By Gal-on Broner.
' BarBarian Minds 1991
'
Default : Curs Off
Dim CROSS(7,7),FROM(76),MIDDLE(76),DEST(76),PEGS(33)
Gosub FIND_CROSS_ARRAY
BEGIN:
SCORE=0
GAME
'
' Game over. Give score, ask for another game.
'
Ink 2,0
Text 10,20,"You got"+Str$(SCORE)
Text 10,35,"pegs left."
Text 10,50,"Press <return>"
A$=""
Repeat : A$=Inkey$ : Until A$=Chr$(13)
Ink 0
Text 10,20," "
Text 10,35," "
Text 10,50," "
Ink 2,0
RANK$="A fool."
If SCORE<10 and SCORE=>5 Then RANK$="Avarage."
If SCORE<5 and SCORE>1 Then RANK$="Good."
If SCORE=1 Then RANK$="Master."
Text 10,20,"Your rank is:"
Text 10,35,RANK$
Text 10,50,"Press <return>"
A$=""
Repeat : A$=Inkey$ : Until A$=Chr$(13)
Ink 0
Text 10,20," "
Text 10,35," "
Text 10,50," "
Ink 4
Text 10,20,"Another Game (Y/N)"
YORN:
A$=""
Repeat : A$=Inkey$ : Until A$<>""
A$=Upper$(A$)
If A$="Y" Then Goto BEGIN
If A$="N" Then Run "Autoexec.Amos"
Goto YORN
End
FIND_CROSS_ARRAY:
For LOO=1 To 7
For LOO1=1 To 7
Read CROSS(LOO1,LOO)
Next LOO1
Next LOO
For LOO=1 To 7
For LOO1=1 To 7
If CROSS(LOO1,LOO)<>0
If LOO>2
Gosub CHECKUP
End If
If LOO<6
Gosub CHECKDOWN
End If
If LOO1>2
Gosub CHECKLEFT
End If
If LOO1<6
Gosub CHECKRIGHT
End If
End If
Next LOO1
Next LOO
' Print COUNT
Return
'
CHECKUP:
FROM=CROSS(LOO1,LOO)
MIDDLE=CROSS(LOO1,LOO-1)
DEST=CROSS(LOO1,LOO-2)
Gosub CHECKPRINT
Return
CHECKDOWN:
FROM=CROSS(LOO1,LOO)
MIDDLE=CROSS(LOO1,LOO+1)
DEST=CROSS(LOO1,LOO+2)
Gosub CHECKPRINT
Return
CHECKLEFT:
FROM=CROSS(LOO1,LOO)
MIDDLE=CROSS(LOO1-1,LOO)
DEST=CROSS(LOO1-2,LOO)
Gosub CHECKPRINT
Return
CHECKRIGHT:
FROM=CROSS(LOO1,LOO)
MIDDLE=CROSS(LOO1+1,LOO)
DEST=CROSS(LOO1+2,LOO)
Gosub CHECKPRINT
Return
CHECKPRINT:
If DEST>0
Inc COUNT
FROM(COUNT)=FROM
MIDDLE(COUNT)=MIDDLE
DEST(COUNT)=DEST
End If
Return
'
' The Cross coord array.
'
Data 0,0,1,2,3,0,0
Data 0,0,4,5,6,0,0
Data 7,8,9,10,11,12,13
Data 14,15,16,17,18,19,20
Data 21,22,23,24,25,26,27
Data 0,0,28,29,30,0,0
Data 0,0,31,32,33,0,0
Procedure GAME
Shared FROM(),MIDDLE(),DEST(),PEGS(),SCORE
'
' Set up pegs array.
'
For LOO=1 To 33
PEGS(LOO)=1
Next LOO
PEGS(17)=0
CROSS
'
' Make a move.
'
MOVE:
Ink 2,0
Text 10,30,"Choose a peg"
Text 10,45,"to move."
Repeat : Until Mouse Click
Ink 0
Text 10,30," "
Text 10,45," "
CHOOSEN=Mouse Zone
'
' First we check if the player choosed a peg.
'
If CHOOSEN=0 Then Goto MOVE
'
' Now we check if a peg exists in that posiotion.
'
If PEGS(CHOOSEN)=0
Ink 4,0
Text 10,20,"No peg in"
Text 10,35,"this hole."
Text 10,50,"Press <return>"
A$=""
Repeat : A$=Inkey$ : Until A$=Chr$(13)
Ink 0
Text 10,20," "
Text 10,35," "
Text 10,50," "
Goto MOVE
End If
'
' Mark the choosen peg.
'
MARK_PEG[CHOOSEN,"choosen"]
'
' Can this peg move?
'
CAN_MOVE=False
For LOO=1 To 76
If FROM(LOO)=CHOOSEN
If(PEGS(DEST(LOO))=0) and(PEGS(MIDDLE(LOO))=1)
CAN_MOVE=True
End If
End If
Next LOO
If CAN_MOVE=False : Rem can not move.
Ink 4,0
Text 10,20,"This peg have"
Text 10,35,"nowhere to go."
Text 10,50,"Press <return>"
A$=""
Repeat : A$=Inkey$ : Until A$=Chr$(13)
Ink 0
Text 10,20," "
Text 10,35," "
Text 10,50," "
MARK_PEG[CHOOSEN,"full"]
Goto MOVE
End If
'
' Ok, now get destination.
'
MOVE_INTO:
Ink 2,0
Text 10,30,"Choose a hole"
Text 10,45,"to move into."
Repeat : Until Mouse Click
Ink 0
Text 10,30," "
Text 10,45," "
DESTINATION=Mouse Zone
'
' Check if destination exsist.
'
If DESTINATION=0 Then Goto MOVE_INTO
'
' Check if move legal
'
LEGAL=False
For LOO=1 To 76
If FROM(LOO)=CHOOSEN and DEST(LOO)=DESTINATION
If PEGS(DESTINATION)=0 and PEGS(MIDDLE(LOO))=1
LEGAL=True
MIDDLEPEG=MIDDLE(LOO)
End If
End If
Next LOO
If LEGAL=False : Rem move illegal
Ink 4,0
Text 10,20,"Illegal move!"
Text 10,35,"Press <return>"
A$=""
Repeat : A$=Inkey$ : Until A$=Chr$(13)
Ink 0
Text 10,20," "
Text 10,35," "
MARK_PEG[CHOOSEN,"full"]
Goto MOVE
End If
'
' The move is ok! make move.
'
PEGS(CHOOSEN)=0
MARK_PEG[CHOOSEN,"empty"]
PEGS(DESTINATION)=1
MARK_PEG[DESTINATION,"full"]
PEGS(MIDDLEPEG)=0
MARK_PEG[MIDDLEPEG,"empty"]
'
' Check if game finished.
'
For LOO=1 To 76
If(PEGS(FROM(LOO))=1) and(PEGS(MIDDLE(LOO))=1) and(PEGS(DEST(LOO))=0)
Goto MOVE
End If
Next LOO
For LOO=1 To 33
If PEGS(LOO)=1 Then Inc SCORE
Next LOO
End Proc
Procedure CROSS
Shared CROSS()
Reserve Zone
'
' There are 33 holes.
'
Reserve Zone 33
Cls 0
'
' Draw Cross
'
Ink 8
Bar 90,70 To 230,130
Bar 130,30 To 190,170
Ink 2
'
' Draw pegs and set the zones.
'
COUNT=0 : Rem count is the current zone number
For LOO=1 To 7
For LOO1=1 To 7
If CROSS(LOO1,LOO)<>0
Circle 100+(LOO1-1)*20,40+(LOO-1)*20,7
If CROSS(LOO1,LOO)=17
Ink 7
Else
Ink 6
End If
Paint 100+(LOO1-1)*20,40+(LOO-1)*20 : Ink 2
Inc COUNT
Set Zone COUNT,93+(LOO1-1)*20,33+(LOO-1)*20 To 107+(LOO1-1)*20,47+(LOO-1)*20
End If
Next LOO1
Next LOO
End Proc
Procedure MARK_PEG[PEG_NUMBER,STATE$]
Shared CROSS()
'
' Find the pegs coords
'
For LOO=1 To 7
For LOO1=1 To 7
If CROSS(LOO1,LOO)=PEG_NUMBER Then Goto FOUND
Next LOO1
Next LOO
FOUND:
'
' Set the pegs color according to State.
'
If STATE$="choosen" Then Ink 3
If STATE$="empty" Then Ink 7
If STATE$="full" Then Ink 6
Paint 100+(LOO1-1)*20,40+(LOO-1)*20 : Ink 2
End Proc