小游戲的制作

? ? ? ? ? ? ? ? 這星期長見識了,雖然每星期都在學(xué)習(xí)新的內(nèi)容,都在長見識,但是這次挺驚訝的,竟然可以用python,vi,等結(jié)合起來做小游戲,然后懂得了做游戲的原理,知道了怎么做游戲。雖然可能只懂的

簡單的小游戲制作,但是感覺也挺厲害的。真的是長見識了!

1 import random

? 2 import pygame

? 3 SCREEN_RECT = pygame.Rect(0,0,480,700)

? 4 FRAME_PER_SEC = 60

? 5 CREATE_ENEMY_EVENT =pygame.USEREVENT

? 6 CREATE_BULLET_EVENT =pygame.USEREVENT + 1

? 7

? 8 class GameSprite(pygame.sprite.Sprite):

? 9? ? def __init__(self,image_name,speed=1):

10? ? ? ? super().__init__()

11

12? ? ? ? self.image = pygame.image.load(image_name)

13? ? ? ? self.rect = self.image.get_rect()

14? ? ? ? self.speed = speed

15

16

17

18? ? def update(self):

19? ? ? ? self.rect.y += self.speed

20

21 class Background(GameSprite):

22? ? def __init__(self,is_alt=False):

23? ? ? ? image_name = "./images/background.png"

24? ? ? ? super().__init__(image_name)

25? ? ? ? if is_alt:

26? ? ? ? ? ? self.rect.y = -self.rect.height

27

28? ? def update(self):

29? ? ? ? super().update()

30? ? ? ? if self.rect.y > SCREEN_RECT.height:

31? ? ? ? ? ? self.rect.y = -self.rect.height

32

33 class Enemy(GameSprite):

34? ? def __init__(self):

35? ? ? ? image_name = "./images/enemy-1.gif"

36? ? ? ? super().__init__(image_name)

37? ? ? ? self.speed = random.randint(1,3)

38? ? ? ? max_x = SCREEN_RECT.width - self.rect.width

39? ? ? ? self.rect.x = random.randint(0,max_x)

40? ? ? ? self.rect.bottom = 0

41? ? def update(self):

42? ? ? ? super().update()

43? ? ? ? if self.rect.y >= SCREEN_RECT.height:

44? ? ? ? ? ? self.kill()

45? ? def __del__(self):

46? ? ? ? pass

47 class Hero(GameSprite):

48? ? def __init__(self):

49? ? ? ? image_name = "./images/hero.gif"

50? ? ? ? super().__init__(image_name,0)

51? ? ? ? self.speed1 = 0

52? ? ? ? self.rect.centerx = SCREEN_RECT.centerx

53? ? ? ? self.rect.bottom = SCREEN_RECT.bottom - 120

54? ? ? ? self.bullet_group = pygame.sprite.Group()

55? ? def update(self):

56? ? ? ? self.rect.x +=self.speed

57? ? ? ? self.rect.y += self.speed1

58? ? ? ? if self.rect.left < 0:

59? ? ? ? ? ? self.rect.left = 0

60? ? ? ? if self.rect.right > SCREEN_RECT.width:

61? ? ? ? ? ? self.rect.right = SCREEN_RECT.width

62

63? ? def fire(self):

64? ? ? ? bullet = Bullet()

65

66? ? ? ? bullet.rect.bottom = self.rect.y - 20

67? ? ? ? bullet.rect.centerx = self.rect.centerx

68? ? ? ? self.bullet_group.add(bullet)

69 class Bullet(GameSprite):

70? ? def __init__(self):

71? ? ? ? image_name = "./images/bullet1.png"

72? ? ? ? super().__init__(image_name,-10)

73? ? def update(self):

74? ? ? ? super().update()

75? ? ? ? if self.rect.bottom < 0:

76? ? ? ? ? ? self.kill()

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這是設(shè)置基礎(chǔ)命令? 和條件

? ? ? ? 1 import pygame

? 2 from PlanSprite import *

? 3 class PlaneGame(object):

? 4? ? def __init__(self):

? 5? ? ? ? self.screen = pygame.display.set_mode(SCREEN_RECT.size)

? 6? ? ? ? self.clock = pygame.time.Clock()

? 7? ? ? ? self.__create_sprites()

