Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Παιχνίδι Τρίλιζα 2 Παιχτών

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 3 Ημέρες πριν #4507

  • nickpsal
  • Το Άβαταρ του/της nickpsal
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 12
  • Ληφθείσες Ευχαριστίες 3
Καλησπέρα είμαι αρχάριος στην Python και έφτιαξα ένα πρόγραμμα σε Python Τρίλιζα 2 Παιχτών. Πως σας φαίνεται????
import random
import time

marker = {'Παίκτης 1': 'X', 'Παίκτης 2': 'O', }

def display_board(board):
print('+
+')
print('|7 |8 |9 |')
print('| ' + board[7] + ' | ' + board[8] + ' | ' + board[9]+' |')
print('| | | |')
print('+
+')
print('|4 |5 |6 |')
print('| ' + board[4] + ' | ' + board[5] + ' | ' + board[6]+' |')
print('| | | |')
print('+
+')
print('|1 |2 |3 |')
print('| ' + board[1] + ' | ' + board[2] + ' | ' + board[3]+' |')
print('| | | |')
print('+
+')

def choose_first():
player = ''
arithmos = random.randint(1,2)
if arithmos == 1 :
player = 'Παίκτης 1'
else:
player = 'Παίκτης 2'
return player

def display_score(score):
print ("Το σκόρ είναι {} ".format(score))

def place_marker(board, marker, position):
board[position] = marker


def win_check(board,mark):
if board[1] == board[2] == board[3] == mark :
return True
elif board[4] == board[5] == board[6] == mark :
return True
elif board[7] == board[8] == board[9] == mark :
return True
elif board[7] == board[4] == board[1] == mark :
return True
elif board[8] == board[5] == board[2] == mark :
return True
elif board[9] == board[6] == board[3] == mark :
return True
elif board[7] == board[5] == board[3] == mark :
return True
elif board[9] == board[5] == board[1] == mark :
return True
else:
return False

def board_check(board):
check = False
if board[1] == ' ' or board[2] == ' ' or board[3] == ' ' or board[4] == ' ' or board[5] == ' ' or board[6] == ' ' or board[7] == ' ' or board[8] == ' ' or board[9] == ' ' :
return False
else :
return True


def player_choice(board, turn):
epilogi = ''
epilogi = input("Ποία είναι η κινησή σου? (1-9) : {} ".format(turn))
while True :
if epilogi not in '1 2 3 4 5 6 7 8 9'.split() :
epilogi = input("Ποία είναι η κινησή σου? (1-9) : {} ".format(turn))
continue
else :
if board[int(epilogi)] != ' ' :
print("Πιασμένο Τετράγωνο Ξαναδοκίμασε")
eepilogi = input("Ποία είναι η κινησή σου? (1-9) : {} ".format(turn))
continue
else :
return int(epilogi)



def replay():
epilogi = " "
while epilogi !='y' or epilogi !='Y' or epilogi !='n' or epilogi !='N' :
epilogi = input("Θές να Ξαναπαίξουμε Y/N")
if epilogi == 'y' or epilogi == 'Y':
return True
break
else:
return False
break


def next_player(turn):
if turn == 'Παίκτης 1' :
return 'Παίκτης 2'
else:
return 'Παίκτης 1'

def main():
score = {} # λεξικό με το σκορ των παικτών
print('Αρχίζουμε!\nΓίνεται κλήρωση ', end = '')
for t in range(10):
print(".", flush='True', end=' ')
time.sleep(0.2)
print()
# η μεταβλητή turn αναφέρεται στον παίκτη που παίζει
turn = choose_first()
print("\nΟ " + turn + ' παίζει πρώτος.')
# η μεταβλητή first αναφέρεται στον παίκτη που έπαιξε πρώτος
first = turn
game_round = 1 # γύρος παιχνιδιού
while True:
theBoard = * 10
game_on = True #ξεκινάει το παιχνίδι
while game_on:
display_board(theBoard) #Εμφάνισε την τρίλιζα
# ο παίκτης turn επιλέγει θέση
position = player_choice(theBoard, turn)
# τοποθετείται η επιλογή του
place_marker(theBoard, marker[turn], position)
if win_check(theBoard, marker[turn]): # έλεγχος αν νίκησε
display_board(theBoard)
print('Νίκησε ο '+ turn)
score[turn] = score.get(turn, 0) + 1
game_on = False
# έλεγχος αν γέμισε το ταμπλό χωρίς νικητή
elif board_check(theBoard):
display_board(theBoard)
print('Ισοπαλία!')
game_on = False
else: # αλλιώς συνεχίζουμε με την κίνηση του επόμενου παίκτη
turn = next_player(turn)
if not replay():
ending = ''
if game_round>1 : ending = 'υς'
print("Μετά {} γύρο{}".format(game_round, ending))
display_score(score) # έξοδος ... τελικό σκορ
break
else :
game_round += 1
# στο επόμενο παιχνίδι ξεκινάει ο άλλος παίκτης
turn = next_player(first)
first = turn
main()
Τελευταία διόρθωση: 2 Εβδομάδες 3 Ημέρες πριν από nickpsal.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": aliartos3101

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 3 Ημέρες πριν #4509

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 364
  • Ληφθείσες Ευχαριστίες 53
Μπορείς να ξανά βάλεις τον κώδικα μέσα σε code tags? Γιατί έτσι όπως το έβαλες δεν μπορούμε να τον κάνουμε copy paste σε αρχείο (Λείπουν τα κενά). Η διαφορετικά να ανεβάσεις το module κάπου και να μας δώσεις link.
Η Python για μένα είναι η
καλύτερη γλώσσα προγραμματισμού!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 3 Ημέρες πριν #4510

  • nickpsal
  • Το Άβαταρ του/της nickpsal
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 12
  • Ληφθείσες Ευχαριστίες 3
Ελα δες το εδω
repl.it/IZIJ/10
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": Κωτούλας, aliartos3101

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 2 Ημέρες πριν #4511

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 125
  • Ληφθείσες Ευχαριστίες 34
Γειά και συγχαρητήρια για το προγραμματακί το βρίσκω οκ και ενδιαφέρον
Μερικές παρατηρήσεις

Έχεις δύο συναρτήσεις με μία γραμμή κώδικα
def display_score(score):
    print ("Το σκόρ είναι {} ".format(score))
 
def place_marker(board, marker, position): 
    board[position] = marker
 
Έγώ δεν θα τις χρησιμοποιούσα από ότι βλέπω χρησιμοποιείς μια φορά την καθεμία
βάλε κατευθείαν στην main τον κορμό τους
 

Επίσης η
def choose_first():
    player = ''
    arithmos = random.randint(1,2)
    if arithmos == 1 :
        player = 'Παίκτης 1'
    else:
        player = 'Παίκτης 2'
    return player
 
 
γιατί όχι μόνο
def choose_first():
  return 'Παίκτης {}'.format(random.randint(1,2))
και αφού φτάσεις εδώ γιατί να το κάνεις συνάρτηση (χρησιμοποιείται επίσης μία φορά νομίζω)


Η συνάρτηση
def board_check(board): 
    check = False
    if board[1] == ' ' or board[2] == ' ' or board[3] == ' ' or board[4] == ' ' or board[5] == ' ' or board[6] == ' ' or board[7] == ' ' or board[8] == ' ' or board[9] == ' '  :
        return False
    else :
        return True
 
μπορεί να γίνει απλή με τη χρήση της all ή any
def board_check(board):
  return all(map(lambda x: x!=' ', board[1:]))
 

και σε αυτή την περίπτωση εφόσον είναι μία σειρά γιατί να την καλέσεις σαν συνάρτηση

Η γραμμή

if epilogi not in '1 2 3 4 5 6 7 8 9'.split() :
δεν χρειάζεται να κάνεις λίστα
κάνεις κατευθείαν
if epilogi not in '123456789':


Θα κοιτάξω και θα σου πώ και άλλες προτάσεις για βελτίωση
Τελευταία διόρθωση: 2 Εβδομάδες 8 Ώρες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": Κωτούλας, nickpsal

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 2 Ημέρες πριν #4512

  • nickpsal
  • Το Άβαταρ του/της nickpsal
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 12
  • Ληφθείσες Ευχαριστίες 3
ναι για την ακρίβεια ήταν άσκηση ετοιμη και εμείς μ΄νοο συμπληρώσαμε τις συναρτησεις υποχρεωτικα πηγαιναν ετσι
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 2 Ημέρες πριν #4513

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 364
  • Ληφθείσες Ευχαριστίες 53
Πολύ καλό μπράβο!!!
Η Python για μένα είναι η
καλύτερη γλώσσα προγραμματισμού!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": Κωτούλας

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 2 Ημέρες πριν #4514

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 125
  • Ληφθείσες Ευχαριστίες 34
στo
return ..
break
που χρησιμοποιείς το break δεν χρειάζεται το return επιστρέφει την τιμή και η συνάρτηση τελειώνει

Αντί αυτό
def player_choice(board, turn): 
    epilogi = ''
    epilogi = input("Ποία είναι η κινησή σου? (1-9) : {} ".format(turn))
    while True :
        if epilogi not in '1 2 3 4 5 6 7 8 9'.split() :
            epilogi = input("Ποία είναι η κινησή σου? (1-9) : {} ".format(turn))
            continue
        else :
            if board[int(epilogi)] != ' ' :
                print("Πιασμένο Τετράγωνο Ξαναδοκίμασε")
                epilogi = input("Ποία είναι η κινησή σου? (1-9) : {} ".format(turn))
                continue
            else :
                return int(epilogi)
αυτό
def player_choice(board, turn): 
  while True :
    epilogi = input("Ποία είναι η κινησή σου? (1-9) : {} ".format(turn))
    if epilogi not in list('123456789'):
      continue
    elif board[int(epilogi)] != ' ':
      print("Πιασμένο Τετράγωνο Ξαναδοκίμασε")
      continue
    else:
      return int(epilogi)
Flat is better than nested.

Επίσης διόρθωσα τον κώδικα μου στο προηγούμενο post ώστε να λειτουργεί

Καλή συνέχεια ελπίζω να βοήθησα
Τελευταία διόρθωση: 1 Εβδομάδα 6 Ημέρες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": Κωτούλας, aliartos3101, nickpsal

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 2 Ημέρες πριν #4515

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 364
  • Ληφθείσες Ευχαριστίες 53
Επειδή μου άρεσε το έφτιαξα και εγώ :P :
#Author: babaliaris.nikos@gmail.com
#Date  : 7/6/2017
#Name  : Triceza.py
#Python: Python 3.6
 
 
 
 
#Graphics.
graphics ='''+--------------+
+    |    |    +
+--------------+
+    |    |    +
+--------------+
+    |    |    +
+--------------+'''
 
 
#Where to fill positions.
pos = [ [(1,2), (1,7), (1,12)],
        [(3,2), (3,7), (3,12)],
        [(5,2), (5,7), (5,12)],
      ]
 
 
 
 
#===============================Main===============================#
def main():
    '''Start the game.'''
 
    #Create a 2D array.
    array = createArray()
 
    #Positions already used.
    used  = []
 
    #Start playing.
    for i in range(9):
 
        #Repeat.
        repeat = True
 
        while repeat:
 
            #Just some space.
            print("")
 
            #Render the array.
            render(array)
 
            #Player 1.
            if i%2 == 0:
                ch = "O"
                print("\nPlayer 1")
 
            #Player 2.
            else:
                ch = "X"
                print("\nPlayer 2")
 
 
            #Try to read integers.
            try:
                row    = int(input("Give row   : "))
                column = int(input("Give column: "))
                pass
 
            #Failed.
            except ValueError:
                print("You must give integer numbers!")
                continue
 
 
            #The position already in use.
            if (row, column) in used:
                print("The cell["+str(row)+"]["+str(column)+"] is" \
                      " already filled.")
                continue
 
 
            #Fill.
            error = fill(array, row, column, ch)
 
            #An error occured.
            if error != None:
                print(error)
                continue
 
            #Append a used position.
            used.append( (row, column) )
 
            #Check for win.
            answer = checkWin(array)
 
            #Player 1 wins.
            if answer == "O":
                render(array)
                print("\nPlayer 1 wins!")
                input("Press ENTER to exit...")
                return
 
            #Player 1 wins.
            elif answer == "X":
                render(array)
                print("\nPlayer 2 wins!")
                input("Press ENTER to exit...")
                return
 
            #Do not repeat.
            repeat = False
 
 
    #Match is equal.
    print("\nThe match is equal!")
    input("Press ENTER to exit...")
#===============================Main===============================#
 
 
 
 
 
#===========================Create Array===========================#
def createArray():
    '''Create's a 2D Array with the characters of the graphics.'''
 
    #2D Array.
    array = [[]]
 
    #----------Fill the array with the grapics----------#
    counter = 0
    for i, ch in enumerate(graphics):
 
        #If i'm still in a row.
        if ch != "\n":
 
            #Append the character in this column.
            array[counter].append(ch)
            pass
 
        #Else create a new row.
        else:
 
            #Create a new list inside the array.
            array.append([])
 
            #Encrease the counter.
            counter += 1
            pass
    #----------Fill the array with the grapics----------#
 
    return array
#===========================Create Array===========================#
 
 
 
 
 
#==============================Render==============================#
def render(array):
    '''Draw the graphics on the screen.'''
 
    #Print column numbers.
    print("    1    2    3   ")
 
    #Go through the rows.
    for row in range( len(array) ):
        string = ""
 
        #Go through columns.
        for column in range( len(array[row]) ):
            string += array[row][column]
 
        #Create the row 1.
        if row == 1:
            string = "1 "+string
            pass
 
        #Create the row 2.
        elif row == 3:
            string = "2 "+string
            pass
 
        #Create the row 3.
        elif row == 5:
            string = "3 "+string
            pass
 
        #Create other graphics.
        else:
            string = "  "+string
 
        #Print.
        print(string)
#==============================Render==============================#
 
 
 
 
 
#===============================Fill===============================#
def fill(array, x, y, ch):
    '''Fill the graphics with a character.'''
 
    #Check x and y.
    if x < 1 or x > 3 or y < 1 or y > 3:
        return "x and y must be numbers between 1 and 3."
 
    #Get the position of the array.
    x, y = pos[x-1][y-1]
 
    #Fill the array with that character.
    array[x][y] = ch
#===============================Fill===============================#
 
 
 
 
#=============================Check Win============================#
def checkWin(array):
    '''Check if someone won.'''
 
    #Characters.
    chars  = ["O", "X"]
 
    for ch in chars:
 
        #Check row 0.
        if array[ pos[0][0][0]]  [pos[0][0][1] ] == ch and \
           array[ pos[0][1][0]]  [pos[0][1][1] ] == ch and \
           array[ pos[0][2][0]]  [pos[0][2][1] ] == ch:
            return ch
 
        #Check row 1.
        elif array[ pos[1][0][0]]  [pos[1][0][1] ] == ch and \
             array[ pos[1][1][0]]  [pos[1][1][1] ] == ch and \
             array[ pos[1][2][0]]  [pos[1][2][1] ] == ch:
            return ch
 
        #Check row 2.
        elif array[ pos[2][0][0]]  [pos[2][0][1] ] == ch and \
             array[ pos[2][1][0]]  [pos[2][1][1] ] == ch and \
             array[ pos[2][2][0]]  [pos[2][2][1] ] == ch:
            return ch
 
 
        #Check column 0.
        if array[ pos[0][0][0]]  [pos[0][0][1] ] == ch and \
           array[ pos[1][0][0]]  [pos[1][0][1] ] == ch and \
           array[ pos[2][0][0]]  [pos[2][0][1] ] == ch:
            return ch
 
        #Check column 1.
        elif array[ pos[0][1][0]]  [pos[0][1][1] ] == ch and \
             array[ pos[1][1][0]]  [pos[1][1][1] ] == ch and \
             array[ pos[2][2][0]]  [pos[2][2][1] ] == ch:
            return ch
 
        #Check column 2.
        elif array[ pos[0][2][0]]  [pos[0][2][1] ] == ch and \
             array[ pos[1][2][0]]  [pos[1][2][1] ] == ch and \
             array[ pos[2][2][0]]  [pos[2][2][1] ] == ch:
            return ch
 
        #Check diagonal from left to right.
        elif array[ pos[0][0][0]]  [pos[0][0][1] ] == ch and \
             array[ pos[1][1][0]]  [pos[1][1][1] ] == ch and \
             array[ pos[2][2][0]]  [pos[2][2][1] ] == ch:
            return ch
 
        #Check diagonal from right to left.
        elif array[ pos[0][2][0]]  [pos[0][2][1] ] == ch and \
             array[ pos[1][1][0]]  [pos[1][1][1] ] == ch and \
             array[ pos[2][0][0]]  [pos[2][0][1] ] == ch:
            return ch
 
 
    return ""
#=============================Check Win============================#
 
 
 
 
 
#Run the program.
if __name__ == "__main__":
    main()
 
Η Python για μένα είναι η
καλύτερη γλώσσα προγραμματισμού!
Τελευταία διόρθωση: 2 Εβδομάδες 2 Ημέρες πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": nickpsal

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 1 Ημέρα πριν #4516

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 125
  • Ληφθείσες Ευχαριστίες 34
Θα κάνω και εγώ μία δική μου version και θα την βάλω όταν είναι έτοιμη

Πολύ πιο δύσκολη λόγικη είναι η τρίλιζα με 1 παίχτη και αντίπαλο το computer
Ενοείται ότι το computer δεν πρέπει να χάνει
Αν έχει κανείς κάτι τέτοιο έτοιμο θα ήθελα να το δω γιατί προσπαθώ να το κάνω και έχω μπλέξει
με combinations και χάνομαι κάπου
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 1 Ημέρα πριν #4517

  • nickpsal
  • Το Άβαταρ του/της nickpsal
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 12
  • Ληφθείσες Ευχαριστίες 3
Θα το δώ και εγώ αυτό μετα την 1 Ιουλίου που θα ξεμπερδέψω
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Παιχνίδι Τρίλιζα 2 Παιχτών 2 Εβδομάδες 8 Ώρες πριν #4518

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 125
  • Ληφθείσες Ευχαριστίες 34
Είχα ένα λάθος σε προηγούμενο σχόλιο μου και το διόρθωσα
το in '1 2 3 4 5 6 7 8 9'.split() είναι το σωστό τελικά
γιατί με το in '123456789' παίρνει ως σωστό οποιοδήποτε slice του

Σχετικά με την checkwin που είναι ένα μεγάλο μακαρόνι μπορεί να γίνει αρκετά μικρή και απλή
αντί λοιπόν
def win_check(board,mark): 
    if board[1] == board[2] == board[3] == mark :
        return True
    elif board[4] == board[5] == board[6] == mark :
        return True
    elif board[7] == board[8] == board[9] == mark :
        return True
    elif board[7] == board[4] == board[1] == mark :
        return True
    elif board[8] == board[5] == board[2] == mark :
        return True
    elif board[9] == board[6] == board[3] == mark :
        return True
    elif board[7] == board[5] == board[3] == mark :
        return True
    elif board[9] == board[5] == board[1] == mark :
        return True
    else:
        return False
αυτό
def win_check(board, marker):
  win_options=('123','456','789','147','258','369','357','159')
  for option in win_options:
    if board[int(option[0])]==board[int(option[1])]==board[int(option[2])]==marker:
      return True
  return False
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": Κωτούλας, aliartos3101
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.837 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου