相信大家小时候,一定都玩过一个经典游戏——推箱子。今天,我们就一起来学习推箱子的姐妹版游戏——推星星
这款游戏可以说是进阶版,不仅在视觉效果上进行了增进,关卡设计也相对较难。
你,准备好了吗?
推星星游戏中,玩家在一个地上有许多星星、砖块、箱子的小房间里,他需将所有星星找出来并推到带有星标方块的方格中;当星星推到靠墙或者碰到另外一个星星的时候,玩家就不能再继续推动当前星星了,唯一的办法只能是重启关卡;当所有星星被推上星标方块后,这一关就完成了并进入下一关。
游戏中的每一关都由许多2D网格方块组成,所有方块元素都能放在彼此的旁边,所以我们可以通过增加一些障碍方块来创造出许多困难有趣的关卡。
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