4个Python编程游戏网站,玩嗨了~
通过游戏学习编程,寓教于乐的编程不再枯燥。这里有四个编程游戏网站可以帮助您成功学习。
首先,CodinGame是一个通过对AI机器人进行编程来解决各种问题的趣味游戏平台,支持多种编程语言。
网址:codingame.com/其次,CodeCombat作为一个教学生学习编程的平台,是一个社区项目。
咖啡脚本等网站:codecombat.com/play回到CheckiO,这是一款浏览器游戏,玩家使用Python或JavaScript来解决问题。
除了完成任务之外,您还可以查看其他人的回复。
网站:checkio.org/最后,Codewars通过更接近现实生活工作且充满沉浸感的挑战和问题来提高编程技能。
它支持多种语言,例如JavaScript、Python、C#、Java等。
网址:未提供
python简单代码游戏?
Python实现了小小乐小游戏pre {overflow-x:auto}。
消消乐的组成主要由游戏主体、记分器和计时器三部分组成。
我们来看看具体的实现。
首先我们来看看游戏所需的Python库。
import?osimport?sysimport?timeimport?pygameimport?random
定义一些常量,如窗口宽度和高度、网格行数和行数等,代码如下:
宽度?=?400高度?=?400NUMGRID?=?8GRIDSIZE?=?36XMARGIN?=?(宽度?-?GRIDSIZE?*?NUMGRID)?//?2YMARGIN?=?(高度?-?GRIDSIZE?*?NUMGRID)?//?2ROOTDIR?=?os.getcwd()FPS?=?30
然后使用以下代码创建一个主窗口:
pygame.init()screen?=?pygame.display.set_mode((WIDTH,?HEIGHT))pygame.display.set_caption('小小乐')
看效果:
然后在窗口8x8中画一个grid,代码如下:
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?boxdef?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_img s),?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:休息
看看效果:
然后添加记分器和计时器。
代码如下:
#?显示分数def?drawScore(self):score_render?=?self.font.render('Score:'+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))矩形?=?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)
查看效果to:
当设定的游戏时间结束时,我们可以生成一些提示信息。
代码如下:
while?True:for?event?in?pygame.event.get():if?event.type?==?pygame.QUIT:pygame.quit()sys。
出口()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()
看看效果an:
说完了游戏的图形用户界面部分,我们再来看看游戏的主要处理逻辑。
我们使用鼠标来操作拼图块,因此程序需要检查拼图块是否被选中。
代码如下实现:
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?=?'向上'gem2.direction?=?'向下'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.目标_y?+=?GRIDSIZEgem.fixed?=?Falsegem.direction?=?'down'self.all_gems[each][start+1]?=?gemelse:gem?=?Puzzle(img_path=random.choice(self.gem_img s),?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_img s),?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可以玩哪些小游戏?
蚂蚁蚂蚁2。
百吉饼、蛇和豆子也有。
直接用代码玩就可以了。
Python包含一个广泛的标准库,随您的安装一起分发。
标准库有一个名为Turtle的模块,这是向普通人介绍Python编程的一种流行方式。
今天介绍的所有游戏都是使用Python及其Turtle模块实现的。
每个游戏都完全独立于其他游戏,在尝试之前你永远不会知道你最喜欢哪一个。
安装后我们可以使用“python-mfreegameslist”查看所有游戏
贪吃蛇
贪吃蛇–一款经典的街机游戏。
使用箭头键导航和吃绿色食品。
每次吃完食物,蛇就会长出一段。
避免自己吃饭或越界!
吃豆人
吃豆人-经典的街机游戏。
使用箭头键导航并吃掉所有白色食物。
小心迷宫里游荡的红色幽灵。
Flappy
FlappyBird灵感游戏。
点击屏幕来扇动你的翅膀。
留意屏幕上飞过的黑色乌鸦。
大炮
大炮-射击运动。
点击屏幕发射炮弹。
炮弹在其路径上弹出蓝色气球。
在穿过屏幕之前爆掉所有气球。
微微一笑:“我带你的孩子一起去”
钱杰进入
一个简单的Python程序开发游戏程序示例(十一)小游戏弹跳球1.项目功能用户控制盾牌阻挡弹跳球。
2、基于项目的项目分析。
项目函数自定义了两个类,一个用于控制窗体中小球的移动,另一个用于在类中接收用户按下左右按钮时窗体中边框的移动我们控制还需要考虑到球落下并撞击挡板时的位置判断。
3、程序源码截图:源码:#!/usr/bin/.python3.6#-*-coding:GBK-*-#从tkinterimport*importrandomimporttime导入对应模块#调整小球类BallclassBall:#初始化def__init__(self,canvas,paddle,color):#传递canvas值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)selfx=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代表的图形的当前坐标(左上角和右上角的坐标)#这样小球就会垫在window=self.canvas.coords(self.paddle.id)#获取不超过小球孔径的坐标ifpos[1]=self.canvas_heighor(pos[3]=pad[1]andpos[2]=pad[0]andpos[2]
Python版本:3.6。
4
相关模块:
Pygame模块
以及Python自带的一些模块
安装到环境变量中,安装即可使用pip的相关模块。
Snake的规则就不用我介绍了。
游戏其实很简单。
首先我们初始化游戏:
然后我们定义一条贪吃蛇:
head_coord用于记录蛇头的位置,tail_coords是一个二维数组,用于记录所有蛇体的位置。
贪婪蛇的长度初始为3,位置是随机生成的。
用户使用按钮控制蛇的动作:
需要注意的是,蛇不会旋转180度,而是只能旋转90度。
例如,向左移动的贪婪蛇不能立即切换到向右移动。
具体来说,代码实现如下:
然后我们需要随机生成一个feed,并保证feed的位置与贪吃蛇的位置不匹配:
之后更新贪吃蛇当蛇吃到食物时,蛇身长度加一,否则只是简单地朝指定方向移动,不改变蛇身长度:
同时,贪婪的蛇当它吃掉食物,创造新的食物:
当贪吃蛇最终接触到墙壁或者蛇头接触到蛇的身体时,游戏结束:
并显示该结束的界面游戏:
玩家控制游戏主角吃豆人,通过钥匙吃掉迷宫中隐藏的所有豆子,这些豆子不能被鬼魂抓住。
如果你能成功吃掉迷宫中的所有豆子而不被鬼魂抓住,则游戏获胜,否则游戏失败。
分步实现:
第一步:定义游戏精灵类
首先,我们来明确一下游戏需要哪些游戏精灵类。
①墙类别
②食物类别(如豆豆)
③角色类别
角色类别包括吃豆人和鬼魂、鬼魂骰子的轨迹由计算机控制,吃豆人的轨迹由玩家控制。
当然,他们都必须具备更新角色位置、改变角色移动方向的能力:
第二步:设计游戏地图。
使用第1步,定义好游戏精灵类后,我们就可以开始设计游戏地图了。
由于时间限制,我只写了一个关卡的一张游戏地图。
有兴趣的朋友可以在此基础上进行扩展(根据我的源码进行扩展很方便~)。
游戏卡牌的设计包括以下四个方面:
①创建一堵墙
②创建一扇门(一开始用来关鬼魂)
.gif
③创建角色
④创建食物
由于食物不能与墙壁、门和角色重叠,先方便设计扑克牌墙壁、门在创建食物之前先创建角色:
第三步:设计游戏的主循环
接下来,开始设计游戏的主循环。
首先是初始化:
然后定义主函数:
startLevelGame函数用于启动特定关卡的游戏,其源码如下:
>showText函数用于在游戏结束或改变关卡时在游戏界面中显示文本。
源码如下: