目录

1 前言

2 系统环境

3 代码分析

4 源代码

5 结尾

一 前言

最近在网上冲浪的时候,发现有一些好玩的Python游戏,我就浅浅的学习了一下,现在将我学到的分享给大家,但是实话实说看看隔壁的HTML5,比Python好学因为HTML平常用的插件也就那几个,但Python用时候pip下载还有问题,当时刚刚接触Python的时候根本就不会修pip,废话不说了

二 系统环境

系统:window11

Python系统:Python3.9

编译器:pycharm

模块:pygame panda3d pip下载后用不了<点击此处>

pip install  pygame/panda3d  #python2点多版本
pip3 install  pygame/panda3d  #python3点多版本

三 代码分析

因为我们是简约型的所以我们设置鼠标操作

# 禁用鼠标self.disableMouse()#隐藏鼠标props = WindowProperties()props.setCursorHidden(True)base.win.requestProperties(props)

接下来该设置场景

# 创建四幕PosInterval1 = self.pandaActor.posInterval(13,Point3(0, -10, 0),startPos=Point3(0, 10, 0))PosInterval2 = self.pandaActor.posInterval(13,Point3(0, 10, 0),startPos=Point3(0, -10, 0))HprInterval1 = self.pandaActor.hprInterval(3,Point3(180, 0, 0),startHpr=Point3(0, 0, 0))HprInterval2 = self.pandaActor.hprInterval(3,Point3(0, 0, 0),startHpr=Point3(180, 0, 0))# 创建情节并运行四幕2self.pandaPace = Sequence(PosInterval1,HprInterval1,PosInterval2,HprInterval2,name="pandaPace")self.pandaPace.loop()#创建HUDglobal X1,X2,text,text2,L1,L2l,L2rtext=OnscreenText(fg=(255,255,0,255),pos=(-0.1,-0.1),scale=0.1,mayChange=True)text2=OnscreenText(pos=(-0.7,0),scale=0.1,mayChange=True)DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.04,0.04,-0.002,0.002),pos=(0,0,0))DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.002,0.002,-0.04,0.04),pos=(0,0,0))X1=DirectFrame(frameColor=(0,0,0,255),frameSize=(-0.04,0.04,-0.002,0.002),pos=(0,0,0))X2=DirectFrame(frameColor=(0,0,0,255),frameSize=(-0.002,0.002,-0.04,0.04),pos=(0,0,0))DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.5,-0.51,0.5,-0.5),pos=(0,0,0))L1=DirectFrame(frameColor=(255,255,0,255),frameSize=(0.2,0.11,0.005,-0.005),pos=(0,0,0))L2l=DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.1,-0.04,0.002,-0.002),pos=(0,0,0))L2r=DirectFrame(frameColor=(255,255,0,255),frameSize=(0.04,0.1,0.002,-0.002),pos=(0,0,0))DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.1,0.1,0.002,-0.002),pos=(0,0,0.5))DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.1,0.1,0.002,-0.002),pos=(0,0,-0.5))

因为我们这里设置了竹林场景,有竹子怎么能没熊猫呢,所以在加一个熊猫

 self.pandaActor = Actor("models/panda-model",{"walk": "models/panda-walk4"})self.pandaActor.setScale(0.005, 0.005, 0.005)self.pandaActor.reparentTo(self.render)

最后我们定义鼠标控制(代码有点长)

