由于最近我要考试忙不过来没修改回答,谢谢评论区大们的指正,我认识到的pygame库确实可以做游戏,但是pygame限制很多,特别是做大型游戏方面,3D还没有相关的优化方法等(3D游戏,pygame表示闻所未闻),而且平时我练习pygame的时候都是做2D游戏。对大型游戏特别是3D没有相关的经验,见谅啦

而且画繁花曲线的那个确实有问题,不断增加的数组会拖慢速度,但是开始前我们不确定究竟要画多少个点,因此我暂且采用append方法。

我改一下结论,pygame库不太适合做大型游戏,这下不背锅了吧~

谢谢大家的积极指正!

“Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚”

————————

不太可能,python有一个库叫pygame,是可以做游戏的,pygame采用轮询和帧更新的方式来是游戏变得动态起来。轮询就是不断询问用户输入。帧就是不断更新画面。换句话说,主要的机制就是画一幅幅画,随着时间的推移,它会变得动态起来。

有一个很大的问题是,pygame在绘制比较复杂的图形的时候,难免会导致“卡顿”的现象,也就是我们经常说的“看连环画”。pygame在处理小游戏的时候表现还很出色,但是在大型游戏方面,我觉得需要提升和优化pygame的性能。

有一个比较典型的案例就是画繁花曲线

源代码如下,其中r1是大圆的半径,r2小圆,r3是小圆圆孔,也就是画点的地方距离小圆圆孔的距离。这三个值理论上可以随便改,但是我觉得,由于屏幕大小是600*600,因此r1<=300,r2最好比r1小,因此r1>=r2,同理,r2>=r3

import pygame as pg

from math import sin,cos

from pygame.locals import *

o=0.00;

r1=300;r2=130;r3=r1-r2;r4=80

k1=r3/r1;k2=r2/r1;

ps=[]

pg.init()

zt3=zt1=pg.font.SysFont('stkaiti',20)

def prt(font,text,x,y,color=(255,255,255)):

img=font.render(text,True,color)

scr.blit(img,(x,y))

text="大圆:"+str(r1)+"小圆:"+str(r3)+"圆孔:"+str(r4)

white=255,255,255

red=255,0,0

green=0,255,0

blue=0,0,255

scr=pg.display.set_mode((600,600))

pg.display.set_caption("繁花曲线")

while True:

for eve in pg.event.get():

if eve.type == QUIT:

exit()

scr.fill(white)

po=(round(300+r3*cos(k1*o)),round(300+r3*sin(k1*o)))

pos=(round(300+r2*cos(k1*o)+r4*cos(k2*o)),round(300+r2*sin(k1*o)-r4*sin(k2*o)))

ps.append(pos)

prt(zt3,text,12,12,color=(0,0,0))

for i in ps:

pg.draw.circle(scr,blue,i,1,0)

pg.display.update()

o=o+0.03

你运行的时候就可以看出新画的点运行的越来越慢,这就是采用帧的方式,拖累了速度,每一次都必须画新的图像,并储存已经画了点。

更别说3D了,3D游戏需要不断的计算三角函数。由此来更新从用户视角上所看到的画面,经典做3D的是unity3D,4399小游戏经常遇到。但是pygame不太适合。计算三角函数会消耗很多的资源,因此正确的做法是在游戏开始之前计算好所有的三角函数然后存在内存里面。

以下我分享一个我编写的小游戏,以此为案例

游戏名:接球大战

介绍:游戏会随机出现QQ表情中的任意一个,然后移动鼠标,移动屏幕下面的挡板,挡板会接住QQ表情,如果接住了就加分,表情速度是随机的。

如果没有接触就会生命值-1

import sys

from random import choice,random

import pygame as pg

from pygame.locals import *

from time import sleep

gg=255,165,0

green=0,255,0

red=255,0,0

pg.init()

scr=pg.display.set_mode((600,600))

pg.display.set_caption('接球大战')

ft=pg.font.SysFont('stkaiti',24)

zt3=zt1=pg.font.SysFont('stkaiti',40)

kais=pg.image.load("/游戏图片/kais.jpg").convert()

beij=pg.image.load('/游戏图片/QQ.jpg').convert()

biaoq=[]

for i in range(1,41):

biaoq.append(pg.image.load('/游戏图片/表情/'+str(i)+'.png').convert_alpha())

x=231

y=30

vx=1

vy=1

jf=2

zf=0

lv=3

s=False

bq=biaoq[-1]

sudu=[1,2,3]

while True:

scr.blit(kais,(0,0))

for eve in pg.event.get():

if eve.type== QUIT:

exit()

mx,my=pg.mouse.get_pos()

but1,but2,but3=pg.mouse.get_pressed()

x=x+vx

y=y+vy

scr.blit(bq,(x-25,y-25))

if x<25 or x>575:

vx=-vx

if y<25 or y>575:

vy=-vy

if but1:

if abs(mx-284)<84 and abs(my-478)<36 :

break

pg.display.update()

def nextqiu():

x=int(random()*500+50)

y=30

vx=choice([-3,-2,-1,0,1,2,3])

vy=choice([1,2,3])

jf=vx+vy

def prt(font,text,x,y,color=(255,255,255)):

img=font.render(text,True,color)

scr.blit(img,(x,y))

x=231

y=30

vx=1

vy=1

while True:

scr.blit(beij,(0,0))

for eve in pg.event.get():

if eve.type== QUIT:

sys.exit()

mx,my=pg.mouse.get_pos()

pg.draw.rect(scr,green,(mx,570,100,30),0)

#画球

