打印

[少儿编程] 火柴人游戏

[复制链接]
137|1
跳转到指定楼层
楼主


有本python的入门书是给小朋友的,上面有个例子,火柴人游戏,代码如下:
(github链接:)

  1. from tkinter import *
  2. import random
  3. import time

  4. class Game:
  5.     def __init__(self):
  6.         self.tk = Tk()
  7.         self.tk.title("Mr. Stick Man Races for the Exit")
  8.         self.tk.resizable(0, 0)
  9.         self.tk.wm_attributes("-topmost", 1)
  10.         self.canvas = Canvas(self.tk, width=500, height=500, highlightthickness=0)
  11.         self.canvas.pack()
  12.         self.tk.update()
  13.         self.canvas_height = 500
  14.         self.canvas_width = 500
  15.         self.bg = PhotoImage(file="background.gif")
  16.         w = self.bg.width()
  17.         h = self.bg.height()
  18.         for x in range(0, 5):
  19.             for y in range(0, 5):
  20.                 self.canvas.create_image(x * w, y * h, image=self.bg, anchor='nw')
  21.         self.sprites = []
  22.         self.running = True

  23.     def mainloop(self):
  24.         while 1:
  25.             if self.running == True:
  26.                 for sprite in self.sprites:
  27.                     sprite.move()
  28.             self.tk.update_idletasks()
  29.             self.tk.update()
  30.             time.sleep(0.01)

  31. class Coords:
  32.     def __init__(self, x1=0, y1=0, x2=0, y2=0):
  33.         self.x1 = x1
  34.         self.y1 = y1
  35.         self.x2 = x2
  36.         self.y2 = y2

  37. def within_x(co1, co2):
  38.     if (co1.x1 > co2.x1 and co1.x1 < co2.x2) \
  39.             or (co1.x2 > co2.x1 and co1.x2 < co2.x2) \
  40.             or (co2.x1 > co1.x1 and co2.x1 < co1.x2) \
  41.             or (co2.x2 > co1.x1 and co2.x2 < co1.x1):
  42.         return True
  43.     else:
  44.         return False

  45. def within_y(co1, co2):
  46.     if (co1.y1 > co2.y1 and co1.y1 < co2.y2) \
  47.             or (co1.y2 > co2.y1 and co1.y2 < co2.y2) \
  48.             or (co2.y1 > co1.y1 and co2.y1 < co1.y2) \
  49.             or (co2.y2 > co1.y1 and co2.y2 < co1.y1):
  50.         return True
  51.     else:
  52.         return False

  53. def collided_left(co1, co2):
  54.     if within_y(co1, co2):
  55.         if co1.x1 <= co2.x2 and co1.x1 >= co2.x1:
  56.             return True
  57.     return False

  58. def collided_right(co1, co2):
  59.     if within_y(co1, co2):
  60.         if co1.x2 >= co2.x1 and co1.x2 <= co2.x2:
  61.             return True
  62.     return False

  63. def collided_top(co1, co2):
  64.     if within_x(co1, co2):
  65.         if co1.y1 <= co2.y2 and co1.y1 >= co2.y1:
  66.             return True
  67.     return False

  68. def collided_bottom(y, co1, co2):
  69.     if within_x(co1, co2):
  70.         y_calc = co1.y2 + y
  71.         if y_calc >= co2.y1 and y_calc <= co2.y2:
  72.             return True
  73.     return False

  74. class Sprite:
  75.     def __init__(self, game):
  76.         self.game = game
  77.         self.endgame = False
  78.         self.coordinates = None
  79.     def move(self):
  80.         pass
  81.     def coords(self):
  82.         return self.coordinates

  83. class PlatformSprite(Sprite):
  84.     def __init__(self, game, photo_image, x, y, width, height):
  85.         Sprite.__init__(self, game)
  86.         self.photo_image = photo_image
  87.         self.image = game.canvas.create_image(x, y, image=self.photo_image, anchor='nw')
  88.         self.coordinates = Coords(x, y, x + width, y + height)

  89. class StickFigureSprite(Sprite):
  90.     def __init__(self, game):
  91.         Sprite.__init__(self, game)
  92.         self.images_left = [
  93.             PhotoImage(file="figure-L1.gif"),
  94.             PhotoImage(file="figure-L2.gif"),
  95.             PhotoImage(file="figure-L3.gif")
  96.         ]
  97.         self.images_right = [
  98.             PhotoImage(file="figure-R1.gif"),
  99.             PhotoImage(file="figure-R2.gif"),
  100.             PhotoImage(file="figure-R3.gif")
  101.         ]
  102.         self.image = game.canvas.create_image(200, 470, image=self.images_left[0], anchor='nw')
  103.         self.x = -2
  104.         self.y = 0
  105.         self.current_image = 0
  106.         self.current_image_add = 1
  107.         self.jump_count = 0
  108.         self.last_time = time.time()
  109.         self.coordinates = Coords()
  110.         game.canvas.bind_all('<KeyPress-Left>', self.turn_left)
  111.         game.canvas.bind_all('<KeyPress-Right>', self.turn_right)
  112.         game.canvas.bind_all('<space>', self.jump)

  113.     def turn_left(self, evt):
  114.         if self.y == 0:
  115.             self.x = -2

  116.     def turn_right(self, evt):
  117.         if self.y == 0:
  118.             self.x = 2

  119.     def jump(self, evt):
  120.         if self.y == 0:
  121.             self.y = -4
  122.             self.jump_count = 0
  123.             
  124.     def animate(self):
  125.         if self.x != 0 and self.y == 0:
  126.             if time.time() - self.last_time > 0.1:
  127.                 self.last_time = time.time()
  128.                 self.current_image += self.current_image_add
  129.                 if self.current_image >= 2:
  130.                     self.current_image_add = -1
  131.                 if self.current_image <= 0:
  132.                     self.current_image_add = 1
  133.         if self.x < 0:
  134.             if self.y != 0:
  135.                 self.game.canvas.itemconfig(self.image, image=self.images_left[2])
  136.             else:
  137.                 self.game.canvas.itemconfig(self.image, image=self.images_left[self.current_image])
  138.         elif self.x > 0:
  139.             if self.y != 0:
  140.                 self.game.canvas.itemconfig(self.image, image=self.images_right[2])
  141.             else:
  142.                 self.game.canvas.itemconfig(self.image, image=self.images_right[self.current_image])

  143.     def coords(self):
  144.         xy = list(self.game.canvas.coords(self.image))
  145.         self.coordinates.x1 = xy[0]
  146.         self.coordinates.y1 = xy[1]
  147.         self.coordinates.x2 = xy[0] + 27
  148.         self.coordinates.y2 = xy[1] + 30
  149.         return self.coordinates
  150.         
  151.     def move(self):
  152.         self.animate()
  153.         if self.y < 0:
  154.             self.jump_count += 1
  155.             if self.jump_count > 20:
  156.                 self.y = 4
  157.         if self.y > 0:
  158.             self.jump_count -= 1
  159.             
  160.         co = self.coords()
  161.         left = True
  162.         right = True
  163.         top = True
  164.         bottom = True
  165.         falling = True
  166.         
  167.         if self.y > 0 and co.y2 >= self.game.canvas_height:
  168.             self.y = 0
  169.             bottom = False
  170.         elif self.y < 0 and co.y1 <= 0:
  171.             self.y = 0
  172.             top = False

  173.         if self.x > 0 and co.x2 >= self.game.canvas_width:
  174.             self.x = 0
  175.             right = False
  176.         elif self.x < 0 and co.x1 <= 0:
  177.             self.x = 0
  178.             left = False

  179.         for sprite in self.game.sprites:
  180.             if sprite == self:
  181.                 continue
  182.             sprite_co = sprite.coords()
  183.             if top and self.y < 0 and collided_top(co, sprite_co):
  184.                 self.y = -self.y
  185.                 top = False
  186.                
  187.             if bottom and self.y > 0 and collided_bottom(self.y, co, sprite_co):
  188.                 self.y = sprite_co.y1 - co.y2
  189.                 if self.y < 0:
  190.                     self.y = 0
  191.                 bottom = False
  192.                 top = False

  193.             if bottom and falling and self.y == 0 and co.y2 < self.game.canvas_height and collided_bottom(1, co, sprite_co):
  194.                 falling = False
  195.                
  196.             if left and self.x < 0 and collided_left(co, sprite_co):
  197.                 self.x = 0
  198.                 left = False
  199.                 if sprite.endgame:
  200.                     self.game.running = False

  201.             if right and self.x > 0 and collided_right(co, sprite_co):
  202.                 self.x = 0
  203.                 right = False
  204.                 if sprite.endgame:
  205.                     self.game.running = False
  206.             
  207.         if falling and bottom and self.y == 0 and co.y2 < self.game.canvas_height:
  208.             self.y = 4
  209.         
  210.         self.game.canvas.move(self.image, self.x, self.y)

  211. class DoorSprite(Sprite):
  212.     def __init__(self, game, photo_image, x, y, width, height):
  213.         Sprite.__init__(self, game)
  214.         self.photo_image = photo_image
  215.         self.image = game.canvas.create_image(x, y, image=self.photo_image, anchor='nw')
  216.         self.coordinates = Coords(x, y, x + (width / 2), y + height)
  217.         self.endgame = True


  218. g = Game()
  219. platform1 = PlatformSprite(g, PhotoImage(file="platform1.gif"), 0, 480, 100, 10)
  220. platform2 = PlatformSprite(g, PhotoImage(file="platform1.gif"), 150, 440, 100, 10)
  221. platform3 = PlatformSprite(g, PhotoImage(file="platform1.gif"), 300, 400, 100, 10)
  222. platform4 = PlatformSprite(g, PhotoImage(file="platform1.gif"), 300, 160, 100, 10)
  223. platform5 = PlatformSprite(g, PhotoImage(file="platform2.gif"), 175, 350, 66, 10)
  224. platform6 = PlatformSprite(g, PhotoImage(file="platform2.gif"), 50, 300, 66, 10)
  225. platform7 = PlatformSprite(g, PhotoImage(file="platform2.gif"), 170, 120, 66, 10)
  226. platform8 = PlatformSprite(g, PhotoImage(file="platform2.gif"), 45, 60, 66, 10)
  227. platform9 = PlatformSprite(g, PhotoImage(file="platform3.gif"), 170, 250, 32, 10)
  228. platform10 = PlatformSprite(g, PhotoImage(file="platform3.gif"), 230, 200, 32, 10)
  229. g.sprites.append(platform1)
  230. g.sprites.append(platform2)
  231. g.sprites.append(platform3)
  232. g.sprites.append(platform4)
  233. g.sprites.append(platform5)
  234. g.sprites.append(platform6)
  235. g.sprites.append(platform7)
  236. g.sprites.append(platform8)
  237. g.sprites.append(platform9)
  238. g.sprites.append(platform10)
  239. door = DoorSprite(g, PhotoImage(file="door1.gif"), 45, 30, 40, 35)
  240. g.sprites.append(door)
  241. sf = StickFigureSprite(g)
  242. g.sprites.append(sf)
  243. g.mainloop()
复制代码



沙发
 楼主 | 2019-8-5 15:35 | 只看该作者
SELECT * FROM `product_information_table` where ctime between '2019-08-05 15:03:45' and '2019-08-05 15:10:10';
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表
乐彩网导航 234彩票 欢乐赛车 头奖彩票 美狮彩票 华阳彩票 华阳彩票注册 贵州快3 亿万彩票 80彩票