Skip to main content
deleted 155 characters in body; edited tags
Source Link
Jamal
  • 34.9k
  • 13
  • 133
  • 237

I have made a little Snake game with Python tkinter. It's my first Python program with one GuiGUI. What can iI improve? In my posted code the indentations are partly wrong, because I couldn't format it correctly. I have edited it.

Any help would be really appreciated.

I have made a little Snake game with Python tkinter. It's my first Python program with one Gui. What can i improve? In my posted code the indentations are partly wrong, because I couldn't format it correctly. I have edited it.

Any help would be really appreciated.

I have made a little Snake game with Python tkinter. It's my first Python program with one GUI. What can I improve?

added 181 characters in body
Source Link
Marten
  • 585
  • 6
  • 18

I have made a little Snake game with Python tkinter. It's my first Python program with one Gui. What can i improve? In my posted code the indentations are partly wrong, because I couldn't format it correctly. I have edited it.

from tkinter import *
import random


boardWidth = 30
boardHeight = 30
tilesize = 10

class Snake():

    def __init__(self):

         self.snakeX = [20, 20, 20]
         self.snakeY = [20, 21, 22]
         self.snakeLength = 3
         self.key = "w"
         self.points = 0

    def move(self): # move and change direction with wasd

         for i in range(self.snakeLength - 1, 0, -1):
                 self.snakeX[i] = self.snakeX[i-1]
                 self.snakeY[i] = self.snakeY[i-1]

         if self.key == "w":
             self.snakeY[0] = self.snakeY[0] - 1

         elif self.key == "s":
             self.snakeY[0] = self.snakeY[0] + 1

         elif self.key == "a":
             self.snakeX[0] = self.snakeX[0] - 1

         elif self.key == "d":
             self.snakeX[0] = self.snakeX[0] + 1

         self.eatApple()

    def eatApple(self):

        if self.snakeX[0] == apple.getAppleX() and self.snakeY[0] == apple.getAppleY():
        
        self.snakeLength = self.snakeLength + 1
        x = self.snakeX[len(self.snakeX)-1] # Snake grows
        y = self.snakeY[len(self.snakeY) - 1]
        self.snakeX.append(x+1)
        self.snakeY.append(y)

            self.pointssnakeLength = self.pointssnakeLength + 1
        apple.createNewApple()

     def checkGameOver      x = self.snakeX[len(self.snakeX):-1] # Snake grows
            y = self.snakeY[len(self.snakeY) - 1]
            self.snakeX.append(x+1)
            self.snakeY.append(y)

         for i in range(1,self.points = self.snakeLength,points + 1
            apple.createNewApple():

             if self.snakeY[0] == self.snakeY[i] and self.snakeX[0] ==def checkGameOver(self.snakeX[i]):
             return True # Snake eat itself

         if self.snakeX[0] < 1 or self.snakeX[0] >= boardWidth-1 orfor self.snakeY[0]i <in range(1 or, self.snakeY[0] >=snakeLength, boardHeight-1):
         return True # Snake out of Bounds

            if self.snakeY[0] == self.snakeY[i] and self.snakeX[0] == self.snakeX[i]:
                return FalseTrue # Snake eat itself

def getKey(       if self,.snakeX[0] event)< 1 or self.snakeX[0] >= boardWidth-1 or self.snakeY[0] < 1 or self.snakeY[0] >= boardHeight-1:
            return True # Snake out of Bounds

    if event.char == "w" or event.char == "d" or event.char == "s" or event.char == "a" or event.char == " ":
        self.key =return event.charFalse

    def getSnakeXgetKey(self, indexevent):
    return self.snakeX[index]

def getSnakeY(self, index)      if event.char == "w" or event.char == "d" or event.char == "s" or event.char == "a" or event.char == " ":
    return        self.snakeY[index]key = event.char

    def getSnakeLengthgetSnakeX(self, index):
        return self.snakeLengthsnakeX[index]

    def getPointsgetSnakeY(self, index):
        return self.pointssnakeY[index]

    def getSnakeLength(self):
        return self.snakeLength

    def getPoints(self):
        return self.points


class Apple:

    def __init__(self):
        self.appleX = random.randint(1, boardWidth - 2)
        self.appleY = random.randint(1, boardHeight - 2)

    def getAppleX(self):
        return self.appleX

    def getAppleY(self):
        return self.appleY

    def createNewApple(self):
        self.appleX = random.randint(1, boardWidth - 2)
        self.appleY = random.randint(1, boardHeight - 2)

class GameLoop:

    def repaint(self):

        canvas.after(200, self.repaint)
        canvas.delete(ALL)

        if snake.checkGameOver() == False:

            snake.move()
            snake.checkGameOver()

            canvas.create_rectangle(snake.getSnakeX(0) * tilesize, snake.getSnakeY(0) * tilesize,
                                    snake.getSnakeX(0) * tilesize + tilesize,
                                    snake.getSnakeY(0) * tilesize + tilesize, fill="red")  # Head

            for i in range(1, snake.getSnakeLength(), 1):
                canvas.create_rectangle(snake.getSnakeX(i) * tilesize, snake.getSnakeY(i) * tilesize,
                                        snake.getSnakeX(i) * tilesize + tilesize,
                                        snake.getSnakeY(i) * tilesize + tilesize, fill="blue")  # Body

            canvas.create_rectangle(apple.getAppleX() * tilesize, apple.getAppleY() * tilesize,
                                    apple.getAppleX() * tilesize + tilesize,
                                    apple.getAppleY() * tilesize + tilesize, fill="green")  # Apple

        else:   # GameOver Message
            canvas.delete(ALL)
            canvas.create_text(150, 100, fill="darkblue", font="Times 20 italic bold", text="GameOver!")
            canvas.create_text(150, 150, fill="darkblue", font="Times 20 italic bold",
                                   text="Points:" + str(snake.getPoints()))


snake = Snake()
apple = Apple()
root = Tk()

canvas = Canvas(root, width=300, height=300)
canvas.configure(background="yellow")
canvas.pack()

gameLoop = GameLoop()
gameLoop.repaint()

root.title("Snake")
root.bind('<KeyPress>', snake.getKey)
root.mainloop()

I have made a little Snake game with Python tkinter. It's my first Python program with one Gui. What can i improve? In my posted code the indentations are partly wrong, because I couldn't format it correctly.

from tkinter import *
import random


boardWidth = 30
boardHeight = 30
tilesize = 10

class Snake():

    def __init__(self):

         self.snakeX = [20, 20, 20]
         self.snakeY = [20, 21, 22]
         self.snakeLength = 3
         self.key = "w"
         self.points = 0

    def move(self): # move and change direction with wasd

         for i in range(self.snakeLength - 1, 0, -1):
                 self.snakeX[i] = self.snakeX[i-1]
                 self.snakeY[i] = self.snakeY[i-1]

         if self.key == "w":
             self.snakeY[0] = self.snakeY[0] - 1

         elif self.key == "s":
             self.snakeY[0] = self.snakeY[0] + 1

         elif self.key == "a":
             self.snakeX[0] = self.snakeX[0] - 1

         elif self.key == "d":
             self.snakeX[0] = self.snakeX[0] + 1

         self.eatApple()

    def eatApple(self):

        if self.snakeX[0] == apple.getAppleX() and self.snakeY[0] == apple.getAppleY():
        
        self.snakeLength = self.snakeLength + 1
        x = self.snakeX[len(self.snakeX)-1] # Snake grows
        y = self.snakeY[len(self.snakeY) - 1]
        self.snakeX.append(x+1)
        self.snakeY.append(y)

        self.points = self.points + 1
        apple.createNewApple()

     def checkGameOver(self):

         for i in range(1, self.snakeLength, 1):

             if self.snakeY[0] == self.snakeY[i] and self.snakeX[0] == self.snakeX[i]:
             return True # Snake eat itself

         if self.snakeX[0] < 1 or self.snakeX[0] >= boardWidth-1 or self.snakeY[0] < 1 or self.snakeY[0] >= boardHeight-1:
         return True # Snake out of Bounds

    return False

def getKey(self, event):

    if event.char == "w" or event.char == "d" or event.char == "s" or event.char == "a" or event.char == " ":
        self.key = event.char

def getSnakeX(self, index):
    return self.snakeX[index]

def getSnakeY(self, index):
    return self.snakeY[index]

def getSnakeLength(self):
    return self.snakeLength

def getPoints(self):
    return self.points


class Apple:

def __init__(self):
    self.appleX = random.randint(1, boardWidth - 2)
    self.appleY = random.randint(1, boardHeight - 2)

def getAppleX(self):
    return self.appleX

def getAppleY(self):
    return self.appleY

def createNewApple(self):
    self.appleX = random.randint(1, boardWidth - 2)
    self.appleY = random.randint(1, boardHeight - 2)

class GameLoop:

def repaint(self):

    canvas.after(200, self.repaint)
    canvas.delete(ALL)

    if snake.checkGameOver() == False:

        snake.move()
        snake.checkGameOver()

        canvas.create_rectangle(snake.getSnakeX(0) * tilesize, snake.getSnakeY(0) * tilesize,
                                snake.getSnakeX(0) * tilesize + tilesize,
                                snake.getSnakeY(0) * tilesize + tilesize, fill="red")  # Head

        for i in range(1, snake.getSnakeLength(), 1):
            canvas.create_rectangle(snake.getSnakeX(i) * tilesize, snake.getSnakeY(i) * tilesize,
                                    snake.getSnakeX(i) * tilesize + tilesize,
                                    snake.getSnakeY(i) * tilesize + tilesize, fill="blue")  # Body

        canvas.create_rectangle(apple.getAppleX() * tilesize, apple.getAppleY() * tilesize,
                                apple.getAppleX() * tilesize + tilesize,
                                apple.getAppleY() * tilesize + tilesize, fill="green")  # Apple

    else:   # GameOver Message
        canvas.delete(ALL)
        canvas.create_text(150, 100, fill="darkblue", font="Times 20 italic bold", text="GameOver!")
        canvas.create_text(150, 150, fill="darkblue", font="Times 20 italic bold",
                               text="Points:" + str(snake.getPoints()))


snake = Snake()
apple = Apple()
root = Tk()

canvas = Canvas(root, width=300, height=300)
canvas.configure(background="yellow")
canvas.pack()

gameLoop = GameLoop()
gameLoop.repaint()

root.title("Snake")
root.bind('<KeyPress>', snake.getKey)
root.mainloop()

I have made a little Snake game with Python tkinter. It's my first Python program with one Gui. What can i improve? In my posted code the indentations are partly wrong, because I couldn't format it correctly. I have edited it.

from tkinter import *
import random


boardWidth = 30
boardHeight = 30
tilesize = 10

class Snake():

    def __init__(self):

        self.snakeX = [20, 20, 20]
        self.snakeY = [20, 21, 22]
        self.snakeLength = 3
        self.key = "w"
        self.points = 0

    def move(self): # move and change direction with wasd

        for i in range(self.snakeLength - 1, 0, -1):
                self.snakeX[i] = self.snakeX[i-1]
                self.snakeY[i] = self.snakeY[i-1]

        if self.key == "w":
            self.snakeY[0] = self.snakeY[0] - 1

        elif self.key == "s":
            self.snakeY[0] = self.snakeY[0] + 1

        elif self.key == "a":
            self.snakeX[0] = self.snakeX[0] - 1

        elif self.key == "d":
            self.snakeX[0] = self.snakeX[0] + 1

        self.eatApple()

    def eatApple(self):

        if self.snakeX[0] == apple.getAppleX() and self.snakeY[0] == apple.getAppleY():

            self.snakeLength = self.snakeLength + 1

            x = self.snakeX[len(self.snakeX)-1] # Snake grows
            y = self.snakeY[len(self.snakeY) - 1]
            self.snakeX.append(x+1)
            self.snakeY.append(y)

            self.points = self.points + 1
            apple.createNewApple()

    def checkGameOver(self):

        for i in range(1, self.snakeLength, 1):

            if self.snakeY[0] == self.snakeY[i] and self.snakeX[0] == self.snakeX[i]:
                return True # Snake eat itself

        if self.snakeX[0] < 1 or self.snakeX[0] >= boardWidth-1 or self.snakeY[0] < 1 or self.snakeY[0] >= boardHeight-1:
            return True # Snake out of Bounds

        return False

    def getKey(self, event):

        if event.char == "w" or event.char == "d" or event.char == "s" or event.char == "a" or event.char == " ":
            self.key = event.char

    def getSnakeX(self, index):
        return self.snakeX[index]

    def getSnakeY(self, index):
        return self.snakeY[index]

    def getSnakeLength(self):
        return self.snakeLength

    def getPoints(self):
        return self.points


class Apple:

    def __init__(self):
        self.appleX = random.randint(1, boardWidth - 2)
        self.appleY = random.randint(1, boardHeight - 2)

    def getAppleX(self):
        return self.appleX

    def getAppleY(self):
        return self.appleY

    def createNewApple(self):
        self.appleX = random.randint(1, boardWidth - 2)
        self.appleY = random.randint(1, boardHeight - 2)

class GameLoop:

    def repaint(self):

        canvas.after(200, self.repaint)
        canvas.delete(ALL)

        if snake.checkGameOver() == False:

            snake.move()
            snake.checkGameOver()

            canvas.create_rectangle(snake.getSnakeX(0) * tilesize, snake.getSnakeY(0) * tilesize,
                                    snake.getSnakeX(0) * tilesize + tilesize,
                                    snake.getSnakeY(0) * tilesize + tilesize, fill="red")  # Head

            for i in range(1, snake.getSnakeLength(), 1):
                canvas.create_rectangle(snake.getSnakeX(i) * tilesize, snake.getSnakeY(i) * tilesize,
                                        snake.getSnakeX(i) * tilesize + tilesize,
                                        snake.getSnakeY(i) * tilesize + tilesize, fill="blue")  # Body

            canvas.create_rectangle(apple.getAppleX() * tilesize, apple.getAppleY() * tilesize,
                                    apple.getAppleX() * tilesize + tilesize,
                                    apple.getAppleY() * tilesize + tilesize, fill="green")  # Apple

        else:   # GameOver Message
            canvas.delete(ALL)
            canvas.create_text(150, 100, fill="darkblue", font="Times 20 italic bold", text="GameOver!")
            canvas.create_text(150, 150, fill="darkblue", font="Times 20 italic bold",
                                   text="Points:" + str(snake.getPoints()))


snake = Snake()
apple = Apple()
root = Tk()

canvas = Canvas(root, width=300, height=300)
canvas.configure(background="yellow")
canvas.pack()

gameLoop = GameLoop()
gameLoop.repaint()

root.title("Snake")
root.bind('<KeyPress>', snake.getKey)
root.mainloop()
Source Link
Marten
  • 585
  • 6
  • 18

Python tkinter Snake

I have made a little Snake game with Python tkinter. It's my first Python program with one Gui. What can i improve? In my posted code the indentations are partly wrong, because I couldn't format it correctly.

from tkinter import *
import random


boardWidth = 30
boardHeight = 30
tilesize = 10

class Snake():

    def __init__(self):

         self.snakeX = [20, 20, 20]
         self.snakeY = [20, 21, 22]
         self.snakeLength = 3
         self.key = "w"
         self.points = 0

    def move(self): # move and change direction with wasd

         for i in range(self.snakeLength - 1, 0, -1):
                 self.snakeX[i] = self.snakeX[i-1]
                 self.snakeY[i] = self.snakeY[i-1]

         if self.key == "w":
             self.snakeY[0] = self.snakeY[0] - 1

         elif self.key == "s":
             self.snakeY[0] = self.snakeY[0] + 1

         elif self.key == "a":
             self.snakeX[0] = self.snakeX[0] - 1

         elif self.key == "d":
             self.snakeX[0] = self.snakeX[0] + 1

         self.eatApple()

    def eatApple(self):

        if self.snakeX[0] == apple.getAppleX() and self.snakeY[0] == apple.getAppleY():
        
        self.snakeLength = self.snakeLength + 1
        x = self.snakeX[len(self.snakeX)-1] # Snake grows
        y = self.snakeY[len(self.snakeY) - 1]
        self.snakeX.append(x+1)
        self.snakeY.append(y)

        self.points = self.points + 1
        apple.createNewApple()

     def checkGameOver(self):

         for i in range(1, self.snakeLength, 1):

             if self.snakeY[0] == self.snakeY[i] and self.snakeX[0] == self.snakeX[i]:
             return True # Snake eat itself

         if self.snakeX[0] < 1 or self.snakeX[0] >= boardWidth-1 or self.snakeY[0] < 1 or self.snakeY[0] >= boardHeight-1:
         return True # Snake out of Bounds

    return False

def getKey(self, event):

    if event.char == "w" or event.char == "d" or event.char == "s" or event.char == "a" or event.char == " ":
        self.key = event.char

def getSnakeX(self, index):
    return self.snakeX[index]

def getSnakeY(self, index):
    return self.snakeY[index]

def getSnakeLength(self):
    return self.snakeLength

def getPoints(self):
    return self.points


class Apple:

def __init__(self):
    self.appleX = random.randint(1, boardWidth - 2)
    self.appleY = random.randint(1, boardHeight - 2)

def getAppleX(self):
    return self.appleX

def getAppleY(self):
    return self.appleY

def createNewApple(self):
    self.appleX = random.randint(1, boardWidth - 2)
    self.appleY = random.randint(1, boardHeight - 2)

class GameLoop:

def repaint(self):

    canvas.after(200, self.repaint)
    canvas.delete(ALL)

    if snake.checkGameOver() == False:

        snake.move()
        snake.checkGameOver()

        canvas.create_rectangle(snake.getSnakeX(0) * tilesize, snake.getSnakeY(0) * tilesize,
                                snake.getSnakeX(0) * tilesize + tilesize,
                                snake.getSnakeY(0) * tilesize + tilesize, fill="red")  # Head

        for i in range(1, snake.getSnakeLength(), 1):
            canvas.create_rectangle(snake.getSnakeX(i) * tilesize, snake.getSnakeY(i) * tilesize,
                                    snake.getSnakeX(i) * tilesize + tilesize,
                                    snake.getSnakeY(i) * tilesize + tilesize, fill="blue")  # Body

        canvas.create_rectangle(apple.getAppleX() * tilesize, apple.getAppleY() * tilesize,
                                apple.getAppleX() * tilesize + tilesize,
                                apple.getAppleY() * tilesize + tilesize, fill="green")  # Apple

    else:   # GameOver Message
        canvas.delete(ALL)
        canvas.create_text(150, 100, fill="darkblue", font="Times 20 italic bold", text="GameOver!")
        canvas.create_text(150, 150, fill="darkblue", font="Times 20 italic bold",
                               text="Points:" + str(snake.getPoints()))


snake = Snake()
apple = Apple()
root = Tk()

canvas = Canvas(root, width=300, height=300)
canvas.configure(background="yellow")
canvas.pack()

gameLoop = GameLoop()
gameLoop.repaint()

root.title("Snake")
root.bind('<KeyPress>', snake.getKey)
root.mainloop()

Any help would be really appreciated.