python制作小游戏(炫酷的编程代码)
有哪些小游戏可以直接用python编写?
ant 蚂蚁2. bagels 百吉饼另外贪吃蛇,吃豆子都是可以的,直接代码就可以玩。
Python包括随您的安装一起分发的大量标准库。标准库有一个称为Turtle的模块,这是一种向普通人介绍python编程的流行方法。今天介绍的所有游戏都是使用Python及其Turtle模块实现的。
每个游戏都完全独立于其他游戏,不试一试 您永远都不知道最喜欢哪种游戏。
安装完之后我们可以使用"python -m freegames list"来查看所有的游戏
贪吃蛇
贪吃蛇 -经典街机游戏。使用箭头键导航并吃绿色食品。每次食用食物,蛇就会长出一段。避免自己进食或出界!
吃豆子
吃豆子 –经典街机游戏。使用箭头键导航并吃掉所有白色食物。提防漫游迷宫的红色幽灵。
Flappy
Flappy-bird启发游戏。单击屏幕拍打翅膀。当您飞越屏幕时,请当心黑乌鸦。
加农炮
大炮-射击运动。单击屏幕发射您的炮弹。炮弹在其路径中弹出蓝色气球。弹出所有气球,然后才能越过屏幕。
用Python写一个简单的小游戏
相信大家都玩过俄罗斯方块吧,应该是小时候的回忆吧,但是想不想了解一下这个程序是怎么写出来的呢,自己写出来的应该玩起来更有感觉吧!
感觉还是蛮好玩吧!
接下来,我就分享一下这个游戏的源码过程啊!
先用python创建一个py文件
定义这次程序所需要的类
然后写出它所需要的模块
画背景图
画网格线
# 画已经落下的方块
# 画单个方块
# 画得分等信息
这样就可以写出来一个十分简单的俄罗斯方块啦,是不是觉得还不错呢!
使用python制作一个抽奖小游戏——骰子游戏
**2. **创建Die类****
5.汇总
这个可以创建多种玩法,随机摇骰子只是其中的一种,还可以先让一个人输入一个幸运数字并储存起来,然后再执行程序,如果数字不等于幸运数字就不是幸运星,当数字等于时就是幸运星并结束程序——类似抽奖。。。。
总之玩法很多,看你怎么写,用最基础的知识来实现!
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实现消消乐小游戏的文章就介绍到这了,希望大家以后多多支持!