用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的圖片,子彈用的是植物大戰僵屍里面的子彈,好啦今天就先坐到這里,其他的功能會在以后的東西里再開發。

 還是求贊,,,么么噠!

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM