salimmakhdom/The-Art-Of-Programming-by-July
本项目是July的《程序员编程艺术》的电子书版本
Discovered public repositories for salimmakhdom in the GitHub catalog.
本项目是July的《程序员编程艺术》的电子书版本
import maze import turtle import random def turn_left(): mario.dir = maze.LEFT def turn_right(): mario.dir = maze.RIGHT def turn_up(): mario.dir = maze.UP def turn_down(): mario.dir = maze.DOWN def is_wall(cell): """Returns true if the given cell contains an outer on inner wall""" return (abs(cell.x) == maze.width + 1) or \ (abs(cell.y) == maze.height + 1) or \ cell in walls # inner wall def debug(): maze.clear_cell(drawer, maze.Cell(6,6)) mario.move_to_cell(maze.Cell(0,0)) def update(): if (mario.dir != maze.STAND): old_heading = mario.heading() if (mario.dir == maze.LEFT): new_heading = 180 elif (mario.dir == maze.RIGHT): new_heading = 0 elif (mario.dir == maze.UP): new_heading = 90 else: new_heading = 270 if (old_heading != new_heading): # turn mario old_speed = mario.speed() mario.speed(0) # turn off animation mario.setheading(new_heading) mario.speed(old_speed) # determine new cell assuming mario can move new_cell = maze.Cell(mario.cell.x, mario.cell.y) # copy current cell if (mario.dir == maze.LEFT): new_cell.x -= 1 elif (mario.dir == maze.RIGHT): new_cell.x += 1 elif (mario.dir == maze.UP): new_cell.y += 1 else: new_cell.y -= 1 if (not is_wall(new_cell)): mario.forward(maze.cell_size) mario.cell = new_cell if(mario.cell in items): mario.score += 10 score_drawer.undo() # clear latest text score_drawer.write("SCORE = {0}".format(mario.score), move=False, \ align="center", font=("Arial", 9, "normal")) else: # mario can't move mario.dir = maze.STAND # until the user presses antoher arrow key, just stand wn.title("Mario at ({0}, {1}) SCORE={2}".format(mario.cell.x, mario.cell.y, mario.score)) wn.ontimer(update, 200) wn = turtle.Screen() wn.bgcolor(maze.bg_color) wn.title("Maze") wn.setup(710,710) wn.screensize(700,700) wn.onkey(turn_left, "Left") wn.onkey(turn_right, "Right") wn.onkey(turn_up, "Up") wn.onkey(turn_down, "Down") wn.onkey(debug, "d") mario = maze.MazeTurtle() # mario.moveToCell(5,5) mario.shapesize(0.7) mario.color("darkblue", "blue") drawer = turtle.Turtle() score_drawer = turtle.Turtle() for t in [drawer, score_drawer]: t.fillcolor("black") t.speed(0) t.hideturtle() t.penup() (x,y) = maze.Cell(0,maze.height+2).to_coord() score_drawer.goto(x,y-8) score_drawer.write("SCORE = {0}".format(mario.score), move=False, \ align="center", font=("Arial", 9, "normal")) # draw outer walls short_side = maze.cell_size long_side_w = (2*maze.width+3)*maze.cell_size long_side_h = (2*maze.height+3)*maze.cell_size (x,y) = maze.Cell(-maze.width-1, maze.height+1).to_coord(True) maze.fill_rect(drawer,x,y,short_side, long_side_h) maze.fill_rect(drawer,x,y,long_side_w,short_side) (x,y) = maze.Cell(-maze.width-1, -maze.height-1).to_coord(True) maze.fill_rect(drawer,x,y,long_side_w,short_side) (x,y) = maze.Cell(maze.width+1, maze.height+1).to_coord(True) maze.fill_rect(drawer,x,y,short_side,long_side_h) rng = random.Random() items = [maze.Cell(-7, -5), maze.Cell(6,6), maze.Cell(-7, 5), maze.Cell(6, -8)] drawer.color("black", "darkgreen") drawer.shape("circle") drawer.shapesize(0.8) for cell in items: (x,y) = cell.to_coord() drawer.goto(x,y) drawer.stamp() ## drawer.goto(x,y-(maze.cell_size/2)+2) ## drawer.begin_fill() ## drawer.circle((maze.cell_size / 2) - 3) ## drawer.end_fill() # draw inner walls walls = [] wall_count = 20 while (wall_count > 0): i = rng.randint(-maze.width+1, maze.width-1) # inner walls not adjacent to outer walls j = rng.randint(-maze.height+1, maze.height-1) new_cell = maze.Cell(i,j) if ((i == 0 and j == 0) or new_cell in walls or new_cell in items): continue else: walls.append(new_cell) wall_count -= 1 print(walls) drawer.fillcolor("black") for cell in walls: (x,y) = cell.to_coord(True) # maze.fill_rect(drawer, x, y, maze.cell_size, maze.cell_size) # use the below code to draw squares a little bit smaller than the full cell x += 1 y -= 1 maze.fill_rect(drawer, x, y, maze.cell_size-2, maze.cell_size-2) update() wn.listen() # listen events on this window wn.mainloop() # keep the window open
hi every one i am a computer enginneriner i want to write simple programs
my name is salim