#消消乐
import viz
import math
import vizact
import vizmat
import random
import vizcam
import viztask
import vizshape
import vizproximity
import vizinfo
import vizdlgviz.setMultiSample(4)
viz.fov(90)
viz.go()grid = vizshape.addGrid()#网格
grid.color(viz.RED)
grid.setAxisAngle(0,0,0,90)
grid.setPosition(0,0,0)
world_axes = vizshape.addAxes()#坐标轴
world_axes.setPosition(0,0,0)
world_axes.alpha(0.4)
#背景
ground=viz.addChild('tut_ground.wrl')
ground.collidePlane()
ground.setPosition(0,0,0,)viz.MainView.setPosition([2, 4, 2])
viz.MainView.setAxisAngle(1,0,0,90)d=0#y值与水平面的距离
line_number=7#行数
row_number=9#列数#开局提示信息
start_message="""Are You Ready?"""
start_dialog = vizdlg.MessageDialog(message=start_message, title='Wellcome!!!', accept='Yes', cancel='No')
start_dialog.setScreenAlignment(viz.ALIGN_CENTER)
def show_start_dialog():while True:yield start_dialog.show()if start_dialog.accepted:passelse:viztask.schedule(show_start_dialog())yield viztask.waitTime(10000)#关闭提示窗口的时间#有待改进
viztask.schedule(show_start_dialog())#通关提示信息
pass_message="""You Win!!!"""
pass_dialog = vizdlg.MessageDialog(message=pass_message, title='Continue!!!', accept='Yes', cancel='No')
pass_dialog.setScreenAlignment(viz.ALIGN_CENTER)
def show_pass_dialog():while True:yield pass_dialog.show()if pass_dialog.accepted:scorePanel.score=0scorePanel.setText('Score: {}'.format(scorePanel.score))else:viztask.schedule(show_pass_dialog())#在这调用另一个程序?!yield viztask.waitTime(10000)#关闭提示窗口的时间#通关判断
def prompt_pass(score):if score>500:viztask.schedule(show_pass_dialog())import vizinfo
#打印得分
scorePanel = vizinfo.InfoPanel('Score: 0', icon=False)
scorePanel.score=0#初始得分
def score(n):if n==3:scorePanel.score += nelif n==4:scorePanel.score += n+1elif n==5:scorePanel.score += n+2elif n==6:scorePanel.score += n+3else:scorePanel.score += 2*n  scorePanel.setText('Score: {}'.format(scorePanel.score))prompt_pass(scorePanel.score)     balls=[]
#初始界面
for i in range(9):for j in range(7):billball = viz.add('white_ball.wrl')billball.setPosition(i-2,d,j-1)billball.color(random.choice([viz.RED,viz.WHITE,viz.YELLOW,viz.GREEN]))balls.append([billball,i,j,billball.getColor()])#列表存储:[球对象,横坐标,纵坐标,颜色值]
'''      if i ==0 or i==8 or j==0 or j==6:#界外黑球,无法与视界内的球相消#似乎可以不用billball.color(viz.BLACK)else :#视界内球,颜色相同达三个或以上,则相消
'''#获取对象坐标值
def myGetPosition(object):balls.sort(key = lambda x:x[0]!=object)pos=balls[0][1:3]#[ball,i,j,color]return pos#获取对象四元组信息【ball,x,y,color】
def myGetBallsMassege(object):balls.sort(key = lambda x:x[0]!=object)ball_massege=balls[0]return ball_massege#在视界内的球中,先找到与被选球距离为1且相同颜色的球,在递归调用调用自身,找到其他相同颜色的球
same_color_balls=[]
def find_all_same_color_balls(object,color):global  same_color_balls#存储相邻同色球for ball in balls:#ball是四元组,object是ball的第一个元素x1=ball[1];y1=ball[2];x2=myGetPosition(object)[0];y2=myGetPosition(object)[1]if ball not in same_color_balls and ball[3]==color and (x1-x2)**2+(y1-y2)**2==1 :same_color_balls.append(ball)find_all_same_color_balls(ball[0],color)#移除小球
def remove_balls(balls_remove_list,type):#参数是四元组列表score(len(balls_remove_list))balls_remove_pos_list=[]for ball in balls_remove_list:balls_remove_pos_list.append(ball[1:3])ball[0].remove()balls.pop(balls.index(ball))if type==1:create_new_balls(balls_remove_pos_list)else:pass#生成新的小球
def create_new_balls(pos_list):#pos是坐标列表global balls#viztask.waitTime(3)#?for x in pos_list:billball = viz.add('white_ball.wrl')billball.setPosition(x[0]-2,d,x[1]-1)billball.color(random.choice([viz.RED,viz.WHITE,viz.YELLOW,viz.GREEN]))balls_four_massege=[billball,x[0],x[1],billball.getColor()]balls.append(balls_four_massege)#获取列表第二个元素
def tackSecond(elem):return elem[1]#下移更新法---添加球
def create_new_balls_by_movedown(pos_list,n):#n是该列消去的球数,用于计算下移球的初始位置global balls#viztask.waitTime(3)#?for pos in pos_list:billball = viz.add('white_ball.wrl')billball.setPosition(pos[0]-2,d,pos[1]-1+n)flyToPoint = vizact.moveTo([pos[0]-2,d,pos[1]-1],speed=2)billball.addAction(flyToPoint)billball.color(random.choice([viz.RED,viz.WHITE,viz.YELLOW,viz.GREEN]))balls_four_massege=[billball,pos[0],pos[1],billball.getColor()]balls.append(balls_four_massege)#下移更新法---移动球
def move_down(balls_remove_list):#print "####",balls_remove_listremove_balls(balls_remove_list,2)index_x=[]#被移除球的横坐标,每列取一个list_x_row=[]#每个元素的属于x列的剩余元素的坐标集合列表,如[[1,2],[1,5],[1,3]]是一个元素for move_ball in balls_remove_list:index_xy=[]#被移动球的坐标,每列所有x2=move_ball[1];y2=move_ball[2]#被移除球的坐标for ball in balls:x1=ball[1];y1=ball[2]if x1==x2 and [x1,y1] not in index_xy:index_xy.append([x1,y1])if x1==x2 and x1 not in index_x:index_x.append(x2)              index_xy.sort(key=tackSecond)#按y值由小到大排序,如[[1,2],[1,5],[1,3]]if index_xy not in list_x_row and index_xy!=[]:list_x_row.append(index_xy)#每一个元素的下标与index_x的下标对应,(如[[[1,2],[1,5],[1,3]],[[2,2],[2,5],[2,3]]]与[1,2]对应)#print list_x_rowfor x in index_x:i=index_x.index(x)#横坐标为x的值在inde_x中的下标row=list_x_row[i]#属于横坐标x的列,已排序print "###",x,"i",i,rown=1#x列的第n个球for row_elem in row:x2=row_elem[0];y2=row_elem[1];for ball in balls:x1=ball[1];y1=ball[2]if x1==x2 and y1==y2:flyToPoint = vizact.moveTo([x-2,d,n-2],speed=2)ball[0].addAction(flyToPoint)#将球下移balls[balls.index(ball)][2]=n-2#更新四元组列表被移动的球的纵坐标n+=1list_y_number=0for move_ball in balls_remove_list:#求出属于x列的被移除球数if move_ball[1]==x:list_y_number+=1print list_y_numberlist_pos=[]#存储移空位置for j in range(list_y_number):list_pos.append([x,line_number-j-1])create_new_balls_by_movedown(list_pos,list_y_number)#固定视角
viz.mouse(viz.OFF)
#拾取选中
def pickBall():global same_color_ballsobject = viz.pick()if object.valid():print "###",object,object.getColor()find_all_same_color_balls(object,object.getColor())#print "same_color_balls",len(same_color_balls),same_color_ballsif len(same_color_balls)>2:#remove_balls(same_color_balls,1)move_down(same_color_balls)same_color_balls=[]#在下一次查询相同球之前,将存储同色球的列表清空vizact.onmousedown(viz.MOUSEBUTTON_LEFT, pickBall)'''
#判断被选中目标的上左下右
def near_balls(object):a=myGetBallsMassege(object)balls.sort(key = lambda x:x[1:3]!=[a[1]+1,a[2]])target_right = balls[0]balls.sort(key = lambda x:x[1:3]!=[a[1]-1,a[2]])target_left = balls[0]balls.sort(key = lambda x:x[1:3]!=[a[1],a[2]+1])target_up = balls[0]balls.sort(key = lambda x:x[1:3]!=[a[1],a[2]-1])target_down = balls[0]return [target_up,target_down,target_left,target_right]#多值return组装在一个元组里near_list=near_balls(object)#near_balls返回的每个元素都是列表same_color_count=0
near_same_color_list=[]
def find_same_color_balls(near_list,color,n):global near_same_color_list,same_color_countup=near_list[0];down=near_list[1];left=near_list[2];right=near_list[3]#上下左右的球if up[3]==color and n!=2 and up[2]!=6 and up not in near_same_color_list:#n==2是上一次搜索的球,不应该重复搜索same_color_count+=1near_same_color_list.append(up)i=up[1]j=up[2]if i!=0 and i!=8 and j!=0 and j!=6:find_same_color_balls(near_balls(up),color,1)if down[3]==color and n!=1 and down[2]!=0 and down not in near_same_color_list:#n==2是上一次搜索的球,不应该重复搜索same_color_count+=1near_same_color_list.append(down)i=down[1]j=down[2]if i!=0 and i!=8 and j!=0 and j!=6:find_same_color_balls(near_balls(down),color,1)if left[3]==color and n!=2 and left[2]!=6 and left not in near_same_color_list:#n==2是上一次搜索的球,不应该重复搜索same_color_count+=1near_same_color_list.append(left)i=left[1]j=left[2]if i!=0 and i!=8 and j!=0 and j!=6:find_same_color_balls(near_balls(left),color,1)if right[3]==color and n!=2 and right[2]!=6 and right not in near_same_color_list:#n==2是上一次搜索的球,不应该重复搜索same_color_count+=1near_same_color_list.append(right)i=right[1]j=right[2]if i!=0 and i!=8 and j!=0 and j!=6:find_same_color_balls(near_balls(right),color,1)print "#######",same_color_countsame_color_count=0near_same_color_list=[]
'''

vizard--消消乐2.0相关推荐

  1. cocos creator3.3.0休闲游戏(云浮消消乐)源码H5+安卓+IOS三端源码

    cocos creator3.3.0休闲游戏(云浮消消乐)源码H5+安卓+IOS三端源码,开发脚本为typeScript方便扩展和阅读,支持cocos creator3.X版本,完整的源码可直接运营. ...

  2. viz---消消乐4.0

    #消消乐 import viz import math import vizact import vizmat import random import vizcam import viztask i ...

  3. 猜猜乐游戏php源码,C/C++百行代码实现热门游戏消消乐功能的示例代码

    游戏设计 首先我们需要使用第三方框架,这里我使用的是sfml,不会使用sfml在我的上几篇文章当中-扫雷(上)有详细的开发环境搭建介绍 首先准备图片资源 一张背景图片,一张宝石图片 窗口初始化加载图片 ...

  4. python编程游戏手机版_利用Python开发手机同款游戏:开心消消乐

    手机上面的开心消消乐,我想大部分人都是玩过的吧,今天小编就教大家如何用python开发这款游戏 不过只有十个关卡,不像手机里面那么多的关卡!不过游戏的画面和bgm都是同款的哦~ 效果图 基本配置 wi ...

  5. 消消乐实现下坠_JavaScript有多强大,实现消消乐小游戏

    简易JS消消乐-jq22.com html,body { margin:0px; padding:0px; } .bgs0 { background:linear-gradient(to left,# ...

  6. java开心消消乐代码_Vue实现开心消消乐游戏算法

    摘要:这篇Vue栏目下的"Vue实现开心消消乐游戏算法",介绍的技术点是"开心消消乐.Vue.开心.游戏.算法.实现",希望对大家开发技术学习和问题解决有帮助. ...

  7. 消消乐实现下坠_手把手教你如何实现iOS消消乐小游戏Demo

    引言 做消消乐Demo属于一个意外,本想借助学习iOS游戏开发把CoreAnimation学好,并完成第一个游戏Demo:俄罗斯方块.却在这过程中发现了一些实现消消乐的小技巧,于是兴起完成了这个小De ...

  8. net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地虎

    序言 天王盖地虎, 老婆马上生孩子了,在家待产,老婆喜欢玩消消乐类似的休闲游戏,闲置状态,无聊的分析一下消消乐游戏的一些技术问题: 由于我主要是服务器研发,客户端属于半吊子,所以就分析一下消消乐排行榜 ...

  9. 牛客练习赛30: D. 消消乐(二分匹配+输出最小点覆盖)

    链接:https://ac.nowcoder.com/acm/contest/216/D 来源:牛客网 题目描述 r神在和小b比赛玩一个名为"消消乐"的游戏,在一个n*m的棋盘上, ...

最新文章

  1. Python常用函数与技巧总结(三)
  2. 【深度学习】LSTM神经网络解决COVID-19预测问题(二)
  3. C#调用WebService
  4. RDIFramework.NET V3.3 Web版角色授权管理新增角色对操作权限项、模块起止生效日期的设置...
  5. (教学思路 c#之类一)声明类和对象、定义类成员及其引用
  6. java培训学费_北京Java培训班学费很贵吗,包含了哪些收费项目
  7. List实现类性能和特点分析
  8. Oracle 11.2.0.4.0 Dataguard部署和日常维护(7) - Dataguard Flashback篇
  9. 无监督学习才不是“不要你管”
  10. 2018-10-05学习笔记
  11. PHP正则表达式入门教程
  12. 【统计学习】细节笔记 [ 3 ] :贝叶斯角和两类错误角度理解混淆矩阵(为什么不能每个人都做核酸检测)
  13. 计算机基础知识——计算机概述
  14. 汉王手写输入法android,汉王手写输入法
  15. qcom usb驱动下载_艾肯Mobile Q驱动下载
  16. 抖音小店开通及保证金详情;抖音小店商品上架详细流程。丨国仁网络资讯
  17. c语言数列求和程序137,C语言循环结构 -C语言数列求和(使用while循环)
  18. AT89C51单片机共阳极数码管动态显示(汇编语言)
  19. uniapp 微信分享(安卓)
  20. 2020年我的第一篇博客日报

热门文章

  1. 目标检测 YOLOV5:loss介绍
  2. 魔兽奥尔加隆服务器怎么找不到,魔兽世界观察者奥尔加隆攻略 奥尔加隆怎么打...
  3. php三元运算符 echo_php三元运算符知识汇总
  4. HTML-table标签属性
  5. iPhone摄影中的深度捕捉(WWDC2017-Session 507)
  6. 索尼android 6.0 root,索尼Xperia Z3C 6.0 root教程_Sony Z3C获取6.0的root权限
  7. 2019总结,乘风破浪
  8. 精心打造《微波与射频行业大全》 - 微波射频工程师必备工具书
  9. 微信小程序转发动态消息的问题
  10. raptor阶乘相加流程图_从键盘输入正整数n的值,计算n的阶乘,例如:输入5,输出120。请据此画出程序流程图。 (上传Raptor软件流程图和运行结果的截图)_学小易找答案...