Problem mit Koordinaten im einfachen Quadrat-Matching-Spiel in PythonPython

Python-Programme
Anonymous
 Problem mit Koordinaten im einfachen Quadrat-Matching-Spiel in Python

Post by Anonymous »

Ich baue ein einfaches Python-Quadrat-Matching-Spiel, bei dem zunächst zufällig gefärbte Quadrate ausgewählt und auf dem Bildschirm platziert werden, sodass sie den Bildschirm ausfüllen. Dann wählt der Spieler zufällig die Positionen der Quadrate aus und versucht, die Quadrate mit den Startpositionen in Einklang zu bringen. Wenn er damit übereinstimmt, beginnt sich das nächste Quadrat zu bewegen und er muss es anpassen.
Meine Quadrate sind aufgrund der Anfangspixelgröße des Quadrats (21x21) etwas zu groß, die ich nicht ändern kann, aber das ist ein Nebenproblem.
Ich habe einen Code geschrieben, der prüft, ob sich das Quadrat an der richtigen Position befindet, aber es funktioniert nicht mit dem unteren linken Quadrat und ich weiß nicht warum ... Jedes Mal, wenn ich den Code ausführe, kann ich jedes Quadrat zuordnen und alles funktioniert außer einem Quadrat.
Ich programmiere seit einem Monat, daher ist jede Kritik auch an der Effizienz meines Codes hilfreich!
Ich habe 3 Dateien:
main.py:

Code: Select all

from turtle import Screen
from squares_manager import Square
from scoreboard import Scoreboard
import time

screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.tracer(0)
game_is_on = True

scoreboard = Scoreboard()
scoreboard.starting_writing()

square = Square()

def combine_starting_functions():
square.create_start_square()
scoreboard.when_game_starts()
square.squares_starting_pos()

screen.listen()
screen.onkey(combine_starting_functions, "space")
screen.onkey(square.randomize_squares, "Return")
screen.onkeypress(square.move_down, "Down")
screen.onkeypress(square.move_right, "Right")
screen.onkeypress(square.move_left, "Left")
screen.onkeypress(square.move_up, "Up")

while game_is_on:
screen.update()

screen.exitonclick()
square_manager.py:

Code: Select all

from turtle import Turtle
import random

COLORS = ["red", "blue", "pink", "yellow", "green", 'purple', "orange", "white", "brown", "cyan", "firebrick",
"dark magenta", "peach puff", "salmon", "dark violet", "spring green"]

STARTING_SIZE = 600

class Square(Turtle):
def __init__(self):
super().__init__()
self.number_of_squares = 2
self.level = self.number_of_squares ** 2
self.squares = []
self.positions = []
self.list_squares_to_move = []
self.distance_between = STARTING_SIZE / self.number_of_squares
self.half_of_square = self.distance_between / 2
for square in range(self.level):
self.list_squares_to_move.append(square)
self.which_square = random.choice(self.list_squares_to_move)

def create_start_square(self):
for square in range(self.level):
new_square = Turtle()
new_square.hideturtle()
new_square.shape("square")
# new_square.shape("/Users/Łukasz/Desktop/20x20square.gif")
ran_color = random.choice(COLORS)
new_square.color(ran_color)
COLORS.remove(ran_color)
new_square.penup()
new_square.turtlesize((STARTING_SIZE / 20) / self.number_of_squares)
self.squares.append(new_square)

def squares_starting_pos(self):
increment_next_square_x = 0
increment_next_square_y = 0
for square in self.squares:
square.showturtle()
square.goto((-self.half_of_square) + increment_next_square_x, self.half_of_square + increment_next_square_y)
increment_next_square_x += self.distance_between
if square.xcor() >  300:
square.setx(-300 + self.half_of_square)
square.right(90)
square.forward(self.distance_between)
increment_next_square_y -= self.distance_between
increment_next_square_x = self.distance_between
self.positions.append(square.position())
print(self.positions)

def randomize_squares(self):
for square in self.squares:
square.goto(random.randint(-300 + self.half_of_square, 300 - self.half_of_square), random.randint
(-300 + self.half_of_square, 300 - self.half_of_square))
square.setheading(90)

# def level_up(self):
#     self.number_of_squares += 1

def move_up(self):
self.squares[self.which_square].forward(1)
self.check_square_position()

def move_down(self):
self.squares[self.which_square].backward(1)
self.check_square_position()

def move_right(self):
self.squares[self.which_square].right(90)
self.squares[self.which_square].forward(1)
self.squares[self.which_square].left(90)
self.check_square_position()

def move_left(self):
self.squares[self.which_square].left(90)
self.squares[self.which_square].forward(1)
self.squares[self.which_square].right(90)
self.check_square_position()

def check_square_position(self):
print(self.squares[self.which_square].position())
print(self.positions[self.which_square])
if self.squares[self.which_square].position() == self.positions[self.which_square]:
self.list_squares_to_move.remove(self.which_square)
self.next_square_to_move()
print(self.list_squares_to_move)

def next_square_to_move(self):
self.which_square = random.choice(self.list_squares_to_move)
scoreboard_py:

Code: Select all

from turtle import Turtle

class Scoreboard(Turtle):
def __init__(self):
super().__init__()
self.hideturtle()
self.penup()

def starting_writing(self):
self.pencolor("white")
self.home()
self.pendown()
self.write("TO SEE STARTING POSITION PRESS SPACE BAR \n AFTER THAT PRESS ENTER TO START A GAME \n "
"             TO MOVE PRESS ARROWS", False, "center"
, ("arial", 15, "bold"))
self.penup()

def when_game_starts(self):
self.clear()
self.hideturtle()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post