当前位置:首页 » 操作系统 » 游戏库源码

游戏库源码

发布时间: 2025-02-07 09:49:15

python简单代码游戏

Python实现消消乐小游戏

pre{overflow-x:auto}实现消消乐的构成主要包括三部分:游戏主体、计分器、计时器,下面来看一下具体实现。

先来看一下游戏所需Python库。

import?osimport?sysimport?timeimport?pygameimport?random

定义一些常量,比如:窗口宽高、网格行列数等,代码如下:

WIDTH?=?400HEIGHT?=?400NUMGRID?=?8GRIDSIZE?=?36XMARGIN?=?(WIDTH?-?GRIDSIZE?*?NUMGRID)?//?2YMARGIN?=?(HEIGHT?-?GRIDSIZE?*?NUMGRID)?//?2ROOTDIR?=?os.getcwd()FPS?=?30

接着创建一个主窗口,代码如下:

pygame.init()screen?=?pygame.display.set_mode((WIDTH,?HEIGHT))pygame.display.set_caption('消消乐')

看一下效果:

再接着在窗口中画一个8x8的网格,代码如下:

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?=?Trueif?flag:breakscreen.fill((255,?255,?220))text0?=?'最终得分:?%s'?%?scoretext1?=?'按?R?键重新开始'y?=?140for?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?+=?60screen.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?Falsegem1?=?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.leftgem1.target_y?=?gem2.rect.topgem1.fixed?=?Falsegem2.target_x?=?gem1.rect.leftgem2.target_y?=?gem1.rect.topgem2.fixed?=?Falseself.all_gems[gem2_pos[0]][gem2_pos[1]]?=?gem1self.all_gems[gem1_pos[0]][gem1_pos[1]]?=?gem2return?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]?=?Noneelif?start?=?0:gem.target_y?+=?GRIDSIZEgem.fixed?=?Falsegem.direction?=?'down'self.all_gems[each][start+1]?=?gemelse: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]?=?gemstart?-=?1elif?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]?=?Noneelif?start?=?0:gem?=?self.getGemByPos(*[res_match[1],?start])gem.target_y?+=?GRIDSIZE?*?3gem.fixed?=?Falsegem.direction?=?'down'self.all_gems[res_match[1]][start+3]?=?gemelse: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]?=?gemstart?-=?1

之后反复执行这个过程,直至耗尽游戏时间,游戏结束。

最后,我们动态看一下游戏效果。

总结

本文我们使用Python实现了一个简单的消消乐游戏,有兴趣的可以对游戏做进一步扩展,比如增加关卡等。

到此这篇关于Python实现消消乐小游戏的文章就介绍到这了,希望大家以后多多支持!

python可以玩哪些小游戏?

ant蚂蚁2.bagels百吉饼另外贪吃蛇,吃豆子都是可以的,直接代码就可以玩。

Python包括随您的安装一起分发的大量标准库。标准库有一个称为Turtle的模块,这是一种向普通人介绍python编程的流行方法。今天介绍的所有游戏都是使用Python及其Turtle模块实现的。

每个游戏都完全独立于其他游戏,不试一试您永远都不知道最喜欢哪种游戏。

安装完之后我们可以使用"python-mfreegameslist"来查看所有的游戏

贪吃蛇

贪吃蛇-经典街机游戏。使用箭头键导航并吃绿色食品。每次食用食物,蛇就会长出一段。避免自己进食或出界!

吃豆子

吃豆子–经典街机游戏。使用箭头键导航并吃掉所有白色食物。提防漫游迷宫的红色幽灵。

Flappy

Flappy-bird启发游戏。单击屏幕拍打翅膀。当您飞越屏幕时,请当心黑乌鸦。

加农炮

大炮-射击运动。单击屏幕发射您的炮弹。炮弹在其路径中弹出蓝色气球。弹出所有气球,然后才能越过屏幕。

求个Python小游戏

浅浅的笑着:“我会带着你的孩子,

顚节进入

