如何通过Python把照片做成拼图游戏
这篇文章给大家分享的是有关如何通过Python把照片做成拼图游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
先上效果我用隔壁诗诗学姐的照片,给她做了一个拼图游戏
结果,我自己的拼不出来了
配置环境安装pygame模块
#pipinstallpygamePSC:\Users\lex>pipinstallpygameLookinginindexes:http://mirrors.aliyun.com/pypi/simpleRequirementalreadysatisfied:pygameinf:\develop\python36\lib\site-packages(2.0.1)PSC:\Users\lex>配置文件
cfg.py
配置需要读取的学姐的照片路径、引入游戏引用到的字体及颜色。
'''配置文件'''importos'''屏幕大小'''SCREENSIZE=(640,640)'''读取学姐照片'''PICTURE_ROOT_DIR=os.path.join(os.getcwd(),'resources/pictures')'''字体路径'''FONTPATH=os.path.join(os.getcwd(),'resources/font/FZSTK.TTF')'''定义一些颜色'''BACKGROUNDCOLOR=(255,255,255)RED=(255,0,0)BLUE=(0,0,255)BLACK=(0,0,0)'''FPS'''FPS=40'''随机打乱拼图次数'''NUMRANDOM=100引入资源
将诗诗学姐的照片,添加到resources/pictures路径下,
游戏启动时,根据我们在cfg.py中的配置,会自动将该路径的照片
加载成为我们拼图的原材料。
主函数代码pintu.py
代码结构搞的简单一点。一个配置文件cfg,一个资源路径resources,存放字体和图片。
主函数代码放在这里:
1、定义四个可移动函数,在存在空格的情况下,允许向空格的方向移动。
2、createboard:随机将图片拆分,并且打乱。
3、开始时,随机从图片文件夹获取一张图片:如果想给整个宿舍的学姐做游戏,
就把所有人的照片放进去,这样每次打开,会随机生成一个学姐的照片作为游戏背景。
'''Function:拼图小游戏作者:LexSaints'''importosimportsysimportcfgimportrandomimportpygame'''判断游戏是否结束'''defisGameOver(board,size):assertisinstance(size,int)num_cells=size*sizeforiinrange(num_cells-1):ifboard[i]!=i:returnFalsereturnTrue'''将空白Cell左边的Cell右移到空白Cell位置'''defmoveR(board,blank_cell_idx,num_cols):ifblank_cell_idx%num_cols==0:returnblank_cell_idxboard[blank_cell_idx-1],board[blank_cell_idx]=board[blank_cell_idx],board[blank_cell_idx-1]returnblank_cell_idx-1'''将空白Cell右边的Cell左移到空白Cell位置'''defmoveL(board,blank_cell_idx,num_cols):if(blank_cell_idx+1)%num_cols==0:returnblank_cell_idxboard[blank_cell_idx+1],board[blank_cell_idx]=board[blank_cell_idx],board[blank_cell_idx+1]returnblank_cell_idx+1'''将空白Cell上边的Cell下移到空白Cell位置'''defmoveD(board,blank_cell_idx,num_cols):ifblank_cell_idx<num_cols:returnblank_cell_idxboard[blank_cell_idx-num_cols],board[blank_cell_idx]=board[blank_cell_idx],board[blank_cell_idx-num_cols]returnblank_cell_idx-num_cols'''将空白Cell下边的Cell上移到空白Cell位置'''defmoveU(board,blank_cell_idx,num_rows,num_cols):ifblank_cell_idx>=(num_rows-1)*num_cols:returnblank_cell_idxboard[blank_cell_idx+num_cols],board[blank_cell_idx]=board[blank_cell_idx],board[blank_cell_idx+num_cols]returnblank_cell_idx+num_cols'''获得打乱的拼图'''defCreateBoard(num_rows,num_cols,num_cells):board=[]foriinrange(num_cells):board.append(i)#去掉右下角那块blank_cell_idx=num_cells-1board[blank_cell_idx]=-1foriinrange(cfg.NUMRANDOM):#0:left,1:right,2:up,3:downdirection=random.randint(0,3)ifdirection==0:blank_cell_idx=moveL(board,blank_cell_idx,num_cols)elifdirection==1:blank_cell_idx=moveR(board,blank_cell_idx,num_cols)elifdirection==2:blank_cell_idx=moveU(board,blank_cell_idx,num_rows,num_cols)elifdirection==3:blank_cell_idx=moveD(board,blank_cell_idx,num_cols)returnboard,blank_cell_idx'''随机选取一张图片'''defGetImagePath(rootdir):imagenames=os.listdir(rootdir)assertlen(imagenames)>0returnos.path.join(rootdir,random.choice(imagenames))'''显示游戏结束界面'''defShowEndInterface(screen,width,height):screen.fill(cfg.BACKGROUNDCOLOR)font=pygame.font.Font(cfg.FONTPATH,width//15)title=font.render('恭喜!你成功完成了拼图!',True,(233,150,122))rect=title.get_rect()rect.midtop=(width/2,height/2.5)screen.blit(title,rect)pygame.display.update()whileTrue:foreventinpygame.event.get():if(event.type==pygame.QUIT)or(event.type==pygame.KEYDOWNandevent.key==pygame.K_ESCAPE):pygame.quit()sys.exit()pygame.display.update()'''显示游戏开始界面'''defShowStartInterface(screen,width,height):screen.fill(cfg.BACKGROUNDCOLOR)tfont=pygame.font.Font(cfg.FONTPATH,width//4)cfont=pygame.font.Font(cfg.FONTPATH,width//20)title=tfont.render('拼图游戏',True,cfg.RED)content1=cfont.render('按H或M或L键开始游戏',True,cfg.BLUE)content2=cfont.render('H为5*5模式,M为4*4模式,L为3*3模式',True,cfg.BLUE)trect=title.get_rect()trect.midtop=(width/2,height/10)crect1=content1.get_rect()crect1.midtop=(width/2,height/2.2)crect2=content2.get_rect()crect2.midtop=(width/2,height/1.8)screen.blit(title,trect)screen.blit(content1,crect1)screen.blit(content2,crect2)whileTrue:foreventinpygame.event.get():if(event.type==pygame.QUIT)or(event.type==pygame.KEYDOWNandevent.key==pygame.K_ESCAPE):pygame.quit()sys.exit()elifevent.type==pygame.KEYDOWN:ifevent.key==ord('l'):return3elifevent.key==ord('m'):return4elifevent.key==ord('h'):return5pygame.display.update()'''主函数'''defmain():#初始化pygame.init()clock=pygame.time.Clock()#加载图片game_img_used=pygame.image.load(GetImagePath(cfg.PICTURE_ROOT_DIR))game_img_used=pygame.transform.scale(game_img_used,cfg.SCREENSIZE)game_img_used_rect=game_img_used.get_rect()#设置窗口screen=pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('拼图游戏——Linux黑客小课堂')#游戏开始界面size=ShowStartInterface(screen,game_img_used_rect.width,game_img_used_rect.height)assertisinstance(size,int)num_rows,num_cols=size,sizenum_cells=size*size#计算Cell大小cell_width=game_img_used_rect.width//num_colscell_height=game_img_used_rect.height//num_rows#避免初始化为原图whileTrue:game_board,blank_cell_idx=CreateBoard(num_rows,num_cols,num_cells)ifnotisGameOver(game_board,size):break#游戏主循环is_running=Truewhileis_running:#--事件捕获foreventinpygame.event.get():#----退出游戏if(event.type==pygame.QUIT)or(event.type==pygame.KEYDOWNandevent.key==pygame.K_ESCAPE):pygame.quit()sys.exit()#----键盘操作elifevent.type==pygame.KEYDOWN:ifevent.key==pygame.K_LEFTorevent.key==ord('a'):blank_cell_idx=moveL(game_board,blank_cell_idx,num_cols)elifevent.key==pygame.K_RIGHTorevent.key==ord('d'):blank_cell_idx=moveR(game_board,blank_cell_idx,num_cols)elifevent.key==pygame.K_UPorevent.key==ord('w'):blank_cell_idx=moveU(game_board,blank_cell_idx,num_rows,num_cols)elifevent.key==pygame.K_DOWNorevent.key==ord('s'):blank_cell_idx=moveD(game_board,blank_cell_idx,num_cols)#----鼠标操作elifevent.type==pygame.MOUSEBUTTONDOWNandevent.button==1:x,y=pygame.mouse.get_pos()x_pos=x//cell_widthy_pos=y//cell_heightidx=x_pos+y_pos*num_colsifidx==blank_cell_idx-1:blank_cell_idx=moveR(game_board,blank_cell_idx,num_cols)elifidx==blank_cell_idx+1:blank_cell_idx=moveL(game_board,blank_cell_idx,num_cols)elifidx==blank_cell_idx+num_cols:blank_cell_idx=moveU(game_board,blank_cell_idx,num_rows,num_cols)elifidx==blank_cell_idx-num_cols:blank_cell_idx=moveD(game_board,blank_cell_idx,num_cols)#--判断游戏是否结束ifisGameOver(game_board,size):game_board[blank_cell_idx]=num_cells-1is_running=False#--更新屏幕screen.fill(cfg.BACKGROUNDCOLOR)foriinrange(num_cells):ifgame_board[i]==-1:continuex_pos=i//num_colsy_pos=i%num_colsrect=pygame.Rect(y_pos*cell_width,x_pos*cell_height,cell_width,cell_height)img_area=pygame.Rect((game_board[i]%num_cols)*cell_width,(game_board[i]//num_cols)*cell_height,cell_width,cell_height)screen.blit(game_img_used,rect,img_area)foriinrange(num_cols+1):pygame.draw.line(screen,cfg.BLACK,(i*cell_width,0),(i*cell_width,game_img_used_rect.height))foriinrange(num_rows+1):pygame.draw.line(screen,cfg.BLACK,(0,i*cell_height),(game_img_used_rect.width,i*cell_height))pygame.display.update()clock.tick(cfg.FPS)#游戏结束界面ShowEndInterface(screen,game_img_used_rect.width,game_img_used_rect.height)'''run'''if__name__=='__main__':main()游戏运行方法
1、开发工具启动
如果你有python开发环境VScode、sublimeText、notepad+、pycharm等等这些环境,可以直接在工具中,运行游戏。
2、命令行运行游戏
如下图:
感谢各位的阅读!关于“如何通过Python把照片做成拼图游戏”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。