? 8? ? ? ? pygame.time.set_timer(CREATE_ENEMY_EVENT,1000)

? 9? ? ? ? pygame.time.set_timer(CREATE_BULLET_EVENT,500)

10? ? ? ? self.enemy_group = pygame.sprite.Group()

11? ? def __create_sprites(self):

12? ? ? ? bg1 = Background()

13? ? ? ? bg2 = Background(True)

14? ? ? ? self.back_group = pygame.sprite.Group(bg1,bg2)

15

16? ? ? ? self.hero = Hero()

17? ? ? ? self.hero_group = pygame.sprite.Group(self.hero)

18? ? def start_game(self):

19? ? ? ? print("開始游戲")

20? ? ? ? while True:

21? ? ? ? ? ? self.clock.tick(FRAME_PER_SEC)

22? ? ? ? ? ? self.__event_handler()

23? ? ? ? ? ? self.__check_collide()

24? ? ? ? ? ? self.__update_sprites()

25? ? ? ? ? ? pygame.display.update()

26? ? def __event_handler(self):

27? ? ? ? for event in pygame.event.get():

28? ? ? ? ? ? if event.type == pygame.QUIT:

29? ? ? ? ? ? ? ? planeGame.__game_over()

30? ? ? ? ? ? elif event.type == CREATE_ENEMY_EVENT:

31? ? ? ? ? ? ? ? enemy = Enemy()

32? ? ? ? ? ? ? ? self.enemy_group.add(enemy)

33? ? ? ? ? ? elif event.type == CREATE_BULLET_EVENT:

34? ? ? ? ? ? ? ? self.hero.fire()

35? ? ? ? ? ? keys_pressed = pygame.key.get_pressed()

36? ? ? ? ? ? if keys_pressed[pygame.K_RIGHT]:

37? ? ? ? ? ? ? ? self.hero.speed = 2

38? ? ? ? ? ? ? ? self.hero.speed1 = 0

39? ? ? ? ? ? elif keys_pressed[pygame.K_LEFT]:

40? ? ? ? ? ? ? ? self.hero.speed = -2

41? ? ? ? ? ? ? ? self.hero.speed1 = 0

42? ? ? ? ? ? elif keys_pressed[pygame.K_UP]:

43? ? ? ? ? ? ? ? self.hero.speed1 = -2

44? ? ? ? ? ? ? ? self.hero.speed = 0

45? ? ? ? ? ? elif keys_pressed[pygame.K_DOWN]:

46? ? ? ? ? ? ? ? self.hero.speed1 = 2

47? ? ? ? ? ? ? ? self.hero.speed = 0

48? ? ? ? ? ? else:

49? ? ? ? ? ? ? ? self.hero.speed1 = 0

50? ? ? ? ? ? ? ? self.hero.speed = 0

51? ? def __check_collide(self):

52? ? ? ? b = pygame.sprite.groupcollide(self.hero.bullet_group,self.enemy_group,True,True)

53? ? ? ? print(b)

54? ? ? ? enemies = pygame.sprite.spritecollide(self.hero,self.enemy_group,True)

55? ? ? ? if len(enemies) > 0:

56? ? ? ? ? ? self.hero.kill()

57? ? ? ? ? ? planeGame.__game_over()

58? ? def __update_sprites(self):

59? ? ? ? self.back_group.update()

60? ? ? ? self.back_group.draw(self.screen)

61

62? ? ? ? self.enemy_group.update()

63? ? ? ? self.enemy_group.draw(self.screen)

64

65? ? ? ? self.hero_group.update()

66? ? ? ? self.hero_group.draw(self.screen)

67

68? ? ? ? self.hero.bullet_group.update()

69? ? ? ? self.hero.bullet_group.draw(self.screen)

70? ? @staticmethod

71? ? def game_over():

72? ? ? ? pygame.quit

73? ? ? ? exit()

74 if __name__ =="__main__":

75? ? game = PlaneGame()

76? ? game.start_game()

? ? ? ? ? ? ? ? ? ? ? ? ?? 這里是執(zhí)行的命令

上面圖片是執(zhí)行后的效果,自己目前沒學(xué)太明白,還可以繼續(xù)加強,設(shè)置分數(shù),加入一些特殊道具等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容