中文字幕人妻中文_99精品欧美一区二区三区综合在线_精品久久久久一区二区_色月丁香_免费福利在线视频_欧美大片免费观看网址_国产伦精品一区二区三区在线播放_污污污污污污www网站免费_久久月本道色综合久久_色69激情爱久久_尹人香蕉久久99天天拍_国产美女www_亚洲国产精品无码7777一线_五月婷婷六月激情_看免费一级片_精品久久久久久成人av_在线色亚洲_女人另类性混交zo_国产精品青青在线观看爽香蕉_人人澡人人添人人爽一区二区

主頁 > 知識庫 > Python實現我的世界小游戲源代碼

Python實現我的世界小游戲源代碼

熱門標簽:地圖地圖標注有嘆號 正安縣地圖標注app 電銷機器人系統廠家鄭州 舉辦過冬奧會的城市地圖標注 qt百度地圖標注 螳螂科技外呼系統怎么用 400電話申請資格 遼寧智能外呼系統需要多少錢 阿里電話機器人對話

我的世界小游戲使用方法:

移動

前進:W,后退:S,向左:A,向右:D,環顧四周:鼠標,跳起:空格鍵,切換飛行模式:Tab;

選擇建筑材料

磚:1,草:2,沙子:3,刪除建筑:鼠標左鍵單擊,創建建筑塊:鼠標右鍵單擊

ESC退出程序。

完整程序包請通過文末地址下載,程序運行截圖如下:

from __future__ import division

import sys
import math
import random
import time

from collections import deque
from pyglet import image
from pyglet.gl import *
from pyglet.graphics import TextureGroup
from pyglet.window import key, mouse

TICKS_PER_SEC = 60

# Size of sectors used to ease block loading.
SECTOR_SIZE = 16

WALKING_SPEED = 5
FLYING_SPEED = 15

GRAVITY = 20.0
MAX_JUMP_HEIGHT = 1.0 # About the height of a block.
# To derive the formula for calculating jump speed, first solve
#  v_t = v_0 + a * t
# for the time at which you achieve maximum height, where a is the acceleration
# due to gravity and v_t = 0. This gives:
#  t = - v_0 / a
# Use t and the desired MAX_JUMP_HEIGHT to solve for v_0 (jump speed) in
#  s = s_0 + v_0 * t + (a * t^2) / 2
JUMP_SPEED = math.sqrt(2 * GRAVITY * MAX_JUMP_HEIGHT)
TERMINAL_VELOCITY = 50

PLAYER_HEIGHT = 2

if sys.version_info[0] >= 3:
  xrange = range

def cube_vertices(x, y, z, n):
  """ Return the vertices of the cube at position x, y, z with size 2*n.

  """
  return [
    x-n,y+n,z-n, x-n,y+n,z+n, x+n,y+n,z+n, x+n,y+n,z-n, # top
    x-n,y-n,z-n, x+n,y-n,z-n, x+n,y-n,z+n, x-n,y-n,z+n, # bottom
    x-n,y-n,z-n, x-n,y-n,z+n, x-n,y+n,z+n, x-n,y+n,z-n, # left
    x+n,y-n,z+n, x+n,y-n,z-n, x+n,y+n,z-n, x+n,y+n,z+n, # right
    x-n,y-n,z+n, x+n,y-n,z+n, x+n,y+n,z+n, x-n,y+n,z+n, # front
    x+n,y-n,z-n, x-n,y-n,z-n, x-n,y+n,z-n, x+n,y+n,z-n, # back
  ]


def tex_coord(x, y, n=4):
  """ Return the bounding vertices of the texture square.

  """
  m = 1.0 / n
  dx = x * m
  dy = y * m
  return dx, dy, dx + m, dy, dx + m, dy + m, dx, dy + m


def tex_coords(top, bottom, side):
  """ Return a list of the texture squares for the top, bottom and side.

  """
  top = tex_coord(*top)
  bottom = tex_coord(*bottom)
  side = tex_coord(*side)
  result = []
  result.extend(top)
  result.extend(bottom)
  result.extend(side * 4)
  return result


TEXTURE_PATH = 'texture.png'

GRASS = tex_coords((1, 0), (0, 1), (0, 0))
SAND = tex_coords((1, 1), (1, 1), (1, 1))
BRICK = tex_coords((2, 0), (2, 0), (2, 0))
STONE = tex_coords((2, 1), (2, 1), (2, 1))

FACES = [
  ( 0, 1, 0),
  ( 0,-1, 0),
  (-1, 0, 0),
  ( 1, 0, 0),
  ( 0, 0, 1),
  ( 0, 0,-1),
]


def normalize(position):
  """ Accepts `position` of arbitrary precision and returns the block
  containing that position.

  Parameters
  ----------
  position : tuple of len 3

  Returns
  -------
  block_position : tuple of ints of len 3

  """
  x, y, z = position
  x, y, z = (int(round(x)), int(round(y)), int(round(z)))
  return (x, y, z)


def sectorize(position):
  """ Returns a tuple representing the sector for the given `position`.

  Parameters
  ----------
  position : tuple of len 3

  Returns
  -------
  sector : tuple of len 3

  """
  x, y, z = normalize(position)
  x, y, z = x // SECTOR_SIZE, y // SECTOR_SIZE, z // SECTOR_SIZE
  return (x, 0, z)


