Introduction à l'exemple de développement d'un jeu de masturbation WeChat sur PC avec pygame

高洛峰
Libérer: 2017-03-23 11:53:53
original
3303 Les gens l'ont consulté

pygame développe un jeu de masturbation WeChat côté PC

1 Introduction au projet
1
Ce projet est similaire au jeu de masturbation WeChat autrefois populaire. Le jeu sera développé en langage Python, principalement en utilisant l'API pygame. Le jeu sera finalement terminé sous la forme du fichier source python game.py. Il vous suffit d'exécuter python game.py pour accéder au jeu.
La capture d'écran finale du jeu est la suivante :

Introduction à lexemple de développement dun jeu de masturbation WeChat sur PC avec pygame

Introduction à lexemple de développement dun jeu de masturbation WeChat sur PC avec pygame

2. Points de connaissance
Dans cette expérience, nous allons présenter l'environnement de bureau Linux Comment développer rapidement de petits jeux en utilisant Python et pygame. Vous pouvez vous lancer dans le développement de jeux Pygame grâce à ce jeu.
3. Documentation de référence

Référence du code PythonShootGame écrit par Kill-Console

Documentation de référence de pygame

4. Installer les packages dépendants
(ci-dessous). Le contenu doit être implémenté sur le site officiel du bâtiment expérimental, vous pouvez l'ignorer s'il n'est pas nécessaire)

La bibliothèque pygame doit être installée pour prendre en charge l'exécution du code requis pour cette expérience.
Ouvrez le terminal Xfce dans l'environnement expérimental et entrez la commande suivante pour installer pygame. Vous serez invité à saisir le mot de passe de shiyanlou, qui est également shiyanlou :
$ sudo apt-get update$ sudo apt-get install python. -pygame
2. Conception technique
1. Personnages du jeu
Les personnages requis dans ce jeu incluent les avions des joueurs, les avions ennemis et les bombes. Les utilisateurs peuvent déplacer la position de l'avion du joueur sur l'écran via le clavier pour attaquer les avions ennemis à différents endroits. Par conséquent, les trois classes suivantes : Joueur, Ennemi et Balle sont conçues pour correspondre aux trois personnages du jeu.
Pour Player, les opérations requises sont le tir et le mouvement. Le mouvement est divisé en quatre situations : haut, bas, gauche et droite.
Pour Enemy, c'est relativement simple, il suffit de le déplacer, d'apparaître du haut de l'écran et de se déplacer vers le bas de l'écran.
Pour Bullet, c’est la même chose qu’un avion, il lui suffit de se déplacer à une certaine vitesse.
2. Fonctions du jeu
Je pense que les amis qui ont joué à la masturbation sur WeChat le connaissent, le jeu a donc été simplifié ici. La vitesse de l'avion est fixe et la vitesse de la bombe est fixe. L'opération de base consiste à déplacer l'avion du joueur. L'avion cible apparaît aléatoirement du haut de l'écran et tombe vers le bas à une vitesse constante. est envoyé depuis l'avion du joueur et sera détruit lorsqu'il touchera l'avion cible. Si l'avion cible touche l'avion du joueur, le jeu sera terminé et le score sera affiché.
3. Implémentation du code
1. Affichage de l'interface
Les fichiers image des ressources nécessaires à l'implémentation du code peuvent être obtenus via la commande suivante :

$git clone https://github .com/shiyanlou/PythonShootGame.git


Étapes détaillées

Initialiser pygame

Définir la taille de l'interface du jeu, l'image d'arrière-plan et le titre

La boucle principale du jeu doit gérer l'initialisation, la mise à jour et la sortie de l'interface de jeu

Afficher les avions du joueur (le resources/image/shoot.png utilisé dans le code contient une variété d'avions, il vous suffit d'utiliser l'API souterraine de pygame .image pour intercepter les images requises dans shoot.png en fonction de la position)

Exemple de code

#1. 初始化pygame
pygame.init()
 
#2. 设置游戏界面大小、背景图片及标题
# 游戏界面像素大小
screen = pygame.display.set_mode((480, 800))
 
# 游戏界面标题
pygame.display.set_caption('飞机大战')
 
# 背景图
background = pygame.image.load('resources/image/background.png').convert()
 
# Game Over的背景图
game_over = pygame.image.load('resources/image/gameover.png')
 
# 飞机图片
plane_img = pygame.image.load('resources/image/shoot.png')
 
# 截取玩家飞机图片
player = plane_img.subsurface(pygame.Rect(0, 99, 102, 126))
 
#3. 游戏主循环内需要处理游戏界面的初始化、更新及退出
while True: 
   # 初始化游戏屏幕
    screen.fill(0)
    screen.blit(background, (0, 0))    
     
    # 显示玩家飞机在位置[200,600]
    screen.blit(player, [200, 600])    
     
    # 更新游戏屏幕
    pygame.display.update()    
     
    # 游戏退出事件
    for event in pygame.event.get():    
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
Copier après la connexion

Gestion des événements
2. Gérez le clavier dans la boucle principale. Les événements d'entrée (opérations sur les touches haut, bas, gauche et droite) ajoutent une interaction avec les opérations de jeu (mouvements haut, bas, gauche et droite de l'avion du joueur).
Étapes détaillées