def spinCameraTask(self, task):(mouse,size)=(base.win.getPointer(0),self.get_size())(mx0,my0)=(size[0]-mouse.getX(),mouse.getY())(mx,my,hpr)=(mx0/160,my0/160,self.camera.getHpr())(rx,ry)=(mx-size[0]/320+hpr[0],my-size[1]/320+hpr[1])pos=self.camera.getPos()(lx,ly,lz)=(pos[0],pos[1],pos[2])(angle,angle2)=(hpr[0],hpr[1])distance=0.2if angle<0:while angle<0:angle=angle+360else:angle=angle%360if angle2<0:while angle2<0:angle2=angle2+360else:angle2=angle2%360distance2=cos(angle2*pi/180)*distanceif angle%90==0:if angle==0:(x,y)=(0,distance2)elif angle==90:(x,y)=(distance2,0)elif angle==180:(x,y)=(0,-distance2)else:(x,y)=(-distance2,0)else:if angle<=45:x=sin(angle*pi/180)*distance2y=cos(angle*pi/180)*distance2elif angle<90:angle=90-anglex=cos(angle*pi/180)*distance2y=sin(angle*pi/180)*distance2elif angle<=135:angle=angle-90x=cos(angle*pi/180)*distance2y=-sin(angle*pi/180)*distance2elif angle<180:angle=180-anglex=sin(angle*pi/180)*distance2y=-cos(angle*pi/180)*distance2elif angle<=225:angle=angle-180x=-sin(angle*pi/180)*distance2y=-cos(angle*pi/180)*distance2elif angle<270:angle=270-anglex=-cos(angle*pi/180)*distance2y=-sin(angle*pi/180)*distance2elif angle<315:angle=angle-270x=-cos(angle*pi/180)*distance2y=sin(angle*pi/180)*distance2else:angle=360-anglex=-sin(angle*pi/180)*distance2y=cos(angle*pi/180)*distance2if angle2%90==0:if angle2==0 or angle2==90:z=distanceelse:z=0else:if angle2<=45:z=sin(angle2*pi/180)*distanceelif angle2<90:angle2=90-angle2z=cos(angle2*pi/180)*distanceelif angle2<=135:angle2=angle2-90z=cos(angle2*pi/180)*distanceelif angle2<180:angle2=180-angle2z=sin(angle2*pi/180)*distanceelif angle2<=225:angle2=angle2-180z=-sin(angle2*pi/180)*distanceelif angle2<270:angle2=270-angle2z=-cos(angle2*pi/180)*distanceelif angle2<315:angle2=angle2-270z=-cos(angle2*pi/180)*distanceelse:angle2=360-angle2z=-sin(angle2*pi/180)*distanceif lz<-1:self.closeWindow(self.win)raise RuntimeError('You crash the grund!')self.camera.setPos(-x+lx,y+ly,z+lz)self.camera.setHpr(rx,ry,0)if ry>=360:while ry>=360:ry=ry-360elif ry<0:while ry<0:ry=ry+360if ry//180==0:ry=ryelif ry//180==1:ry=ry-360L2l.setPos(0,0,ry/180)L2r.setPos(0,0,ry/180)b=size[1]/2a=mouse.getX()/b-size[0]/size[1],0,1-mouse.getY()/bX1.setPos(a)X2.setPos(a)text['text']=str(int(ry))text2['text']=str(int(z+lz))if z+lz>100:L1.setPos(-0.7,0,0.5)text2['pos']=(-0.7,0.48)else:L1.setPos(-0.7,0,(z+lz)/100-0.5)text2['pos']=(-0.7,(z+lz)/100-0.52)if z+lz<11:text2['fg']=(255,0,0,255)elif z+lz<31:text2['fg']=(0,255,255,255)else:text2['fg']=(255,255,0,255)return Task.cont

代码到这就结束了

四 源代码

接下来就是期待的源码啦

from math import pi, sin, cos
from direct.showbase.ShowBase import ShowBase
from direct.showbase import DirectObject
from direct.task import Task
from direct.actor.Actor import Actor
from direct.interval.IntervalGlobal import Sequence
from panda3d.core import *
from direct.gui.DirectGui import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImageclass MyApp(ShowBase):      def __init__(self):ShowBase.__init__(self)# 禁用鼠标self.disableMouse()#隐藏鼠标props = WindowProperties()props.setCursorHidden(True)base.win.requestProperties(props)#设定摄像机初始位置self.camera.setPos(0,0,100)# 载入环境模型self.environ = self.loader.loadModel("models/environment")# 设置环境模型的父实例self.environ.reparentTo(self.render)# 对模型进行比例及位置调整self.environ.setScale(0.25, 0.25, 0.25)self.environ.setPos(-8, 42, 0)# 通知任务管理器调用SpinCameraTask控制相机self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")# 载入熊猫角色self.pandaActor = Actor("models/panda-model",{"walk": "models/panda-walk4"})self.pandaActor.setScale(0.005, 0.005, 0.005)self.pandaActor.reparentTo(self.render)# 动画循环self.pandaActor.loop("walk")# 创建四幕PosInterval1 = self.pandaActor.posInterval(13,Point3(0, -10, 0),startPos=Point3(0, 10, 0))PosInterval2 = self.pandaActor.posInterval(13,Point3(0, 10, 0),startPos=Point3(0, -10, 0))HprInterval1 = self.pandaActor.hprInterval(3,Point3(180, 0, 0),startHpr=Point3(0, 0, 0))HprInterval2 = self.pandaActor.hprInterval(3,Point3(0, 0, 0),startHpr=Point3(180, 0, 0))# 创建情节并运行四幕2self.pandaPace = Sequence(PosInterval1,HprInterval1,PosInterval2,HprInterval2,name="pandaPace")self.pandaPace.loop()#创建HUDglobal X1,X2,text,text2,L1,L2l,L2rtext=OnscreenText(fg=(255,255,0,255),pos=(-0.1,-0.1),scale=0.1,mayChange=True)text2=OnscreenText(pos=(-0.7,0),scale=0.1,mayChange=True)DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.04,0.04,-0.002,0.002),pos=(0,0,0))DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.002,0.002,-0.04,0.04),pos=(0,0,0))X1=DirectFrame(frameColor=(0,0,0,255),frameSize=(-0.04,0.04,-0.002,0.002),pos=(0,0,0))X2=DirectFrame(frameColor=(0,0,0,255),frameSize=(-0.002,0.002,-0.04,0.04),pos=(0,0,0))DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.5,-0.51,0.5,-0.5),pos=(0,0,0))L1=DirectFrame(frameColor=(255,255,0,255),frameSize=(0.2,0.11,0.005,-0.005),pos=(0,0,0))L2l=DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.1,-0.04,0.002,-0.002),pos=(0,0,0))L2r=DirectFrame(frameColor=(255,255,0,255),frameSize=(0.04,0.1,0.002,-0.002),pos=(0,0,0))DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.1,0.1,0.002,-0.002),pos=(0,0,0.5))DirectFrame(frameColor=(255,255,0,255),frameSize=(-0.1,0.1,0.002,-0.002),pos=(0,0,-0.5))# 定义旋转相机def spinCameraTask(self, task):(mouse,size)=(base.win.getPointer(0),self.get_size())(mx0,my0)=(size[0]-mouse.getX(),mouse.getY())(mx,my,hpr)=(mx0/160,my0/160,self.camera.getHpr())(rx,ry)=(mx-size[0]/320+hpr[0],my-size[1]/320+hpr[1])pos=self.camera.getPos()(lx,ly,lz)=(pos[0],pos[1],pos[2])(angle,angle2)=(hpr[0],hpr[1])distance=0.2if angle<0:while angle<0:angle=angle+360else:angle=angle%360if angle2<0:while angle2<0:angle2=angle2+360else:angle2=angle2%360distance2=cos(angle2*pi/180)*distanceif angle%90==0:if angle==0:(x,y)=(0,distance2)elif angle==90:(x,y)=(distance2,0)elif angle==180:(x,y)=(0,-distance2)else:(x,y)=(-distance2,0)else:if angle<=45:x=sin(angle*pi/180)*distance2y=cos(angle*pi/180)*distance2elif angle<90:angle=90-anglex=cos(angle*pi/180)*distance2y=sin(angle*pi/180)*distance2elif angle<=135:angle=angle-90x=cos(angle*pi/180)*distance2y=-sin(angle*pi/180)*distance2elif angle<180:angle=180-anglex=sin(angle*pi/180)*distance2y=-cos(angle*pi/180)*distance2elif angle<=225:angle=angle-180x=-sin(angle*pi/180)*distance2y=-cos(angle*pi/180)*distance2elif angle<270:angle=270-anglex=-cos(angle*pi/180)*distance2y=-sin(angle*pi/180)*distance2elif angle<315:angle=angle-270x=-cos(angle*pi/180)*distance2y=sin(angle*pi/180)*distance2else:angle=360-anglex=-sin(angle*pi/180)*distance2y=cos(angle*pi/180)*distance2if angle2%90==0:if angle2==0 or angle2==90:z=distanceelse:z=0else:if angle2<=45:z=sin(angle2*pi/180)*distanceelif angle2<90:angle2=90-angle2z=cos(angle2*pi/180)*distanceelif angle2<=135:angle2=angle2-90z=cos(angle2*pi/180)*distanceelif angle2<180:angle2=180-angle2z=sin(angle2*pi/180)*distanceelif angle2<=225:angle2=angle2-180z=-sin(angle2*pi/180)*distanceelif angle2<270:angle2=270-angle2z=-cos(angle2*pi/180)*distanceelif angle2<315:angle2=angle2-270z=-cos(angle2*pi/180)*distanceelse:angle2=360-angle2z=-sin(angle2*pi/180)*distanceif lz<-1:self.closeWindow(self.win)raise RuntimeError('You crash the grund!')self.camera.setPos(-x+lx,y+ly,z+lz)self.camera.setHpr(rx,ry,0)if ry>=360:while ry>=360:ry=ry-360elif ry<0:while ry<0:ry=ry+360if ry//180==0:ry=ryelif ry//180==1:ry=ry-360L2l.setPos(0,0,ry/180)L2r.setPos(0,0,ry/180)b=size[1]/2a=mouse.getX()/b-size[0]/size[1],0,1-mouse.getY()/bX1.setPos(a)X2.setPos(a)text['text']=str(int(ry))text2['text']=str(int(z+lz))if z+lz>100:L1.setPos(-0.7,0,0.5)text2['pos']=(-0.7,0.48)else:L1.setPos(-0.7,0,(z+lz)/100-0.5)text2['pos']=(-0.7,(z+lz)/100-0.52)if z+lz<11:text2['fg']=(255,0,0,255)elif z+lz<31:text2['fg']=(0,255,255,255)else:text2['fg']=(255,255,0,255)return Task.contMyApp().run()

