import random
class TicTacToe:
def __init__(self):
self.board = []
def create_board(self):
for i in range(3):
row = []
for j in range(3):
row.append('-')
self.board.append(row)
def get_random_first_player(self):
return random.randint(0, 1)
def fix_spot(self, row, col, player):
self.board[row][col] = player
def is_player_win(self, player):
win = None
n = len(self.board)
# checking rows
for i in range(n):
win = True
for j in range(n):
if self.board[i][j] != player:
win = False
break
if win:
return win
# checking columns
for i in range(n):
win = True
for j in range(n):
if self.board[j][i] != player:
win = False
break
if win:
return win
# checking diagonals
win = True
for i in range(n):
if self.board[i][i] != player:
win = False
break
if win:
return win
win = True
for i in range(n):
if self.board[i][n - 1 - i] != player:
win = False
break
if win:
return win
return False
for row in self.board:
for item in row:
if item == '-':
return False
return True
def is_board_filled(self):
for row in self.board:
for item in row:
if item == '-':
return False
return True
def swap_player_turn(self, player):
return 'X' if player == 'O' else 'O'
def show_board(self):
for row in self.board:
for item in row:
print(item, end=" ")
print()
def start(self):
self.create_board()
player = 'X' if self.get_random_first_player() == 1 else 'O'
while True:
print(f"Player {player} turn")
self.show_board()
# taking user input
row, col = list(
map(int, input("Enter row and column numbers to fix spot: ").split()))
print()
# fixing the spot
self.fix_spot(row - 1, col - 1, player)
# checking whether current player is won or not
if self.is_player_win(player):
print(f"Player {player} wins the game!")
break
# checking whether the game is draw or not
if self.is_board_filled():
print("Match Draw!")
break
# swapping the turn
player = self.swap_player_turn(player)
# showing the final view of board
print()
self.show_board()
# starting the game
tic_tac_toe = TicTacToe()
tic_tac_toe.start()
Check out the sample output of the code.
$ python tic_tac_toe.py
Player X turn
- - -
- - -
- - -
Enter row and column numbers to fix spot: 1 1
Player O turn
X - -
- - -
- - -
Enter row and column numbers to fix spot: 2 1
Player X turn
X - -
O - -
- - -
Enter row and column numbers to fix spot: 1 2
Player O turn
X X -
O - -
- - -
Enter row and column numbers to fix spot: 1 3
Player X turn
X X O
O - -
- - -
Enter row and column numbers to fix spot: 2 2
Player O turn
X X O
O X -
- - -
Enter row and column numbers to fix spot: 3 3
Player X turn
X X O
O X -
- - O
Enter row and column numbers to fix spot: 3 2
Player X wins the game!
X X O
O X -
- X O
31 May 2022
Python Test
20 May 2022
Blogger jadi aneh solved
29 July 2021
Antri di BCA selama pandemi, hack the queue
Sebenarnya sudah lama ingin ke BCA karena:
1. Token BCA batre-nya sudah habis,
2. Kartu ATM terblokir,
3. Aktifin M-BCA juga plus ganti buku tabungan karena udah kumel
Datang ke BCA jam 7:45, sengaja biar dapat antrian awal
Karena tidak tahu sistem antriannya seperti apa, saya tanya ke pak Satpam yang jaga
"Pak sudah buka?"
"belum"
"Ada nomor antrian?"
"belum ada juga"
Berjalannya waktu saya akhirnya tahu sistem antriannya, jika ingin dapat nomor awal harus segera ambil posisi duduk di dekat pintu masuk.
nanti satpam akan memberikan nomor sesuai urutan dari deket pintu, terus ke antrian yang di tangga
Pengalaman hari ini:
"Jadi orang PD aja, langsung naik tangga, tanya satpam, langsung duduk di antrian no1, kayak cewek yang baru dateng itu.. kucluk2 naik langsung duduk padahal ada beberapa yang udah antri dari tadi di bawah .. hadeh"
21 November 2019
Connect raspberry Pi without monitor, keyboard, mouse and hub
Connect raspberry Pi without monitor, keyboard, mouse and hub, connect with LAN cable directly
28 August 2018
testing syntax
<script type='text/javascript'>
//<![CDATA[
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=App-ID";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
//]]>
</script>









