python制作我的世界_python的pygame制作的2D我的世界
这是本人去年按照一个英文教程制作的一个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我的世界相关推荐
- python编的俄罗斯方块游戏_Python使用pygame模块编写俄罗斯方块游戏的代码实例
文章先介绍了关于俄罗斯方块游戏的几个术语. 边框--由10*20个空格组成,方块就落在这里面. 盒子--组成方块的其中小方块,是组成方块的基本单元. 方块--从边框顶掉下的东西,游戏者可以翻转和改变位 ...
- python怎样画动态文字_Python之pygame学习绘制文字制作滚动文字
pygame绘制文字 ✕ 今天来学习绘制文本内容,毕竟游戏中还是需要文字对玩家提示一些有用的信息. 字体常用的不是很多,在pygame中大多用于提示文字,或者记录分数等事件. 字体绘制基本分为以下几个 ...
- python自己制作节奏大师游戏_使用pygame制作一个简单的游戏
翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...
- python两人一碰_python运用pygame库实现双人弹球小游戏
使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截失败的一方输掉游戏,规则类似于简化版的乒乓球. 因为是第一次用pygam ...
- python创建百万个文件_python百万sitemap制作
seo小公举[工具]:百度标准规范sitemap制作,一个脚本全搞掂,自动生成且按百度最大数量要求划分50000条url为一个xml文件! 量大:不论有多小url,放到需要制作成url.txt文件里面 ...
- python qt5 增加文本框_Python用PyQt5制作弹出式输入框,Qt图形界面编程之QInputDialog...
前面内容,我们介绍了PyQt5的一些常用基本控件. 温故而知新 计数器QSpinBox使用详解,Python用PyQt5制作图形界面基础控件篇 Python用PyQt5实现多种弹出消息框,QMessa ...
- python全栈工程师薪水_Python工程师薪资刷出新高度,有望成为世界上最流行的编程语言...
随着Python的不断崛起,TIOBE预计它最终将获得第一名.TIOBE在其2019年6月的文章中说:"如果Python能保持这样的速度,它可能在3到4年内取代C和Java,从而成为世界上最 ...
- python实验报告实验总结_Python词云制作实验报告
实验题目:n Python 词云制作实验报告 实验目的与要求: 础 掌握基础 Python 安装过程和词云制作. 实验步骤: n Python 安装 1.击 双击 Anaconda2-4.0.0-Wi ...
- python制做简单图片代码_Python简单的制作图片验证码
-人人可以学Python-- 这里示范的验证码都是简单的,你也可以把字符扭曲 人人可以学Python.png Python第三方库无比强大,PIL 是python的一个d第三方图片处理模块,我们也可以 ...
最新文章
- 【冷门实用小工具】轻量级流程图工具ClickCharts PRO绿色版,ClickCharts PRO下载【亲测有效】
- 用户开始接纳虚拟化双厂商策略
- Xshell登录Ubuntu12.04
- springboot 文件服务器_Spring Boot整合阿里OSS文件储存服务器详细教程
- python可变参数的特点_可变参数**kwargs传入函数时的存储方式为( )_学小易找答案...
- Ubuntu下VIM使用指南
- 数据结构带头结点单向不循环链表(C语言版)
- 可编辑PSD分层疫情防护宣传海报
- 基于 PostgreSQL 的 EMQ X Auth ACL
- oracle大黑点,R语言实现交通行业事故案例之黑点确定 - 数据分析
- 终端IO--unix环境高级编程读书笔记
- python运算符及优先级顺序
- 使用线程模拟解决银行排队叫号问题
- leetcode 1800. Maximum Ascending Subarray Sum(python)
- 中国标准时间和时间戳互转
- 想要做大事,就要有高效的协作机制
- CR、LF、CRLF 都是什么鬼?
- Codeforces Round #829C CF1753C Wish I Knew How to Sort
- 利用随机森林填补缺失值
- 【Python】1.生成+统计+保存调查问卷数据