class Model(object):

  def __init__(self):

    # A Batch is a collection of vertex lists for batched rendering.
    self.batch = pyglet.graphics.Batch()

    # A TextureGroup manages an OpenGL texture.
    self.group = TextureGroup(image.load(TEXTURE_PATH).get_texture())

    # A mapping from position to the texture of the block at that position.
    # This defines all the blocks that are currently in the world.
    self.world = {}

    # Same mapping as `world` but only contains blocks that are shown.
    self.shown = {}

    # Mapping from position to a pyglet `VertextList` for all shown blocks.
    self._shown = {}

    # Mapping from sector to a list of positions inside that sector.
    self.sectors = {}

    # Simple function queue implementation. The queue is populated with
    # _show_block() and _hide_block() calls
    self.queue = deque()

    self._initialize()

  def _initialize(self):
    """ Initialize the world by placing all the blocks.

    """
    n = 80 # 1/2 width and height of world
    s = 1 # step size
    y = 0 # initial y height
    for x in xrange(-n, n + 1, s):
      for z in xrange(-n, n + 1, s):
        # create a layer stone an grass everywhere.
        self.add_block((x, y - 2, z), GRASS, immediate=False)
        self.add_block((x, y - 3, z), STONE, immediate=False)
        if x in (-n, n) or z in (-n, n):
          # create outer walls.
          for dy in xrange(-2, 3):
            self.add_block((x, y + dy, z), STONE, immediate=False)

    # generate the hills randomly
    o = n - 10
    for _ in xrange(120):
      a = random.randint(-o, o) # x position of the hill
      b = random.randint(-o, o) # z position of the hill
      c = -1 # base of the hill
      h = random.randint(1, 6) # height of the hill
      s = random.randint(4, 8) # 2 * s is the side length of the hill
      d = 1 # how quickly to taper off the hills
      t = random.choice([GRASS, SAND, BRICK])
      for y in xrange(c, c + h):
        for x in xrange(a - s, a + s + 1):
          for z in xrange(b - s, b + s + 1):
            if (x - a) ** 2 + (z - b) ** 2 > (s + 1) ** 2:
              continue
            if (x - 0) ** 2 + (z - 0) ** 2  5 ** 2:
              continue
            self.add_block((x, y, z), t, immediate=False)
        s -= d # decrement side lenth so hills taper off

  def hit_test(self, position, vector, max_distance=8):
    """ Line of sight search from current position. If a block is
    intersected it is returned, along with the block previously in the line
    of sight. If no block is found, return None, None.

    Parameters
    ----------
    position : tuple of len 3
      The (x, y, z) position to check visibility from.
    vector : tuple of len 3
      The line of sight vector.
    max_distance : int
      How many blocks away to search for a hit.

    """
    m = 8
    x, y, z = position
    dx, dy, dz = vector
    previous = None
    for _ in xrange(max_distance * m):
      key = normalize((x, y, z))
      if key != previous and key in self.world:
        return key, previous
      previous = key
      x, y, z = x + dx / m, y + dy / m, z + dz / m
    return None, None

  def exposed(self, position):
    """ Returns False is given `position` is surrounded on all 6 sides by
    blocks, True otherwise.

    """
    x, y, z = position
    for dx, dy, dz in FACES:
      if (x + dx, y + dy, z + dz) not in self.world:
        return True
    return False

  def add_block(self, position, texture, immediate=True):
    """ Add a block with the given `texture` and `position` to the world.

    Parameters
    ----------
    position : tuple of len 3
      The (x, y, z) position of the block to add.
    texture : list of len 3
      The coordinates of the texture squares. Use `tex_coords()` to
      generate.
    immediate : bool
      Whether or not to draw the block immediately.

    """
    if position in self.world:
      self.remove_block(position, immediate)
    self.world[position] = texture
    self.sectors.setdefault(sectorize(position), []).append(position)
    if immediate:
      if self.exposed(position):
        self.show_block(position)
      self.check_neighbors(position)

  def remove_block(self, position, immediate=True):
    """ Remove the block at the given `position`.

    Parameters
    ----------
    position : tuple of len 3
      The (x, y, z) position of the block to remove.
    immediate : bool
      Whether or not to immediately remove block from canvas.

    """
    del self.world[position]
    self.sectors[sectorize(position)].remove(position)
    if immediate:
      if position in self.shown:
        self.hide_block(position)
      self.check_neighbors(position)

  def check_neighbors(self, position):
    """ Check all blocks surrounding `position` and ensure their visual
    state is current. This means hiding blocks that are not exposed and
    ensuring that all exposed blocks are shown. Usually used after a block
    is added or removed.

    """
    x, y, z = position
    for dx, dy, dz in FACES:
      key = (x + dx, y + dy, z + dz)
      if key not in self.world:
        continue
      if self.exposed(key):
        if key not in self.shown:
          self.show_block(key)
      else:
        if key in self.shown:
          self.hide_block(key)

  def show_block(self, position, immediate=True):
    """ Show the block at the given `position`. This method assumes the
    block has already been added with add_block()

    Parameters
    ----------
    position : tuple of len 3
      The (x, y, z) position of the block to show.
    immediate : bool
      Whether or not to show the block immediately.

    """
    texture = self.world[position]
    self.shown[position] = texture
    if immediate:
      self._show_block(position, texture)
    else:
      self._enqueue(self._show_block, position, texture)

  def _show_block(self, position, texture):
    """ Private implementation of the `show_block()` method.

    Parameters
    ----------
    position : tuple of len 3
      The (x, y, z) position of the block to show.
    texture : list of len 3
      The coordinates of the texture squares. Use `tex_coords()` to
      generate.

    """
    x, y, z = position
    vertex_data = cube_vertices(x, y, z, 0.5)
    texture_data = list(texture)
    # create vertex list
    # FIXME Maybe `add_indexed()` should be used instead
    self._shown[position] = self.batch.add(24, GL_QUADS, self.group,
      ('v3f/static', vertex_data),
      ('t2f/static', texture_data))

  def hide_block(self, position, immediate=True):
    """ Hide the block at the given `position`. Hiding does not remove the
    block from the world.

    Parameters
    ----------
    position : tuple of len 3
      The (x, y, z) position of the block to hide.
    immediate : bool
      Whether or not to immediately remove the block from the canvas.

    """
    self.shown.pop(position)
    if immediate:
      self._hide_block(position)
    else:
      self._enqueue(self._hide_block, position)

  def _hide_block(self, position):
    """ Private implementation of the 'hide_block()` method.

    """
    self._shown.pop(position).delete()

  def show_sector(self, sector):
    """ Ensure all blocks in the given sector that should be shown are
    drawn to the canvas.

    """
    for position in self.sectors.get(sector, []):
      if position not in self.shown and self.exposed(position):
        self.show_block(position, False)

  def hide_sector(self, sector):
    """ Ensure all blocks in the given sector that should be hidden are
    removed from the canvas.

    """
    for position in self.sectors.get(sector, []):
      if position in self.shown:
        self.hide_block(position, False)

  def change_sectors(self, before, after):
    """ Move from sector `before` to sector `after`. A sector is a
    contiguous x, y sub-region of world. Sectors are used to speed up
    world rendering.

    """
    before_set = set()
    after_set = set()
    pad = 4
    for dx in xrange(-pad, pad + 1):
      for dy in [0]: # xrange(-pad, pad + 1):
        for dz in xrange(-pad, pad + 1):
          if dx ** 2 + dy ** 2 + dz ** 2 > (pad + 1) ** 2:
            continue
          if before:
            x, y, z = before
            before_set.add((x + dx, y + dy, z + dz))
          if after:
            x, y, z = after
            after_set.add((x + dx, y + dy, z + dz))
    show = after_set - before_set
    hide = before_set - after_set
    for sector in show:
      self.show_sector(sector)
    for sector in hide:
      self.hide_sector(sector)

  def _enqueue(self, func, *args):
    """ Add `func` to the internal queue.

    """
    self.queue.append((func, args))

  def _dequeue(self):
    """ Pop the top function from the internal queue and call it.

    """
    func, args = self.queue.popleft()
    func(*args)

  def process_queue(self):
    """ Process the entire queue while taking periodic breaks. This allows
    the game loop to run smoothly. The queue contains calls to
    _show_block() and _hide_block() so this method should be called if
    add_block() or remove_block() was called with immediate=False

    """
    start = time.perf_counter()
    while self.queue and time.time()- start  1.0 / TICKS_PER_SEC:
      self._dequeue()

  def process_entire_queue(self):
    """ Process the entire queue with no breaks.

    """
    while self.queue:
      self._dequeue()


