用pygame学习初级python(一) 15.4.19
最近有计划要学一下python,主要是要用flask、django一些框架进行后端的学习工作,但是在web应用之前希望进行一些基础的项目进行一些语法的练习,熟悉一下写法,
这个时候我就想先做几个小游戏先练练手:
推荐教程,可以学学基础语法:http://inventwithpython.com/chapters/
但是只靠python的基础语法写的东西怎么能满足我们呢?现在我们要推荐一个pygame的库可以使用更高级的功能来让我们真正完成一些像一个游戏的一些功能:
http://www.pygame.org/news.html
这里简单写了一个初版的简单功能,简单的练了一下手,闲话少说上代码:
1 __author__ = 'Administrator' 2 3 import pygame 4 from pygame.locals import * 5 from sys import exit 6 7 8 class Bullet(pygame.sprite.Sprite): #子弹类 9 def __init__(self, init_pos): 10 pygame.sprite.Sprite.__init__(self) 11 self.image = pygame.image.load('Bullet.gif') #设定子弹图片(记得放在根目录下) 12 self.rect = self.image.get_rect() #rect的意思是对象的区块大小,他把大小设定为图片的大小 13 self.rect.midtop = init_pos #子弹位置 14 self.speed = 10 #射速10 15 16 def move(self): 17 self.rect.centerx += self.speed #x轴+速度=长度 18 # screen.blit(self.image,self.rect) 19 #pygame.display.update() 20 21 22 class Player(pygame.sprite.Sprite): #玩家类 23 def __init__(self): 24 pygame.sprite.Sprite.__init__(self) 25 self.image = pygame.image.load('right.png') #设定初始图片为右向 26 self.rect = self.image.get_rect() 27 self.rect.center = first_location #center,设定初始位置 28 # print self.rect.center 29 30 def turn(self, distance): #转向函数 31 center = self.rect.center 32 self.image = pygame.image.load(Player_image[distance])#设定为数组里第一个 33 self.rect = self.image.get_rect() 34 self.rect.center = center 35 36 def move(self, temper): #移动函数 37 temper = int(temper) 38 if temper == 0: #左 39 for temp in range(1, 10): 40 self.rect.centerx -= 3 41 print self.rect.centerx 42 if temper == 1: 43 self.rect.centerx += 30 #右 44 print self.rect.centery 45 if temper == 2: 46 self.rect.centery -= 30 #上 47 print self.rect.centery 48 if temper == 3: 49 self.rect.centery += 30 #下 50 if 0 > self.rect.centerx or self.rect.centerx > screen.get_width(): #这个是防止出去框架 51 self.rect.centerx = -self.rect.centerx 52 if 0 > self.rect.centery or self.rect.centery > screen.get_height(): 53 self.rect.centery = -self.rect.centery 54 55 def shoot(self): #射击函数 56 bullet = Bullet(self.rect.midtop) 57 Bullets.append(bullet) #添加到Bullets的数组统一播放 58 59 60 background_image_filename = 'gamestart.png' #设定背景 61 start_image = 'bg2.png' #开始背景 62 Player_image = ['left.png', 'right.png'] #图片状态数组 63 x = 0 #background的x,y轴 64 y = 0 65 pygame.init() #初始化 66 screen = pygame.display.set_mode([1365, 768]) #设定分辨率 67 first_location = [screen.get_width() / 2, screen.get_height() / 2] #初始位置为中央 68 background = pygame.image.load(background_image_filename).convert() #设定图片 69 pygame.key.set_repeat(100, 100) #设定key的可重复按键,第一个参数是重复一次等待多长,第二个参数是多快的速度重复 70 clock = pygame.time.Clock() #设定时钟时间 71 flag = 0 #flag标记 72 Bullets = [] #Bullets数组 73 running = True #循环标记 74 while running: 75 clock.tick(60) #不要超过60帧每秒 76 for event in pygame.event.get(): 77 if event.type == QUIT: #监听退出 78 exit() 79 if event.type == KEYDOWN: #按下监听 80 if flag == 0: 81 if event.key == pygame.K_1: #按1键进行转场生成人物设置flag标记为1 82 background = pygame.image.load(start_image).convert() 83 player = Player() 84 print screen.get_width() 85 print screen.get_height() 86 flag = 1 87 elif event.key == pygame.K_4: #4退出 88 exit() 89 elif event.key == pygame.K_RIGHT: #下面就是上下左右: 90 if flag == 1: 91 player.turn(1) 92 player.move(1) 93 # flag == 1 94 elif event.key == pygame.K_LEFT: 95 if flag == 1: 96 player.turn(0) 97 player.move(0) 98 elif event.key == pygame.K_UP: 99 if flag == 1: 100 player.move(2) 101 # flag == 1 102 elif event.key == pygame.K_DOWN: 103 if flag == 1: 104 player.move(3) 105 elif event.key == pygame.K_x: #设定射击按键: 106 if flag == 1: 107 player.shoot() 108 print("shoot") 109 screen.blit(background, (x, y)) #把背景填充到上层 110 if flag == 1: #如果转场了就进行下去: 111 screen.blit(player.image, player.rect) 放置人物; 112 for bullet in Bullets: #循环把Bullets的东西移动,并放置到上层 113 bullet.move() 114 screen.blit(bullet.image, bullet.rect) 115 pygame.display.update() #更新背景 116 if flag == 0: 117 pygame.display.update()
图片是我参加Image Cup做的游戏的背景图,人物用的是书里例程skier的图片,子弹用的是植物大战僵尸里面的子弹,好啦今天就先坐到这里,其他的功能会在以后的东西里再开发。
还是求赞,,,么么哒!