Obtention des événements du clavier (touches haut, bas, gauche et droite)

Gestion des événements du clavier (déplacement de la position de l'avion) ​​

Mettez le code d'étape ci-dessus dans le jeu

Exemple de code dans la boucle principale

#1. 获取键盘事件(上下左右按键)
key_pressed = pygame.key.get_pressed()
 
#2. 处理键盘事件(移动飞机的位置)
if key_pressed[K_w] or key_pressed[K_UP]:
    player.moveUp()
if key_pressed[K_s] or key_pressed[K_DOWN]:
    player.moveDown()
if key_pressed[K_a] or key_pressed[K_LEFT]:
    player.moveLeft()
if key_pressed[K_d] or key_pressed[K_RIGHT]:
    player.moveRight()
Copier après la connexion

3 ***Le traitement
*** est émis par l'avion du joueur. et se déplace vers le haut de l'interface à une certaine vitesse.
Étapes détaillées

Générer ***, la fréquence de transmission doit être contrôlée

Se déplacer à une vitesse fixe***

Supprimer après le déménagement de l'écran***

Gestion de l'effet d'un avion ennemi touché par *** (traité dans la section suivante)

Exemple de code

#1. 生成***,需要控制发射频率
# 首先判断玩家飞机没有被击中
if not player.is_hit:  
  if shoot_frequency % 15 == 0:
        player.shoot(bullet_img)
    shoot_frequency += 1
    if shoot_frequency >= 15:
        shoot_frequency = 0
         
for bullet in player.bullets:  
  #2. 以固定速度移动***
    bullet.move()  
  #3. 移动出屏幕后删除***
    if bullet.rect.bottom < 0:
        player.bullets.remove(bullet)            
 
# 显示***
player.bullets.draw(screen)
Copier après la connexion

4. Traitement des avions ennemis
Les avions ennemis doivent être générés aléatoirement au-dessus de l'interface et descendre à une certaine vitesse.
Étapes détaillées

Générer des avions ennemis, la fréquence de génération doit être contrôlée

Déplacer l'avion ennemi

Gérer l'effet de collision entre l'avion ennemi et le joueur avion

Supprimer l'avion ennemi après avoir quitté l'écran

Gestion de l'effet de l'avion ennemi touché par ***

Exemple de code

#1. 生成敌机,需要控制生成频率
if enemy_frequency % 50 == 0:
    enemy1_pos = [random.randint(0, SCREEN_WIDTH - enemy1_rect.width), 0]
    enemy1 = Enemy(enemy1_img, enemy1_down_imgs, enemy1_pos)
    enemies1.add(enemy1)
enemy_frequency += 1if enemy_frequency >= 100:
    enemy_frequency = 0
     
for enemy in enemies1:    
    #2. 移动敌机
    enemy.move()  
    #3. 敌机与玩家飞机碰撞效果处理
    if pygame.sprite.collide_circle(enemy, player):
        enemies_down.add(enemy)
        enemies1.remove(enemy)
        player.is_hit = True
        break
    #4. 移动出屏幕后删除飞机    
    if enemy.rect.top < 0:
        enemies1.remove(enemy)
         
#5. 敌机被***击中效果处理
 
# 将被击中的敌机对象添加到击毁敌机Group中,用来渲染击毁动画
enemies1_down = pygame.sprite.groupcollide(enemies1, player.bullets, 1, 1)
for enemy_down in enemies1_down:
    enemies_down.add(enemy_down)
     
# 敌机被***击中效果显示
for enemy_down in enemies_down:  
  if enemy_down.down_index == 0:   
       pass
    if enemy_down.down_index > 7:
        enemies_down.remove(enemy_down)
        score += 1000
        continue
    screen.blit(enemy_down.down_imgs[enemy_down.down_index / 2], enemy_down.rect)
    enemy_down.down_index += 1
     
# 显示敌机
enemies1.draw(screen)
Copier après la connexion

5. Affichage du score
Le nombre d'avions ennemis cibles détruits est affiché à un emplacement fixe sur l'interface de jeu.
Exemple de code

# 绘制得分
score_font = pygame.font.Font(None, 36)
score_text = score_font.render(str(score), True, (128, 128, 128))
text_rect = score_text.get_rect()
text_rect.topleft = [10, 10]
screen.blit(score_text, text_rect)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal