Project 1 – ටක් ටික් ටුක් (tic tac toe) සෙල්ලම
මේ අභ්යාසය සාමාන්ය අභ්යාස වලට වඩා ටිකක් අමාරුයි. හැබැයි එකෙන් එක කරන්ඩ බලන්ඩ අපි මෙහිදී කරන්නේ ටක් ටික් ටුක් (tac tic toe) game එකක් පියවරෙන් පියවර හදන එක.
1.1:Printing the board.
nested list එකක් ලෙස save කරගන්න ටක් ටික ටුක් board එකක් print කරන්ඩ code එකක් සකසන්න. එය ටක් ටික් ටුක් board එකක් ලෙස print විය යුතුයි.
උදාහරණයක් ලෙස board එක මෙලෙස සටහන් කරොත්
G=[[“*”, “*”, “X”],[ “*”, “*”, “*”,] , [“*”, “*”, “O”]]
(හිස්තැන් සඳහා තරු භාවිත කරමින්), එහි තියෙන තරු වෙනුවට space print වෙන්ඩත්, ඉතුරු දේවල් එලෙස ප්රින්ට් වෙන්ඩත් සකසන්ඩ.
Solution code:
def print_board(G):
print(G[0][0]+” “+G[0][1]+” “+G[0][2]+”n”+G[1][0]+” “+G[1][1]+” “+G[1][2]+”n”+G[2][0]+” “+G[2][1]+” “+G[2][2])
1.2: Check board configurations.
පහල දී ඇති code එකෙන් පරීක්ෂා කර බලනවා හරස් පේලි (rows) ඔස්සේ දිනන අවස්තාවක් තියෙනවද කියා, හා වමේ උඩ සිට දකුණේ යට දක්වා ඇද පේලියේ(diagonal) දිනන අවස්තාවක් තියෙනවද කියා.
def check_rows(G):
for row in range(3):
if G[row][0]!=”*”:
if G[row][0]==G[row][1]:
if G[row][1]==G[row][2]:
if G[row][0]==”O”:
return [“Player 1 Wins”]
else:
return [“Player 2 Wins”]
return [“Game continues”]
def check_diagonal(G):
if G[1][1]!=”*”:
if G[1][1]==G[0][0]:
if G[1][1]==G[2][2]:
if G[1][1]==”O”:
return [“Player 1 Wins”]
else:
return [“Player 2 Wins”]
return [“Game continues”]
ඔබට පුලුවන්ද ඉතුරු දිනන අවස්ථා පරීක්ෂා කිරීමට code සකසන්ඩ?
Solution code:
def check_columns(G):
for column in range(3):
if G[0][column]!=”*”:
if G[0][column]==G[1][column]:
if G[1][column]==G[2][column]:
if G[0][column]==”O”:
return [“Player 1 Wins”]
else:
return [“Player 2 Wins”]
return [“Game continues”]
def check_anti_diagonal(G):
if G[1][1]!=”*”:
if G[1][1]==G[0][2]:
if G[1][1]==G[2][0]:
if G[1][1]==”O”:
return [“Player 1 Wins”]
else:
return [“Player 2 Wins”]
return [“Game continues”]
1.3: Check state function.
පහත සඳහන් function එක වැඩකරන විදිහ තෙරුන් ගන්න
def check_state(G):
if check_rows(G)==[“Game continues”]:
pass
else:
return check_rows(G)
if check_columns(G)==[“Game continues”]:
pass
else:
return check_columns(G)
if check_diagonal(G)==[“Game continues”]:
pass
else:
return check_diagonal(G)
if check_anti_diagonal(G)==[“Game continues”]:
pass
else:
return check_anti_diagonal(G)
return [“Game continues”]
1.4: change_board function.
මේ කාර්ය සඳහා change_board(G,row,column,move): කියා function එකක් define කරන්ඩ.
මෙහිදී G යනු board එකට අදාළ nested list එකකි. row සහ column යන දෙකම 1,2 හෝ 3 කියන ඉන්ට් අගයන් ගනියි. එයින් වෙනස් විය යුතු කොටුව පෙන්වයි. move යනු “X” හෝ “O” යන stringවේ. එය අදාළ කොටුවට දැමා අලුත් board එකක් return කරන code එකක් සකසන්න.
Solution code:
def change_board(G,row,column,move):
new_G=G
new_G[row-1][column-1]=move
return(new_G)
1.5: Script
මෙම code එක කියවා තෙරුන්ගන්ඩ
def print_board(G):
print(G[0][0]+” “+G[0][1]+” “+G[0][2]+”n”+G[1][0]+” “+G[1][1]+” “+G[1][2]+”n”+G[2][0]+” “+G[2][1]+” “+G[2][2])
def change_board(G,row,column,move):
new_G=G
new_G[row-1][column-1]=move
return(new_G)
def check_rows(G):
for row in range(3):
if G[row][0]!=”*”:
if G[row][0]==G[row][1]:
if G[row][1]==G[row][2]:
if G[row][0]==”O”:
return [“Player 1 Wins”]
else:
return [“Player 2 Wins”]
return [“Game continues”]
def check_columns(G):
for column in range(3):
if G[0][column]!=”*”:
if G[0][column]==G[1][column]:
if G[1][column]==G[2][column]:
if G[0][column]==”O”:
return [“Player 1 Wins”]
else:
return [“Player 2 Wins”]
return [“Game continues”]
def check_diagonal(G):
if G[1][1]!=”*”:
if G[1][1]==G[0][0]:
if G[1][1]==G[2][2]:
if G[1][1]==”O”:
return [“Player 1 Wins”]
else:
return [“Player 2 Wins”]
return [“Game continues”]
def check_anti_diagonal(G):
if G[1][1]!=”*”:
if G[1][1]==G[0][2]:
if G[1][1]==G[2][0]:
if G[1][1]==”O”:
return [“Player 1 Wins”]
else:
return [“Player 2 Wins”]
return [“Game continues”]
def check_state(G):
if check_rows(G)==[“Game continues”]:
pass
else:
return check_rows(G)
if check_columns(G)==[“Game continues”]:
pass
else:
return check_columns(G)
if check_diagonal(G)==[“Game continues”]:
pass
else:
return check_diagonal(G)
if check_anti_diagonal(G)==[“Game continues”]:
pass
else:
return check_anti_diagonal(G)
return [“Game continues”]
#GAME SCRIPT
print(“Begin game of noughts and crosses. nPlayer 1 plays with noughts. Player 2 plays with crosses.”)
print(“You must place the first nought.”)
print(“Enter the row from top to bottom and column from left to right.”)
G=[[“*”, “*”, “*”],[ “*”, “*”, “*”,] , [“*”, “*”, “*”]]
print_board(G)
for move in range(4):
print(“Player 1”)
row=int(input(“Which row?”))
column=int(input(“Which column?”))
while(G[row-1][column-1]!=”*”):
print(“That square is already taken. Choose another.”)
row=int(input(“Which row?”))
column=int(input(“Which column?”))
G=change_board(G,row,column,”O”)
print_board(G)
state=check_state(G)
if state!=[“Game continues”]:
print(state[0])
break
print(“Player 2”)
row=int(input(“Which row?”))
column=int(input(“Which column?”))
while(G[row-1][column-1]!=”*”):
print(“That square is already taken. Choose another.”)
row=int(input(“Which row?”))
column=int(input(“Which column?”))
G=change_board(G,row,column,”X”)
print_board(G)
state=check_state(G)
if state!=[“Game continues”]:
print(state[0])
break
input(“Press any key to end”)
දැන් මේ code එකේ කෑලි කෑලි වෙන වෙන පුද්ගලයන් ලවා සකසා ගත හැකි බව ඔබට තේරෙනවා ඇති.
මේ විදිහට එකෙන් එක එකතු කල හැකි විදිහට code එකකට අපි කියනවා “Modular” code කියල. එවිට ප්රශ්නයක් ඇති වූවත්, ඒ ප්රශ්නය තිබෙන තැන වුනත් හඳුනාගැනීම පහසුයි.
1.6:දැන් ඔබට දෙනව අභියෝගයක්. මේක තනි පුද්ගලයෙක්ට computer එකට එරෙහිව සෙල්ලම් කරන්ඩ හැකි ලෙස සකසන්ඩ