Calling on a Variable using other Variables - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Calling on a Variable using other Variables (/thread-34349.html) |
Calling on a Variable using other Variables - jacknewport - Jul-22-2021 Is it possible to call upon a variable using other variables? For example if you have the name of a variable stored in another variable, could you call upon the first variable using the name of the variable stored in the other variable? # The original variable var1 = 'Z26' var2 = 'Z' var3 = '26' # Is there a way to make this be equivalent to var1 = 'A1'? var2 + var3 = 'A1'Thanks! RE: Calling on a Variable using other Variables - deanhystad - Jul-22-2021 It appears you want var1 to be the concatination of var2 and var3 without using any code. You are going to need some code. What are you trying to do? RE: Calling on a Variable using other Variables - jacknewport - Jul-22-2021 I'm trying to make a chess game that will highlight the squares that the piece can play in, but to do that I need to change a variable that stores the color of the square using a variable. Here is the start of my code: import pygame pygame.init() screen = pygame.display.set_mode((800,800)) pygame.display.set_caption('Chess') x = 425 y = 325 h1 = [0,0,120] g1 = [0,0,0] f1 = [0,0,120] e1 = [0,0,0] d1 = [0,0,120] c1 = [0,0,0] b1 = [0,0,120] a1 = [0,0,0] h2 = [0,0,0] g2 = [0,0,120] f2 = [0,0,0] e2 = [0,0,120] d2 = [0,0,0] c2 = [0,0,120] b2 = [0,0,0] a2 = [0,0,120] h3 = [0,0,120] g3 = [0,0,0] f3 = [0,0,120] e3 = [0,0,0] d3 = [0,0,120] c3 = [0,0,0] b3 = [0,0,120] a3 = [0,0,0] h4 = [0,0,0] g4 = [0,0,120] f4 = [0,0,0] e4 = [0,0,120] d4 = [0,0,0] c4 = [0,0,120] b4 = [0,0,0] a4 = [0,0,120] h5 = [0,0,120] g5 = [0,0,0] f5 = [0,0,120] e5 = [0,0,0] d5 = [0,0,120] c5 = [0,0,0] b5 = [0,0,120] a5 = [0,0,0] h6 = [0,0,120] g6 = [0,0,0] f6 = [0,0,120] e6 = [0,0,0] d6 = [0,0,120] c6 = [0,0,0] b6 = [0,0,120] a6 = [0,0,0] h7 = [0,0,120] g7 = [0,0,0] f7 = [0,0,120] e7 = [0,0,0] d7 = [0,0,120] c7 = [0,0,0] b7 = [0,0,120] a7 = [0,0,0] h8 = [0,0,120] g8 = [0,0,0] f8 = [0,0,120] e8 = [0,0,0] d8 = [0,0,120] c8 = [0,0,0] b8 = [0,0,120] a8 = [0,0,0] running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False h1square = pygame.draw.rect(screen, (h1), pygame.Rect(0, 0, 100, 100)) g1square = pygame.draw.rect(screen, (g1), pygame.Rect(100, 0, 100, 100)) f1square = pygame.draw.rect(screen, (f1), pygame.Rect(200, 0, 100, 100)) e1square = pygame.draw.rect(screen, (e1), pygame.Rect(300, 0, 100, 100)) d1square = pygame.draw.rect(screen, (d1), pygame.Rect(400, 0, 100, 100)) c1square = pygame.draw.rect(screen, (c1), pygame.Rect(500, 0, 100, 100)) b1square = pygame.draw.rect(screen, (b1), pygame.Rect(600, 0, 100, 100)) a1square = pygame.draw.rect(screen, (a1), pygame.Rect(700, 0, 100, 100)) a2square = pygame.draw.rect(screen, (a2), pygame.Rect(700, 100, 100, 100)) b2square = pygame.draw.rect(screen, (b2), pygame.Rect(600, 100, 100, 100)) c2square = pygame.draw.rect(screen, (c2), pygame.Rect(500, 100, 100, 100)) d2square = pygame.draw.rect(screen, (d2), pygame.Rect(400, 100, 100, 100)) e2square = pygame.draw.rect(screen, (e2), pygame.Rect(300, 100, 100, 100)) f2square = pygame.draw.rect(screen, (f2), pygame.Rect(200, 100, 100, 100)) g2square = pygame.draw.rect(screen, (g2), pygame.Rect(100, 100, 100, 100)) h2square = pygame.draw.rect(screen, (h2), pygame.Rect(0, 100, 100, 100)) h3square = pygame.draw.rect(screen, (h3), pygame.Rect(0, 200, 100, 100)) g3square = pygame.draw.rect(screen, (g3), pygame.Rect(100, 200, 100, 100)) f3square = pygame.draw.rect(screen, (f3), pygame.Rect(200, 200, 100, 100)) e3square = pygame.draw.rect(screen, (e3), pygame.Rect(300, 200, 100, 100)) d3square = pygame.draw.rect(screen, (d3), pygame.Rect(400, 200, 100, 100)) c3square = pygame.draw.rect(screen, (c3), pygame.Rect(500, 200, 100, 100)) b3square = pygame.draw.rect(screen, (b3), pygame.Rect(600, 200, 100, 100)) a3square = pygame.draw.rect(screen, (a3), pygame.Rect(700, 200, 100, 100)) a4square = pygame.draw.rect(screen, (a4), pygame.Rect(700, 300, 100, 100)) b4square = pygame.draw.rect(screen, (b4), pygame.Rect(600, 300, 100, 100)) c4square = pygame.draw.rect(screen, (c4), pygame.Rect(500, 300, 100, 100)) d4square = pygame.draw.rect(screen, (d4), pygame.Rect(400, 300, 100, 100)) e4square = pygame.draw.rect(screen, (e4), pygame.Rect(300, 300, 100, 100)) f4square = pygame.draw.rect(screen, (f4), pygame.Rect(200, 300, 100, 100)) g4square = pygame.draw.rect(screen, (g4), pygame.Rect(100, 300, 100, 100)) h4square = pygame.draw.rect(screen, (h4), pygame.Rect(0, 300, 100, 100)) h5square = pygame.draw.rect(screen, (h5), pygame.Rect(0, 400, 100, 100)) g5square = pygame.draw.rect(screen, (g5), pygame.Rect(100, 400, 100, 100)) f5square = pygame.draw.rect(screen, (f5), pygame.Rect(200, 400, 100, 100)) e5square = pygame.draw.rect(screen, (e5), pygame.Rect(300, 400, 100, 100)) d5square = pygame.draw.rect(screen, (d5), pygame.Rect(400, 400, 100, 100)) c5square = pygame.draw.rect(screen, (c5), pygame.Rect(500, 400, 100, 100)) b5square = pygame.draw.rect(screen, (b5), pygame.Rect(600, 400, 100, 100)) a5square = pygame.draw.rect(screen, (a5), pygame.Rect(700, 400, 100, 100)) h6square = pygame.draw.rect(screen, (h6), pygame.Rect(700, 500, 100, 100)) g6square = pygame.draw.rect(screen, (g6), pygame.Rect(600, 500, 100, 100)) f6square = pygame.draw.rect(screen, (f6), pygame.Rect(500, 500, 100, 100)) e6square = pygame.draw.rect(screen, (e6), pygame.Rect(400, 500, 100, 100)) d6square = pygame.draw.rect(screen, (d6), pygame.Rect(300, 500, 100, 100)) c6square = pygame.draw.rect(screen, (c6), pygame.Rect(200, 500, 100, 100)) b6square = pygame.draw.rect(screen, (b6), pygame.Rect(100, 500, 100, 100)) a6square = pygame.draw.rect(screen, (a6), pygame.Rect(0, 500, 100, 100)) h7square = pygame.draw.rect(screen, (h7), pygame.Rect(0, 600, 100, 100)) g7square = pygame.draw.rect(screen, (g7), pygame.Rect(100, 600, 100, 100)) f7square = pygame.draw.rect(screen, (f7), pygame.Rect(200, 600, 100, 100)) e7square = pygame.draw.rect(screen, (e7), pygame.Rect(300, 600, 100, 100)) d7square = pygame.draw.rect(screen, (d7), pygame.Rect(400, 600, 100, 100)) c7square = pygame.draw.rect(screen, (c7), pygame.Rect(500, 600, 100, 100)) b7square = pygame.draw.rect(screen, (b7), pygame.Rect(600, 600, 100, 100)) a7square = pygame.draw.rect(screen, (a7), pygame.Rect(700, 600, 100, 100)) h8square = pygame.draw.rect(screen, (h8), pygame.Rect(700, 700, 100, 100)) g8square = pygame.draw.rect(screen, (g8), pygame.Rect(600, 700, 100, 100)) f8square = pygame.draw.rect(screen, (f8), pygame.Rect(500, 700, 100, 100)) e8square = pygame.draw.rect(screen, (e8), pygame.Rect(400, 700, 100, 100)) d8square = pygame.draw.rect(screen, (d8), pygame.Rect(300, 700, 100, 100)) c8square = pygame.draw.rect(screen, (c8), pygame.Rect(200, 700, 100, 100)) b8square = pygame.draw.rect(screen, (b8), pygame.Rect(100, 700, 100, 100)) a8square = pygame.draw.rect(screen, (a8), pygame.Rect(0, 700, 100, 100)) pawn1 = pygame.draw.rect(screen, (255,255,255), pygame.Rect(x, y, 50, 50)) pos = pygame.mouse.get_pos() pressed1, pressed2, pressed3 = pygame.mouse.get_pressed() if pawn1.collidepoint(pos) and pressed1: coords = pygame.mouse.get_pos() xcoord = coords[0] / 100 ycoord = coords[1] / 100 if ycoord > 7: ycoord = "8" elif 6 < ycoord < 7: ycoord = "7" elif 5 < ycoord < 6: ycoord = "6" elif 4 < ycoord < 5: ycoord = "5" elif 3 < ycoord < 4: ycoord = "4" elif 2 < ycoord < 3: ycoord = "3" elif 1 < ycoord < 2: ycoord = "2" elif ycoord < 1: ycoord = "1" if xcoord > 7: xcoord = "a" elif 6 < xcoord < 7: xcoord = "b" elif 5 < xcoord < 6: xcoord = "c" elif 4 < xcoord < 5: xcoord = "d" elif 3 < xcoord < 4: xcoord = "e" elif 2 < xcoord < 3: xcoord = "f" elif 1 < xcoord < 2: xcoord = "g" elif xcoord < 1: xcoord = "h" upto = int(ycoord) + 1 print(xcoord + str(upto)) xcoord + str(upto) = var var = [255,255,255] pygame.display.update()Using this code I can get the name of the square that the pawn is in, but to do anything with that I have to call upon a variable using this. Thanks! RE: Calling on a Variable using other Variables - deanhystad - Jul-22-2021 Instead of using a variable to store the color you could use a function that returns the color. As I said, somewhere you need code. Your code is odd. I don't have any pygame experience at all, but I think you would want to some sort of collection object instead of having a named variable for each thing. Since the squares on the board are an important part of the game I might make a class to hold all the information for a square such as the location, the background color, and any chess piece landing on the square: class Square(): '''A location on the board''' def __init__(self, rank, file): self.rank = rank self.file = file self.name = 'abcdefgh'[rank]+str(file+1) self.background = [0,0,120] if (rank+file)%2 else [0,0,0] x = (rank)*100 # Not sure of pygame coordinates so this could be wrong y = (file)*100 self.rectangle = [x, y, 100, 100] self.occupant = None def draw(self): '''Draw self on screen''' self.square = pygame.draw.rect(screen, self.color, self.rectangle) if self.occupant: '''Draw image for piece occupying square''' @property def piece(self): '''Return occupant''' return self.occupant @piece.setter def place(self, piece): '''Set the occupant. Redraw the square''' self.occupant = piece self.draw()In addition to storing information a class can also have actions. My Square class would have an action (method) to draw the square and another for adding or removing a chess piece. I might make the latter a property so I can use the same property to see or set what piece occupies a square. The board is just a collection of squares, so I make a class that represents that. class Board(): '''A grid of Squares''' def __init__(self): self.ranks = [] for rank in range(8): self.rank.append([Square(rank, file) for file in range(8)]) def square(self, rank, file): """Return square at rank/file""" return self.rank[rank][file] def move(self, r1, f1, r2, f2): '''Move piece from r1, f1 to r2, f2''' self.square(r2, f2).piece = self.square(r1, f1).piece self.square(r1, f1).piece = None def draw(self): '''Draw the board''' for rank in self.ranks: for square in rank: square.draw()Now I can make and draw a chess board in two lines: board = Board() board.draw()And I can move a piece in one line board.move(startRank, startFile, endRank, endFile) RE: Calling on a Variable using other Variables - jacknewport - Jul-23-2021 Thanks, I think I can get this working now! |