五 结尾

愉快的文章结束了,你的关注是对我最大的支持

今天分享一个Python游戏:简约飞机模拟器相关推荐

  1. 可以帮我做一个python的3D飞机小游戏吗

    当然可以!我很乐意帮助你做一个 Python 的 3D 飞机小游戏. 如果你是 Python 初学者,我建议你先了解一些 Python 的基础知识,包括变量.数据类型.流程控制语句.函数等.这些知识都 ...

  2. 《树莓派Python编程指南》——2.2 一个Python游戏:猫和老鼠

    本节书摘来自华章计算机<树莓派Python编程指南>一书中的第2章,第2.2节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...

  3. 分享一个python cookbook的在线教程地址

    分享一个python cookbook的在线教程地址: http://python3-cookbook.readthedocs.org/zh_CN/latest/ 翻译者:熊能 转载于:https:/ ...

  4. 2个表 遍历 组合_分享一个python脚本--数字随机组合有多少

    概述 今天主要分享一个python实例,大家有兴趣也可以做一下~ 需求 有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 方法一:遍历全部可能,把有重复的剃掉. tot ...

  5. 分享一个python生成ico图片程序

    分享一个python生成ico图片程序 利用python PIL 进行ico 生成,课利用web框架扩展开发出网页版本. # -*- coding: utf-8 -*- from PIL import ...

  6. 分享一个 Python + Django 实现的电商小项目

    编辑:业余草 来源:https://www.xttblog.com/?p=4944 分享一个 Python + Django 实现的电商小项目. 如果自学 Python,那么爬虫和电商项目将是你跳不过 ...

  7. python脚本视频_分享一个Python下载视频脚本

    分享一个Python下载视频脚本(通过flvcd.com代理的) 代码如下: #!/usr/local/bin/python #test for command line parameter(s) # ...

  8. 【Python】我的第一个Python游戏:石头剪刀布

    最近有粉丝朋友跟云朵君聊到用Python做个石头剪刀布的小游戏.我一寻思,还挺好玩.其实游戏编程是学习如何编程的一个好方法,它会使用许多我们在现实世界中看到的工具,还可以玩一个游戏来测试我们的编程结果 ...

  9. 分享一个python采集中国福利彩票的小代码

    分享一个python采集中国福利彩票的小代码 分享一个python采集中国福利彩票的小代码 能采集双色球,七乐彩,3D彩票任意一段时间的开奖号码,根据需求取消请求头注释,就能采集数据.(初学者请勿评价 ...

最新文章

  1. Fertility of Soils:根系C/P计量比影响水稻残根周际酶活的时空动态分布特征
  2. Python3.6 和 Pycharm 详细安装教程
  3. 上传失败 已保存至草稿_特大福利 清睿口语100成都会议专家讲座视频已上传至口语100网站...
  4. PHP ob_get_level嵌套输出缓冲
  5. Tuxedo 介绍与安装(一)
  6. 一个...买裤子的全过程
  7. 计算机操作系统汤小丹版课后答案
  8. 程序员的数学【线性代数高级】
  9. 基于STM32通过RTC唤醒低功耗模式
  10. VBOT - PHP 个人微信号群管理机器人
  11. php远程开机ubuntu,ubuntu的远程开机、关机和远程桌面控制
  12. 【颜纠日记】利用PS在原创图片上制作十字水印
  13. 3D立体显示大屏幕拼接视频墙系统解决方案【转】
  14. C语言项目-后宫选妃系统-第三天-终结
  15. 安装vue环境,并新建Vue项目
  16. 跑步听歌用什么耳机好?适合跑步专用的耳机推荐
  17. carla创建地图(四)基于ue4创建地图
  18. 该不该从大学退学的讨论
  19. 十分钟掌握折半查找法,
  20. Arangodb——操作案例一

热门文章

  1. 2018.07.18【2018提高组】模拟C组
  2. 如何用Windows自带画图工具将图片设置成透明背景
  3. 从本质如何理解机器学习
  4. 解决论文目录页码对不齐问题
  5. 企业内网安全体系化发展方向
  6. 椭圆方程 matlab,五点差分法(matlab)解椭圆型偏微分方程
  7. iPad 上能播放局域网高清片源影音播放利器XBMC使用体会
  8. PL3366C-ASEMI移动电源管理IC
  9. dnf剑魂buff等级上限_DNF95全新版本,剑魂之玩法攻略
  10. 怎么批量删除 Word、PDF、PPT 以及 Excel 文档中的空白页?