Python可以做什么游戏(用Python做的游戏)
Python实现消消乐小游戏
pre{overflow-x: auto} 实现 消消乐的构成主要包括三部分:游戏主体、计分器、计时器,下面来看一下具体实现。
先来看一下游戏所需 Python 库。
import?os import?sys import?time import?pygame import?random
定义一些常量,比如:窗口宽高、网格行列数等,代码如下:
WIDTH?=?400 HEIGHT?=?400 NUMGRID?=?8 GRIDSIZE?=?36 XMARGIN?=?(WIDTH?-?GRIDSIZE?*?NUMGRID)?//?2 YMARGIN?=?(HEIGHT?-?GRIDSIZE?*?NUMGRID)?//?2 ROOTDIR?=?os.getcwd() FPS?=?30
接着创建一个主窗口,代码如下:
pygame.init() screen?=?pygame.display.set_mode((WIDTH,?HEIGHT)) pygame.display.set_caption('消消乐')
看一下效果:
再接着在窗口中画一个 8 x 8 的网格,代码如下:
screen.fill((255,?255,?220)) #?游戏界面的网格绘制 def?drawGrids(self): for?x?in?range(NUMGRID): for?y?in?range(NUMGRID): rect?=?pygame.Rect((XMARGIN+x*GRIDSIZE,?YMARGIN+y*GRIDSIZE,?GRIDSIZE,?GRIDSIZE)) self.drawBlock(rect,?color=(255,?165,?0),?size=1 #?画矩形?block?框 def?drawBlock(self,?block,?color=(255,?0,?0),?size=2): pygame.draw.rect(self.screen,?color,?block,?size)
看一下效果:
再接着在网格中随机放入各种拼图块,代码如下:
while?True: self.all_gems?=?[] self.gems_group?=?pygame.sprite.Group() for?x?in?range(NUMGRID): self.all_gems.append([]) for?y?in?range(NUMGRID): gem?=?Puzzle(img_path=random.choice(self.gem_imgs),?size=(GRIDSIZE,?GRIDSIZE),?position=[XMARGIN+x*GRIDSIZE,?YMARGIN+y*GRIDSIZE-NUMGRID*GRIDSIZE],?downlen=NUMGRID*GRIDSIZE) self.all_gems[x].append(gem) self.gems_group.add(gem) if?self.isMatch()[0]?==?0: break
看一下效果:
再接着加入计分器和计时器,代码如下:
#?显示得分 def?drawScore(self): score_render?=?self.font.render('分数:'+str(self.score),?1,?(85,?65,?0)) rect?=?score_render.get_rect() rect.left,?rect.top?=?(55,?15) self.screen.blit(score_render,?rect) #?显示加分 def?drawAddScore(self,?add_score): score_render?=?self.font.render('+'+str(add_score),?1,?(255,?100,?100)) rect?=?score_render.get_rect() rect.left,?rect.top?=?(250,?250) self.screen.blit(score_render,?rect) #?显示剩余时间 def?showRemainingTime(self): remaining_time_render?=?self.font.render('倒计时:?%ss'?%?str(self.remaining_time),?1,?(85,?65,?0)) rect?=?remaining_time_render.get_rect() rect.left,?rect.top?=?(WIDTH-190,?15) self.screen.blit(remaining_time_render,?rect)
看一下效果:
当设置的游戏时间用尽时,我们可以生成一些提示信息,代码如下:
while?True: for?event?in?pygame.event.get(): if?event.type?==?pygame.QUIT: pygame.quit() sys.exit() if?event.type?==?pygame.KEYUP?and?event.key?==?pygame.K_r: flag?=?True if?flag: break screen.fill((255,?255,?220)) text0?=?'最终得分:?%s'?%?score text1?=?'按?R?键重新开始' y?=?140 for?idx,?text?in?enumerate([text0,?text1]): text_render?=?font.render(text,?1,?(85,?65,?0)) rect?=?text_render.get_rect() if?idx?==?0: rect.left,?rect.top?=?(100,?y) elif?idx?==?1: rect.left,?rect.top?=?(100,?y) y?+=?60 screen.blit(text_render,?rect) pygame.display.update()
看一下效果:
说完了游戏图形化界面相关的部分,我们再看一下游戏的主要处理逻辑。
我们通过鼠标来操纵拼图块,因此程序需要检查有无拼图块被选中,代码实现如下:
def?checkSelected(self,?position): for?x?in?range(NUMGRID): for?y?in?range(NUMGRID): if?self.getGemByPos(x,?y).rect.collidepoint(*position): return?[x,?y] return?None
我们需要将鼠标连续选择的拼图块进行位置交换,代码实现如下:
def?swapGem(self,?gem1_pos,?gem2_pos): margin?=?gem1_pos[0]?-?gem2_pos[0]?+?gem1_pos[1]?-?gem2_pos[1] if?abs(margin)?!=?1: return?False gem1?=?self.getGemByPos(*gem1_pos) gem2?=?self.getGemByPos(*gem2_pos) if?gem1_pos[0]?-?gem2_pos[0]?==?1: gem1.direction?=?'left' gem2.direction?=?'right' elif?gem1_pos[0]?-?gem2_pos[0]?==?-1: gem2.direction?=?'left' gem1.direction?=?'right' elif?gem1_pos[1]?-?gem2_pos[1]?==?1: gem1.direction?=?'up' gem2.direction?=?'down' elif?gem1_pos[1]?-?gem2_pos[1]?==?-1: gem2.direction?=?'up' gem1.direction?=?'down' gem1.target_x?=?gem2.rect.left gem1.target_y?=?gem2.rect.top gem1.fixed?=?False gem2.target_x?=?gem1.rect.left gem2.target_y?=?gem1.rect.top gem2.fixed?=?False self.all_gems[gem2_pos[0]][gem2_pos[1]]?=?gem1 self.all_gems[gem1_pos[0]][gem1_pos[1]]?=?gem2 return?True
每一次交换拼图块时,我们需要判断是否有连续一样的三个及以上拼图块,代码实现如下:
def?isMatch(self): for?x?in?range(NUMGRID): for?y?in?range(NUMGRID): if?x?+?2??-2: for?each?in?[res_match[1],?res_match[1]+1,?res_match[1]+2]: gem?=?self.getGemByPos(*[each,?start]) if?start?==?res_match[2]: self.gems_group.remove(gem) self.all_gems[each]?=?None elif?start?=?0: gem.target_y?+=?GRIDSIZE gem.fixed?=?False gem.direction?=?'down' self.all_gems[each][start+1]?=?gem else: gem?=?Puzzle(img_path=random.choice(self.gem_imgs),?size=(GRIDSIZE,?GRIDSIZE),?position=[XMARGIN+each*GRIDSIZE,?YMARGIN-GRIDSIZE],?downlen=GRIDSIZE) self.gems_group.add(gem) self.all_gems[each][start+1]?=?gem start?-=?1 elif?res_match[0]?==?2: start?=?res_match[2] while?start??-4: if?start?==?res_match[2]: for?each?in?range(0,?3): gem?=?self.getGemByPos(*[res_match[1],?start+each]) self.gems_group.remove(gem) self.all_gems[res_match[1]][start+each]?=?None elif?start?=?0: gem?=?self.getGemByPos(*[res_match[1],?start]) gem.target_y?+=?GRIDSIZE?*?3 gem.fixed?=?False gem.direction?=?'down' self.all_gems[res_match[1]][start+3]?=?gem else: gem?=?Puzzle(img_path=random.choice(self.gem_imgs),?size=(GRIDSIZE,?GRIDSIZE),?position=[XMARGIN+res_match[1]*GRIDSIZE,?YMARGIN+start*GRIDSIZE],?downlen=GRIDSIZE*3) self.gems_group.add(gem) self.all_gems[res_match[1]][start+3]?=?gem start?-=?1
之后反复执行这个过程,直至耗尽游戏时间,游戏结束。
最后,我们动态看一下游戏效果。
总结
本文我们使用 Python 实现了一个简单的消消乐游戏,有兴趣的可以对游戏做进一步扩展,比如增加关卡等。
到此这篇关于Python实现消消乐小游戏的文章就介绍到这了,希望大家以后多多支持!
python能做什么游戏
Python是一门高级且有趣的编程语言,除了网络爬虫、人工智能、数据分析之外,Python还可以进行游戏开发,为大家介绍五个支持Python的2D、3D游戏开发库。
1、Cocos2d:是一系列开源软件框架,用于构建跨平台2D游戏和应用程序,由cocos2d-x、cocos2d-js、cocos2d-xna和cocos2d多种框架组成,像大鱼赌场、城堡冲突等小游戏,就是用此框架开发出来的。
2、Panda3D:是由迪士尼开发的3D游戏引擎,一个用于Python和C++程序的3D渲染和游戏开发框架,并由卡内基梅陇娱乐技术中心负责维护,使用C++编写的,针对Python进行了完全的封装。
3、Pygame:它是一组Python模块,用来编写游戏,可支持Python3.7,游戏例子有:纸牌游戏、超级马里奥、击球等多种游戏。
4、Pyogre:ogre 3D渲染引擎的Python绑定,可以用来开发游戏和仿真程序等任何3D应用,它的API更加稳定,也非常快速灵活。
5、RenPy:一个视觉小说引擎,被世界各地的成千万的创造者所使用,它可以帮助你使用文字、图像和声音来讲述电脑和移动设备上的故事。RenPy是开放源码的,可免费的商业用途,易于学习的脚本语言任何人都能有效地编写大型视觉小说,它的Python脚本足以用来模拟游戏。
python能做什么
1、做日常任务,比如下载视频、MP3、自动化操作excel、自动发邮件。
2、做网站开发、web应用开发,很多著名的网站像知乎、YouTube就是Python写的。
许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。
3、做网络游戏的后台,很多在线游戏的后台都是Python开发的。
4、系统网络运维
Linux运维是必须而且一定要掌握Python语言,它可以满足Linux运维工程师的工作需求提升效率,总而提升自己的能力,运维工程师需要自己独立开发一个完整的自动化系统时,这个时候才是真正价值的体现,才能证明自身的能力,让老板重视。
5、3D游戏开发
Python也可以用来做游戏开发,因为它有很好的3D渲染库和游戏开发框架,目前来说就有很多使用Python开发的游戏,如迪斯尼卡通城、黑暗之刃。
6、科学与数字计算
我们都知道现在来临了大数据的时代,数据可以说明一切问题的原因,现在很多做数据分析的不是原来那么简单,Python语言成为了做数据分析师的第一首选,它同时可以给工作带来很大的效率。
7、人工智能
人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。Python语言对于人工智能来说是最好的语言。目前好多人都开始学习人工智能+Python学科。
8、网络爬虫
爬虫是属于运营的比较多的一个场景吧,比如谷歌的爬虫早期就是用跑Python写的. 其中有一个库叫 Requests ,这个库是一个模拟HTTP请求的一个库,非常的出名! 学过Python的人没有不知道这个库吧,爬取后的数据分析与计算是Python最为擅长的领域,非常容易整合。不过目前Python比较流行的网络爬虫框架是功能非常强大的scrapy。
9、数据分析
一般我们用爬虫爬到了大量的数据之后,我们需要处理数据用来分析,不然爬虫白爬了,我们最终的目的就是分析数据,在这方面 关于数据分析的库也是非常的丰富的,各种图形分析图等 都可以做出来。也是非常的方便,其中诸如Seaborn这样的可视化库,能够仅仅使用一两行就对数据进行绘图,而利用Pandas和numpy、scipy则可以简单地对大量数据进行筛选、回归等计算。
而后续复杂计算中,对接机器学习相关算法,或者提供Web访问接口,或是实现远程调用接口,都非常简单。
有什么著名的游戏是用Python编写的?
魔兽世界、坦克世界,星战前夜,文明帝国4,战地风云2是用Python编写的。
Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990年代初设计,作为一门叫做ABC语言的替代品。
Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
相关资料
Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。
用Python写一个简单的小游戏
相信大家都玩过俄罗斯方块吧,应该是小时候的回忆吧,但是想不想了解一下这个程序是怎么写出来的呢,自己写出来的应该玩起来更有感觉吧!
感觉还是蛮好玩吧!
接下来,我就分享一下这个游戏的源码过程啊!
先用python创建一个py文件
定义这次程序所需要的类
然后写出它所需要的模块
画背景图
画网格线
# 画已经落下的方块
# 画单个方块
# 画得分等信息
这样就可以写出来一个十分简单的俄罗斯方块啦,是不是觉得还不错呢!
python能写什么小游戏?
python可以做大多数网络游戏的,例如用一个pygame,做一些图片,将图片插入到pygame的python代码中,编写它的功能以及作用,多做一些,连在一起就是游戏了。
比如王者荣耀,首页就是动图的结合,图片点击效果可以通过代码实现,里面的对战可以通过代码控制图片效果,以达到打斗的场景。
只要学得精,有时间去做,去写,一般的那些高级游戏都是可以做出来的