
包括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资源。)
