• pgzrun 拼图游戏制作过程详解(6,7)


    6. 检查拼图完成

    • 初始化标记成功的变量Is_Win
    Is_Win=False
    • 当鼠标点击小拼图时,判断所有小拼图是否都在正确的位置,并更新Is_Win。
    1. def on_mouse_down(pos,button): # 当鼠标被点击时
    2. # 略
    3. is_win = True
    4. for i in range(6):
    5. for j in range(4):
    6. Square = Squares[i * 4 + j]
    7. if not (Square.left == Square_size * j and Square.top == Square_size * i) :
    8. is_win = False
    9. break
    10. if is_win:
    11. Is_Win=True
    • 在draw()绘制函数中加入成功判断,并在窗口打印出成功信息。
    1. def draw():
    2. # 略
    3. if Is_Win:
    4. screen.draw.text("游戏胜利!",(WIDTH/2-100,HEIGHT/2-50),\
    5. fontsize=50,fontname='s',color="blue")

    执行效果如下图所示:

    7. 添加游戏提示线

    • 当拼图未完成时,为每一个小拼图绘制黑色边框,用以区分每一个小拼图的边界。
    1. def draw():
    2. # 略
    3. for i in range(5):
    4. screen.draw.line((i*Square_size,0),(i*Square_size,HEIGHT),"black")
    5. for i in range(7):
    6. screen.draw.line((0,i*Square_size),(WIDTH,i*Square_size),"black")
    • 当拼图未完成时,为当下鼠标点击的小拼图绘制红色边框。
    1. def draw():
    2. # 略
    3. if clickID_1!=-1:
    4. screen.draw.rect(Rect((Gird[clickID_1].left,Gird[clickID_1].top),\
    5. (Square_size,Square_size)),"red")

    执行效果如下图所示:

    完整代码如下: 

    1. import pgzrun
    2. import random
    3. TITLE="pgzrun 拼图游戏"
    4. Square_size=125
    5. WIDTH=Square_size*4
    6. HEIGHT=Square_size*6
    7. click_time=0
    8. clickID_1=clickID_2=-1
    9. Is_Win=False
    10. Squares=[Actor("girl_01"),Actor("girl_02"),Actor("girl_03"),Actor("girl_04")
    11. ,Actor("girl_05"),Actor("girl_06"),Actor("girl_07"),Actor("girl_08")
    12. ,Actor("girl_09"),Actor("girl_10"),Actor("girl_11"),Actor("girl_12")
    13. ,Actor("girl_13"),Actor("girl_14"),Actor("girl_15"),Actor("girl_16")
    14. ,Actor("girl_17"),Actor("girl_18"),Actor("girl_19"),Actor("girl_20")
    15. ,Actor("girl_21"),Actor("girl_22"),Actor("girl_23"),Actor("girl_24")
    16. ]
    17. Gird=[]
    18. for i in range(6):
    19. for j in range(4):
    20. Square=Squares[i*4+j]
    21. Square.left=Square_size*j
    22. Square.top=Square_size*i
    23. Gird.append(Square)
    24. def swap_Square(i,j): # 两个拼图的位置互换
    25. temp_pos=Gird[i].pos
    26. Gird[i].pos=Gird[j].pos
    27. Gird[j].pos=temp_pos
    28. for k in range(10): # 随机抽取10组拼图 进行位置互换
    29. i=random.randint(0,23)
    30. j=random.randint(0,23)
    31. swap_Square(i, j)
    32. def on_mouse_down(pos,button): # 当鼠标被点击时
    33. global click_time ,clickID_1 , clickID_2,Is_Win
    34. for i in range(24):
    35. if Gird[i].collidepoint(pos): # 拼图对象被点击
    36. break
    37. if click_time%2==0 :
    38. clickID_1=i
    39. else:
    40. clickID_2=i
    41. swap_Square(clickID_1,clickID_2)
    42. click_time += 1
    43. # 成功判断
    44. is_win = True
    45. for i in range(6):
    46. for j in range(4):
    47. Square = Squares[i * 4 + j]
    48. if not (Square.left == Square_size * j and Square.top == Square_size * i) :
    49. is_win = False
    50. break
    51. if is_win:
    52. Is_Win=True
    53. def draw():
    54. screen.clear()
    55. for Square in Gird:
    56. Square.draw()
    57. if Is_Win:
    58. screen.draw.text("游戏胜利!",(WIDTH/2-100,HEIGHT/2-50),fontsize=50,fontname='s',color="blue")
    59. else :
    60. for i in range(5):
    61. screen.draw.line((i*Square_size,0),(i*Square_size,HEIGHT),"black")
    62. for i in range(7):
    63. screen.draw.line((0,i*Square_size),(WIDTH,i*Square_size),"black")
    64. if clickID_1!=-1:
    65. screen.draw.rect(Rect((Gird[clickID_1].left,Gird[clickID_1].top),\
    66. (Square_size,Square_size)),"red")
    67. def update():
    68. pass
    69. pgzrun.go()

    pgzrun拼图游戏素材包下载

  • 相关阅读:
    java毕业设计选题基于SSM项目源码实现的校园食堂点餐|订餐系统
    继承(个人学习笔记黑马学习)
    Windows下tomcat与idea控制台乱码问题
    【Element-ui】el-slider滑块自定义样式,实时显示选中两点的数值在上方,左右显示0到100
    局部线性分析(机器学习)
    关于hive分区,你知道多少呢?
    c++-基本数据类型
    七日算法先导(六)——堆排序,桶排序
    2022牛客蔚来杯第九场ABEI(G)
    C++11常见语法
  • 原文地址:https://blog.csdn.net/lybc2019/article/details/132830532