class Window(pyglet.window.Window):

  def __init__(self, *args, **kwargs):
    super(Window, self).__init__(*args, **kwargs)

    # Whether or not the window exclusively captures the mouse.
    self.exclusive = False

    # When flying gravity has no effect and speed is increased.
    self.flying = False

    # Strafing is moving lateral to the direction you are facing,
    # e.g. moving to the left or right while continuing to face forward.
    #
    # First element is -1 when moving forward, 1 when moving back, and 0
    # otherwise. The second element is -1 when moving left, 1 when moving
    # right, and 0 otherwise.
    self.strafe = [0, 0]

    # Current (x, y, z) position in the world, specified with floats. Note
    # that, perhaps unlike in math class, the y-axis is the vertical axis.
    self.position = (0, 0, 0)

    # First element is rotation of the player in the x-z plane (ground
    # plane) measured from the z-axis down. The second is the rotation
    # angle from the ground plane up. Rotation is in degrees.
    #
    # The vertical plane rotation ranges from -90 (looking straight down) to
    # 90 (looking straight up). The horizontal rotation range is unbounded.
    self.rotation = (0, 0)

    # Which sector the player is currently in.
    self.sector = None

    # The crosshairs at the center of the screen.
    self.reticle = None

    # Velocity in the y (upward) direction.
    self.dy = 0

    # A list of blocks the player can place. Hit num keys to cycle.
    self.inventory = [BRICK, GRASS, SAND]

    # The current block the user can place. Hit num keys to cycle.
    self.block = self.inventory[0]

    # Convenience list of num keys.
    self.num_keys = [
      key._1, key._2, key._3, key._4, key._5,
      key._6, key._7, key._8, key._9, key._0]

    # Instance of the model that handles the world.
    self.model = Model()

    # The label that is displayed in the top left of the canvas.
    self.label = pyglet.text.Label('', font_name='Arial', font_size=18,
      x=10, y=self.height - 10, anchor_x='left', anchor_y='top',
      color=(0, 0, 0, 255))

    # This call schedules the `update()` method to be called
    # TICKS_PER_SEC. This is the main game event loop.
    pyglet.clock.schedule_interval(self.update, 1.0 / TICKS_PER_SEC)

  def set_exclusive_mouse(self, exclusive):
    """ If `exclusive` is True, the game will capture the mouse, if False
    the game will ignore the mouse.

    """
    super(Window, self).set_exclusive_mouse(exclusive)
    self.exclusive = exclusive

  def get_sight_vector(self):
    """ Returns the current line of sight vector indicating the direction
    the player is looking.

    """
    x, y = self.rotation
    # y ranges from -90 to 90, or -pi/2 to pi/2, so m ranges from 0 to 1 and
    # is 1 when looking ahead parallel to the ground and 0 when looking
    # straight up or down.
    m = math.cos(math.radians(y))
    # dy ranges from -1 to 1 and is -1 when looking straight down and 1 when
    # looking straight up.
    dy = math.sin(math.radians(y))
    dx = math.cos(math.radians(x - 90)) * m
    dz = math.sin(math.radians(x - 90)) * m
    return (dx, dy, dz)

  def get_motion_vector(self):
    """ Returns the current motion vector indicating the velocity of the
    player.

    Returns
    -------
    vector : tuple of len 3
      Tuple containing the velocity in x, y, and z respectively.

    """
    if any(self.strafe):
      x, y = self.rotation
      strafe = math.degrees(math.atan2(*self.strafe))
      y_angle = math.radians(y)
      x_angle = math.radians(x + strafe)
      if self.flying:
        m = math.cos(y_angle)
        dy = math.sin(y_angle)
        if self.strafe[1]:
          # Moving left or right.
          dy = 0.0
          m = 1
        if self.strafe[0] > 0:
          # Moving backwards.
          dy *= -1
        # When you are flying up or down, you have less left and right
        # motion.
        dx = math.cos(x_angle) * m
        dz = math.sin(x_angle) * m
      else:
        dy = 0.0
        dx = math.cos(x_angle)
        dz = math.sin(x_angle)
    else:
      dy = 0.0
      dx = 0.0
      dz = 0.0
    return (dx, dy, dz)

  def update(self, dt):
    """ This method is scheduled to be called repeatedly by the pyglet
    clock.

    Parameters
    ----------
    dt : float
      The change in time since the last call.

    """
    self.model.process_queue()
    sector = sectorize(self.position)
    if sector != self.sector:
      self.model.change_sectors(self.sector, sector)
      if self.sector is None:
        self.model.process_entire_queue()
      self.sector = sector
    m = 8
    dt = min(dt, 0.2)
    for _ in xrange(m):
      self._update(dt / m)

  def _update(self, dt):
    """ Private implementation of the `update()` method. This is where most
    of the motion logic lives, along with gravity and collision detection.

    Parameters
    ----------
    dt : float
      The change in time since the last call.

    """
    # walking
    speed = FLYING_SPEED if self.flying else WALKING_SPEED
    d = dt * speed # distance covered this tick.
    dx, dy, dz = self.get_motion_vector()
    # New position in space, before accounting for gravity.
    dx, dy, dz = dx * d, dy * d, dz * d
    # gravity
    if not self.flying:
      # Update your vertical speed: if you are falling, speed up until you
      # hit terminal velocity; if you are jumping, slow down until you
      # start falling.
      self.dy -= dt * GRAVITY
      self.dy = max(self.dy, -TERMINAL_VELOCITY)
      dy += self.dy * dt
    # collisions
    x, y, z = self.position
    x, y, z = self.collide((x + dx, y + dy, z + dz), PLAYER_HEIGHT)
    self.position = (x, y, z)

  def collide(self, position, height):
    """ Checks to see if the player at the given `position` and `height`
    is colliding with any blocks in the world.

    Parameters
    ----------
    position : tuple of len 3
      The (x, y, z) position to check for collisions at.
    height : int or float
      The height of the player.

    Returns
    -------
    position : tuple of len 3
      The new position of the player taking into account collisions.

    """
    # How much overlap with a dimension of a surrounding block you need to
    # have to count as a collision. If 0, touching terrain at all counts as
    # a collision. If .49, you sink into the ground, as if walking through
    # tall grass. If >= .5, you'll fall through the ground.
    pad = 0.25
    p = list(position)
    np = normalize(position)
    for face in FACES: # check all surrounding blocks
      for i in xrange(3): # check each dimension independently
        if not face[i]:
          continue
        # How much overlap you have with this dimension.
        d = (p[i] - np[i]) * face[i]
        if d  pad:
          continue
        for dy in xrange(height): # check each height
          op = list(np)
          op[1] -= dy
          op[i] += face[i]
          if tuple(op) not in self.model.world:
            continue
          p[i] -= (d - pad) * face[i]
          if face == (0, -1, 0) or face == (0, 1, 0):
            # You are colliding with the ground or ceiling, so stop
            # falling / rising.
            self.dy = 0
          break
    return tuple(p)

  def on_mouse_press(self, x, y, button, modifiers):
    """ Called when a mouse button is pressed. See pyglet docs for button
    amd modifier mappings.

    Parameters
    ----------
    x, y : int
      The coordinates of the mouse click. Always center of the screen if
      the mouse is captured.
    button : int
      Number representing mouse button that was clicked. 1 = left button,
      4 = right button.
    modifiers : int
      Number representing any modifying keys that were pressed when the
      mouse button was clicked.

    """
    if self.exclusive:
      vector = self.get_sight_vector()
      block, previous = self.model.hit_test(self.position, vector)
      if (button == mouse.RIGHT) or \

          ((button == mouse.LEFT) and (modifiers  key.MOD_CTRL)):
        # ON OSX, control + left click = right click.
        if previous:
          self.model.add_block(previous, self.block)
      elif button == pyglet.window.mouse.LEFT and block:
        texture = self.model.world[block]
        if texture != STONE:
          self.model.remove_block(block)
    else:
      self.set_exclusive_mouse(True)

  def on_mouse_motion(self, x, y, dx, dy):
    """ Called when the player moves the mouse.

    Parameters
    ----------
    x, y : int
      The coordinates of the mouse click. Always center of the screen if
      the mouse is captured.
    dx, dy : float
      The movement of the mouse.

    """
    if self.exclusive:
      m = 0.15
      x, y = self.rotation
      x, y = x + dx * m, y + dy * m
      y = max(-90, min(90, y))
      self.rotation = (x, y)

  def on_key_press(self, symbol, modifiers):
    """ Called when the player presses a key. See pyglet docs for key
    mappings.

    Parameters
    ----------
    symbol : int
      Number representing the key that was pressed.
    modifiers : int
      Number representing any modifying keys that were pressed.

    """
    if symbol == key.W:
      self.strafe[0] -= 1
    elif symbol == key.S:
      self.strafe[0] += 1
    elif symbol == key.A:
      self.strafe[1] -= 1
    elif symbol == key.D:
      self.strafe[1] += 1
    elif symbol == key.SPACE:
      if self.dy == 0:
        self.dy = JUMP_SPEED
    elif symbol == key.ESCAPE:
      self.set_exclusive_mouse(False)
    elif symbol == key.TAB:
      self.flying = not self.flying
    elif symbol in self.num_keys:
      index = (symbol - self.num_keys[0]) % len(self.inventory)
      self.block = self.inventory[index]

  def on_key_release(self, symbol, modifiers):
    """ Called when the player releases a key. See pyglet docs for key
    mappings.

    Parameters
    ----------
    symbol : int
      Number representing the key that was pressed.
    modifiers : int
      Number representing any modifying keys that were pressed.

    """
    if symbol == key.W:
      self.strafe[0] += 1
    elif symbol == key.S:
      self.strafe[0] -= 1
    elif symbol == key.A:
      self.strafe[1] += 1
    elif symbol == key.D:
      self.strafe[1] -= 1

  def on_resize(self, width, height):
    """ Called when the window is resized to a new `width` and `height`.

    """
    # label
    self.label.y = height - 10
    # reticle
    if self.reticle:
      self.reticle.delete()
    x, y = self.width // 2, self.height // 2
    n = 10
    self.reticle = pyglet.graphics.vertex_list(4,
      ('v2i', (x - n, y, x + n, y, x, y - n, x, y + n))
    )

  def set_2d(self):
    """ Configure OpenGL to draw in 2d.

    """
    width, height = self.get_size()
    glDisable(GL_DEPTH_TEST)
    viewport = self.get_viewport_size()
    glViewport(0, 0, max(1, viewport[0]), max(1, viewport[1]))
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0, max(1, width), 0, max(1, height), -1, 1)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

  def set_3d(self):
    """ Configure OpenGL to draw in 3d.

    """
    width, height = self.get_size()
    glEnable(GL_DEPTH_TEST)
    viewport = self.get_viewport_size()
    glViewport(0, 0, max(1, viewport[0]), max(1, viewport[1]))
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(65.0, width / float(height), 0.1, 60.0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    x, y = self.rotation
    glRotatef(x, 0, 1, 0)
    glRotatef(-y, math.cos(math.radians(x)), 0, math.sin(math.radians(x)))
    x, y, z = self.position
    glTranslatef(-x, -y, -z)

  def on_draw(self):
    """ Called by pyglet to draw the canvas.

    """
    self.clear()
    self.set_3d()
    glColor3d(1, 1, 1)
    self.model.batch.draw()
    self.draw_focused_block()
    self.set_2d()
    self.draw_label()
    self.draw_reticle()

  def draw_focused_block(self):
    """ Draw black edges around the block that is currently under the
    crosshairs.

    """
    vector = self.get_sight_vector()
    block = self.model.hit_test(self.position, vector)[0]
    if block:
      x, y, z = block
      vertex_data = cube_vertices(x, y, z, 0.51)
      glColor3d(0, 0, 0)
      glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
      pyglet.graphics.draw(24, GL_QUADS, ('v3f/static', vertex_data))
      glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)

  def draw_label(self):
    """ Draw the label in the top left of the screen.

    """
    x, y, z = self.position
    self.label.text = '%02d (%.2f, %.2f, %.2f) %d / %d' % (
      pyglet.clock.get_fps(), x, y, z,
      len(self.model._shown), len(self.model.world))
    self.label.draw()

  def draw_reticle(self):
    """ Draw the crosshairs in the center of the screen.

    """
    glColor3d(0, 0, 0)
    self.reticle.draw(GL_LINES)


