少儿编程教学:码趣君教你用Python编写推星星游戏(一)

少儿编程教学:码趣君教你用Python编写推星星游戏(一)

首页休闲益智推倒方块更新时间:2024-06-23

相信大家小时候,一定都玩过一个经典游戏——推箱子。今天,我们就一起来学习推箱子的姐妹版游戏——推星星

这款游戏可以说是进阶版,不仅在视觉效果上进行了增进,关卡设计也相对较难。

你,准备好了吗?


游戏介绍

推星星游戏中,玩家在一个地上有许多星星、砖块、箱子的小房间里,他需将所有星星找出来并推到带有星标方块的方格中;当星星推到靠墙或者碰到另外一个星星的时候,玩家就不能再继续推动当前星星了,唯一的办法只能是重启关卡;当所有星星被推上星标方块后,这一关就完成了并进入下一关。


TIPS

游戏中的每一关都由许多2D网格方块组成,所有方块元素都能放在彼此的旁边,所以我们可以通过增加一些障碍方块来创造出许多困难有趣的关卡。


The Initial Setup(初始设置)

1. #

2. # 游戏分享:推星星

3. #

4. #

5.

6. import random, sys, copy, os, pygame

7. from pygame.locals import *

8.

9. FPS = 30 # 帧数

10. WINWIDTH = 800 # 游戏窗口宽度(像素)

11. WINHEIGHT = 600 # 游戏窗口高度(像素)

12. HALF_WINWIDTH = int(WINWIDTH / 2)

13. HALF_WINHEIGHT = int(WINHEIGHT / 2)

14.

15. # 每个方块大小(像素).

16. TILEWIDTH = 50

17. TILEHEIGHT = 85

18. TILEFLOORHEIGHT = 45

19.

20. CAM_MOVE_SPEED = 5 # 镜头移动时每一帧的像素

21.

22.

23. # 地图外有额外装饰的方块比例

24. OUTSIDE_DECORATION_PCT = 20

25.

26. BRIGHTBLUE = ( 0, 170, 255)

27. WHITE = (255, 255, 255)

28. BGCOLOR = BRIGHTBLUE

29. TEXTCOLOR = WHITE

30.

31. UP = 'up'

32. DOWN = 'down'

33. LEFT = 'left'

34. RIGHT = 'right'

这些常量将用在程序的各个部分中。

TILEWIDTH和TILEHEIGHT变量将方块设置为50像素宽和85像素高。然而这些方块在屏幕上显示的时候会重叠起来(稍后解释)

TILEFLOORHEIGHT意味着充当地板的部分方块大小为45像素。请见下面这张对这些设置的图解:

在关卡房间外长草的方块将可能带有额外的装饰(E.g.树或石头)OUTSIDE_DECORATION_PCT常量表示这些方块将有多大比例获得这些随机装饰。

37. def main():

38. global FPSCLOCK, DISPLAYSURF, IMAGESDICT, TILEMAPPING, OUTSIDEDECOMAPPING, BASICFONT, PLAYERIMAGES, currentImage

39.

40. # pygame初始化并创建全局变量

41. pygame.init()

42. FPSCLOCK = pygame.time.Clock()

43.

44. # 因为储存在DISPLAYSURF中的表层对象

45. # 是pygame.display.set_mode()函数的返回值

46. # 所以当函数pygame.display.update()被调出时

47. # 这个表层对象就正如实际屏幕一样

48. DISPLAYSURF = pygame.display.set_mode((WINWIDTH, WINHEIGHT))

49.

50. pygame.display.set_caption('Star Pusher')

51. BASICFONT = pygame.font.Font('freesansbold.ttf', 18)

这是通常Pygame在程序最开始设置时需要做的

53. # 一个全局字典里的值将包含由pygame.image.load()函数返回的

54. # 所有Pygame表层对象

55. IMAGESDICT = {'uncovered goal': pygame.image.load('RedSelector.png'),

56. 'covered goal': pygame.image.load('Selector.png'),

57. 'star': pygame.image.load('Star.png'),

58. 'corner': pygame.image.load('Wall Block Tall.png'),

59. 'wall': pygame.image.load('Wood Block Tall.png'),

60. 'inside floor': pygame.image.load('Plain Block.png'),

61. 'outside floor': pygame.image.load('Grass Block.png'),

62. 'title': pygame.image.load('star_title.png'),

63. 'solved': pygame.image.load('star_solved.png'),

64. 'princess': pygame.image.load('princess.png'),

65. 'boy': pygame.image.load('boy.png'),

66. 'catgirl': pygame.image.load('catgirl.png'),

67. 'horngirl': pygame.image.load('horngirl.png'),

68. 'pinkgirl': pygame.image.load('pinkgirl.png'),

69. 'rock': pygame.image.load('Rock.png'),

70. 'short tree': pygame.image.load('Tree_Short.png'),

71. 'tall tree': pygame.image.load('Tree_Tall.png'),

72. 'ugly tree': pygame.image.load('Tree_Ugly.png')}

IMAGESDICT是储存所有已读图片的字典。

而这将使其他函数使用这些图片时方便许多,因为只有IMGAESDICT需要变为全局变量。

如果我们将这些图片分别储存在不同的变量里,那么这18个变量(游戏中使用了18张图片)都需要改为全局变量。而字典就能将所有带有图片的表层对象储存起来,使用起来将方便很多。

(我是游戏里的小草堆,可爱嘛!)

(未完待续)

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved