最近有計划要學一下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的圖片,子彈用的是植物大戰僵屍里面的子彈,好啦今天就先坐到這里,其他的功能會在以后的東西里再開發。
還是求贊,,,么么噠!