From 3d431c1cb451e50a7cc1fdb469163efa04136b71 Mon Sep 17 00:00:00 2001 From: Kunal Sonne Date: Thu, 17 Oct 2024 14:10:15 +0530 Subject: [PATCH] resolved the problem with main.py --- main.py | 233 ++++++++------------------------- mintty.exe.stackdump | 1 + ys | 303 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 358 insertions(+), 179 deletions(-) create mode 100644 mintty.exe.stackdump create mode 100644 ys diff --git a/main.py b/main.py index b9da115..1e24888 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,11 @@ import pygame import sys -# Constants SCREEN_WIDTH, SCREEN_HEIGHT = 300, 300 CELL_SIZE = 40 PADDING = 20 ROWS = COLS = (SCREEN_WIDTH - 4 * PADDING) // CELL_SIZE -# Colors WHITE = (255, 255, 255) RED = (252, 91, 122) BLUE = (78, 193, 246) @@ -17,20 +15,17 @@ LIGHT_GRAY = (100, 100, 100) -# Initialize Pygame pygame.init() screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("Pygame Game with Replay and Quit") -win = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) font = pygame.font.SysFont('cursive', 25) -#buttons +# buttons button_width = 200 button_height = 50 -# Define the Cell class to represent each cell in the grid class Cell: def __init__(self, row, col): self.row = row @@ -73,208 +68,88 @@ def create_cells(): cells.append(cell) return cells -def reset_cells(): - return None, None, False, False, False, False - -def reset_score(): - return 0, 0, 0 - -def reset_player(): - return 0, ['X', 'O'], 'X', False - -# Game variables initialization -game_over = False -cells = create_cells() -pos, current_cell, up, right, bottom, left = reset_cells() -fill_count, p1_score, p2_score = reset_score() -turn, players, current_player, next_turn = reset_player() - -# Main game loop -running = True -while running: - - win.fill(DARK_GRAY) - - for event in pygame.event.get(): - if event.type == pygame.QUIT: - running = False - elif event.type == pygame.MOUSEBUTTONDOWN: - pos = event.pos - elif event.type == pygame.MOUSEBUTTONUP: - pos = None - elif event.type == pygame.KEYDOWN: - if event.key == pygame.K_q or event.key == pygame.K_ESCAPE: - running = False - elif event.key == pygame.K_r: - game_over = False - cells = create_cells() - pos, current_cell, up, right, bottom, left = reset_cells() - fill_count, p1_score, p2_score = reset_score() - turn, players, current_player, next_turn = reset_player() - elif not game_over: - if event.key == pygame.K_UP: - up = True - elif event.key == pygame.K_RIGHT: - right = True - elif event.key == pygame.K_DOWN: - bottom = True - elif event.key == pygame.K_LEFT: - left = True - elif event.type == pygame.KEYUP: - if event.key == pygame.K_UP: - up = False - elif event.key == pygame.K_RIGHT: - right = False - elif event.key == pygame.K_DOWN: - bottom = False - elif event.key == pygame.K_LEFT: - left = False - - # Drawing grid - for r in range(ROWS + 1): - for c in range(COLS + 1): - pygame.draw.circle(win, WHITE, (c * CELL_SIZE + 2 * PADDING, r * CELL_SIZE + 3 * PADDING), 2) - - # Update and draw cells - for cell in cells: - cell.update(win) - if pos and cell.rect.collidepoint(pos): - current_cell = cell - - # Drawing current selection - if current_cell: - index = current_cell.index - if not current_cell.winner: - pygame.draw.circle(win, RED, current_cell.rect.center, 2) - - if up and not current_cell.sides[0]: - current_cell.sides[0] = True - if index - ROWS >= 0: - cells[index - ROWS].sides[2] = True - next_turn = True - if right and not current_cell.sides[1]: - current_cell.sides[1] = True - if (index + 1) % COLS > 0: - cells[index + 1].sides[3] = True - next_turn = True - if bottom and not current_cell.sides[2]: - current_cell.sides[2] = True - if index + ROWS < len(cells): - cells[index + ROWS].sides[0] = True - next_turn = True - if left and not current_cell.sides[3]: - current_cell.sides[3] = True - if (index % COLS) > 0: - cells[index - 1].sides[1] = True - next_turn = True - - # Check for win condition - res = current_cell.check_win(current_player) - if res: - fill_count += res - if current_player == 'X': - p1_score += 1 - else: - p2_score += 1 - if fill_count == ROWS * COLS: - game_over = True - - # Switch players - if next_turn: - turn = (turn + 1) % len(players) - current_player = players[turn] - next_turn = False - - # Display scores and current player - p1_img = font.render(f'{p1_score}', True, BLUE) - p2_img = font.render(f'{p2_score}', True, BLUE) - - # Render player texts with appropriate positions - p1_text = font.render('Player 1:', True, BLUE) - p2_text = font.render('Player 2:', True, BLUE) - - # Calculate positions for player texts and scores - p1_text_pos = (2 * PADDING, 15) - p1_img_pos = (p1_text_pos[0] + p1_text.get_width() + 5, 15) - p2_img_pos = (SCREEN_WIDTH - 2 * PADDING - p2_img.get_width(), 15) - p2_text_pos = (p2_img_pos[0] - p2_text.get_width() - 5, 15) - - # Blit the player texts and scores - win.blit(p1_text, p1_text_pos) - win.blit(p1_img, p1_img_pos) - win.blit(p2_text, p2_text_pos) - win.blit(p2_img, p2_img_pos) - - # Highlight current player's turn - if not game_over: - if turn == 0: # Player 1's turn - pygame.draw.rect(win, BLUE, (p1_text_pos[0], p1_text_pos[1] + font.get_height() + 2, p1_text.get_width() + p1_img.get_width() + 5, 2), 0) - else: # Player 2's turn - pygame.draw.rect(win, BLUE, (p2_text_pos[0], p2_text_pos[1] + font.get_height() + 2, p2_text.get_width() + p2_img.get_width() + 5, 2), 0) - - if game_over: - # Display game over message - overlay = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT)) - overlay.set_alpha(200) - overlay.fill(BLACK) - win.blit(overlay, (0, 0)) - over_img = font.render('Game Over', True,WHITE ) - winner_img = font.render(f'Player {1 if p1_score > p2_score else 2} Won', True, GREEN) - msg_img = font.render('Press R to restart, Q or ESC to quit', True, RED) - win.blit(over_img, ((SCREEN_WIDTH - over_img.get_width()) / 2, 100)) - win.blit(winner_img, ((SCREEN_WIDTH - winner_img.get_width()) / 2, 150)) - win.blit(msg_img, ((SCREEN_WIDTH - msg_img.get_width()) / 2, 200)) - - # Draw border - pygame.draw.rect(win, LIGHT_GRAY, (0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 2, border_radius=10) +def reset_game(): + + return create_cells(), 0, 0, 0, ['X', 'O'], 'X', False, False def draw_button(text, color, x, y, action=None): mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() - if x + button_width > mouse[0] > x and y + button_height > mouse[1] > y: - pygame.draw.rect(screen, color, (x, y, button_width, button_height)) - if click[0] == 1 and action: - action() - else: - pygame.draw.rect(screen, color, (x, y, button_width, button_height)) + pygame.draw.rect(screen, color, (x, y, button_width, button_height)) + if x + button_width > mouse[0] > x and y + button_height > mouse[1] > y and click[0] == 1 and action: + action() text_surf = font.render(text, True, WHITE) text_rect = text_surf.get_rect(center=(x + button_width / 2, y + button_height / 2)) screen.blit(text_surf, text_rect) def replay_game(): - main() + global cells, fill_count, p1_score, p2_score, players, current_player, game_over, next_turn + cells, fill_count, p1_score, p2_score, players, current_player, game_over, next_turn = reset_game() def quit_game(): pygame.quit() sys.exit() def main(): + global cells, fill_count, p1_score, p2_score, players, current_player, game_over, next_turn + clock = pygame.time.Clock() + cells, fill_count, p1_score, p2_score, players, current_player, game_over, next_turn = reset_game() + running = True + pos, current_cell = None, None + up, right, bottom, left = False, False, False, False while running: for event in pygame.event.get(): if event.type == pygame.QUIT: - pygame.quit() - sys.exit() + running = False + elif event.type == pygame.MOUSEBUTTONDOWN: + pos = event.pos + elif event.type == pygame.MOUSEBUTTONUP: + pos = None + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_q or event.key == pygame.K_ESCAPE: + running = False + elif event.key == pygame.K_r: + replay_game() + elif not game_over: + if event.key == pygame.K_UP: + up = True + elif event.key == pygame.K_RIGHT: + right = True + elif event.key == pygame.K_DOWN: + bottom = True + elif event.key == pygame.K_LEFT: + left = True + elif event.type == pygame.KEYUP: + if event.key == pygame.K_UP: + up = False + elif event.key == pygame.K_RIGHT: + right = False + elif event.key == pygame.K_DOWN: + bottom = False + elif event.key == pygame.K_LEFT: + left = False + + screen.fill(DARK_GRAY) - screen.fill(WHITE) + for r in range(ROWS + 1): + for c in range(COLS + 1): + pygame.draw.circle(screen, WHITE, (c * CELL_SIZE + 2 * PADDING, r * CELL_SIZE + 3 * PADDING), 2) - # Game logic and drawing go here + for cell in cells: + cell.update(screen) + if pos and cell.rect.collidepoint(pos): + current_cell = cell - # Draw buttons draw_button("Replay", BLUE, SCREEN_WIDTH // 4 - button_width // 2, SCREEN_HEIGHT // 2, replay_game) draw_button("Quit", RED, 3 * SCREEN_WIDTH // 4 - button_width // 2, SCREEN_HEIGHT // 2, quit_game) - - pygame.display.update() - -pygame.quit() - -pygame.display.flip() + pygame.display.update() clock.tick(60) if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/mintty.exe.stackdump b/mintty.exe.stackdump new file mode 100644 index 0000000..2d667fa --- /dev/null +++ b/mintty.exe.stackdump @@ -0,0 +1 @@ +69057679 [main] mintty 892 cygwin_exception::open_stackdumpfile: Dumping stack trace to mintty.exe.stackdump diff --git a/ys b/ys new file mode 100644 index 0000000..cc11d9d --- /dev/null +++ b/ys @@ -0,0 +1,303 @@ +diff --git a/main.py b/main.py +index b9da115..1e24888 100644 +--- a/main.py ++++ b/main.py +@@ -1,13 +1,11 @@ + import pygame + import sys +  +-# Constants + SCREEN_WIDTH, SCREEN_HEIGHT = 300, 300 + CELL_SIZE = 40 + PADDING = 20 + ROWS = COLS = (SCREEN_WIDTH - 4 * PADDING) // CELL_SIZE +  +-# Colors + WHITE = (255, 255, 255) + RED = (252, 91, 122) + BLUE = (78, 193, 246) +@@ -17,20 +15,17 @@ DARK_GRAY = (30, 30, 30) + LIGHT_GRAY = (100, 100, 100) +  +  +-# Initialize Pygame + pygame.init() +  + screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) + pygame.display.set_caption("Pygame Game with Replay and Quit") +  +-win = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) + font = pygame.font.SysFont('cursive', 25) +  +-#buttons ++# buttons + button_width = 200 + button_height = 50 +  +-# Define the Cell class to represent each cell in the grid + class Cell: + def __init__(self, row, col): + self.row = row +@@ -73,208 +68,88 @@ def create_cells(): + cells.append(cell) + return cells +  +-def reset_cells(): +- return None, None, False, False, False, False +- +-def reset_score(): +- return 0, 0, 0 +- +-def reset_player(): +- return 0, ['X', 'O'], 'X', False +- +-# Game variables initialization +-game_over = False +-cells = create_cells() +-pos, current_cell, up, right, bottom, left = reset_cells() +-fill_count, p1_score, p2_score = reset_score() +-turn, players, current_player, next_turn = reset_player() +- +-# Main game loop +-running = True +-while running: +- +- win.fill(DARK_GRAY) +- +- for event in pygame.event.get(): +- if event.type == pygame.QUIT: +- running = False +- elif event.type == pygame.MOUSEBUTTONDOWN: +- pos = event.pos +- elif event.type == pygame.MOUSEBUTTONUP: +- pos = None +- elif event.type == pygame.KEYDOWN: +- if event.key == pygame.K_q or event.key == pygame.K_ESCAPE: +- running = False +- elif event.key == pygame.K_r: +- game_over = False +- cells = create_cells() +- pos, current_cell, up, right, bottom, left = reset_cells() +- fill_count, p1_score, p2_score = reset_score() +- turn, players, current_player, next_turn = reset_player() +- elif not game_over: +- if event.key == pygame.K_UP: +- up = True +- elif event.key == pygame.K_RIGHT: +- right = True +- elif event.key == pygame.K_DOWN: +- bottom = True +- elif event.key == pygame.K_LEFT: +- left = True +- elif event.type == pygame.KEYUP: +- if event.key == pygame.K_UP: +- up = False +- elif event.key == pygame.K_RIGHT: +- right = False +- elif event.key == pygame.K_DOWN: +- bottom = False +- elif event.key == pygame.K_LEFT: +- left = False +- +- # Drawing grid +- for r in range(ROWS + 1): +- for c in range(COLS + 1): +- pygame.draw.circle(win, WHITE, (c * CELL_SIZE + 2 * PADDING, r * CELL_SIZE + 3 * PADDING), 2) +- +- # Update and draw cells +- for cell in cells: +- cell.update(win) +- if pos and cell.rect.collidepoint(pos): +- current_cell = cell +- +- # Drawing current selection +- if current_cell: +- index = current_cell.index +- if not current_cell.winner: +- pygame.draw.circle(win, RED, current_cell.rect.center, 2) +- +- if up and not current_cell.sides[0]: +- current_cell.sides[0] = True +- if index - ROWS >= 0: +- cells[index - ROWS].sides[2] = True +- next_turn = True +- if right and not current_cell.sides[1]: +- current_cell.sides[1] = True +- if (index + 1) % COLS > 0: +- cells[index + 1].sides[3] = True +- next_turn = True +- if bottom and not current_cell.sides[2]: +- current_cell.sides[2] = True +- if index + ROWS < len(cells): +- cells[index + ROWS].sides[0] = True +- next_turn = True +- if left and not current_cell.sides[3]: +- current_cell.sides[3] = True +- if (index % COLS) > 0: +- cells[index - 1].sides[1] = True +- next_turn = True +- +- # Check for win condition +- res = current_cell.check_win(current_player) +- if res: +- fill_count += res +- if current_player == 'X': +- p1_score += 1 +- else: +- p2_score += 1 +- if fill_count == ROWS * COLS: +- game_over = True +- +- # Switch players +- if next_turn: +- turn = (turn + 1) % len(players) +- current_player = players[turn] +- next_turn = False +- +- # Display scores and current player +- p1_img = font.render(f'{p1_score}', True, BLUE) +- p2_img = font.render(f'{p2_score}', True, BLUE) +- +- # Render player texts with appropriate positions  +- p1_text = font.render('Player 1:', True, BLUE) +- p2_text = font.render('Player 2:', True, BLUE) +- +- # Calculate positions for player texts and scores +- p1_text_pos = (2 * PADDING, 15) +- p1_img_pos = (p1_text_pos[0] + p1_text.get_width() + 5, 15) +- p2_img_pos = (SCREEN_WIDTH - 2 * PADDING - p2_img.get_width(), 15) +- p2_text_pos = (p2_img_pos[0] - p2_text.get_width() - 5, 15) +- +- # Blit the player texts and scores +- win.blit(p1_text, p1_text_pos) +- win.blit(p1_img, p1_img_pos) +- win.blit(p2_text, p2_text_pos) +- win.blit(p2_img, p2_img_pos) +- +- # Highlight current player's turn +- if not game_over: +- if turn == 0: # Player 1's turn +- pygame.draw.rect(win, BLUE, (p1_text_pos[0], p1_text_pos[1] + font.get_height() + 2, p1_text.get_width() + p1_img.get_width() + 5, 2), 0) +- else: # Player 2's turn +- pygame.draw.rect(win, BLUE, (p2_text_pos[0], p2_text_pos[1] + font.get_height() + 2, p2_text.get_width() + p2_img.get_width() + 5, 2), 0) +- +- if game_over: +- # Display game over message +- overlay = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT)) +- overlay.set_alpha(200)  +- overlay.fill(BLACK) +- win.blit(overlay, (0, 0)) +- over_img = font.render('Game Over', True,WHITE ) +- winner_img = font.render(f'Player {1 if p1_score > p2_score else 2} Won', True, GREEN) +- msg_img = font.render('Press R to restart, Q or ESC to quit', True, RED) +- win.blit(over_img, ((SCREEN_WIDTH - over_img.get_width()) / 2, 100)) +- win.blit(winner_img, ((SCREEN_WIDTH - winner_img.get_width()) / 2, 150)) +- win.blit(msg_img, ((SCREEN_WIDTH - msg_img.get_width()) / 2, 200)) +- +- # Draw border +- pygame.draw.rect(win, LIGHT_GRAY, (0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 2, border_radius=10) ++def reset_game(): ++  ++ return create_cells(), 0, 0, 0, ['X', 'O'], 'X', False, False +  + def draw_button(text, color, x, y, action=None): + mouse = pygame.mouse.get_pos() + click = pygame.mouse.get_pressed() +  +- if x + button_width > mouse[0] > x and y + button_height > mouse[1] > y: +- pygame.draw.rect(screen, color, (x, y, button_width, button_height)) +- if click[0] == 1 and action: +- action() +- else: +- pygame.draw.rect(screen, color, (x, y, button_width, button_height)) ++ pygame.draw.rect(screen, color, (x, y, button_width, button_height)) ++ if x + button_width > mouse[0] > x and y + button_height > mouse[1] > y and click[0] == 1 and action: ++ action() +  + text_surf = font.render(text, True, WHITE) + text_rect = text_surf.get_rect(center=(x + button_width / 2, y + button_height / 2)) + screen.blit(text_surf, text_rect) +  + def replay_game(): +- main() ++ global cells, fill_count, p1_score, p2_score, players, current_player, game_over, next_turn ++ cells, fill_count, p1_score, p2_score, players, current_player, game_over, next_turn = reset_game() +  + def quit_game(): + pygame.quit() + sys.exit() +  + def main(): ++ global cells, fill_count, p1_score, p2_score, players, current_player, game_over, next_turn ++ + clock = pygame.time.Clock() ++ cells, fill_count, p1_score, p2_score, players, current_player, game_over, next_turn = reset_game() ++ + running = True ++ pos, current_cell = None, None ++ up, right, bottom, left = False, False, False, False +  + while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: +- pygame.quit() +- sys.exit() ++ running = False ++ elif event.type == pygame.MOUSEBUTTONDOWN: ++ pos = event.pos ++ elif event.type == pygame.MOUSEBUTTONUP: ++ pos = None ++ elif event.type == pygame.KEYDOWN: ++ if event.key == pygame.K_q or event.key == pygame.K_ESCAPE: ++ running = False ++ elif event.key == pygame.K_r: ++ replay_game() ++ elif not game_over: ++ if event.key == pygame.K_UP: ++ up = True ++ elif event.key == pygame.K_RIGHT: ++ right = True ++ elif event.key == pygame.K_DOWN: ++ bottom = True ++ elif event.key == pygame.K_LEFT: ++ left = True ++ elif event.type == pygame.KEYUP: ++ if event.key == pygame.K_UP: ++ up = False ++ elif event.key == pygame.K_RIGHT: ++ right = False ++ elif event.key == pygame.K_DOWN: ++ bottom = False ++ elif event.key == pygame.K_LEFT: ++ left = False ++ ++ screen.fill(DARK_GRAY) +  +- screen.fill(WHITE) ++ for r in range(ROWS + 1): ++ for c in range(COLS + 1): ++ pygame.draw.circle(screen, WHITE, (c * CELL_SIZE + 2 * PADDING, r * CELL_SIZE + 3 * PADDING), 2) +  +- # Game logic and drawing go here ++ for cell in cells: ++ cell.update(screen) ++ if pos and cell.rect.collidepoint(pos): ++ current_cell = cell +  +- # Draw buttons + draw_button("Replay", BLUE, SCREEN_WIDTH // 4 - button_width // 2, SCREEN_HEIGHT // 2, replay_game) + draw_button("Quit", RED, 3 * SCREEN_WIDTH // 4 - button_width // 2, SCREEN_HEIGHT // 2, quit_game) +  +- +- pygame.display.update() +- +-pygame.quit() +- +-pygame.display.flip() ++ pygame.display.update() + clock.tick(60) +  + if __name__ == "__main__": +- main() +\ No newline at end of file ++ main()