Python程序开发之简单小程序实例(11)小游戏-跳动的小球一、项目功能用户控制挡板来阻挡跳动的小球。二、项目分析根据项目功能自定义两个类,一个用于控制小球在窗体中的运动,一个用于接收用户按下左右键时,挡板在窗体中的运动。在控制小球的类中,我们还需要考虑当小球下降时,碰到挡板时的位置判断。三、程序源代码源码部分截图:源码:#!/usr/bin/python3.6#-*-coding:GBK-*-#导入相应模块fromtkinterimport*importrandomimporttime#自定义小球的类BallclassBall:#初始化def__init__(self,canvas,paddle,color):#传递画布值self.canvas=canvas#传递挡板值self.paddle=paddle#画圆并且保存其IDself.id=canvas.create_oval(10,10,25,25,fill=color)self.canvas.move(self.id,245,100)#小球的水平位置起始列表start=[-3,-2,-1,1,2,3]#随机化位置列表random.shuffle(start)self.x=start[0]self.y=-2self.canvas_heigh=self.canvas.winfo_height()#获取窗口高度并保存self.canvas_width=self.canvas.winfo_width()#根据参数值绘制小球defdraw(self):self.canvas.move(self.id,self.x,self.y)pos=self.canvas.coords(self.id)#返回相应ID代表的图形的当前坐标(左上角和右上角坐标)#使得小球不会超出窗口pad=self.canvas.coords(self.paddle.id)#获取小球挡板的坐标ifpos[1]=self.canvas_heighor(pos[3]=pad[1]andpos[2]=pad[0]andpos[2]

Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆附带源码

Python版本:3.6.4

相关模块:

pygame模块;

以及一些Python自带的模块。

安装Python并添加到环境变量,pip安装需要的相关模块即可。

贪吃蛇的游戏规则应该不需要我多做介绍了吧T_T。写个贪吃蛇游戏其实还是很简单的。首先,我们进行一下游戏初始化:

然后定义一个贪吃蛇类:

其中head_coord用来记录蛇头所在位置,而tail_coords是一个二维数组,用来记录所有蛇身的位置。一开始,贪吃蛇长为3,并且位置是随机生成的。用户通过键来控制贪吃蛇的行动:

需要注意的是,贪吃蛇不能180大拐弯,只能90地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。具体而言,代码实现如下:

然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:

在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:

同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:

最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时,游戏结束:

并显示一下游戏结束界面:

玩家通过键控制游戏的主角吃豆人吃掉藏在迷宫内的所有豆子,并且不能被鬼魂抓到。

若能顺利吃完迷宫内的所有豆子并且不被鬼魂抓到,则游戏胜利,否则游戏失败。

逐步实现:

Step1:定义游戏精灵类

首先,让我们先来明确一下该游戏需要哪些游戏精灵类。

①墙类

②食物类(即豆豆)

③角色类

角色类包括吃豆人和鬼魂,鬼魂由电脑控制其运动轨迹,吃豆人由玩家控制其运动轨迹。

显然,其均需具备更新角色位置和改变角色运动方向的能力,其源代码如下:

Step2:设计游戏地图

利用Step1中定义的游戏精灵类,我们就可以开始设计游戏地图了。由于时间有限,我只写了一个关卡的游戏地图,有兴趣的小伙伴可以在此基础上进行扩展(在我的源代码基础上进行扩展是很方便滴~)。游戏地图的设计包括以下四方面内容:

①创建墙

②创建门(一开始关幽灵用的)

image.gif

③创建角色

④创建食物

因为食物不能和墙、门以及角色的位置重叠,所以为了方便设计游戏地图,要先创建完墙、门以及角色后再创建食物:

Step3:设计游戏主循环

接下来开始设计游戏主循环。首先是初始化:

然后定义主函数:

其中startLevelGame函数用于开始某一关游戏,其源代码如下:

showText函数用于在游戏结束或关卡切换时在游戏界面中显示提示性文字,其源代码如下:

Ⅱ 有了游戏源码该如何使用

把Assets下的资源拖进Unity下就行了,其他文件夹会自动关联,那些文件夹有些是保存了项目设置有些是一些Unity支持库,还有一些脚本的引用,不用管这些。
源代码系列皮肤是拳头公司制作的科幻系列皮肤之一。拳头公司制作的科幻系列皮肤还包括源计划系列、未来战士系列、战地机甲系列、霸天系列以及银河魔装机神系列。

热点内容
ceph缓存变慢 发布:2025-02-07 11:46:52 浏览:923
python做什么用的 发布:2025-02-07 11:46:46 浏览:563
o2o与数据库设计 发布:2025-02-07 11:35:27 浏览:928
ftp服务器推荐 发布:2025-02-07 11:35:16 浏览:700
吉利星瑞豪华加6000是有哪些配置 发布:2025-02-07 11:25:18 浏览:971
李字加工编程 发布:2025-02-07 11:23:50 浏览:881
linux安全运维 发布:2025-02-07 11:14:19 浏览:737
阿里云集群服务器 发布:2025-02-07 11:12:38 浏览:453
如何选择家庭最佳配置 发布:2025-02-07 11:06:50 浏览:89
javatomcat服务器搭建服务器 发布:2025-02-07 10:55:22 浏览:624