scr.blit(bq,(x-25,y-25))

x=x+vx

y=y+vy

if x>575 or x<25:

vx=-vx

if y>550 and abs(mx+50-x)<50:

zf=zf+jf

x=int(random()*500+50)

y=30

vx=choice([-3,-2,-1,0,1,2,3])

vy=choice([1,2,3])

jf=vx+vy

sleep(0.25)

bq=choice(biaoq)

elif y>550 and abs(mx+50-x)>50:

lv=lv-1

prt(zt3,'没接到',x,y-40,color=(255,0,0))

x=int(random()*500+50)

y=30

vx=choice([-3,-2,-1,0,1,2,3])

vy=choice([1,2,3])

bq=choice(biaoq)

jf=vx+vy

s=True

if lv<0:

break

sleep(0.005)

prt(ft,'生命值 :'+str(lv),452,20,color=(255,0,0))

prt(ft,'分数 :'+str(zf),452,50,color=green)

pg.display.update()

if s:

sleep(1)

s=False

hua=pg.image.load('/游戏图片/画.jpg').convert()

scr.blit(hua,(0,0))

zt1=pg.font.SysFont('stkaiti',100)

zt2=pg.font.SysFont('stkaiti',50)

prt(zt1,'游戏结束',70,150,color=red)

prt(zt2,'得分 :'+str(zf),80,310,color=red)

pg.display.update()

请注意,源代码是不能直接运行的,请下载游戏图片,然后把源代码中的游戏图片路径改成正确的(也就是图片下载后保存在电脑上的位置)即可

python做的大型游戏_Python有做大型游戏的潜力吗?相关推荐

  1. python做飞机大战游戏_python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工 ...

  2. 如何用python制作五子棋游戏_Python制作打地鼠小游戏

    原文链接 Python制作小游戏(二十一)​mp.weixin.qq.com 效果展示 打地鼠小游戏https://www.zhihu.com/video/1200492442610450432 简介 ...

  3. python编游戏_python编的著名游戏

    python编的著名游戏 2019-03-18 15:59:33 3323 0 没有找到相关结果 已邀请: 目前使用Python编写的游戏有文明4.星际迷航:舰桥指挥官.战地2等,小游戏有俄罗斯方 ...

  4. python写飞机大战游戏_python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工 ...

  5. python设计棋牌游戏_python开发棋牌类游戏

    pycharm专门针对用户打造的一种可以进行编辑的工具,它的功能设置比较强大,而且具有跨平台的使用特性,能方便用户通过跨平台的方式使用该软件,有效节省的使用时间,那么这款详情>> 阅读: ...

  6. python做大型网站_Python中的大型Web应用:一个好的架构

    如果你着手使用关系型数据库在Python中编写大型应用程序,这篇长文正好满足你的需求.这里我分享下在一个大型团队中使用SQLAlchemy(Python语言中提供最先进ORM工具的软件)编写超过6个月 ...

  7. python适合做嵌入式开发吗_python可以做嵌入式吗

    Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. 近些年来P ...

  8. python时间序列预测报错_python如何做时间序列

    python做时间序列的方法:首先导入需要的工具包,输入"data.plot()","plt().show()"命令绘制时序图:然后由acf,pacf判断模型参 ...

  9. python可以做科学计算吗_python能做什么科学计算

    python做科学计算的特点: 1. 科学库很全.(推荐学习:Python视频教程) 科学库:numpy,scipy.作图:matplotlib.并行:mpi4py.调试:pdb. 2. 效率高. 如 ...

最新文章

  1. zookeeper和duboo 没用
  2. 其他算法-PCA主成分分析
  3. python的print函数
  4. 学习前端工程师手册--学习记录
  5. php获取当前时间的毫秒数,并且利用它测试代码段执行时间
  6. 迭代器(Iterator)模式
  7. vue报错:dependencies were not found: * element-ui in ./src/main.js * element-ui/lib/theme-chalk/inde
  8. 怎么修改php.in的时间,PHP时间和日期函数怎么操作
  9. django开发 遇到的问题解决
  10. Python+Selenium练习篇之4-利用link text定位元素
  11. 一秒学会,小白也能上手,最简单的装逼代码
  12. Linux学习一概述和环境搭建(入门概述,环境搭建,走近Linux系统)
  13. 如何通过Spring Boot实施Alexa技能
  14. loadlibrary函数失败,错误码:126
  15. 举个栗子!Tableau 技巧(126):学几个常用的日期函数
  16. 长春欲造“书城” 自助图书馆让读者在家门口畅快阅读
  17. c语言自动售货机实验报告,c语言自动售货机实验报告
  18. C语言函数指针使用的一个例子(Win10,VS2022)
  19. 大学毕业必须考的计算机证书,大学4年,一定要考的4大证书,不考毕业后悔死...
  20. 苏联“学术神棍”的冒牌祖师,活着打脸孟德尔,死后一统苏联生物学界

热门文章

  1. 网站制作---eWebeditor不兼容IE8问题的解决方法
  2. 2014年0417的工作计划
  3. 排列组合算法之三: 递归法
  4. #pragma once 和 #ifndef ... #define ... #endif 的区别【转载】
  5. 随想录(redis的学习和使用)
  6. 随想录(学习使用virtualbox软件)
  7. html app效果图,app端效果图.html
  8. 计算机加工的过程和类型,3.1.2计算机信息加工的过程和类型
  9. windows日志 重要事件 id_操作系统日志简述
  10. 内购订单进行二次处理_游戏内购要涨价?谷歌效仿苹果:安卓内购抽成30%