Sunday, June 11, 2017
#Tugas Mata Kuliah Progam Komputer
#tictactoe game
#Dosen Mr Fahmi Mubarok
#Ahmad Haniful Auli-2116100129
import random
#mendefinisakn agar lawan bisa berjalan dengan acak
welcome = [' ',
'AAAAAAA UU UU LL II MMM MMM EEEEE II TTTTTTTT SSSSSS',
'AA AA UU UU LL II MM M M MM EE II TT SS',
'AAAAAAA UU UU LL II 00 MM M MM EEEEE 00 II TT SSSSSS',
'AAA AAA UU UU LL II MM MM EE II TT SS',
'AA AA UUUUUUU LLLLLL II MM MM EEEEE II TT SSSSSS',
' ',
' 2 1 1 6 1 0 0 1 2 9 ',
' ',
'Selamat Datang Di Permainan Tik Tak Too 2017! Sudah tau aturan mainnya?',
' ',
'Kencangkan Sabuk Pengaman Anda dan rasakan Sensasi Tik tak too Yang sebenarnya',
]
for line in welcome:
print(line, sep='\n')
def inputKataPemain():
#Dalam hal ini mendefinisakn fungsi pemain memilih menjadi O atau X
kata = ''
while not (kata == 'X' or kata == 'O'):
print(' ')
print('Kamu mau jadi yang X atau O?')
print(' ')
print('Jangan Sampai Salah Pilih!')
kata = input().upper()
# kata yang dimasukkan dalam bentuk karakter kapitalis
if kata == 'X':
return ['X', 'O']
else:
return ['O', 'X']
#jika kata yang dipilih X maka komputer secara otomatis akan menjadi sisi yang lain
def PemilihAwal():
#akan mendefinisikan fungsi dari pemilih awal
if random.randint(0, 1) == 0:
return 'Musuh'
else:
return 'Kamu'
def gambarPapan(papan):
#mendefinisikan bentuk gambar, gambar berbentuk persegi berisi 9 kotak
print(' | |')
print(' ' + papan[1] + ' | ' + papan[2] + ' | ' + papan[3])
print(' | |')
print('-----------')
print(' | |')
print(' ' + papan[4] + ' | ' + papan[5] + ' | ' + papan[6])
print(' | |')
print('-----------')
print(' | |')
print(' ' + papan[7] + ' | ' + papan[8] + ' | ' + papan[9])
print(' | |')
def playAgain():
#Mendefinisakan player ingin memainkan kembali atau tidak
print('Mau main lagi ndak?(Ya/Tidak)')
return input().lower().startswith('y')
def fungsiPindah(papan, kata, arah):
papan[arah] = kata
#Mendefinisikan fungsi pemindahan pada Permainan
def FungsiMenang(bo, leh):
#Fungsi yang ditampilkan adalah fungsi apabila pemain menang, selain pada fungsi ini berarti pemain kalah
return ((bo[7] == leh and bo[8] == leh and bo[9] == leh) or #horisontal bawah
(bo[4] == leh and bo[5] == leh and bo[6] == leh) or #horisontal tengah
(bo[1] == leh and bo[2] == leh and bo[3] == leh) or #horisontal atas
(bo[7] == leh and bo[4] == leh and bo[1] == leh) or #vertikal kiri
(bo[8] == leh and bo[5] == leh and bo[2] == leh) or #vertikal tengah
(bo[9] == leh and bo[6] == leh and bo[3] == leh) or #vertikal kanan
(bo[7] == leh and bo[5] == leh and bo[3] == leh) or #diagonal
(bo[9] == leh and bo[5] == leh and bo[1] == leh)) #diagonal
def GanddakanPapan(papan):
#fungsi menggandakan papan tik tak too yang telah dimainkan
dupePapan = []
for i in papan:
dupePapan.append(i)
return dupePapan
def PapanKosong(papan, arah):
return papan[arah] == ' '
#demikian pula pada fungsi papan yang kosong juga ikut.
def FungsiPemindahanPemain(papan):
#Input pemain memindahkan isi X/O
arah = ' '
while arah not in '1 2 3 4 5 6 7 8 9'.split() or not PapanKosong(papan, int(arah)):
print('Silakan Mau Mengisi Papan Berapa? (1-9)')
arah = input()
return int(arah)
#Memberikan definisi untuk pemindahan arah dari pemain
def DaftarPilihanArahPindahAcak(papan, arahList):
KemungkinanArah = []
for i in arahList:
if PapanKosong(papan, i):
KemungkinanArah.append(i)
#Memberikan fungsi random atas pilihan pindah
if len(KemungkinanArah) != 0:
return random.choice(KemungkinanArah)
else:
return None
#memberikan definisi jika player x maka komputer O
def getComputerMove(papan, computerLetter):
if computerLetter == 'X':
playerLetter = 'O'
else:
playerLetter = 'X'
#Fungsi utama aturan game Tic Tac Too:
#Pertama, menentukan arah untuk tempat selanjutnya
for i in range(1, 10):
copy = GanddakanPapan(papan)
if PapanKosong(copy, i):
fungsiPindah(copy, computerLetter, i)
if FungsiMenang(copy, computerLetter):
return i
#setelah ini computer akan mengsisi papan kosong selain yang dipilih pemain
for i in range(1, 10):
copy = GanddakanPapan(papan)
if PapanKosong(copy, i):
fungsiPindah(copy, playerLetter, i)
if FungsiMenang(copy, playerLetter):
return i
#jika ada sisi kosong pada pojokan maka akan diisi oleh lawan
arah = DaftarPilihanArahPindahAcak(papan, [1, 3, 7, 9])
if arah != None:
return arah
#Setelah mendapatkan sisi pojok maka untuk menang harus mengisi bagian tengah.
if PapanKosong(papan, 5):
return 5
return DaftarPilihanArahPindahAcak(papan, [2, 4, 6, 8])
#apabila papan sudah penuh maka permainan selesai, atau seri
def PapanPenuh(papan):
for i in range(1, 10):
if PapanKosong(papan, i):
return False
return True
while True:
#Mereset papan menjadi kosong kembali
theBoard = [' '] * 10
KataPemain, computerLetter = inputKataPemain()
turn = PemilihAwal()
print(' ' + turn + 'Jalan Duluan')
gameIsPlaying = True
while gameIsPlaying:
if turn == 'Kamu':
#fungsi menjelaskan jika kita yang mendapat kesempatan jalan duluan maka komputer akan berjalan setelah itu dengan fungsinya
gambarPapan(theBoard)
arah = FungsiPemindahanPemain(theBoard)
fungsiPindah(theBoard, KataPemain, arah)
if FungsiMenang(theBoard, KataPemain):
gambarPapan(theBoard)
print('Selamat bos kamu menang!')
gameIsPlaying = False
else:
if PapanPenuh(theBoard):
gambarPapan(theBoard)
print('Game berakhir seri!')
break
else:
turn = 'Musuh'
else:
# Lawan/musuh yang jalan duluan
move = getComputerMove(theBoard, computerLetter)
fungsiPindah(theBoard, computerLetter, move)
if FungsiMenang(theBoard, computerLetter):
gambarPapan(theBoard)
print('Sayang Sekali Kamu Kalah Bos!')
gameIsPlaying = False
else:
if PapanPenuh(theBoard):
gambarPapan(theBoard)
print('Game berakhir seri!')
break
else:
turn = 'Kamu'
#jika pemain memilih untuk memainkannya lagi maka akan looping ke play again awal, jika tidak maka akan break
if not playAgain():
break
#tictactoe game
#Dosen Mr Fahmi Mubarok
#Ahmad Haniful Auli-2116100129
import random
#mendefinisakn agar lawan bisa berjalan dengan acak
welcome = [' ',
'AAAAAAA UU UU LL II MMM MMM EEEEE II TTTTTTTT SSSSSS',
'AA AA UU UU LL II MM M M MM EE II TT SS',
'AAAAAAA UU UU LL II 00 MM M MM EEEEE 00 II TT SSSSSS',
'AAA AAA UU UU LL II MM MM EE II TT SS',
'AA AA UUUUUUU LLLLLL II MM MM EEEEE II TT SSSSSS',
' ',
' 2 1 1 6 1 0 0 1 2 9 ',
' ',
'Selamat Datang Di Permainan Tik Tak Too 2017! Sudah tau aturan mainnya?',
' ',
'Kencangkan Sabuk Pengaman Anda dan rasakan Sensasi Tik tak too Yang sebenarnya',
]
for line in welcome:
print(line, sep='\n')
def inputKataPemain():
#Dalam hal ini mendefinisakn fungsi pemain memilih menjadi O atau X
kata = ''
while not (kata == 'X' or kata == 'O'):
print(' ')
print('Kamu mau jadi yang X atau O?')
print(' ')
print('Jangan Sampai Salah Pilih!')
kata = input().upper()
# kata yang dimasukkan dalam bentuk karakter kapitalis
if kata == 'X':
return ['X', 'O']
else:
return ['O', 'X']
#jika kata yang dipilih X maka komputer secara otomatis akan menjadi sisi yang lain
def PemilihAwal():
#akan mendefinisikan fungsi dari pemilih awal
if random.randint(0, 1) == 0:
return 'Musuh'
else:
return 'Kamu'
def gambarPapan(papan):
#mendefinisikan bentuk gambar, gambar berbentuk persegi berisi 9 kotak
print(' | |')
print(' ' + papan[1] + ' | ' + papan[2] + ' | ' + papan[3])
print(' | |')
print('-----------')
print(' | |')
print(' ' + papan[4] + ' | ' + papan[5] + ' | ' + papan[6])
print(' | |')
print('-----------')
print(' | |')
print(' ' + papan[7] + ' | ' + papan[8] + ' | ' + papan[9])
print(' | |')
def playAgain():
#Mendefinisakan player ingin memainkan kembali atau tidak
print('Mau main lagi ndak?(Ya/Tidak)')
return input().lower().startswith('y')
def fungsiPindah(papan, kata, arah):
papan[arah] = kata
#Mendefinisikan fungsi pemindahan pada Permainan
def FungsiMenang(bo, leh):
#Fungsi yang ditampilkan adalah fungsi apabila pemain menang, selain pada fungsi ini berarti pemain kalah
return ((bo[7] == leh and bo[8] == leh and bo[9] == leh) or #horisontal bawah
(bo[4] == leh and bo[5] == leh and bo[6] == leh) or #horisontal tengah
(bo[1] == leh and bo[2] == leh and bo[3] == leh) or #horisontal atas
(bo[7] == leh and bo[4] == leh and bo[1] == leh) or #vertikal kiri
(bo[8] == leh and bo[5] == leh and bo[2] == leh) or #vertikal tengah
(bo[9] == leh and bo[6] == leh and bo[3] == leh) or #vertikal kanan
(bo[7] == leh and bo[5] == leh and bo[3] == leh) or #diagonal
(bo[9] == leh and bo[5] == leh and bo[1] == leh)) #diagonal
def GanddakanPapan(papan):
#fungsi menggandakan papan tik tak too yang telah dimainkan
dupePapan = []
for i in papan:
dupePapan.append(i)
return dupePapan
def PapanKosong(papan, arah):
return papan[arah] == ' '
#demikian pula pada fungsi papan yang kosong juga ikut.
def FungsiPemindahanPemain(papan):
#Input pemain memindahkan isi X/O
arah = ' '
while arah not in '1 2 3 4 5 6 7 8 9'.split() or not PapanKosong(papan, int(arah)):
print('Silakan Mau Mengisi Papan Berapa? (1-9)')
arah = input()
return int(arah)
#Memberikan definisi untuk pemindahan arah dari pemain
def DaftarPilihanArahPindahAcak(papan, arahList):
KemungkinanArah = []
for i in arahList:
if PapanKosong(papan, i):
KemungkinanArah.append(i)
#Memberikan fungsi random atas pilihan pindah
if len(KemungkinanArah) != 0:
return random.choice(KemungkinanArah)
else:
return None
#memberikan definisi jika player x maka komputer O
def getComputerMove(papan, computerLetter):
if computerLetter == 'X':
playerLetter = 'O'
else:
playerLetter = 'X'
#Fungsi utama aturan game Tic Tac Too:
#Pertama, menentukan arah untuk tempat selanjutnya
for i in range(1, 10):
copy = GanddakanPapan(papan)
if PapanKosong(copy, i):
fungsiPindah(copy, computerLetter, i)
if FungsiMenang(copy, computerLetter):
return i
#setelah ini computer akan mengsisi papan kosong selain yang dipilih pemain
for i in range(1, 10):
copy = GanddakanPapan(papan)
if PapanKosong(copy, i):
fungsiPindah(copy, playerLetter, i)
if FungsiMenang(copy, playerLetter):
return i
#jika ada sisi kosong pada pojokan maka akan diisi oleh lawan
arah = DaftarPilihanArahPindahAcak(papan, [1, 3, 7, 9])
if arah != None:
return arah
#Setelah mendapatkan sisi pojok maka untuk menang harus mengisi bagian tengah.
if PapanKosong(papan, 5):
return 5
return DaftarPilihanArahPindahAcak(papan, [2, 4, 6, 8])
#apabila papan sudah penuh maka permainan selesai, atau seri
def PapanPenuh(papan):
for i in range(1, 10):
if PapanKosong(papan, i):
return False
return True
while True:
#Mereset papan menjadi kosong kembali
theBoard = [' '] * 10
KataPemain, computerLetter = inputKataPemain()
turn = PemilihAwal()
print(' ' + turn + 'Jalan Duluan')
gameIsPlaying = True
while gameIsPlaying:
if turn == 'Kamu':
#fungsi menjelaskan jika kita yang mendapat kesempatan jalan duluan maka komputer akan berjalan setelah itu dengan fungsinya
gambarPapan(theBoard)
arah = FungsiPemindahanPemain(theBoard)
fungsiPindah(theBoard, KataPemain, arah)
if FungsiMenang(theBoard, KataPemain):
gambarPapan(theBoard)
print('Selamat bos kamu menang!')
gameIsPlaying = False
else:
if PapanPenuh(theBoard):
gambarPapan(theBoard)
print('Game berakhir seri!')
break
else:
turn = 'Musuh'
else:
# Lawan/musuh yang jalan duluan
move = getComputerMove(theBoard, computerLetter)
fungsiPindah(theBoard, computerLetter, move)
if FungsiMenang(theBoard, computerLetter):
gambarPapan(theBoard)
print('Sayang Sekali Kamu Kalah Bos!')
gameIsPlaying = False
else:
if PapanPenuh(theBoard):
gambarPapan(theBoard)
print('Game berakhir seri!')
break
else:
turn = 'Kamu'
#jika pemain memilih untuk memainkannya lagi maka akan looping ke play again awal, jika tidak maka akan break
if not playAgain():
break
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment
SIlahkan berkomentar, mari berdiskusi. Untuk bantuan atau permintaan bisa email kami. Semoga bermanfaat :)