salimmakhdom/The-Art-Of-Programming-by-July
本项目是July的《程序员编程艺术》的电子书版本
my name is salim
Public repository record indexed from GitHub. Explore verified star velocity metrics, source code repositories, and curated developer tool directories across the GitHubRepo ecosystem.
本项目是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