def setup_fog():
  """ Configure the OpenGL fog properties.

  """
  # Enable fog. Fog "blends a fog color with each rasterized pixel fragment's
  # post-texturing color."
  glEnable(GL_FOG)
  # Set the fog color.
  glFogfv(GL_FOG_COLOR, (GLfloat * 4)(0.5, 0.69, 1.0, 1))
  # Say we have no preference between rendering speed and quality.
  glHint(GL_FOG_HINT, GL_DONT_CARE)
  # Specify the equation used to compute the blending factor.
  glFogi(GL_FOG_MODE, GL_LINEAR)
  # How close and far away fog starts and ends. The closer the start and end,
  # the denser the fog in the fog range.
  glFogf(GL_FOG_START, 20.0)
  glFogf(GL_FOG_END, 60.0)


def setup():
  """ Basic OpenGL configuration.

  """
  # Set the color of "clear", i.e. the sky, in rgba.
  glClearColor(0.5, 0.69, 1.0, 1)
  # Enable culling (not rendering) of back-facing facets -- facets that aren't
  # visible to you.
  glEnable(GL_CULL_FACE)
  # Set the texture minification/magnification function to GL_NEAREST (nearest
  # in Manhattan distance) to the specified texture coordinates. GL_NEAREST
  # "is generally faster than GL_LINEAR, but it can produce textured 圖片
  # with sharper edges because the transition between texture elements is not
  # as smooth."
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
  setup_fog()


def main():
  window = Window(width=1800, height=1600, caption='Pyglet', resizable=True)
  # Hide the mouse cursor and prevent the mouse from leaving the window.
  window.set_exclusive_mouse(True)
  setup()
  pyglet.app.run()


if __name__ == '__main__':
  main()

我的世界小游戲python源代碼包下載地址:

鏈接: https://pan.baidu.com/s/1gKAheRzAeNmRXgSU-A4PPg

提取碼: rya9

到此這篇關于Python實現我的世界小游戲源代碼的文章就介紹到這了,更多相關Python小游戲源代碼內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 用Python實現童年貪吃蛇小游戲功能的實例代碼
  • 一行Python代碼玩遍童年的小游戲

標簽:阜新 濟源 信陽 淘寶好評回訪 隨州 昭通 合肥 興安盟

巨人網絡通訊聲明:本文標題《Python實現我的世界小游戲源代碼》,本文關鍵詞  Python,實現,我的,世界,小游戲,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python實現我的世界小游戲源代碼》相關的同類信息!
  • 本頁收集關于Python實現我的世界小游戲源代碼的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 淄博宙灿机械有限公司| 上海腾迈机械有限公司| 郑州品创机械设备有限公司| 常州久压久机械制造有限公司| 上海舜锋机械制造有限公司| 江苏东禾机械有限公司| 河南永威起重机有限公司| 常州朝康机械有限公司| 青岛德利机械有限公司| 宏远机械制造有限公司| 宁波敏达机械有限公司| 斗山工程机械苏州有限公司| 江阴鼎力起重机械有限公司| 苏州新风机械有限公司| 杭州西子重工有限公司| 东莞市泽冠机械有限公司 | 宜昌 机械有限公司| 江苏科威机械有限公司| 杭州起重机械有限公司| 南通太和机械有限公司| 东莞港重机械有限公司| 诸城市华邦机械有限公司| 东莞市瑞沧机械设备有限公司| 北京 钢铁贸易有限公司| 扬州高标机械有限公司| 山东峻峰起重机械有限公司| 豪利机械苏州有限公司| 禹城益佳机械有限公司| 青岛春风机械有限公司| 成都艾威机械有限公司| 上海小虎机械有限公司| 贝奇尔机械有限公司| 洛阳奥图机械设备有限公司 | 上海的纸箱机械有限公司| 河北雪龙机械制造有限公司| 盐城中热机械有限公司| 河北曙光机械有限公司| 江苏苏盐阀门机械有限公司| 汕头机械有限公司招聘| 厦门精密机械有限公司| 天津的机械设备有限公司| 无锡通用机械有限公司| 苏州包装机械有限公司| 重庆庆泰机械有限公司| 安丘市 机械有限公司| 许昌 机械有限公司| 翰林机械制造有限公司| 江苏中热机械设备有限公司怎么样| 上海沪工起重机械有限公司| 娄底 有限公司 机械| 抚顺机械设备制造有限公司| 重型工程机械有限公司| 东莞市机械制造有限公司| 上海 精密机械有限公司| 连云港机械有限公司| 常州玫尔机械有限公司| 山东天力液压机械有限公司| 上海台新食品机械有限公司| 广东耐施特机械有限公司| 温州博大机械有限公司| 中天印刷机械有限公司| 滁州富达机械电子有限公司 | 新兴重工天津国际贸易有限公司| 济南岳峰机械有限公司| 宏达机械制造有限公司| 东阳市机械有限公司| 慈溪市机械有限公司| 北京大铭世进机械设备有限公司| 南通友德机械有限公司| 朝阳重工机械有限公司| 东莞数控机械有限公司| 宣城 机械有限公司| 锦州 机械有限公司| 江阴市永昌药化机械有限公司| 重庆春仁机械有限公司| 江苏船谷重工有限公司| 山东鲁工机械有限公司| 泰瑞机械有限公司待遇| 河南合力起重机械有限公司| 杭州机械设备有限公司| 杭州萧山机械有限公司| 上海展仕机械设备有限公司| 河南嵩山重工有限公司| 友佳精密机械有限公司| 唐山市机械有限公司| 广东粤东机械实业有限公司| 杭州青达机械有限公司| 河北机械进出口有限公司| 济南铭机械有限公司| 建湖华祥机械有限公司| 杭州莱顿机械有限公司| 大连红日机械有限公司| 常州杰洋精密机械有限公司 | 郑州博源机械有限公司| 张家口煤机械有限公司| 杭州九钻机械有限公司| 芜湖电工机械有限公司| 佛山市精密机械有限公司| 常州自力化工机械有限公司| 安徽鑫宏机械有限公司| 许昌机械制造有限公司| 茂名重力石化机械制造有限公司| 阳春新钢铁有限公司| 江 诚机械有限公司| 台州启运机械有限公司| 大连仁海重工有限公司| 常熟 机械有限公司| 江苏恩纳斯重工机械有限公司| 大连卓远重工有限公司| 机械进出口有限公司| 常州先电机械有限公司| 浙江全兴机械制造有限公司| 上海铁美机械有限公司| 上海海邦机械设备制造有限公司 | 山东国新起重机械有限公司| 青岛南牧机械设备有限公司| 常州久压久机械制造有限公司| 厦门黎明机械有限公司| 邢台远大机械制造有限公司| 宁波华表机械制造有限公司 | 河南机械设备制造有限公司| 集瑞联合重工有限公司| 济南冠越机械设备有限公司| 杭州玻璃机械有限公司| 机械设备有限公司官网| 大连起重矿山机械有限公司| 廊坊机械制造有限公司| 浙江科力塑料机械有限公司| 江苏锐成机械有限公司| 济南闽源钢铁有限公司| 青岛橡塑机械有限公司| 南阳医疗机械有限公司| 河北澳金机械设备有限公司| 鑫科木工机械有限公司| 杭州康发塑料机械有限公司| 苏州诚亚机械有限公司| 兰溪永丰机械有限公司| 亿煤机械装备制造有限公司| 辛集市澳森钢铁有限公司| 长沙机械与制造有限公司| 江西神起信息技术有限公司| 宜昌 机械设备有限公司| 江苏八达重工机械有限公司| 福州 机械制造有限公司| 四川华为钢铁有限公司| 湖南 机械设备有限公司| 杭州正驰达精密机械有限公司 | 东莞市康机械有限公司| 江苏如皋钢铁有限公司| 宁波巨隆机械有限公司| 山东恒旺机械有限公司| 浙江包装机械有限公司| 浙江宏涛机械有限公司| 烟台精越达机械设备有限公司| 太仓鸿安机械有限公司| 杭州龙云水利机械制造有限公司| 苏州拓博机械设备有限公司| 威海欧东机械有限公司| 青岛 钢铁有限公司| 大丰奥泰机械有限公司| 徐州智茸工程机械有限公司| 郑州重型机械有限公司| 昆山联德精密机械有限公司| 好利用机械有限公司| 安阳永兴钢铁有限公司| 温州市凯驰包装机械有限公司| 齐齐哈尔机械有限公司| 潍坊威尔顿机械设备有限公司| 杭州德智机械有限公司| 山东机械设备制造有限公司| 潍坊大众机械有限公司| 广州泓锋食品机械有限公司| 东莞市欧西曼机械设备有限公司 | 济宁市福瑞得机械有限公司| 同向精密机械有限公司| 深圳市兴合发齿轮机械有限公司 | 南通恒力重工机械有限公司| 山东天路重工有限公司| 江苏爱斯特机械有限公司怎么样| 杭州化工机械有限公司| 机械有限公司 英文| 鸿达机械制造有限公司| 江苏威鹰机械有限公司| 天津包装机械有限公司| 济南天宝钢铁有限公司| 四川机械制造有限公司| 安徽威萨重工机械有限公司| 海瑞克隧道机械有限公司| 盐城 机械 有限公司| 广东穗华机械设备有限公司 | 江苏机械设备有限公司| 江苏金梧机械有限公司| 安徽格瑞德机械制造有限公司| 咸阳 机械制造有限公司| 聊城日发纺织机械有限公司| 河北明芳钢铁有限公司| 广州金本机械设备有限公司| 余姚市机械有限公司| 绿友园林机械有限公司| 石家庄机械有限公司| 广州永晋机械有限公司| 山东良鑫机械有限公司| 青岛凯顿机械有限公司| 广州益川机械有限公司| 德州市启泰机械设备有限公司 | 深圳起航电商有限公司| 新乡市振动机械有限公司| 大连铸鸿机械有限公司| 五矿钢铁天津有限公司| 江苏中科机械有限公司| 南京拓源钢铁有限公司| 福建申达钢铁有限公司| 成都松茂工程机械有限公司| 中山松德印刷机械有限公司| 博山 机械有限公司| 南京化工机械有限公司| 绍兴金江机械有限公司| 林州市振晨重工装备制造有限公司 | 济南包装机械械有限公司| 上海轩特机械设备有限公司| 聚力特机械有限公司| 东莞祥艺机械有限公司| 宁波德霖机械有限公司| 吉川机械设备有限公司| 杭州泰尚机械有限公司| 日照瑞荣机械有限公司| 常州龙鹏机械有限公司| 中冶重工机械有限公司| 江阴万恒机械制造有限公司| 山东万力起重机械有限公司| 苏州友众传动机械有限公司| 苏州友众传动机械有限公司| 华亿机械制造有限公司| 东平开元机械有限公司| 福建泉成机械有限公司| 东莞市永乐机械有限公司| 广州市日富包装机械有限公司| 浙江亿森机械有限公司| 新昌县蓝翔机械有限公司| 江苏长虹涂装机械有限公司 | 江苏巨能机械有限公司| 衡水机械制造有限公司| 昆成机械昆山有限公司| 河南起重设备有限公司| 三莲机械制造有限公司| 青岛安成食品机械有限公司| 湖北江重机械制造有限公司| 启瑞机械广州有限公司| 江苏汤姆包装机械有限公司| 青岛海佳机械有限公司| 上海江南制药机械有限公司| 浙江向隆机械有限公司| 济南机械制造有限公司| 上海祝融起重机械有限公司| 山东永峰钢铁有限公司| 研精舍上海精密机械加工有限公司| 南通恩派特机械有限公司| 艾沃意特机械设备制造有限公司 | 山东和晟机械设备有限公司| 招远市矿山机械有限公司| 机械化工工程有限公司| 广州山推机械有限公司| 上海川源机械工程有限公司| 郑州兆明机械有限公司| 富杰精密机械有限公司| 机械密封件有限公司| 巨荣机械制造有限公司| 上海嘉歆包装机械有限公司| 湖北三六重工有限公司| 启益电器机械有限公司| 九江萍钢钢铁有限公司| 临西中伟机械有限公司| 郑州水工机械有限公司招聘| 郑州长城机械有限公司| 河北九江钢铁有限公司| 无锡锡科机械制造有限公司| 浙江永达输送机械设备有限公司| 成都刚毅机械制造有限公司| 长沙中传机械有限公司| 山东泰山机械有限公司| 深圳市铭利达精密机械有限公司| 潍坊天宇机械有限公司| 河南北工机械制造有限公司| 许昌机械制造有限公司| 滦南华瑞钢铁有限公司| 浙江佳成机械有限公司| 河源德润钢铁有限公司| 佛山市炬盈包装机械有限公司| 无锡聚英机械有限公司| 艺达精密机械有限公司| 重庆机械租赁有限公司| 东莞市亚龙玻璃机械有限公司| 川岛洗涤机械有限公司| 南京聚力化工机械有限公司| 汤阴升达机械有限公司| 郑州昌利机械制造有限公司| 河北兴华钢铁有限公司| 瑞安市方泰机械有限公司| 无锡通用机械厂有限公司| 江苏机械设备有限公司| 机械有限公司 英文| 安徽佶龙机械有限公司| 青岛欧普机械设备有限公司| 纸箱机械设备有限公司| 佛山创宝包装机械有限公司| 台州农业机械有限公司| 长沙宏银机械有限公司| 常熟机械制造有限公司| 泰田液压机械有限公司| 江苏鹤溪机械有限公司| 金坛包装机械有限公司| 天津泰威机械有限公司| 浙江大源机械有限公司| 易百通机械有限公司| 鸡西煤矿机械有限公司| 好利用机械有限公司| 浙江赛峰机械有限公司| 瑞安市印刷机械有限公司| 威海华东重工有限公司| 苏州市机械制造有限公司| 上海奉业包装机械有限公司| 吉林鑫达钢铁有限公司| 潍坊机械制造有限公司| 浙江瑞浦机械有限公司| 机械(苏州)有限公司| 常州英来机械有限公司| 玉环县机械有限公司| 西门子机械传动 天津 有限公司| 洗涤机械制造有限公司| 格林策巴赫机械有限公司| 上海锐精密机械有限公司| 合肥康恒机械有限公司| 河南矿山重型起重机械有限公司| 浙江雨霖机械有限公司| 河北天择重型机械有限公司 | 齐齐哈尔机械有限公司| 上海亚遥工程机械有限公司| 佛山液压机械有限公司| 济南岳峰机械有限公司| 郑州长宏机械制造有限公司| 克朗斯机械有限公司| 浙江美华包装机械有限公司| 浙江凯岛起重机械有限公司| 上海博储机械工业有限公司| 星包装机械有限公司| 朗维纺织机械有限公司| 宁波威恩精密机械有限公司| 苏州海骏自动化机械有限公司 | 青岛如隆机械有限公司| 江阴乐帕克智能机械有限公司| 山东源泉机械有限公司| 张家港同大机械有限公司| 唐山燕山钢铁有限公司| 诸城市盛和机械有限公司| 纸箱机械设备有限公司| 上海巨远塑料机械有限公司| 唐山佳鑫机械配件有限公司 | 潍坊沃富机械有限公司| 上海台新食品机械有限公司| 上海机械装备有限公司| 郑州江河重工有限公司| 潍坊爱地植保机械有限公司| 天津起重机械有限公司| 自动化机械有限公司| 河北联港废钢铁回收有限公司| 上海以海机械有限公司| 济宁金牛重工有限公司| 苏州奥天诚机械有限公司| 玉环机械制造有限公司| 江苏本优机械有限公司| 石家庄美迪机械有限公司| 厦门 机械设备有限公司| 常州液压机械有限公司| 爱立许机械有限公司| 顺兴机械制造有限公司| 泊头市环保机械有限公司| 上海嘉迪机械有限公司| 洛阳泰红农业机械有限公司 | 宁波佳尔灵气动机械有限公司| 合肥福晟机械制造有限公司| 四川瑞迪佳源机械有限公司| 深圳市印刷机械有限公司| 利星行机械有限公司| 爱可机械深圳有限公司| 上海冬松精密机械有限公司 | 三一重工昆山有限公司| 江苏八达重工机械有限公司| 厦门天一精密机械有限公司| 张家港机械设备有限公司| 新乡市大汉振动机械有限公司| 江西九江萍钢钢铁有限公司| 陕西通运机械有限公司| 福建起然燃气设备有限公司| 普瑞特机械有限公司| 山东重特机械有限公司| 杭州旭众机械设备有限公司| 厦门国桥机械有限公司| 上海普顺机械电器制造有限公司| 诺威起重设备苏州有限公司| 常德机械制造有限公司| 济南天业工程机械有限公司| 南昌中昊机械有限公司| 杭州铁牛机械有限公司| 江苏正兴建设机械有限公司| 上海亚华印刷机械有限公司 | 东莞市固达机械制造有限公司| 宁波恒阳机械有限公司| 佛山市柯田包装机械有限公司 | 唐山津西钢铁有限公司| 浙江华业塑料机械有限公司| 青岛同三塑料机械有限公司| 东莞市柯达机械有限公司| 上海腾迈机械有限公司| 东莞市途锐机械有限公司 | 合肥市春华起重机械有限公司| 扬州鼎隆机械有限公司| 昆山协扬机械有限公司| 上海川源机械工程有限公司| 东莞市森佳机械有限公司| 德州联合石油机械有限公司| 佛山市顺德区金工铝门窗机械实业有限公司 | 潍坊市通用机械有限公司| 南阳 机械制造有限公司| 上海敏杰机械有限公司| 河北东方富达机械有限公司| 山东港中钢铁有限公司| 上海工程机械厂有限公司| 无锡伊诺特石化机械设备有限公司| 无锡胜麦机械有限公司| 山东威宝机械有限公司| 临沂华星机械有限公司| 东莞市正一轴承机械有限公司| 苏州新和机械有限公司| 郑州天龙机械有限公司| 农业发展有限公司起名| 安徽普源分离机械制造有限公司| 温岭市大众精密机械有限公司 | 青岛软控重工有限公司| 江苏新技机械有限公司| 上海全驰机械有限公司| 盐城万富隆机械制造有限公司| 唐山机械设备有限公司| 南京起重机械总厂有限公司 | 玉环锐利机械有限公司| 威海印刷机械有限公司| 广州市佳速精密机械有限公司| 唐山国义特种钢铁有限公司| 中实洛阳重型机械有限公司| 星 精密机械有限公司| 苏州明基自动化机械设备有限公司| 五谷酿机械有限公司| 昆山胜代机械有限公司招聘| 河北永洋钢铁有限公司详细地址| 安丰钢铁有限公司电话| 温州铸鼎机械有限公司| 艺达精密机械有限公司| 浙江德迈机械有限公司| 浏阳 机械有限公司| 唐山唐钢钢铁有限公司| 上海先德机械工程有限公司 | 常州起重机械有限公司| 上海先德机械工程有限公司| 艾沃意特机械设备制造有限公司 | 武汉九州龙工程机械有限公司| 浙江盛拓机械有限公司| 南昌中昊机械有限公司| 济宁山矿机械有限公司| 佛山市顺德区金工铝门窗机械实业有限公司 | 德州锦冠钢铁有限公司| 杭州精工机械有限公司| 山东业机械有限公司| 湖南嘉龙机械设备贸易有限公司| 常州万高机械制造有限公司| 青岛现代机械有限公司| 杭州力诺机械设备有限公司| 压机械制造有限公司| 南通科邦机械有限公司| 常州浦发机械有限公司| 山东兴源机械有限公司| 长春协展机械工业有限公司 | 杭州星宏机械有限公司| 上海朗惠包装机械有限公司| 靖江机械制造有限公司| 福州协展机械有限公司| 上海起鑫贸易有限公司| 宁波佳尔灵气动机械有限公司 | 厦门机械制造有限公司| 徐州丰展机械有限公司| 杭州海兴机械有限公司| 大连橡胶塑料机械有限公司| 江苏优远机械有限公司| 浙江引春机械有限公司| 杭州萧山机械有限公司| 中安重工自动化装备有限公司| 东莞豪力机械有限公司| 瑞安包装机械有限公司| 欧亚德机械有限公司| 长沙威重化工机械有限公司| 上海应晓食品机械有限公司| 福建敏捷机械有限公司| 连云港机械有限公司| 上海翊特机械有限公司| 畜牧机械设备有限公司| 四川华为钢铁有限公司| 济南天业工程机械有限公司| 湖北日朗机械制造有限公司| 永兴机械设备有限公司| 上海隆麦机械有限公司| 奥通机械制造有限公司| 伟业机械制造有限公司| 台州市四海机械有限公司| 南京创博机械设备有限公司 | 佛山市强源钢铁有限公司| 无锡通用机械厂有限公司| 徐州徐工随车起重机有限公司| 湖北日朗机械制造有限公司| 泰安重工机械有限公司| 江阴兴澄特种钢铁有限公司地址| 莱州弘宇机械有限公司| 高邮和益机械有限公司| 安阳斯普机械有限公司| 广州起航贸易有限公司| 启益电器机械有限公司| 江阴兴澄特种钢铁有限公司地址| 松源机械制造有限公司| 上海宇减传动机械有限公司| 唐山国义特种钢铁有限公司 | 江苏联鑫钢铁有限公司| 中科包装机械有限公司| 武汉臻尚机械设备有限公司| 贵阳闽达钢铁有限公司| 诸城市鼎康机械有限公司| 浙江青山钢铁有限公司| 烟台莫深机械设备有限公司 | 连云港机械制造有限公司| 宿迁百通机械有限公司| 青岛数控机械有限公司| 江苏江南起重机械有限公司| 象山机械制造有限公司| 上海集美食品机械有限公司| 青岛科泰重工机械有限公司 | 山东豪迈机械制造有限公司| 山东瑞华工程机械有限公司| 滨州市机械有限公司| 迅得机械东莞有限公司| 泉州力泉机械有限公司| 奉化南方机械有限公司| 唐山唐钢钢铁有限公司| 上海合升机械有限公司| 湖南信昌机械有限公司| 十堰福堰钢铁有限公司| 上海慧丰传动机械有限公司| 广东星联精密机械有限公司| 广州泓锋食品机械有限公司| 保定向阳航空精密机械有限公司| 衡阳沃力机械有限公司| 力升机械有限公司.| 永裕昌机械有限公司| 重庆 机械制造有限公司| 苏州派普机械有限公司| 上海方星机械设备制造有限公司| 瑞安市创博机械有限公司| 河北裕华钢铁有限公司| 长葛市机械有限公司| 浙江常至机械有限公司| 上海金恒机械制造有限公司| 新乡高服筛分机械有限公司| 三一起重机械有限公司| 杭州传动机械有限公司| 江苏铁本钢铁有限公司| 东莞元渝机械有限公司| 珠海精密机械有限公司| 青岛特固机械有限公司| 宿迁百通机械有限公司| 东方机械制造有限公司| 常州 机械 有限公司| 佛山三技精密机械有限公司| 东莞三机械有限公司| 长城机械制造有限公司| 洛阳耿力机械有限公司| 光华机械制造有限公司| 上海丰禾精密机械有限公司| 青岛佳友包装机械有限公司| 南通科邦机械有限公司| 北京恒机械有限公司| 洛阳重型机械有限公司| 上海楚尚机械有限公司| 标准缝纫机菀坪机械有限公司| 浙江鼎业机械设备有限公司| 广东粤凯机械有限公司| 东莞宏起塑胶电子有限公司| 蔚蓝机械设备有限公司| 山西美锦钢铁有限公司| 青岛辉腾机械有限公司| 济南精美机械设备有限公司| 合肥明泰机械施工有限公司| 晋江机械制造有限公司| 宁波博信机械制造有限公司| 武汉千里马工程机械有限公司| 徐州丰展机械有限公司| 泰州机械 有限公司| 农业机械有限公司招聘| 常州胜代机械有限公司| 上海集美食品机械有限公司| 武汉餐至饮机械设备有限公司| 上海洗涤机械有限公司| 盐城市联鑫钢铁有限公司| 海宁亚东机械有限公司| 丹东富田精工机械有限公司| 宁波中能连通机械有限公司| 新乡市新久振动机械有限公司| 金华市 机械制造有限公司| 苏拉纺织机械有限公司| 诸城市恒顺机械有限公司| 兰州兴元钢铁有限公司| 广州赛威机械有限公司| 东莞市佐臣自动化机械有限公司 | 浙江建设机械有限公司| 台正精密机械有限公司| 南通安港机械有限公司| 诸城市富瑞德机械有限公司| 济宁福康机械加工有限公司| 福建 机械有限公司| 庆中机械制造有限公司| 江苏江成机械有限公司| 青岛迪凯机械设备有限公司| 星塔机械深圳有限公司| 重庆远博机械有限公司| 上海星贝包装机械有限公司| 江阴市华夏包装机械有限公司| 鞍山宝得钢铁有限公司招聘岗位| 沧州卓鑫机械设备制造有限公司| 新疆 机械有限公司| 廊坊包装机械有限公司| 大连 橡塑机械有限公司| 东莞正扬电子机械有限公司| 成都经纬机械制造有限公司| 海沃机械扬州有限公司| 济南卓恒膨化机械有限公司| 浙江大宇轻工机械有限公司| 山东机械 有限公司| 浙江大鹏机械有限公司| 精密机械制造有限公司| 同鼎机械设备有限公司| 上海优拜机械有限公司| 启英机械设备有限公司| 漳州市机械有限公司| 东莞市永创包装机械有限公司 | 沈阳斗山工程机械有限公司| 江苏诺森重工有限公司| 机械有限公司 英文| 北京龙泰机械设备安装有限公司| 河南省平原矿山机械有限公司| 天津天重江天重工有限公司| 杭州起重吊装有限公司| 厦门全新彩钢机械有限公司| 佛山隆机械有限公司| 陕西 机械设备有限公司| 山东长江机械有限公司| 上海长江服装机械有限公司 | 张家港市机械有限公司| 浙江恒机械有限公司| 江苏华夏重工有限公司| 嵊州市龙威机械制造有限公司| 新晨动力机械有限公司| 鸡西煤矿机械有限公司| 浙江立洋机械有限公司| 济南赛信机械有限公司| 广州市赛思达机械设备有限公司| 吉林大华机械制造有限公司| 鑫阳机械设备有限公司| 苏州 精密机械有限公司| 江门携成机械有限公司怎样| 慈溪科傲机械有限公司| 佛山新元机械有限公司| 霸州新利钢铁有限公司| 登福机械上海有限公司| 浙江易锋机械有限公司| 江源机械制造有限公司| 苏州海盛精密机械有限公司怎么样| 南京恩梯恩精密机械有限公司| 太仓九本机械有限公司| 泉州佳升机械有限公司| 杭州天恒机械有限公司| 济南食品机械有限公司| 青岛诺恩包装机械有限公司 | 武汉萱裕机械有限公司| 宝捷精密机械有限公司| 成都的起重有限公司| 山东山推工程机械结构件有限公司 | 昆山富日精密机械有限公司| 河南省中原起重机械有限公司 | 上海乔麦包装机械有限公司| 西安中天机械有限公司| 湖州卓信机械有限公司| 广州盛广誉机械设备有限公司| 柳州欧维姆机械有限公司| 上海 包装机械有限公司| 苏州威邦自动化机械有限公司 | 温州市顺达服装机械有限公司| 中航起落架有限公司| 新乡市起重机厂有限公司| 山东泰山起重机械有限公司| 盐城机械设备有限公司| 济宁新田工程机械有限公司| 日照立盈机械有限公司| 重庆渝辉机械有限公司| 泰州市机械有限公司| 东莞新宇机械有限公司| 无锡祥靖机械有限公司| 武汉贝瑞克机械制造有限公司 | 安特精密机械有限公司| 徐州市机械有限公司| 宁波博旺机械有限公司| 湖南长河机械有限公司| 太平洋机械有限公司| 上海腾迈机械有限公司| 聊城日发纺织机械有限公司| 辽宁天亿机械有限公司| 延边金科食品机械有限公司| 青州汇众机械有限公司| 深圳市创世纪机械有限公司| 青岛德固特机械制造有限公司| 浙江建达机械有限公司| 山东山建机械有限公司| 福建联丰机械有限公司| 安来动力机械有限公司| 震德塑料机械有限公司| 苏州华尔普机械有限公司| 同鼎机械设备有限公司| 山东曲阜 机械有限公司| 全精密机械有限公司| 北京石油机械有限公司| 无锡工程机械有限公司| 北京龙泰机械设备安装有限公司 | 河北 机械 有限公司| 青岛皓腾机械制造有限公司| 招商局重工深圳有限公司| 长江机械设备有限公司| 浙江自力机械有限公司| 南牧机械有限公司招聘| 昆山裕邦机械有限公司| 斗山工程机械有限公司| 邢台市振成机械有限公司| 安特精密机械有限公司| 河北神耕机械有限公司| 上海鑫斌机械有限公司| 濮阳市机械有限公司| 浙江纺织机械有限公司| 上海益达机械有限公司| 诚辉机械制造有限公司| 瑞祥机械制造有限公司| 郑州兆明机械有限公司| 上海自动化机械有限公司| 珠海精密机械有限公司| 洛阳古城机械有限公司| 唐山机械设备有限公司| 石家庄嘉祥精密机械有限公司| 广西玉柴动力机械有限公司| 济南天宝钢铁有限公司| 成都康博机械有限公司| 东莞亮剑机械有限公司| 江苏威鹰机械有限公司| 上海益达机械有限公司| 上海法德机械设备有限公司| 山东矿山机械 有限公司| 山东欣弘发机械有限公司| 青岛包装机械有限公司| 中山机械制造有限公司| 吉林大华机械制造有限公司| 江苏宏光钢铁有限公司| 南通虹波机械有限公司| 宁波传动机械有限公司| 无锡工程机械有限公司| 郑州同鼎机械设备有限公司| 山东碧海机械有限公司| 大连起重机有限公司| 江苏贸隆机械制造有限公司| 厦门华峰辊压机械有限公司| 卓轮天津机械有限公司| 湖北粮食机械有限公司| 青岛山森机械有限公司| 东平开元机械有限公司| 昆山协扬机械有限公司| 河南一重起重机有限公司| 济南包装机械有限公司| 力顺源机械有限公司| 青岛橡塑机械有限公司| 佛山陶瓷机械有限公司| 江苏宏威重工机床制造有限公司 | 亿煤机械装备制造有限公司| 东莞共荣精密机械有限公司| 温州奋起皮业有限公司| 合肥华运机械制造有限公司 | 南昌中昊机械有限公司| 上海包装机械设备有限公司| 东莞市欧西曼机械设备有限公司| 常州液压机械有限公司| 温岭华驰机械有限公司| 腾达机械设备有限公司| 大连亨益机械有限公司| 苏州威邦自动化机械有限公司| 济南欧亚德数控机械有限公司 | 章丘宇龙机械有限公司| 昆明 机械 有限公司| 宁波拓诚机械有限公司| 常州斯太尔动力机械有限公司| 扬州冶金机械有限公司| 常州杰洋精密机械有限公司| 广东粤凯机械有限公司| 三莲机械制造有限公司| 伟拓压铸机械有限公司| 广州市荣艺食品机械有限公司| 南通市通州区三槐机械制造有限公司| 上海祎飞机械有限公司| 机械装备制造有限公司| 苏州开隆机械有限公司| 深圳市海德精密机械有限公司| 泰安恒大机械有限公司| 杭州金鸥机械有限公司| 深圳中施机械设备有限公司| 温岭林大机械有限公司| 泰田机械制造有限公司| 山东食品机械有限公司| 菲特压片机械有限公司| 佛山顺德区机械有限公司| 杭州金狮机械有限公司| 三星机械制造有限公司 | 西安华欧精密机械有限公司| 上海光塑机械制造有限公司| 上海霏润机械设备有限公司| 青岛 木工机械有限公司| 东莞鸿铭机械有限公司| 南京三友机械有限公司| 江苏盐城机械有限公司| 德昌誉机械制造有限公司| 随州市恒大机械铸造有限公司| 新昌华亿机械有限公司| 浙江恒通机械有限公司| 漳州钜钢机械有限公司| 河南明天机械有限公司| 江苏苏盐阀门机械有限公司| 武汉格瑞拓机械有限公司| 温州国伟印刷机械有限公司| 舟山荣德机械有限公司| 东莞市卓越机械有限公司招聘| 东莞市欧西曼机械设备有限公司| 大连机械制造有限公司| 汕头 机械有限公司| 广州工程机械有限公司| 长沙机械设备有限公司| 天津 起重有限公司| 湖南华菱湘潭钢铁有限公司| 中实洛阳重型机械有限公司| 恩比尔(厦门)机械制造有限公司| 宁波敏达机械有限公司| 保定兴旺机械有限公司| 芜湖汇丰机械工业有限公司| 新乡市特昌振动机械有限公司| 普思信机械部件有限公司| 重庆维庆液压机械有限公司 | 河南矿山起重机有限公司地址 | 江阴市礼联机械有限公司| 河南重机械有限公司| 济南 重工有限公司| 上海舜锋机械制造有限公司| 华盛机械设备有限公司| 杭州金竺机械有限公司| 上海卓亚矿山机械有限公司| 汉虹精密机械有限公司| 英国敬业钢铁有限公司| 山东造纸机械厂有限公司| 滁州富达机械电子有限公司| 上海机械实业有限公司| 连云港 机械有限公司| 徐州彭贝机械制造有限公司 | 山东明美数控机械有限公司| 宁波润达机械有限公司| 连云港亚新钢铁有限公司| 柳州恒瑞机械有限公司| 成都康博机械有限公司| 河南千里马工程机械有限公司 | 东莞市益彩机械有限公司| 洛阳中冶重工机械有限公司| 无锡烨隆精密机械有限公司| 江苏莱宝机械制造有限公司| 杭州起重吊装有限公司| 登福机械(上海)有限公司| 邹平县宏鑫机械制造有限公司| 晋江海纳机械有限公司| 广东包装机械有限公司| 南京赛达机械制造有限公司| 潍坊宝润机械有限公司| 长沙机械与制造有限公司| 常州新燎原机械有限公司| 台山市机械厂有限公司| 江阴钢铁贸易有限公司| 天津市天机液压机械有限公司| 鑫成机械设备有限公司| 上海起重机械有限公司| 重庆宏工工程机械有限公司| 江苏威鹰机械有限公司| 成都的起重有限公司| 德耐尔压缩机械有限公司 | 上海国翔包装机械制造有限公司| 郑州鑫宇机械制造有限公司 | 浙江炜冈机械有限公司| 宜春江特机械传动有限公司 | 河北正大机械有限公司| 山东新纪元重工有限公司| 抚顺机械制造有限公司| 上海精密机械制造有限公司| 上海昶旭包装机械有限公司| 湖北大展钢铁有限公司| 柳州欧维姆机械有限公司| 江苏谷登工程机械装备有限公司 | 诸城市放心食品机械有限公司 | 新疆机械设备有限公司| 山东锦坤机械有限公司| 北京机械制造有限公司| 北京起重机械有限公司| 建筑机械设备有限公司| 东莞市峰茂机械设备有限公司| 首钢长白机械有限公司| 机械化工程有限公司| 江苏江海机械有限公司| 浙江晟达机械有限公司| 深圳市宏机械设备有限公司| 南通科诚橡塑机械有限公司| 四川望锦机械有限公司| 上海余特包装机械制造有限公司| 青岛昌佳机械有限公司| 重庆工程机械有限公司| 烟台万事达金属机械有限公司| 山东山推工程机械结构件有限公司| 浙江长江机械有限公司| 常州起重机械有限公司| 贵阳长乐钢铁有限公司| 沈阳黎明机械有限公司| 河北新金钢铁有限公司| 张家口煤矿机械制造有限公司 | 川岛洗涤机械有限公司| 新乡 筛分机械有限公司| 山东海诺机械有限公司| 重庆洲泽机械制造有限公司| 青岛给力机械有限公司| 莱州华汽机械有限公司| 宁波固奇包装机械制造有限公司| 无锡万华机械有限公司| 山东卡特重工有限公司| 襄阳通威机械有限公司| 大连 橡塑机械有限公司| 南京科倍隆机械有限公司| 温州华珍机械有限公司| 泉州市劲力工程机械有限公司| 广东穗华机械设备有限公司| 厦门全新彩钢机械有限公司| 台州农业机械有限公司| 贵州凯星液力传动机械有限公司| 上海盛普机械制造有限公司| 佳木斯佳联收获机械有限公司| 浙江金华机械有限公司| 恒天九五重工有限公司| 山东六丰机械工业有限公司| 溧阳科华机械制造有限公司| 沈阳工程机械有限公司| 天津传动机械有限公司| 德州机械制造有限公司| 阳煤化工机械有限公司| 大连典石精密机械有限公司| 珠海 机械 有限公司| 安徽好运机械有限公司| 葛洲坝机械船舶有限公司| 高义钢铁有限公司电话| 厦门宇龙机械有限公司| 远东机械设备有限公司| 河南省金特振动机械有限公司 | 广州文穗塑料机械有限公司| 佛山市炬盈包装机械有限公司| 长沙机械制造有限公司| 山东讴神机械制造有限公司 | 无锡市川中五金机械有限公司| 济南迅捷机械设备有限公司| 扬州华粮机械有限公司| 申耀机械工业有限公司| 潍坊市通用机械有限公司| 济南新思路机械设备有限公司| 华西钢铁有限公司电话| 唐山宝航机械有限公司| 广州市台展机械有限公司| 上海优拜机械有限公司| 深圳创能机械有限公司| 欧亚德机械有限公司| 杭州泰尚机械有限公司| 新晨动力机械有限公司| 潍坊广德机械有限公司| 上海机械进出口有限公司| 江苏液压机械有限公司| 北京道森起点信息技术有限公司|