开始,退出,再试一次按钮

时间:2018-08-08 14:55:25

标签: python python-3.x tkinter

创建了一个名为“ snake”的游戏。我想知道是否有人可以帮助我在游戏打开前创建一个窗口,其中包含开始按钮,退出按钮和说明手册,以便当我单击开始时,游戏开始并在我单击时退出,游戏终止。我还希望有一个“重试”按钮,当玩家输掉游戏时将其循环播放,而退出按钮可终止该程序。这是我的蛇游戏代码

from tkinter import*
import random

#Globals
WIDTH = 800
HEIGHT = 600
SEG_SIZE = 20
IN_GAME = True


#Helper Functions
def create_block():
""" Creates an apple to be eaten """
global BLOCK
posx = SEG_SIZE * random.randint(1, (WIDTH-SEG_SIZE) / SEG_SIZE)
posy = SEG_SIZE * random.randint(1, (HEIGHT-SEG_SIZE) / SEG_SIZE)
BLOCK = c.create_oval(posx, posy,
                      posx+SEG_SIZE, posy+SEG_SIZE,
                      fill="blue")


def main():
""" Handles game process """
global IN_GAME
if IN_GAME:
    s.move()
    head_coords = c.coords(s.segments[-1].instance)
    x1, y1, x2, y2 = head_coords
    #Collision with borders
    if x2 > WIDTH or x1 < 0 or y1 < 0 or y2 > HEIGHT:
        IN_GAME = False
    #Eating apples
    elif head_coords == c.coords(BLOCK):
        s.add_segment()
        c.delete(BLOCK)
        create_block()
    #Self-eating
    else:
        for index in range(len(s.segments)-1):
            if head_coords == c.coords(s.segments[index].instance):
                IN_GAME = False
    root.after(100, main)
# NOT IN_GAME -> stop game and print message
else:
    c.create_text(WIDTH/2, HEIGHT/2,
                  text="GAME OVER!",
                  font="Arial 40",
                  fill="blue")

class Segment(object):
""" Single snake segment """
def __init__(self, x, y):
    self.instance = c.create_rectangle(x, y,
                                       x+SEG_SIZE, y+SEG_SIZE,
                                       fill="black")


class Snake(object):
""" Simple Snake class """
def __init__(self, segments):
    self.segments = segments
    #possible moves
    self.mapping = {"Down": (0, 1), "Right": (1, 0),
                    "Up": (0, -1), "Left": (-1, 0)}
    #initial movement direction
    self.vector = self.mapping["Right"]

def move(self):
    """ Moves the snake with the specified vector """
    for index in range(len(self.segments)-1):
        segment = self.segments[index].instance
        x1, y1, x2, y2 = c.coords(self.segments[index+1].instance)
        c.coords(segment, x1, y1, x2, y2)

    x1, y1, x2, y2 = c.coords(self.segments[-2].instance)
    c.coords(self.segments[-1].instance,
             x1+self.vector[0]*SEG_SIZE, y1+self.vector[1]*SEG_SIZE,
             x2+self.vector[0]*SEG_SIZE, y2+self.vector[1]*SEG_SIZE)

def add_segment(self):
    """ Adds segment to the snake """
    last_seg = c.coords(self.segments[0].instance)
    x = last_seg[2] - SEG_SIZE
    y = last_seg[3] - SEG_SIZE
    self.segments.insert(0, Segment(x, y))

def change_direction(self, event):
    """ Changes direction of snake """
    if event.keysym in self.mapping:
        self.vector = self.mapping[event.keysym]

#Setting up window
root = Tk()
root.title("Snake")


c = Canvas(root, width=WIDTH, height=HEIGHT)
c.grid()
# catch keypressing
c.focus_set()
#creating segments and snake
segments = [Segment(SEG_SIZE, SEG_SIZE),
        Segment(SEG_SIZE*2, SEG_SIZE),
        Segment(SEG_SIZE*3, SEG_SIZE)]
s = Snake(segments)
#Reaction when key is pressed
c.bind("<KeyPress>", s.change_direction)

#Quitting the game
create_block()
main()
root.mainloop()

0 个答案:

没有答案