Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- import random
- import operator
- DIGITS1TO8 = "1 2 3 4 5 6 7 8".split()
- LETTERSATOH = "A B C D E F G H".split()
- def getNewBoardType():
- boardType = [[" "] * 8 for i in range(8)]
- for x in range(8):
- boardType[x][1] = "E"
- boardType[x][6] = "E"
- typeOrder = ["V", "R", "O", "L", "K", "O", "R", "V"]
- for x in range(8):
- boardType[x][0] = typeOrder[x]
- boardType[x][7] = typeOrder[x]
- return boardType
- def getNewBoardOwner():
- boardOwner = [[" "] * 8 for i in range(8)]
- for x in range(8):
- boardOwner[x][1] = "V"
- boardOwner[x][0] = "V"
- boardOwner[x][6] = "M"
- boardOwner[x][7] = "M"
- return boardOwner
- def getPrintMode():
- while True:
- printMode = input("Sisestage malelaua kuvamise suurus (suur, keskmine, väike): ")
- if len(printMode)==0:
- nope = ".avi"
- elif printMode[0].upper()=="S":
- printMode = "S"
- break
- elif printMode[0].upper()=="V":
- printMode = "V"
- break
- elif printMode[0].upper()=="K":
- printMode = "K"
- break
- return printMode
- def printBoard(printMode):
- if printMode == "S":
- print(" ", end="")
- for x in range(8):
- print(" %s " %(LETTERSATOH[x]), end="")
- print("")
- for y in range(8):
- print(" "+"+--------"*8, end="")
- print("+")
- print(" "+"| "*8+"|")
- print(DIGITS1TO8[7-y], end = " ")
- for x in range(8):
- print("| %s%s " %(boardType[x][7-y], boardOwner[x][7-y]), end = "")
- print("| ", end = " ")
- print(DIGITS1TO8[7-y])
- print(" ", end="")
- for x in range(8):
- print("|%s%s " % (LETTERSATOH[x],DIGITS1TO8[8-y-1]), end = "")
- print("|")
- print(" "+"+--------"*8, end="")
- print("+")
- print(" ", end="")
- for x in range(8):
- print(" %s " %(LETTERSATOH[x]), end="")
- print("")
- elif printMode == "V":
- print(" ", end="")
- for x in range(8):
- print(" %s " %(LETTERSATOH[x]), end="")
- print("")
- for y in range(8):
- print(" "+"+---"*8, end="")
- print("+")
- print(DIGITS1TO8[7-y], end = " ")
- for x in range(8):
- print("|%s%s " %(boardType[x][7-y], boardOwner[x][7-y]), end = "")
- print("|", end = " ")
- print(DIGITS1TO8[7-y])
- print(" "+"+---"*8, end="")
- print("+")
- print(" ", end="")
- for x in range(8):
- print(" %s " %(LETTERSATOH[x]), end="")
- print("")
- elif printMode == "K":
- print(" ", end="")
- for x in range(8):
- print(" %s " %(LETTERSATOH[x]), end="")
- print("")
- for y in range(8):
- print(" "+"+----"*8, end="")
- print("+")
- print(DIGITS1TO8[7-y], end = " ")
- for x in range(8):
- print("| %s%s " %(boardType[x][7-y], boardOwner[x][7-y]), end = "")
- print("|", end = " ")
- print(DIGITS1TO8[7-y])
- print(" "+"+----"*8, end="")
- print("+")
- print(" ", end="")
- for x in range(8):
- print(" %s " %(LETTERSATOH[x]), end="")
- print("")
- def turnChange(turn):
- if turn == "V":
- turn = "M"
- else:
- turn = "V"
- return turn
- def posConvert(position):
- position = ((ord(position[0])-ord("A")), int(position[1])-1)
- return position
- def getMove(turn):
- while True:
- surrender = 0
- movesTogether = input("Sisestage oma käik: ")
- if movesTogether.lower() == "surrender": #Alla andmine
- surrender = 1
- startPos = (0,0)
- endPos = (0,0)
- return startPos, endPos, surrender
- if len(movesTogether) == 4 and movesTogether[0].upper() in LETTERSATOH and movesTogether[2].upper() in LETTERSATOH and movesTogether[1] in DIGITS1TO8 and movesTogether[3] in DIGITS1TO8:
- startPos = str(movesTogether[0].upper()) + movesTogether[1]
- endPos = str(movesTogether[2].upper()) + movesTogether[3]
- startPos = posConvert(startPos)
- endPos = posConvert(endPos)
- if boardOwner[startPos[0]][startPos[1]] != turn:
- print("Seal asukohas ei ole teie nuppu.")
- else:
- return startPos, endPos, surrender
- else:
- print("Sisestage oma käik formaadis [algasukoha täht][algasukoha number][sihtpunkti täht][sihtpunkti number]. Näiteks A2A3.")
- def checkValidity(turn, startPos, endPos):
- validMoves = []
- startx = startPos[0]
- starty = startPos[1]
- endx = endPos[0]
- endy = endPos[1]
- if boardType[startx][starty] == "E": #Lisab validMoves listi kõik võimalikud käigud etturi poolt.
- if turn == "V":
- if boardType[startx][starty+1] == " ":
- validMoves.append((startx,starty+1))
- if startx+1 < 8 and boardOwner[startx+1][starty+1] == "M":
- validMoves.append((startx+1,startPos[1]+1))
- if startx-1 > -1 and boardOwner[startx-1][starty+1] == "M":
- validMoves.append((startx-1,starty+1))
- if starty == 1 and boardType[startx][starty+2] == " ":
- validMoves.append((startx,3))
- if turn == "M":
- if boardType[startx][starty-1] == " ":
- validMoves.append((startx,starty-1))
- if startx+1 < 8 and boardOwner[startx+1][starty-1] == "V":
- validMoves.append((startx+1,starty-1))
- if startx-1 > -1 and boardOwner[startx-1][starty-1] == "V":
- validMoves.append((startx-1,starty-1))
- if starty == 6 and boardType[startx][starty-2] == " ":
- validMoves.append((startx,4))
- if boardType[startx][starty] == "K":
- if startx-1 > -1 and (boardOwner[startx-1][starty] != turn):
- validMoves.append((startx-1,starty))
- if startx+1 < 8 and (boardOwner[startx-1][starty] != turn):
- validMoves.append((startx+1,starty))
- if starty+1 < 8:
- for i in range(3):
- if startx-1+i < 8 and startx-1+i > - 1:
- if boardOwner[startx-1+i][starty+1] != turn:
- validMoves.append((startx-1+i,starty+1))
- if starty-1 > -1:
- for i in range(3):
- if startx-1+i < 8 and startx-1+i > - 1:
- if boardOwner[startx-1+i][starty-1] != turn:
- validMoves.append((startx-1+i,starty-1))
- if boardType[startx][starty] == "R":
- if starty+2 < 8:
- if startx-1 > -1:
- if boardOwner[startx-1][starty+2] != turn:
- validMoves.append((startx-1,starty+2))
- if startx+1 < 8:
- if boardOwner[startx+1][starty+2] != turn:
- validMoves.append((startx+1,starty+2))
- if starty-2 > -1:
- if startx-1 > -1:
- if boardOwner[startx-1][starty-2] != turn:
- validMoves.append((startx-1,starty-2))
- if startx+1 < 8:
- if boardOwner[startx+1][starty-2] != turn:
- validMoves.append((startx+1,starty-2))
- if startx+2 < 8:
- if starty-1 > -1:
- if boardOwner[startx+2][starty-1] != turn:
- validMoves.append((startx+2,starty-1))
- if starty+1 < 8:
- if boardOwner[startx+2][starty+1] != turn:
- validMoves.append((startx+2,starty+1))
- if startx-2 > -1 :
- if starty-1 > -1:
- if boardOwner[startx-2][starty-1] != turn:
- validMoves.append((startx-2,starty-1))
- if starty+1 < 8:
- if boardOwner[startx-2][starty+1] != turn:
- validMoves.append((startx-2,starty+1))
- if boardType[startx][starty] == "V" or boardType[startx][starty] == "L":
- for moveLength in range(1,8):
- if starty+moveLength < 8: #1. Üles
- nextTileNumber = (startx, (starty+moveLength))
- nextTileOwner = boardOwner[startx][starty+moveLength]
- if nextTileOwner != turn:
- if nextTileOwner == " ":
- validMoves.append(nextTileNumber)
- else:
- validMoves.append(nextTileNumber)
- break
- else:
- break
- for moveLength in range(1,8):
- if startx+moveLength < 8: #2. Paremale
- nextTileNumber = (startx+moveLength, starty)
- nextTileOwner = boardOwner[startx+moveLength][starty]
- if nextTileOwner != turn:
- if nextTileOwner == " ":
- validMoves.append(nextTileNumber)
- else:
- validMoves.append(nextTileNumber)
- break
- else:
- break
- for moveLength in range(1,8):
- if starty-moveLength > (-1): #3. Alla
- nextTileNumber = (startx, starty-moveLength)
- nextTileOwner = boardOwner[startx][starty-moveLength]
- if nextTileOwner != turn:
- if nextTileOwner == " ":
- validMoves.append(nextTileNumber)
- else:
- validMoves.append(nextTileNumber)
- break
- else:
- break
- for moveLength in range(1,8):
- if startx-moveLength > (-1): #4. Vasakule
- nextTileNumber = (startx-moveLength, starty)
- nextTileOwner = boardOwner[startx-moveLength][starty]
- if nextTileOwner != turn:
- if nextTileOwner == " ":
- validMoves.append(nextTileNumber)
- else:
- validMoves.append(nextTileNumber)
- break
- else:
- break
- if boardType[startx][starty] == "O" or boardType[startx][starty] == "L":
- for moveLength in range(1,8): #1. asimuut 45
- if startx+moveLength < 8 and starty+moveLength < 8:
- nextTileNumber = (startx+moveLength, starty+moveLength)
- nextTileOwner = boardOwner[startx+moveLength][starty+moveLength]
- if nextTileOwner != turn:
- if nextTileOwner == " ":
- validMoves.append(nextTileNumber)
- else:
- validMoves.append(nextTileNumber)
- break
- else:
- break
- for moveLength in range(1,8): #2. asimuut 135
- if startx+moveLength < 8 and starty-moveLength > (-1):
- nextTileNumber = (startx+moveLength, starty-moveLength)
- nextTileOwner = boardOwner[startx+moveLength][starty-moveLength]
- if nextTileOwner != turn:
- if nextTileOwner == " ":
- validMoves.append(nextTileNumber)
- else:
- validMoves.append(nextTileNumber)
- break
- else:
- break
- for moveLength in range(1,8): #1. asimuut 225
- if startx-moveLength > (-1) and starty-moveLength > (-1):
- nextTileNumber = (startx-moveLength, starty-moveLength)
- nextTileOwner = boardOwner[startx-moveLength][starty-moveLength]
- if nextTileOwner != turn:
- if nextTileOwner == " ":
- validMoves.append(nextTileNumber)
- else:
- validMoves.append(nextTileNumber)
- break
- else:
- break
- for moveLength in range(1,8): #1. asimuut 315
- if startx+moveLength > (-1) and starty+moveLength < 8:
- nextTileNumber = (startx-moveLength, starty+moveLength)
- nextTileOwner = boardOwner[startx-moveLength][starty+moveLength]
- if nextTileOwner != turn:
- if nextTileOwner == " ":
- validMoves.append(nextTileNumber)
- else:
- validMoves.append(nextTileNumber)
- break
- else:
- break
- if (endx, endy) in validMoves:
- return True
- else:
- print("Te ei saa sinna käia.")
- return False
- def changeBoard(turn, startPos, endPos):
- if boardType[endPos[0]][endPos[1]] == "K":
- if turn == "V":
- print("Valge võit.")
- else:
- print("Musta võit.")
- return False
- boardType[endPos[0]][endPos[1]] = boardType[startPos[0]][startPos[1]]
- boardOwner[endPos[0]][endPos[1]] = turn
- boardType[startPos[0]][startPos[1]] = " "
- boardOwner[startPos[0]][startPos[1]] = " "
- return True
- def moveStage(turn):
- while True:
- startPos, endPos, surrender = getMove(turn)
- if surrender == 1:# alla andmine
- if turn == "V":
- print("Valge andis alla.")
- else:
- print("Must andis alla.")
- return False
- if checkValidity (turn, startPos, endPos):
- if changeBoard(turn, startPos, endPos): #returni false kui kuningas võeti ära
- return True
- else:
- return False
- def playAgain():
- while True:
- command = input("Kas soovite uuesti mängida? (jah/ei): ") #Jah
- if len(command)==0:
- nope = ".avi"
- elif command[0].lower() == "j":
- return True
- elif command[0].lower() == "e":
- return False
- def showTurn(turn):
- if turn == "V":
- print("Valge käik.")
- else:
- print("Musta käik.")
- def displayTutorial():
- print("-------------------------------------------------------------------------")
- print("SmartChess on malemäng, kus saab iga käik mänguväliseid punkte ülesannete lahendamise eest.")
- print("Pärast igat enda käiku saab osta olemasolevate punktide eest nuppe, mida saab lauale asetada, osta.") #Täiendada juhendit
- print("Mida kauem sa mõtled oma käikude ja nuppude ostmise üle, seda rohkem on su vastasel aega ülesannete lahendamiseks.")
- print("Malelaud on koordinaatteljestik, kus veerud on tähistatud tähtedega a-h")
- print("ja veerud numbritega 1-8, kusjuures loendamine algab alt vasakust nurgast.")
- print("Käigu sooritamiseks trükkige nelja-sümboliline kombinatsioon, kus esimesed kaks sümbolit on liigutatava nupu koordinaadid")
- print("ja viimased kaks on sihtruudu koordinaadid, nt: Kirjutades E2E4 esimesel käigul, liigub valge ettur ruudul E2 ruutu E4.")
- print("Nuppude tähised on: E - ettur, V - vanker, R - ratsu, O - oda, L - lipp, K - kuningas. Värve tähistatakse tähtedega V ja M.")
- print("Malelaual on nupud tähistatud kahe tähega, kus esimene täht näitab tüüpi, teine värvi.")
- print("-------------------------------------------------------------------------")
- def enterToStart():
- input("Vajutage enter, et mäng algaks.")
- def displayStart():
- print("SmartChess(c) 2014 Beta 1.2")
- print("Copyright: J.Kirme and A.Saidlo")
- def displayOptions(printMode, purchasing, upgrading, queens):
- print("{0:30}".format("Laua kuvamise suurus:") + printMode)
- if purchasing:
- print ("{0:30}".format("Uute nuppude ostmine:") + "Sees")
- else:
- print ("{0:30}".format("Uute nuppude ostmine:") + "Väljas")
- if upgrading:
- print ("{0:30}".format("Nuppude tüüpide muutmine:") + "Sees")
- else:
- print ("{0:30}".format("Nuppude tüüpide muutmine:") + "Väljas")
- if queens:
- print ("{0:30}".format("Lippude ostmine:") + "Sees")
- else:
- print ("{0:30}".format("Lippude ostmine:") + "Väljas")
- def changeOptions(printMode, purchasing, upgrading, queens):
- while True:
- print("-------------------------------------------------------------------------")
- displayOptions(printMode, purchasing, upgrading, queens)
- print("-------------------------------------------------------------------------")
- print("Millist valikut soovite muuta? ")
- command = input("[S]uurus/[O]stmine/[M]uutmine/[L]ipud/[T]agasi ")
- if len(command)==0:
- nope = ".avi"
- elif command[0].upper() == "S":
- printMode = getPrintMode()
- elif command[0].upper() == "O":
- if purchasing == True:
- purchasing = False
- else:
- purchasing = True
- elif command[0].upper() == "M":
- if upgrading == True:
- upgrading = False
- else:
- upgrading = True
- elif command[0].upper() == "L":
- if queens == True:
- queens = False
- else:
- queens = True
- elif command[0].upper() == "T":
- break
- return printMode, purchasing, upgrading, queens
- def startMenu(printMode, purchasing, upgrading, queens):
- while True:
- command = input("Kas soovite [A]lustada, [J]uhendit näha või [V]alikuid muuta? ")
- if len(command)==0:
- nope = ".avi"
- elif command[0].upper() == "A":
- return printMode, purchasing, upgrading, queens
- elif command[0].upper() == "J":
- displayTutorial()
- elif command[0].upper() == "V":
- printMode, purchasing, upgrading, queens = changeOptions(printMode, purchasing, upgrading, queens)
- displayStart()
- printMode = "K" #Keskmine suurus
- purchasing = True #Nuppude ostmine on sees
- upgrading = True #Nuppude upgrade'imine on sees
- queens = True #Lippe saab osta
- while True:
- turn = "M"
- #Lisan options screeni -J
- printMode, purchasing, upgrading, queens = startMenu(printMode, purchasing, upgrading, queens)
- boardType = getNewBoardType()
- boardOwner = getNewBoardOwner()
- enterToStart()
- while True:
- turn = turnChange(turn)
- printBoard(printMode)
- showTurn(turn)
- if not moveStage(turn): #returni false kui kuningas võeti ära
- break
- if not playAgain():
- break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement