📄 三子棋.htm
字号:
<HTML>
<HEAD>
<META name="VI60_DefaultClientScript" Content="VBScript">
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>三子棋</TITLE>
</HEAD>
<script LANGUAGE="VBScript">
<!--
Option Explicit
Const NUM_SQUARES = 9
'定义棋盘
dim Board(9)
'表示是否正处于游戏进程中的变量
dim GameInProgress
'玩家的常数
Const PLAYER_DRAW = -1
Const PLAYER_NONE = 0
Const PLAYER_HUMAN = 1
Const PLAYER_COMPUTER = 2
Const NUM_PLAYERS = 2
'下一步该谁
dim NextPlayer
'谁执X
dim PlayerX
'谁执0
dim PlayerO
'游戏难度
dim SkillLevel
'初始化
Sub Initialize()
'置难度
SkillLevel = 1
'缺省玩家执X
PlayerX = PLAYER_HUMAN
'缺省计算机执0
PlayerO = PLAYER_COMPUTER
'重开一局
StartNewGame
End Sub
'重新开始一局
Sub StartNewGame()
Dim i
'重置棋盘
For i = 1 To NUM_SQUARES
Board(i) = PLAYER_NONE
document.square(i-1).src="blank.jpg"
Next
'执X先下
NextPlayer = PlayerX
'游戏开始
GameInProgress = True
'第一步
PlayerHasMoved
End Sub
'看看是谁赢了棋
Function GameOver()
Dim pl
'找出胜者
pl = Winner()
'如果没有胜者
If pl = PLAYER_NONE Then
'则游戏不能结束
GameOver = False
Exit Function
End If
'否则,游戏结束
GameInProgress = False
'是谁胜利给出信息
If pl = PlayerX Then
Msg.value="下黑子的人胜."
ElseIf pl = PlayerO Then
Msg.value="下蓝子的人胜"
Else
Msg.value="两人平手."
End If
'游戏结束
GameOver = True
End Function
'返回是谁胜利了
Function Winner()
Dim i
'找到胜利者
For i = 1 To 7 Step 3
If Board(i) <> PLAYER_NONE Then
If Board(i) = Board(i + 1) And Board(i) = Board(i + 2) Then
Winner = Board(i)
Exit Function
End If
End If
Next
'找行胜利者
For i = 1 To 3
If Board(i) <> PLAYER_NONE Then
If Board(i) = Board(i + 3) And Board(i) = Board(i + 6) Then
Winner = Board(i)
Exit Function
End If
End If
Next
'找对角线胜利者
If Board(1) <> PLAYER_NONE Then
If Board(1) = Board(5) And Board(1) = Board(9) Then
Winner = Board(1)
Exit Function
End If
End If
If Board(3) <> PLAYER_NONE Then
If Board(3) = Board(5) And Board(3) = Board(7) Then
Winner = Board(3)
Exit Function
End If
End If
'如果没有胜利者,看看是否平局
Winner = PLAYER_NONE
For i = 1 To NUM_SQUARES
If Board(i) = PLAYER_NONE Then Exit Function
Next
Winner = PLAYER_DRAW
End Function
'计算机下子
Sub MakeComputerMove()
Dim Square
'准备好
Msg.value = "计算机现下"
'计算机思考下哪一步
Square = PickComputerMove
'下出此棋
Board(Square) = NextPlayer
'更新棋盘显示
DrawSquare Square
'玩家准备好
NextPlayer = PLAYER_HUMAN
End Sub
'玩家下子
Sub MakeHumanMove()
'给出信息
Msg.value = "你先下"
End Sub
'准备接收下一步棋
Private Sub PlayerHasMoved()
'如果下一步轮到计算机下,则让计算机下
If NextPlayer = PLAYER_COMPUTER Then MakeComputerMove
'如果游戏结束了,则退出过程
If GameOver() Then Exit Sub
'否则让玩家下
MakeHumanMove
End Sub
'玩家点击棋盘,准备下子
Sub clicksquare(index)
'判断是否正处于游戏中,而不是捣乱
If Not GameInProgress Then Exit Sub
'看看该不该玩家下
If NextPlayer <> PLAYER_HUMAN Then Exit Sub
'看看这个位置是否为空
If Board(index) <> PLAYER_NONE Then Exit Sub
'把这个位置赋给玩家
Board(index) = NextPlayer
'画棋子
DrawSquare index
'如果游戏结束,则退出过程
If GameOver() Then Exit Sub
'否则准备下一步让计算机下
NextPlayer = PLAYER_COMPUTER
'调用下一步过程
PlayerHasMoved
End Sub
'画双方的棋子
Sub DrawSquare(i)
Select Case Board(i)
Case PlayerX
document.square(i-1).src="x.jpg"
Case PlayerO
document.square(i-1).src="o.jpg"
End Select
End Sub
'选择执0
Sub PlayO_onClick()
'分配棋子双方
PlayerX = PLAYER_COMPUTER
PlayerO = PLAYER_HUMAN
'重开一局
StartNewGame
End Sub
'选择执X
Sub PlayX_onClick()
'分配棋子双方
PlayerX = PLAYER_HUMAN
PlayerO = PLAYER_COMPUTER
'重开一局
StartNewGame
End Sub
-->
</script>
<script language="VBS">
<!--
'------------------------------------
'下面的代码是计算机智能决定棋子的部分
'------------------------------------
Function PickComputerMove()
Dim pick
Select Case SkillLevel
'如果是第一级水平
Case 1
'计算机走出随机的一步
PickComputerMove = MakeRandomMove
'退出函数
Exit Function
'如果是第二级水平
Case 2
'找到制胜子
pick = MakeWinningMove
'如果没有制胜子
If pick = 0 Then
'则寻找救命子
pick = MakeSavingMove
Else
'否则下一步将下制胜子
PickComputerMove = pick
'退出函数
Exit Function
End If
'如果没有救命子可下
If pick = 0 Then
'下出随机子
PickComputerMove = MakeRandomMove
Else
'否则下出这个计算出来的救命子
PickComputerMove = pick
End If
'如果是第三级水平
Case 3
'找出制胜子
pick = MakeWinningMove
'没有制胜子
If pick = 0 Then
'找出一步以内的救命子
pick = MakeSavingMove
Else
'下出制胜子
PickComputerMove = pick
'退出函数
Exit Function
End If
'没有一步内的救命子
If pick = 0 Then
'找出两步内的救命子
pick = MakeSavingMove2
Else
'下出一步内的救命子
PickComputerMove = pick
'退出函数
Exit Function
End If
'没有两步内的救命子
If pick = 0 Then
'下出标准步
PickComputerMove = MakeStandardMove
Else
'下出两步内的救命子
PickComputerMove = pick
End If
End Select
End Function
'如何下出标准步,标准步是按照一定的规律去下的,棋盘上的棋子的重要性分为三等:中央、边角和其他
Function MakeStandardMove()
'定义临时变量
Dim Square
Dim pick
'如果中央子空着没下,则下中央子
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -