这是本人去年按照一个英文教程制作的一个2D简单版本的Minecraft。代码非本人风格。今天看来,这代码可读性不好。仅以发表出来,以供有需要的人阅读。

"""游戏规则:

按空格键捡东西,按数字键放东西,按数字键同时单击鼠标左键合成物质

"""

import random

import pygame,sys

from pygame.locals import *

BLACK = (0,0,0)

BROWN = (153,76,0)

GREEN = (0,255,0)

BLUE = (0,0,255)

WHITE = (255,255,255)

cloudx = -200

cloudy = 0

DIRT = 0

GRASS = 1

WATER = 2

COAL = 3

CLOUD = 4

WOOD = 5

FIRE = 6

SAND = 7

GLASS = 8

ROCK = 9

STONE = 10

BRICK = 11

DIAMOND = 12

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')

}

inventory = {

DIRT : 0,

GRASS: 0,

WATER: 0,

COAL : 0,

WOOD : 0,

FIRE : 0,

SAND : 0,

GLASS: 0,

ROCK : 0,

STONE: 0,

BRICK: 0,

DIAMOND:0

}

TILESIZE = 20

MAPWIDTH = 50

MAPHEIGHT = 20

PLAYER = pygame.image.load("player.png")

playerPos = [0,0]

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) ]

for rw in range(MAPHEIGHT):

for cl in range(MAPWIDTH):

randomNumber = random.randint(0,20)

if randomNumber == 0:

tile = COAL

elif randomNumber ==1 or randomNumber < 5:

tile = WATER

elif randomNumber >=5 and randomNumber <=6:

tile = SAND

elif randomNumber > 6 and randomNumber <9:

tile = WOOD

elif randomNumber > 9 and randomNumber <11:

tile = ROCK

elif randomNumber > 11 and randomNumber <18:

tile = GRASS

else:

tile = DIRT

tilemap[rw][cl] = tile

controls = {

DIRT : 49, # 1键

GRASS : 50,

WATER : 51,

COAL : 52,

WOOD : 53,

FIRE : 54,

SAND : 55, # 7键

GLASS : 56, # 8键

ROCK : 57, # 9键

STONE : 48, # 0键

BRICK : 45, # -键

DIAMOND: 61 # =键

}

"合成规则"

craft = {

FIRE : { WOOD :2,ROCK : 2 }, # 两块木片和2块岩石合成一把火

STONE: { ROCK :2},

BRICK : { STONE:2,FIRE : 1},

SAND : { ROCK : 2 },

GLASS: { FIRE :1,SAND : 2 },

DIAMOND:{ WOOD:2,COAL : 3,GLASS:2 }

}

pygame.init()

DISPLAYSURF = pygame.display.set_mode((MAPWIDTH*TILESIZE,MAPHEIGHT*TILESIZE +50 ))

INVFONT = pygame.font.Font('FreeSansBold.ttf',18)

fpsClock = pygame.time.Clock()

while True:

for event in pygame.event.get():

if event.type == QUIT:

pygame.quit()

sys.exit()

elif event.type == KEYDOWN:

if event.key == K_RIGHT and playerPos[0] < MAPWIDTH - 1:

playerPos[0] +=1

if event.key == K_LEFT and playerPos[0] > 0 :

playerPos[0] -=1

if event.key == K_UP and playerPos[1]>0:

playerPos[1] -=1

if event.key == K_DOWN and playerPos[1] < MAPHEIGHT -1 :

playerPos[1] +=1

if event.key == K_SPACE: # 按空格键捡东西

currentTile = tilemap[playerPos[1]][playerPos[0]]

inventory[currentTile] +=1

tilemap[playerPos[1]][playerPos[0]] = DIRT # 捡到东西后,变成地面了

for key in controls:

if (event.key == controls[key]):

if pygame.mouse.get_pressed()[0] :

print("单击左键")

if key not in craft :break # 按的键代表某物质,不在合成表里则不合成

canBeMade = True # 假设能被合成

for i in craft[key]:

if craft[key][i] > inventory[i]: # 合成所需的数量大于仓库中数量

canBeMade = False # 无法合成

break

if canBeMade == True: # 如果能被合成

for i in craft[key]: # 仓库中的每项都根据规则减去相应的数量

inventory[i] -= craft[key][i] #

inventory[key] += 1 # 合成的这种物质数量加1

else:

"按数字键放东西在史蒂夫所在的位置"

currentTile = tilemap[playerPos[1]][playerPos[0]]

if inventory[key] > 0: # 如果仓库中这种物质数量大于0

inventory[key] -= 1 # 那么数量减去1

tilemap[playerPos[1]][playerPos[0]] = key # 放到史蒂夫所在的位置

inventory[currentTile] += 1 # 仓库中相应数量加1

DISPLAYSURF.fill(BLACK)

for row in range(MAPHEIGHT):

for column in range(MAPWIDTH):

DISPLAYSURF.blit(textures[tilemap[row][column]],(column*TILESIZE,row*TILESIZE,TILESIZE,TILESIZE))

DISPLAYSURF.blit(PLAYER,(playerPos[0]*TILESIZE,playerPos[1]*TILESIZE))

DISPLAYSURF.blit(textures[CLOUD].convert_alpha(),(cloudx,cloudy))

cloudx +=1

if cloudx > MAPWIDTH * TILESIZE:

cloudy = random.randint(0,MAPHEIGHT*TILESIZE)

cloudx = -200

placePosition = 10

for item in resource:

DISPLAYSURF.blit(textures[item],(placePosition,MAPHEIGHT*TILESIZE + 20))

placePosition +=30

textObj = INVFONT.render(str(inventory[item]),True,WHITE,BLACK)

DISPLAYSURF.blit(textObj,(placePosition,MAPHEIGHT*TILESIZE+20))

placePosition +=50

pygame.display.update()

fpsClock.tick(24)

python制作我的世界_python的pygame制作的2D我的世界相关推荐

  1. python编的俄罗斯方块游戏_Python使用pygame模块编写俄罗斯方块游戏的代码实例

    文章先介绍了关于俄罗斯方块游戏的几个术语. 边框--由10*20个空格组成,方块就落在这里面. 盒子--组成方块的其中小方块,是组成方块的基本单元. 方块--从边框顶掉下的东西,游戏者可以翻转和改变位 ...

  2. python怎样画动态文字_Python之pygame学习绘制文字制作滚动文字

    pygame绘制文字 ✕ 今天来学习绘制文本内容,毕竟游戏中还是需要文字对玩家提示一些有用的信息. 字体常用的不是很多,在pygame中大多用于提示文字,或者记录分数等事件. 字体绘制基本分为以下几个 ...

  3. python自己制作节奏大师游戏_使用pygame制作一个简单的游戏

    翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...

  4. python两人一碰_python运用pygame库实现双人弹球小游戏

    使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截失败的一方输掉游戏,规则类似于简化版的乒乓球. 因为是第一次用pygam ...

  5. python创建百万个文件_python百万sitemap制作

    seo小公举[工具]:百度标准规范sitemap制作,一个脚本全搞掂,自动生成且按百度最大数量要求划分50000条url为一个xml文件! 量大:不论有多小url,放到需要制作成url.txt文件里面 ...

  6. python qt5 增加文本框_Python用PyQt5制作弹出式输入框,Qt图形界面编程之QInputDialog...

    前面内容,我们介绍了PyQt5的一些常用基本控件. 温故而知新 计数器QSpinBox使用详解,Python用PyQt5制作图形界面基础控件篇 Python用PyQt5实现多种弹出消息框,QMessa ...

  7. python全栈工程师薪水_Python工程师薪资刷出新高度,有望成为世界上最流行的编程语言...

    随着Python的不断崛起,TIOBE预计它最终将获得第一名.TIOBE在其2019年6月的文章中说:"如果Python能保持这样的速度,它可能在3到4年内取代C和Java,从而成为世界上最 ...

  8. python实验报告实验总结_Python词云制作实验报告

    实验题目:n Python 词云制作实验报告 实验目的与要求: 础 掌握基础 Python 安装过程和词云制作. 实验步骤: n Python 安装 1.击 双击 Anaconda2-4.0.0-Wi ...

  9. python制做简单图片代码_Python简单的制作图片验证码

    -人人可以学Python-- 这里示范的验证码都是简单的,你也可以把字符扭曲 人人可以学Python.png Python第三方库无比强大,PIL 是python的一个d第三方图片处理模块,我们也可以 ...

最新文章

  1. 【冷门实用小工具】轻量级流程图工具ClickCharts PRO绿色版,ClickCharts PRO下载【亲测有效】
  2. 用户开始接纳虚拟化双厂商策略
  3. Xshell登录Ubuntu12.04
  4. springboot 文件服务器_Spring Boot整合阿里OSS文件储存服务器详细教程
  5. python可变参数的特点_可变参数**kwargs传入函数时的存储方式为( )_学小易找答案...
  6. Ubuntu下VIM使用指南
  7. 数据结构带头结点单向不循环链表(C语言版)
  8. 可编辑PSD分层疫情防护宣传海报
  9. 基于 PostgreSQL 的 EMQ X Auth ACL
  10. oracle大黑点,R语言实现交通行业事故案例之黑点确定 - 数据分析
  11. 终端IO--unix环境高级编程读书笔记
  12. python运算符及优先级顺序
  13. 使用线程模拟解决银行排队叫号问题
  14. leetcode 1800. Maximum Ascending Subarray Sum(python)
  15. 中国标准时间和时间戳互转
  16. 想要做大事,就要有高效的协作机制
  17. CR、LF、CRLF 都是什么鬼?
  18. Codeforces Round #829C CF1753C Wish I Knew How to Sort
  19. 利用随机森林填补缺失值
  20. 【Python】1.生成+统计+保存调查问卷数据

热门文章

  1. Verilog实现VGA通信的驱动
  2. 使用C#winform封装chrome浏览器
  3. vmware 6.0 虚拟机 和 diskeeper 冲突
  4. 【dsPIC33E】Bootloader(四)Bootloader上位机
  5. 每个元音包含偶数次的最长子字符串——打死我也想不到的代码
  6. 用mpg123播放https协议的URL MP3
  7. 【网络技术】(5)身份认证技术与访问控制------数字签名技术
  8. 系统已坏,用U盘安装系统的方法
  9. DevExpress报表设计器自定义工具箱
  10. cmd提示 'node' 不是内部或外部命令,也不是可运行的程序