1.概述
本人用了两种库,分别为pylet和ursina做了两种版本;可是应为不知道的原因,本人的计算机的numba库用不了了,所以今天只讲ursina
思路:
1 | 2 | 3 | 4 |
前期准备: |
进阶 | 高级 | 终极 |
创建平坦地形 | 制作生物 | 制作ui | 制作局域网联机 |
设置玩家基础属性 | 优化玩家高级属性 | 制作游戏模式 | 跟上mojang的脚步(更新) |
建模(不做生物就不用) | 制作随机单层地形 | 制作启动器 | |
制作生物群系 | 制作更多生物 | ||
制作玩家动作 | 制作设置 | ||
制作声音 | 制作掉落物 | ||
制作物品 |
以上为本人的制作思路,本人正在完成联机模块;我分享一下我的思路:本人想制作一个客户端和一个服务端,让客户端不停向服务端发送现在的地图,并同步到别的客户端从而实现联机。
2.方法总结
1.关于客户端:
在制作的过程中,我们应该使用的是pycharm这样的可以制作大型项目的软件,既不推荐IDLE。
IDLE做的项目即慢又效果不好,而且无法像pycharm那样方便,如果不会用pycharm,可以去网上搜。
2.关于文件的方式
文件尽量一个为一个模块,不要把很多类和函数放一个文件里。只留一个main.py来运行程序。
3.关于材质与模型:
我将提供材质与模型
4.我想站在巨人的肩膀上做程序怎么办?
我来提供!只要你有求那我会帮你!
5.关于问题与改正
请发邮件联系我谢谢你!本人只有12岁!求求了!感谢大佬支招!
邮箱s11451419198210@163.com
我的main.py
import sys
from easygui import *
import sys
from PyQt5 import QtWidgets,uic
zhujiemian=uic.loadUiType('zhujiemian.ui')[0]
class Zjm(QtWidgets.QMainWindow,zhujiemian):
def __init__(self,parent=None):
QtWidgets.QMainWindow.__init__(self,parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.danrenyouxi)
self.pushButton_2.clicked.connect(self.duorenyouxi)
self.pushButton_3.clicked.connect(self.pifuzhanghao)
self.pushButton_4.clicked.connect(self.zuozhe)
def danrenyouxi(self):
msgbox('关掉主窗口即可运行游戏')
def duorenyouxi(self):
msgbox('多人游戏暂未开通','wanning')
def pifuzhanghao(self):
q=buttonbox('哪个是你的?',choices=list(map(str,open('zhanghao.txt','r').read().split(' ')))+['New'])
if q=='New':
e=(open('zhanghao.txt', 'a'))
e.write(' '+enterbox())
e.close()
def zuozhe(self):
msgbox('作者是邓梓嘉12岁,作于2024.8.4日')
app = QtWidgets.QApplication(sys.argv)
mywindow=Zjm()
mywindow.show()
app.exec_()
def gamesetting():
global generatingTerrain
if held_keys['escape']:
mouse.locked = False
q = buttonbox('设置界面', choices=['play', 'Quit', 'settings'])
if q == 'play':
mouse.locked = True
elif q == 'Quit':
quit()
mouse.locked = True
else:
q = buttonbox('这个是十分危险的!你确定吗,小心bugs',
choices=['我就犯贱', '我走了'])
if q != '我走了':
try:
subject = FirstPersonController()
q = choicebox('修改项选择',
choices=['close', 'window.color(rgb', 'subject.gravity', 'subject.height = 1.0',
'subject.runSpeed = 8', 'subject.walkSpeed = 12', 'camera.dash = 10',
'camera.fov = origFOV = 63', 'subject.cursor.color = color.white',
'subject.blockType = None', 'subject.frog = False',
'subject.cursor.visible = True',
'window.fullscreen=False'])
if q == 'window.color(rgb':
w = list(map(int, enterbox('rgb用空格隔开').split(' ')))
window.color = color.rgb(w[0], w[1], w[2])
elif q == 'subject.gravity':
w = list(map(int, enterbox('subject.gravity').split(' ')))
subject.gravity = w[0]
elif q == 'subject.gravity':
w = list(map(int, enterbox('subject.gravity').split(' ')))
subject.gravity = w[0]
elif q == 'subject.height = 1.0':
w = list(map(int, enterbox('subject.height = 1.0').split(' ')))
subject.gravity = w[0]
subject.camera_pivot.y = subject.height
elif q == 'subject.runSpeed = 8':
w = list(map(int, enterbox('subject.runSpeed = 8').split(' ')))
subject.runSpeed = w[0]
elif q == 'subject.walkSpeed = 12':
w = list(map(int, enterbox('subject.walkSpeed = 12').split(' ')))
subject.walkSpeed = w[0]
elif q == 'camera.dash = 10':
w = list(map(int, enterbox('camera.dash = 10').split(' ')))
camera.dash = w[0]
elif q == 'subject.frog = False':
w = list(map(int, enterbox('subject.frog = False').split(' ')))
subject.frog = w[0]
elif q == 'subject.cursor.visible = True':
w = list(map(int, enterbox('subject.cursor.visible = True').split(' ')))
subject.cursor.visible = w[0]
elif q == 'subject.cursor.color = color.white':
w = list(map(int, enterbox('subject.cursor.color = color.white').split(' ')))
subject.cursor.color = w[0]
elif q == 'subject.blockType = None':
w = list(map(int, enterbox('subject.blockType = None').split(' ')))
subject.blockType = w[0]
elif q == 'camera.fov = origFOV = 63':
w = list(map(int, enterbox('camera.fov = origFOV = 63').split(' ')))
camera.fov = origFOV = w[0]
elif q == 'window.fullscreen=False':
w = list(map(int, enterbox('window.fullscreen=False').split(' ')))
window.fullscreen = w[0]
else:
pass
except:
window.color = color.rgb(0, 200, 225)
# indra = Sky()
# indra.color = window.color
subject = FirstPersonController()
subject.gravity = 0.0
subject.cursor.visible = True
subject.cursor.color = color.white
subject.height = 1.62 # Minecraft eye-level?
subject.camera_pivot.y = subject.height
subject.frog = False # For jumping...