本人用pygame做的2D简单版本。我的世界,你懂的。这个版本用石头、碳、水可以合成钥匙。以下是代码预览:
import random import pygame from pygame.locals import * TILE_SIZE = 30 STEVE_SPEED = 30 SIZE = SCREEN_WIDTH,SCREEN_HEIGHT = 900,750 TRAY_HEIGHT = 120 ROWS = SCREEN_HEIGHT // TILE_SIZE COLS = SCREEN_WIDTH // TILE_SIZE # 爆炸图像表 explosion_images = [pygame.image.load(f'explosion/{i}.gif') for i in range(6)] class Block(pygame.sprite.Sprite): """方块类""" cors = [] # 所有方块坐标表 def __init__(self,master,group): pygame.sprite.Sprite.__init__(self) self.image_index = random.choice(list(block_images.keys())) self.image = block_images[self.image_index] self.rect = self.image.get_rect() class Spide(pygame.sprite.Sprite): """蜘蛛类,它一生成会自动攻击史蒂夫,给蜘蛛加上碰到边缘就反弹等AI行为""" def __init__(self,position,image,group): """image:蜘蛛的surface""" pygame.sprite.Sprite.__init__(self) self.image = image self.rect = self.image.get_rect() class Explosion(pygame.sprite.Sprite): """爆炸类""" def __init__(self,position,screen,group): class Bullet(pygame.sprite.Sprite): """子弹类,史蒂夫按空格会发射子弹""" def __init__(self,master): """master:史蒂夫""" def make_background(): """画格子,做为背景,返回一个surface""" color = (25,95,12) surface = pygame.Surface(SIZE) surface.fill((25,105,0)) def main(): house_images = ["house/house_open.png","house/house_close.png"] steve_images = ["player/player_up.png","player/player_down.png","player/player_left.png","player/player_right.png"] pygame.init() screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT+TRAY_HEIGHT)) pygame.display.set_caption("pygame我的世界简单版") block_group = pygame.sprite.Group() # 方块组 spide_group = pygame.sprite.Group() # 蜘蛛组 explosion_group = pygame.sprite.Group()# 爆炸组 background = make_background() # 产生背景图 tip_tray = pygame.image.load("tray.png") keyimage = pygame.image.load("key.png") # 新建房子,有两个造型 house_images = [pygame.image.load(image) for image in house_images] house = House(house_images) steve_position = 2 * TILE_SIZE, SCREEN_HEIGHT - 2 * TILE_SIZE steve_images = [pygame.image.load(image).convert_alpha() for image in steve_images] steve = Player(steve_images,steve_position,house,screen,block_group,spide_group,explosion_group) [Block(steve,block_group)for i in range(100)] # 生成一百个方块 clock = pygame.time.Clock() running = True while running: # 尽量缩短while循环体长度 event = pygame.event.poll() # 从队列取一个事件 if event.type == QUIT:running = False if event.type == KEYDOWN: steve.keypress_check(event) # 按键检测会调用update更新坐标等 steve.house_detect() # 是否在房子里外检测 spide_group.update() screen.blit(background,(0,0)) # 画背景 screen.blit(tip_tray,(0,SCREEN_HEIGHT)) block_group.draw(screen) # 画所有方块 screen.blit(house.image,house.rect) # 画房子 spide_group.draw(screen) # 画所有蜘蛛 screen.blit(steve.image,steve.rect) # 画史蒂夫 [bomb.draw() for bomb in explosion_group] # 这里不用group的draw方法,因为它要切换造型 if steve.key == 3 : screen.blit(keyimage,(SCREEN_WIDTH-100,SCREEN_HEIGHT+30)) pygame.display.update() clock.tick(60) pygame.quit() if __name__ == "__main__": main()
下载完整源代码与素材,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)