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

u=3239550145,2291907772&fm=173&s=9085915A46ACE54B541E6202030070BB&w=640&h=498&img.JPEG

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

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

你,准备好了吗?

游戏介绍

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

TIPS

u=3144815374,1992248486&fm=173&s=59BA3ED5EA62440B4A0237680300D075&w=249&h=195&img.JPEG

游戏中的每一关都由许多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像素。请见下面这张对这些设置的图解:

u=262678283,2926137667&fm=173&s=5AAA346381F0598A12C03DC30100A0B1&w=364&h=147&img.JPEG

在关卡房间外长草的方块将可能带有额外的装饰(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张图片)都需要改为全局变量。而字典就能将所有带有图片的表层对象储存起来,使用起来将方便很多。

u=3528835313,307685057&fm=173&s=43D618D24826F7345F34526E03004076&w=50&h=85&img.JPEG(我是游戏里的小草堆,可爱嘛!)

u=3045647729,3401818418&fm=173&s=4BF610D34127F3340414526603001076&w=50&h=85&img.JPEG

u=3991989291,3964178735&fm=173&s=6362B852537552321605F24E030060F5&w=50&h=85&img.JPEG

(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值