>  기사  >  위챗 애플릿  >  pygame을 사용하여 PC에서 WeChat 자위 게임을 개발한 사례 소개

pygame을 사용하여 PC에서 WeChat 자위 게임을 개발한 사례 소개

高洛峰
高洛峰원래의
2017-03-23 11:53:533298검색

pygame은 PC용 WeChat 자위 게임을 개발합니다

1. 프로젝트 소개
1. 소개
이 프로젝트는 한때 인기를 끌었던 WeChat 자위 게임과 유사합니다. 게임은 주로 pygame API를 사용하여 Python 언어를 사용하여 개발됩니다. 게임은 결국 Python 소스 파일 game.py 형태로 완성됩니다. 게임에 들어가려면 python game.py만 실행하면 됩니다.
게임의 최종 스크린샷은 다음과 같습니다.

pygame을 사용하여 PC에서 WeChat 자위 게임을 개발한 사례 소개

pygame을 사용하여 PC에서 WeChat 자위 게임을 개발한 사례 소개

2. 지식 포인트
이번 실험에서는 Linux 데스크탑 환경 소개 Python과 pygame을 사용하여 작은 게임을 빠르게 개발하는 방법. 이 게임을 통해 파이게임 게임 개발을 시작할 수 있습니다.
3. 참조 문서

Kill-Console이 작성한 코드 참조 PythonShootGame

문서 참조 pygame 문서

4. 콘텐츠는 실험 건물의 공식 웹사이트에서 구현해야 하며, 필요하지 않으면 건너뛸 수 있습니다.)

이 실험에 필요한 코드 실행을 지원하려면 파이게임 라이브러리를 설치해야 합니다.

실험 환경에서 Xfce 터미널을 열고 다음 명령을 입력하여 pygame을 설치합니다. shiyanlou의 비밀번호(또한 shiyanlou)를 입력하라는 메시지가 표시됩니다.
$ sudo apt-get update$ sudo apt-get install python -pygame
2. 기술 설계
1. 게임 캐릭터
이 게임에 필요한 캐릭터에는 플레이어 항공기, 적 항공기 및 폭탄이 포함됩니다. 사용자는 키보드를 통해 화면에서 플레이어 항공기의 위치를 ​​이동하여 다양한 위치에 있는 적 항공기를 공격할 수 있습니다. 따라서 Player, Enemy, Bullet의 세 가지 클래스는 세 가지 게임 캐릭터에 대응되도록 설계되었습니다.
플레이어에게 필요한 동작은 사격과 이동이며 상하좌우 4가지 상황으로 구분됩니다.
Enemy의 경우 상대적으로 간단합니다. 그냥 움직여서 화면 상단에 나타나고 화면 하단으로 이동하면 됩니다.
Bullet의 경우 비행기와 동일하며 특정 속도로 움직이기만 하면 됩니다.
2. 게임 기능
위챗 자위를 해본 친구들은 익숙할 거라 생각해서 여기서는 게임을 단순화했습니다. 비행기의 속도는 고정되어 있고, 폭탄의 속도는 고정되어 있습니다. 기본 조작은 플레이어 비행기를 이동시키는 것입니다. 화면 상단에서 대상 비행기가 무작위로 나타나 일정한 속도로 바닥으로 떨어집니다. 플레이어 비행기에서 전송되며 대상 비행기에 닿으면 파괴됩니다. 대상 비행기가 플레이어 비행기에 닿으면 게임이 종료되고 점수가 표시됩니다.
3. 코드 구현
1. 인터페이스 표시
코드 구현에 필요한 리소스 이미지 파일은 다음 명령을 통해 얻을 수 있습니다:

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


세부 단계

pygame 초기화

게임 인터페이스 크기, 배경 이미지 및 제목 설정

게임 메인 루프는 게임 인터페이스의 초기화, 업데이트 및 종료를 처리해야 합니다

플레이어 항공기 표시(코드에 사용된 resources/image/shoot.png에는 다양한 항공기가 포함되어 있습니다. pygame .image의 지하 API만 사용하면 위치에 따라 Shoot.png에서 필요한 그림을 가로챌 수 있습니다.)


샘플 코드

#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()

2. 키보드를 처리합니다. 메인 루프 이벤트(위, 아래, 왼쪽 및 오른쪽 키 조작)에 입력하고 게임 조작 상호 작용(플레이어 항공기의 위, 아래, 왼쪽 및 오른쪽 이동)을 증가시킵니다.

세부 단계


키보드 이벤트 받기(위, 아래, 왼쪽, 오른쪽 키)

키보드 이벤트 처리(비행기 위치 이동)

위의 단계 코드를 게임에 넣습니다


메인 루프의 샘플 코드

#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()

3. ***처리

***는 플레이어의 항공기에서 방출되어 이동합니다. 특정 속도로 인터페이스 상단을 향해 이동합니다.

세부 조치


*** 생성, 전송 주파수 조절 필요

고정 속도로 이동***

이사 후 삭제 화면***

적 항공기가 공격당하는 효과 처리 ***(다음 섹션에서 처리)


샘플 코드

#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)

4 .적기 처리

적기 인터페이스 위에서 무작위로 생성되어 일정 속도로 아래로 이동해야 합니다.

세부 단계


적 항공기 생성, 생성 빈도 제어 필요

적 항공기 이동

적 항공기와 플레이어 간의 충돌 효과 처리 항공기

화면 밖으로 이동한 후 적 항공기 삭제

적 항공기가 ***


샘플 코드

에 맞은 효과 처리
#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)

5. 점수 표시

게임 인터페이스의 고정된 위치는 파괴된 목표 적 항공기의 수를 표시합니다.

샘플 코드

# 绘制得分
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)

위 내용은 pygame을 사용하여 PC에서 WeChat 자위 게임을 개발한 사례 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.