0% found this document useful (0 votes)
179 views5 pages

Open Ended Lab

This document describes the code for a Tic-Tac-Toe game between a human player and computer opponent. The code includes functions for initializing the game board, allowing player and computer moves, checking for wins, and displaying the board. The computer makes moves by attempting to win, block the player from winning, or take desired board positions based on a priority list. The game loops until the board is full or a player wins, at which point a message declares the winner or a draw.

Uploaded by

Laraib shahzad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
179 views5 pages

Open Ended Lab

This document describes the code for a Tic-Tac-Toe game between a human player and computer opponent. The code includes functions for initializing the game board, allowing player and computer moves, checking for wins, and displaying the board. The computer makes moves by attempting to win, block the player from winning, or take desired board positions based on a priority list. The game loops until the board is full or a player wins, at which point a message declares the winner or a draw.

Uploaded by

Laraib shahzad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Laraib Shahzad Mobile Communication & Security 2020f-bmcs-004

OPEN ENDED LAB


“Tic-Tac-Toe”

Source Code:
import random

import sys

board=[i for i in range(0,9)]

player, computer = '',''

# Corners, Center and Others, respectively

moves=((1,7,3,9),(5,),(2,4,6,8))

#Winner combinations

winners=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))

#Table

tab=range(1,10)

def print_board():

x=1

for i in board:

end = ' | '

if x%3 == 0:

end = ' \n'

if i != 1: end+='---------\n';

char=' '

if i in ('X','O'): char=i;

x+=1

print(char,end=end)

def select_char():

1
Laraib Shahzad Mobile Communication & Security 2020f-bmcs-004

chars=('X','O')

if random.randint(0,1) == 0:

return chars[::-1]

return chars

def can_move(brd, player, move):

if move in tab and brd[move-1] == move-1:

return True

return False

def can_win(brd, player, move):

places=[]

x=0

for i in brd:

if i == player: places.append(x);

x+=1

win=True

for tup in winners:

win=True

for ix in tup:

if brd[ix] != player:

win=False

break

if win == True:

break

return win

def make_move(brd, player, move, undo=False):

2
Laraib Shahzad Mobile Communication & Security 2020f-bmcs-004

if can_move(brd, player, move):

brd[move-1] = player

win=can_win(brd, player, move)

if undo:

brd[move-1] = move-1

return (True, win)

return (False, False)

#AI goes here

def computer_move():

move=-1

#If I can win, others do not matter.

for i in range(1,10):

if make_move(board, computer, i, True)[1]:

move=i

break

if move == -1:

#If player can win, block him.

for i in range(1,10):

if make_move(board, player, i, True)[1]:

move=i

break

if move == -1:

# Otherwise, try to take one of desired places.

for tup in moves:

for mv in tup:

3
Laraib Shahzad Mobile Communication & Security 2020f-bmcs-004

if move == -1 and can_move(board, computer, mv):

move=mv

break

return make_move(board, computer, move)

def space_exist():

return board.count('X') + board.count('O') != 9

player, computer = select_char()

print('Player is [%s] and computer is [%s]' % (player, computer))

result='%%% it is a draw ! %%%'

while space_exist():

print_board()

print('#Make your move ! [1-9] : ', end='')

move = int(input())

moved, won = make_move(board, player, move)

if not moved:

print(' >> Invalid number ! Try again !')

continue

if won:

result='*** Congratulations ! You won ! ***'

break

elif computer_move()[1]:

result='=== You lose ! =='

break;

print_board()

print(result)

4
Laraib Shahzad Mobile Communication & Security 2020f-bmcs-004

Output:

You might also like