VERSION 5.00
Begin VB.Form frmMain
AutoRedraw = -1 'True
BorderStyle = 3 'Fixed Dialog
Caption = "Tic-Tac-Toe client"
ClientHeight = 5550
ClientLeft = 45
ClientTop = 330
ClientWidth = 9300
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 6366.517
ScaleMode = 0 'User
ScaleWidth = 9423.598
ShowInTaskbar = 0 'False
StartUpPosition = 2 'CenterScreen
Begin VB.TextBox lossesT
Height = 375
Left = 5280
Locked = -1 'True
TabIndex = 16
Text = "0"
Top = 3000
Width = 375
End
Begin VB.TextBox tiesT
Height = 375
Left = 4680
Locked = -1 'True
TabIndex = 15
Text = "0"
Top = 3000
Width = 375
End
Begin VB.TextBox winsT
Height = 375
Left = 4080
Locked = -1 'True
TabIndex = 12
Text = "0"
Top = 3000
Width = 375
End
Begin VB.OptionButton Hard
Caption = "Hard"
Height = 255
Left = 4440
TabIndex = 10
Top = 1440
Value = -1 'True
Width = 1095
End
Begin VB.OptionButton Easy
Caption = "Easy"
Height = 255
Left = 4440
TabIndex = 9
Top = 1800
Width = 855
End
Begin VB.TextBox Nombre
Height = 285
Left = 4440
TabIndex = 8
Top = 600
Width = 1335
End
Begin VB.Timer ServerPoll
Enabled = 0 'False
Interval = 300
Left = 3840
Top = 0
End
Begin VB.TextBox Result
Height = 285
Left = 120
Locked = -1 'True
TabIndex = 7
Top = 5160
Width = 5895
End
Begin VB.CommandButton Exit
Caption = "Exit Tic-Tac-Toe"
BeginProperty Font
Name = "Arial"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 3960
TabIndex = 5
Top = 4560
Width = 2055
End
Begin VB.TextBox Name2
Height = 315
Left = 2520
Locked = -1 'True
TabIndex = 4
Top = 600
Width = 1215
End
Begin VB.TextBox Name1
Height = 285
Left = 120
Locked = -1 'True
TabIndex = 3
Top = 600
Width = 1215
End
Begin VB.CommandButton PlayHuman
Caption = "Play against a Human"
BeginProperty Font
Name = "Arial"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 3960
TabIndex = 1
Top = 4080
Width = 2055
End
Begin VB.CommandButton PlayComputer
Caption = "Play against the computer"
BeginProperty Font
Name = "Arial"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 3960
TabIndex = 0
Top = 3600
Width = 2055
End
Begin VB.Image bmpSmallX
Height = 315
Left = 8640
Picture = "frmMain.frx":0000
Top = 2400
Visible = 0 'False
Width = 315
End
Begin VB.Image bmpSmallO
Height = 315
Left = 8160
Picture = "frmMain.frx":017E
Top = 2400
Visible = 0 'False
Width = 315
End
Begin VB.Image bmpNull
Height = 315
Left = 8400
Picture = "frmMain.frx":02FC
Top = 2880
Visible = 0 'False
Width = 315
End
Begin VB.Image bmpBigX
Height = 900
Left = 8040
Picture = "frmMain.frx":047A
Top = 1200
Visible = 0 'False
Width = 900
End
Begin VB.Image bmpBigO
Height = 900
Left = 8040
Picture = "frmMain.frx":0C7C
Top = 120
Visible = 0 'False
Width = 900
End
Begin VB.Image Image12
Height = 900
Left = 1440
Top = 3960
Width = 900
End
Begin VB.Label Label4
Caption = "Losses"
Height = 255
Left = 5280
TabIndex = 18
Top = 2640
Width = 495
End
Begin VB.Label Label3
Caption = "Ties"
Height = 255
Left = 4680
TabIndex = 17
Top = 2640
Width = 375
End
Begin VB.Label Label2
Caption = "Wins"
Height = 255
Left = 4080
TabIndex = 14
Top = 2640
Width = 375
End
Begin VB.Label SessionLabel
Caption = "This session:"
Height = 255
Left = 4440
TabIndex = 13
Top = 2280
Width = 975
End
Begin VB.Label ComputerLabel
Caption = "Select degree of difficulty"
Height = 255
Left = 4320
TabIndex = 11
Top = 1080
Width = 1935
End
Begin VB.Image Image02
Height = 900
Left = 240
Top = 3960
Width = 900
End
Begin VB.Image Image22
Height = 900
Left = 2760
Top = 3960
Width = 900
End
Begin VB.Image Image21
Height = 900
Left = 2760
Top = 2640
Width = 900
End
Begin VB.Image Image10
Height = 915
Left = 1440
Top = 1320
Width = 945
End
Begin VB.Image Image20
Height = 900
Left = 2760
Top = 1320
Width = 900
End
Begin VB.Image Image01
Height = 900
Left = 240
Top = 2640
Width = 900
End
Begin VB.Image Image11
Height = 900
Left = 1440
Top = 2640
Width = 900
End
Begin VB.Image Image00
Height = 900
Left = 240
Top = 1320
Width = 900
End
Begin VB.Label NameLabel
Caption = "Your name is..."
Height = 255
Left = 4560
TabIndex = 6
Top = 240
Width = 1095
End
Begin VB.Image Player2
Height = 315
Left = 3000
Top = 120
Width = 315
End
Begin VB.Image Player1
Height = 315
Left = 600
Top = 120
Width = 315
End
Begin VB.Image GameScreen
Height = 3615
Left = 120
Picture = "frmMain.frx":147E
Top = 1320
Width = 3615
End
Begin VB.Label Label1
Caption = "Versus"
Height = 255
Left = 1680
TabIndex = 2
Top = 360
Width = 495
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
' Filename: tClient.vbp
'
' Description: Tic-Tac-Toe Client
'
' This file is provided as part of the Microsoft Transaction Server
' Software Development Kit
'
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT
' WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
' INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES
' OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
' PURPOSE.
'
' Copyright (C) 1997 Microsoft Corporation, All rights reserved
Option Explicit
Private viper As Boolean
Private organic As Boolean
Private playing As Boolean
Private gameID As Long
Private localX As Long
Private localY As Long
Private localOrder As Long
Private localName As String
Private remoteName As String
Private easyComputer As Boolean
Private wins As Long
Private ties As Long
Private losses As Long
Private localPic As Picture
Private remotePic As Picture
Private full(3, 3) As Long
Private waiting As Boolean
Private Sub Easy_Click()
easyComputer = True
End Sub
Private Sub Form_Load()
Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1000)
Me.Top = GetSetting(App.Title, "Settings", "MainTop", 1000)
Me.Width = GetSetting(App.Title, "Settings", "MainWidth", 6500)
Me.Height = GetSetting(App.Title, "Settings", "MainHeight", 6500)
' Make sure the Tic-Tac-Toe components are properly installed in MTS
On Error GoTo objError
Dim computer As Object
Dim human As Object
Set computer = CreateObject("tServer.Computer")
Set human = CreateObject("tServer.Human")
On Error GoTo 0
' Init
localName = "tClient User"
remoteName = "No one"
viper = False
organic = False
playing = False
gameID = -1
waiting = False
ServerPoll.Enabled = False
easyComputer = False
wins = 0
ties = 0
losses = 0
Nombre = localName
Name1 = "No one"
Name2 = remoteName
Player1.Picture = bmpNull
Player2.Picture = bmpNull
Result = "Press a button and start a game"
Exit Sub
objError:
MsgBox "Error " & Err.Number & ": Make sure the Tic-Tac-Toe package has been correctly installed in MTS."
End
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
'Close all sub forms
For i = Forms.Count - 1 To 1 Step -1
Unload Forms(i)
Next
If Me.WindowState <> vbMinimized Then
SaveSetting App.Title, "Settings", "MainLeft", Me.Left
SaveSetting App.Title, "Settings", "MainTop", Me.Top
SaveSetting App.Title, "Settings", "MainWidth", Me.Width
SaveSetting App.Title, "Settings", "MainHeight", Me.Height
End If
End Sub
Private Sub Hard_Click()
easyComputer = False
End Sub
Private Sub Image00_Click()
If playing And full(0, 0) = 0 Then
If localOrder = 1 Then
Image00.Picture = bmpBigX
Else
Image00.Picture = bmpBigO
End If
MovePiece 0, 0
End If
End Sub
Private Sub Image01_Click()
If playing And full(0, 1) = 0 Then
If localOrder = 1 Then
Image01.Picture = bmpBigX
Else
Image01.Picture = bmpBigO
End If
MovePiece 0, 1
End If
End Sub
Private Sub Image02_Click()
If playing And full(0, 2) = 0 Then
If localOrder = 1 Then
Image02.Picture = bmpBigX
Else
Image02.Picture = bmpBigO
End If
MovePiece 0, 2
End If
End Sub
Private Sub Image10_Click()
If playing And full(1, 0) = 0 Then
If localOrder = 1 Then
Image10.Picture = bmpBigX
Else
Image10.Picture = bmpBigO
End If
MovePiece 1, 0
End If
End Sub
Private Sub Image11_Click()
If playing And full(1, 1) = 0 Then
If (localOrder = 1) Then
Image11.Picture = bmpBigX
Else
Image11.Picture = bmpBigO
End If
MovePiece 1, 1
End If
End Sub
Private Sub Image12_Click()
If playing And full(1, 2) = 0 Then
If localOrder = 1 Then
Image12.Picture = bmpBigX
Else
Image12.Picture = bmpBigO
End If
MovePiece 1, 2
End If
End Sub
Private Sub Image20_Click()
If playing And full(2, 0) = 0 Then
If localOrder = 1 Then
Image20.Picture = bmpBigX
Else
Image20.Picture = bmpBigO
End If
MovePiece 2, 0
End If
End Sub
Private Sub Image21_Click()
If playing And full(2, 1) = 0 Then
If localOrder = 1 Then
Image21.Picture = bmpBigX
Else
Image21.Picture = bmpBigO
End If
MovePiece 2, 1
End If
End Sub
Private Sub Image22_Click()
If playing And full(2, 2) = 0 Then
If localOrder = 1 Then
Image22.Picture = bmpBigX
Else
Image22.Picture = bmpBigO
End If
MovePiece 2, 2
End If
End Sub
Private Sub Nombre_Change()
localName = Nombre
End Sub
Private Sub PlayHuman_Click()
' Present hourglass pointer
Me.MousePointer = vbHourglass
' Clean up screen
ClearScreen
InitArray
' Create server human object
Dim human As Object
Set human = CreateObject("tServer.Human")
If human Is Nothing Then
MsgBox "Create object " + "tServer.Human" + " failed."
Exit Sub
End If
' Notify server of new game
Dim order As Variant
Dim player2Name As Variant
Dim gameNumber As Variant
human.EnterNewGame localName, gameNumber, player2Name, order
remoteName = player2Name
gameID = gameNumber
' Set up screen
Name1 = localName
Name2 = remoteName
PlayComputer.Enabled = False
PlayHuman.Enabled = False
Nombre.Locked = True
Easy.Enabled = False
Hard.Enabled = False
' Set up local variables
viper = False
organic = True
playing = False
ServerPoll.Enabled = True
' Set up order
localOrder = order
If order = 1 Then
Player1.Picture = bmpSmallX
Player2.Picture = bmpSmallO
Set localPic = bmpBigX
Set remotePic = bmpBigO
Result = "You are now in game " & gameID & ", we are waiting for another 'human' to join the game."
Else
Player1.Picture = bmpSmallO
Player2.Picture = bmpSmallX
Set localPic = bmpBigO
Set remotePic = bmpBigX
Result = "Game " & gameID & " against '" & remoteName & "' has begun. Waiting for '" & remoteName & "' to move."
waiting = True
End If
' Clean up
Set human = Nothing
' Return control
Me.MousePointer = vbArrow
End Sub
Private Sub PlayComputer_Click()
' Present hourglass pointer
Me.MousePointer = vbHourglass
' Clean up screen
InitArray
ClearScreen
' Create server computer object
Dim computer As Object
Set computer = CreateObject("tServer.Computer")
If computer Is Nothing Then
MsgBox "Create object " + "tServer.Computer" + " failed."
Exit Sub
End If
' Notify server of new game
Dim lGameID As Variant
Dim order As Variant
Dim foeX As Variant
Dim foeY As Variant
computer.AddNewGame easyComputer, lGameID, order, foeX, foeY
gameID = lGameID
' Set up screen
If easyComputer = True Then
remoteName = "I am, I think"
Else
remoteName = "I think I am"
End If
Name1 = localName
Name2 = remoteName
PlayComputer.Enabled = False
PlayHuman.Enabled = False
Nombre.Locked = True
Easy.Enabled = False
Hard.Enabled = False
' Set up local variables
viper = True
organic = False
playing = True
' Set up order
localOrder = order
If order = 1 Then
Player1.Picture = bmpSmallX
Player2.Picture = bmpSmallO
Set localPic = bmpBigX
Set remotePic = bmpBigO
Else
Player1.Picture = bmpSmallO
Player2.Picture = bmpSmallX
Set localPic = bmpBigO
Set remotePic = bmpBigX
' Process opponent's first move
Display remotePic, foeX, foeY
full(foeX, foeY) = 1
End If
' Clean up
Set computer = Nothing
' Return control
Result = "Game " & gameID & " against '" & remoteName & "' has begun. It is now your turn."
Me.MousePointer = vbArrow
End Sub
Private Sub Exit_Click()
' Notify opponent of exit
End
End Sub
Private Sub MovePiece(X As Long, Y As Long)
Dim win As Variant
If viper Then
' Create server computer object
Dim computer As Object
Set computer = CreateObject("tServer.Computer")
If computer Is Nothing Then
MsgBox "Create object " + "tServer.Computer" + " failed."
Exit Sub
End If
' Submit move
Dim foeX As Variant
Dim foeY As Variant
computer.NewMove gameID, easyComputer, X, Y, foeX, foeY, win
' Win protocol
' ============
' 0 -> moves did not end game
' 1 -> player won
' -1 -> computer won
' 2 -> player's move tied the game
' -2 -> computer's move tied the game
' Display local move
Display localPic, X, Y
full(X, Y) = 1
' Check for win or loss
If Abs(win) = 1 Then
If win = 1 Then
wins = wins + 1
winsT = wins
Result = "Congratulations! You won your game against '" & remoteName & "'."
Cleanup
Exit Sub
Else
Display remotePic, foeX, foeY
losses = losses + 1
lossesT = losses
Result = "Too bad, '" & remoteName & "' won. Better luck next time!"
Cleanup
Exit Sub
End If
Else
If Abs(win) = 2 Then
If win = 2 Then
Display remotePic, foeX, foeY
End If
ties = ties + 1
tiesT = ties
Result = "You tied '" & remoteName & ".' " & " Keep trying!"
Cleanup
Exit Sub
Else
' Display opponent's move
Display remotePic, foeX, foeY
full(foeX, foeY) = 1
End If
End If
' Clean up
Set computer = Nothing
Result = "It is now your turn."
Else
' Shut down server polling
ServerPoll.Enabled = False
' Create server human object
Dim human As Object
Set human = CreateObject("tServer.Human")
If human Is Nothing Then
MsgBox "Create object " + "tServer.Human" + " failed."
Exit Sub
End If
' Submit move
human.NewMove gameID, localOrder, X, Y, win
' Win protocol
' ============
' 0 -> move did not end game
' 1 -> player won
' -1 -> remote player won (won't occur in this function)
' 2 -> player's move tied the game
' -2 -> remote player's move tied the game (won't occur in this function)
' Display local move
Display localPic, X, Y
full(X, Y) = 1
' Check for win or loss
If win = 1 Then
wins = wins + 1
winsT = wins
Result = "Congratulations! You won your game against '" & remoteName & "'."
Cleanup
Exit Sub
Else
If win = 2 Then
ties = ties + 1
tiesT = ties
Result = "You tied '" & remoteName & ".' " & " Keep trying!"
Cleanup
Exit Sub
Else
' Reenable server polling
ServerPoll.Enabled = True
End If
End If
' We're waiting for a move or we finished the game
playing = False
' Clean up
Set human = Nothing
Result = "Waiting for '" & remoteName & "'s next move."
End If
End Sub
Private Sub Display(pic As Picture, X As Variant, Y As Variant)
Dim hash As Long
hash = X * 10 + Y
Select Case hash
Case 0
Image00.Picture = pic
Case 1
Image01.Picture = pic
Case 2
Image02.Picture = pic
Case 10
Image10.Picture = pic
Case 11
Image11.Picture = pic
Case 12
Image12.Picture = pic
Case 20
Image20.Picture = pic
Case 21
Image21.Picture = pic
Case 22
Image22.Picture = pic
Case Else
MsgBox ("Invalid Display Parameter")
End Select
End Sub
Private Sub Cleanup()
' Reset variables
playing = False
viper = False
organic = False
PlayHuman.Enabled = True
PlayComputer.Enabled = True
Nombre.Locked = False
Easy.Enabled = True
Hard.Enabled = True
End Sub
Private Sub InitArray()
Dim i, j As Long
For i = 0 To 2
For j = 0 To 2
full(i, j) = 0
Next
Next
End Sub
Private Sub ServerPoll_Timer()
If organic And Not playing Then
' Create server human object
Dim human As Object
Set human = CreateObject("tServer.Human")
If human Is Nothing Then
MsgBox "Create object " + "tServer.Human" + " failed."
Exit Sub
End If
' Poll server
Dim name As Variant
Dim foeX As Variant
Dim foeY As Variant
Dim win As Variant
Dim update As Variant
human.GetNewMove gameID, localOrder, name, foeX, foeY, win, update
' Win protocol
' ============
' 0 -> move did not end game
' 1 -> player won (won't occur in this function)
' -1 -> remote player won
' 2 -> player's move tied the game (won't occur in this function)
' -2 -> remote player's move tied the game
' Routine move
If update = 1 Then
' Stop polling
ServerPoll.Enabled = False
' Display opponent's move
Display remotePic, foeX, foeY
full(foeX, foeY) = 2
' Check for win or loss
If win = -1 Then
losses = losses + 1
lossesT = losses
Result = "Too bad, '" & remoteName & "' won. Better luck next time!"
Cleanup
Exit Sub
Else
If win = -2 Then
ties = ties + 1
tiesT = ties + 1
Result = "You tied '" & remoteName & ".' " & " Keep trying!"
Cleanup
Exit Sub
Else
Result = "'" & remoteName & "' has moved. It is now your turn."
playing = True
End If
End If
Else
' Player just joined
If update = 2 Then
remoteName = name
Name2 = remoteName
Result = "'" & remoteName & "' has joined your game. It is now your turn."
playing = True
End If
End If
' Clean up
Set human = Nothing
End If
End Sub
Private Sub ClearScreen()
Image00.Picture = LoadPicture
Image10.Picture = LoadPicture
Image20.Picture = LoadPicture
Image01.Picture = LoadPicture
Image11.Picture = LoadPicture
Image21.Picture = LoadPicture
Image02.Picture = LoadPicture
Image12.Picture = LoadPicture
Image22.Picture = LoadPicture
End Sub