包括9个步骤分步制作而成的2D版本我的世界。
两块木片和2块岩石合成一把火 , 两块岩石合成石头。 两块石头和一团火合成砖块 , 两块石头合成沙 。 一团火,2沙合成玻璃 。 2木,3炭,2玻璃合成钻石。按空格键捡东西,按数字键放东西,按数字键同时单击鼠标左键满足要求时合成物质。游戏目标可以是合成钻石,请先看教程。”
以下是部分代码预览:
"""用pygame制作的我的世界2D版,作者李兴球,游戏操作:按空格键捡东西,按数字键放东西,按数字键同时单击鼠标左键合成物质,合成规则见下面代码。""" import time import random import pygame,sys from pygame.locals import * class Role(pygame.sprite.Sprite): def __init__(self,images): pygame.sprite.Sprite.__init__(self) self.images = [pygame.image.load(image) for image in images] self.index = 0 self.image = self.images[self.index] # 初始造型为上 self.playerPos = [0,0] def set_costume(self,index): self.image = self.images[index] # 初始造型为上 class Effect(pygame.sprite.Sprite): def __init__(self,images,position,group): """参数说明: images:转换成surface的列表 position:坐标双元组,效果生成的坐标 group:自己所在的组(效果组) """ pygame.sprite.Sprite.__init__(self) self.images = images self.index = 0 # 起始造型索引 self.amounts = len(self.images) # 总共造型数量 self.interval = 0.1 # 造型切换间隔时间(秒) self.begin_time = time.time() # 造型切换起始时间 self.image = self.images[0] # 起始造型 self.rect = self.image.get_rect() # 矩形对象(用来表示坐标和图形宽高) self.rect.center = position # 矩形对象的中心点坐标 self.group = group # 可引用自己所在的组 self.group.add(self) # 添加进自己所在的组中 def update(self): """切换造型""" self.rect.move_ip(0,-12) # 向上移动 if self.rect.bottom >=0 : self.image = self.images[self.index] if time.time() - self.begin_time >=0 : # 超时则索引加1, self.index = self.index + 1 self.index = self.index % self.amounts self.begin_time = time.time() # 起始时间要重设 else: self.group.remove(self) pass textures = { DIRT : pygame.image.load('dirt.png'), GRASS: pygame.image.load('grass.png'), WATER: pygame.image.load('water.png'), COAL : pygame.image.load('coal.png'), CLOUD: pygame.image.load('cloud.png'), WOOD : pygame.image.load('wood.png'), FIRE : pygame.image.load('fire.png'), SAND : pygame.image.load('sand.png'), GLASS: pygame.image.load('glass.png'), ROCK : pygame.image.load('rock.png'), STONE: pygame.image.load('stone.png'), BRICK: pygame.image.load('brick.png'), DIAMOND:pygame.image.load('diamond.png') } res_names = { DIRT : "地面", GRASS: "草皮", WATER: "水面", COAL : "碳黑", WOOD : "木片", FIRE : "火把", SAND : "沙粒", GLASS: "玻璃", ROCK : "岩石", STONE: "石头", BRICK: "砖块", DIAMOND:"钻石" } TILESIZE = 20 MAPWIDTH = 50 MAPHEIGHT = 20 play_images = ['player_up.png','player_down.png','player_left.png','player_right.png'] # 上下左右图 PLAYER = Role(play_images) # 它有属性playerPos和images,用于坐标定位和图像渲染 resource = [DIRT,GRASS,WATER,COAL,WOOD,FIRE,SAND,GLASS,ROCK,STONE,BRICK,DIAMOND] # 显示在下栏的资源种类 tilemap = [ [DIRT for w in range(MAPWIDTH)] for h in range(MAPHEIGHT) ] # 初始化方块地图,都是DIRT "合成表里合成规则" rules = "# 两块木片和2块岩石合成一把火 # 两块岩石合成石头 # 两块石头和一团火合成砖块 # 两块石头合成沙 # 一团火,2沙合成玻璃 # 2木,3炭,2玻璃合成钻石" operate_method_string = "按空格键捡东西,按数字键放东西,按数字键同时单击鼠标左键满足要求时合成物质。游戏目标可以是合成钻石,请先看教程。" craft = { FIRE : { WOOD :2,ROCK : 2 }, # 两块木片和2块岩石合成一把火 STONE: { ROCK :2}, # 两块岩石合成石头 BRICK : { STONE:2,FIRE : 1}, # 两块石头和一团火合成砖块 SAND : { STONE : 2 }, # 两块石头合成沙 GLASS: { FIRE :1,SAND : 2 }, # 一团火,2沙合成玻璃 DIAMOND:{ WOOD:2,COAL : 3,GLASS:2 } # 2木,3炭,2玻璃合成钻石 } pygame.init() DISPLAYSURF = pygame.display.set_mode((MAPWIDTH*TILESIZE,MAPHEIGHT*TILESIZE + 120 )) # 渲染面 pygame.display.set_caption("2D Minecraft,我的世界2D版,作者:李兴球_风火轮编程_www.scratch8.net") INVFONT = pygame.font.Font('FreeSansBold.ttf',18) # 新建字体对象 MSYHFONT = pygame.font.Font('msyh.ttf',12) # 新建微软雅黑字体 operate_method_surface = MSYHFONT.render(operate_method_string,True,WHITE,BLACK) # 渲染成surface rules_surface = MSYHFONT.render(rules,True,WHITE,BLACK) # 渲染成surface "效果造型表,换效果只要直接更换effect文件夹下面的图形即可,文件名为0001,0002,0003...." effect_costumes = [ "effect/" + '0'* (4-len(str(i))) + str(i) + ".png" for i in range(1,6)] # 补零加序号形成图形文件表 effect_costumes = [pygame.image.load(image) for image in effect_costumes] # 转换成surface [image.set_alpha(150) for image in effect_costumes] pass
如需要下载完整源代码及素材,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)
发表评论