(飞机为迷你亚索,外星人为迷你小诺手,由于时间关系和图片素材较难寻找,仅仅做了简易版,没有贴上背景图片。由于篇幅原因,对于函数讲解较为简略,可以自行搜索相应函数的用法)

主要利用pygame内置库进行图形化处理

主要游戏界面如下:

基础操作:导入pygame模块

首先利用screen=pygame.display.set_mode()创建一个pygame游戏窗口,参数为(width,height)

然后使用pygame.display.set_caption(),参数为你想要设置的游戏名的字符串,例如:“飞机大战”

找到图片素材,并将其绘制到屏幕上,在此需使用blit()函数将其绘制到窗口上,例如:之前的窗口为screen,则screen.blit(image,rect),其中image为需要绘制到屏幕上的图像,rect为绘制的位置的矩形,需要在之前通过pygame.Rect进行创建rect,并且设置好rect的位置。

对于屏幕上的字体,在pygame中字体的显示都是通过将字体转换为图形,然后用blit()函数绘制,首先设置字体font=pygame.font.Font(NONE,48),其中none指的是文字的字体,48指文字的大小,然后通过render函数进行转换为图形,例如,image=font.render(text,TRUE,font_color,bg_color),其中text是文字的内容,同样是字符串;TRUE指的是文字的锯齿开关;font_color是文字颜色的RGB值,bg_color为绘制处的背景颜色的RGB值,然后将image通过blit绘制出来就可以

设置主循环,对于游戏的运行,刚才所设置的所有运行后只会出现一瞬间,所以必须要将其放在while TRUE:的主循环中不停循环才能维持游戏界面

关于爆炸效果的制作,任何看起来连续的图片其实都是一帧帧图片快速播放,因为人眼的视觉停留看起来才连续,所以对于爆炸效果,只需要在子弹与外星人发生碰撞时,在外星人的位置,以一定的速度依次绘制爆炸图片就可以了;

爆炸图片如下:

以上是基础操作

主文件代码如下:

import pygame

import sys

from time import sleep

from random import randint

from settings import Settings

from ship_mod_blit import Ship

from bullet import Bullet

from alien import Alien

from button import Button

from bullet import Skill

from game_information import Information

from bomp import Bomp

game_state=0

menu=0

game=1

over=2

score=0

randnum=1

class Alienwar_game:

def __init__(self):

pygame.init()

self.settings=Settings()

self.screen = pygame.display.set_mode((self.settings.screen_width,self.settings.screen_height))

self.ship=Ship(self)

self.button=Button(self,"start play")

self.bullets=pygame.sprite.Group()

self.aliens=pygame.sprite.Group()

self.skills=pygame.sprite.Group()

pygame.display.set_caption('诺克萨斯入侵')

self.creat_alien()

self.move=list()

self.lives=self.settings.ship_lives

self.information=Information(self)

self.bomp=Bomp(self)

self.clock=pygame.time.Clock()

self.time=60

self.speed_x=self.settings.alien_speed

self.speed_y=self.settings.alien_speed_y

def creat_alien(self):

available_space_x=self.settings.screen_width-2*40

avaliable_space_y=self.settings.screen_height-2*40

number_alien_x=available_space_x//80

for alien_number in range(number_alien_x):

new_alien=Alien(self)

new_alien.rect.x=randint(0,1000)

new_alien.rect.y=randint(0,200)

self.aliens.add(new_alien)

def fire(self):

if len(self.bullets)

new_bullet=Bullet(self)

self.bullets.add(new_bullet)

def fire_skill(self):

newskill=Skill(self)

self.skills.add(newskill)

def event_check(self):

global score

global game_state

for event in pygame.event.get():

if(event.type==pygame.QUIT):

sys.exit()

if(event.type==pygame.KEYDOWN):

if(event.key==pygame.K_a or event.key==pygame.K_LEFT ):

self.ship.lstate=1

if(event.key==pygame.K_d or event.key ==pygame.K_RIGHT):

self.ship.rstate=1

if event.key==pygame.K_j:

self.fire()

if event.key==pygame.K_k:

self.fire_skill()

if(event.type==pygame.KEYUP):

if(event.key==pygame.K_a or event.key==pygame.K_LEFT):

self.ship.lstate=0

if(event.key==pygame.K_d or event.key==pygame.K_RIGHT):

self.ship.rstate=0

if(event.type==pygame.MOUSEBUTTONDOWN):

mouse_pos=pygame.mouse.get_pos()

if game_state==2:

if self.screen.get_rect().collidepoint(mouse_pos):

game_state=menu

score=0

elif game_state==0:

if self.button.rect.collidepoint(mouse_pos):

game_state = game

self.lives=self.settings.ship_lives

self.speed_y=self.settings.alien_speed_y

self.speed_x=self.settings.alien_speed

def run_game(self):

global game_state

global score

global randnum

count=0

count1=0

count2=0

while True:

count2+=1

self.clock.tick(self.time)

self.screen.fill(self.settings.bg_color)

self.event_check()

if game_state==menu:

self.screen.blit(self.button.msg_image,self.button.rect)

elif game_state==game:

for number in range(self.lives):

self.screen.blit(self.ship.image,pygame.Rect(number*40,0,40,40))

self.button.label1()

i=0

if self.ship.rect.x>=self.settings.ship_speed:

if self.ship.lstate == 1:

self.ship.rect.x -= self.settings.ship_speed

if self.ship.rect.x<=self.settings.screen_width-self.settings.ship_speed-40:

if self.ship.rstate==1:

self.ship.rect.x+=self.settings.ship_speed

self.bullets.update()

self.ship.blitme()

for bullet in self.bullets.sprites():

bullet.drawit()

if bullet.y<=0:

self.bullets.remove(bullet)

for skill in self.skills.sprites():

skill.skill_update()

skill.blitit()

if skill.rect.y<=0:

self.skills.remove(skill)

for num in range(len(self.aliens)):

self.move.append(1)

for alien in self.aliens.sprites():

if alien.rect.left==self.screen.get_rect().left or alien.rect.right==self.screen.get_rect().right:

self.move[i]=-self.move[i]

if alien.rect.rightself.screen.get_rect().left:

if count2%50==0:

randnum=randint(0,1)

print(f"{randnum}")

if randnum==0:

self.move[i] = -self.move[i]

alien.rect.x+=self.speed_x*self.move[i]

alien.rect.y+=self.speed_y

i+=1

if alien.rect.left

alien.rect.left=self.screen.get_rect().left

if alien.rect.right>self.screen.get_rect().right:

alien.rect.right=self.screen.get_rect().right

if alien.rect.centery>=self.screen.get_rect().bottom:

print("诺手打进你家了!!!")

sleep(1.5)

self.bullets.empty()

self.aliens.empty()

self.creat_alien()

self.lives-=1

break

for alien_self in self.aliens.sprites():

for bullet_self in self.bullets.sprites():

if pygame.sprite.collide_rect(alien_self,bullet_self):

x=alien_self.rect.x

y=alien_self.rect.y

if pygame.sprite.collide_rect(alien_self,bullet_self) or count!=0 and count<=100:

self.bomp.draw_image(x,y,count1%5)

count+=1

if(count%20==0):

count1+=1

if count>100:

count=0

collision=pygame.sprite.groupcollide(self.bullets,self.aliens,True,True)

collision2=pygame.sprite.groupcollide(self.skills,self.aliens,False,True)

if collision:

score+=self.settings.alien_score

if collision2:

score+=self.settings.alien_score*len(collision2.values())

self.information.draw_score('score: '+str(score))

self.screen.blit(self.information.score_image,self.information.score_image_rect)

if not self.aliens:

self.bullets.empty()

self.skills.empty()

self.creat_alien()

self.speed_x+=0.5

if(score!=0 and score%10000==0):

self.speed_y+=0.01

if pygame.sprite.spritecollideany(self.ship,self.aliens):

print("亚索被诺手打死了 !!!")

sleep(1.5)

self.ship.rect.midbottom=self.screen.get_rect().midbottom

self.bullets.empty()

self.aliens.empty()

self.creat_alien()

self.lives-=1

if self.lives==0:

game_state=over

count2=0

self.aliens.draw(self.screen)

elif game_state == over:

self.button.label2()

self.button.label3(str(score))

pygame.display.flip()

if __name__=='__main__':

ai_game=Alienwar_game()

ai_game.run_game()

这只是主文件的代码,由于代码导入了其他文件的函数,所以无法整成运行,

具体的操作可以通过代码来看,由于代码放在多个文件中,不便全部复制粘贴到这里,以免导致代码无法运行,完整的代码及图片素材都存放在GitHub或gitee码云上,想要看的朋友可以访问,这是我的网址:

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python飞机大战联网版_Python实现飞机大战(搞怪)游戏!这是你没见过的全新版本!...相关推荐

  1. python飞机大战联网版_Python 飞机大战搞怪版本

    python 飞机大战搞怪版本 (飞机为迷你亚索,外星人为迷你小诺手,由于时间关系和图片素材较难寻找,仅仅做了简易版,没有贴上背景图片.由于篇幅原因,对于函数讲解较为简略,可以自行搜索相应函数的用法) ...

  2. Python实现飞机大战(搞怪)游戏!这是你没见过的全新版本!

    (飞机为迷你亚索,外星人为迷你小诺手,由于时间关系和图片素材较难寻找,仅仅做了简易版,没有贴上背景图片.由于篇幅原因,对于函数讲解较为简略,可以自行搜索相应函数的用法) 主要利用pygame内置库进行 ...

  3. python飞机大战加背景音乐_python实现飞机大战小游戏 python飞机大战中的音频文件怎么改成MP3...

    怎么样用Python写飞机大战游戏 python开发飞机大战外星人游戏怎么弄双人模式新的一年,哪怕仍是一个人,也要活得像一支队伍,为自己的头脑和心灵招兵买马,不气馁,有召唤,爱自由. 主函数 impo ...

  4. 手写坦克大战联网版(持续更新)

    用到脚本语言 javascript es5 es6 es7 node |   models |       socket.io mysql 先了解下目录结构 前端 css:游戏的一些样式 js:动态脚 ...

  5. java坦克大战墙壁图片_Python实现“坦克大战”

    Python实现坦克大战 一.前言 前段时间,也就是国庆节.在寝室闲来无事,用pygame写了一个小游戏,就是标题写的<坦克大战>.这个游戏写了两个版本,第一个版本是按照书上的思想来写的, ...

  6. python运行代码不成功_python的运行时易犯错误,你中招了没?快来学习了

    小编话不多说,上干货!!欢迎分享跟多python知识,转发++关注,帮助跟多学习的程序猿!!! 1)忘记在 if , elif, else, for, while, class,def声明末尾添加 : ...

  7. python购物街价格竞猜_Python学习笔记 - 数字竞猜小游戏

    知识点 Python判断字符串的主要用法:str.isalnum():所有字符都是数字或字母 str.isalpha():所有字符都是字母 str.isdigit():所有字符都是数字,并且为整型数字 ...

  8. python 判断图片中物体位置_Python 10行代码搞定图片中物体检测

    使用Python, 如何编程实现图片中的物体检测[也叫对象检测/object detection]? 怎么知道图像中有哪些物体? 或许您想要计算图像中苹果的数量? 在这篇文章中,我将向您展示如何使用P ...

  9. python写井字棋_python实现简单井字棋游戏

    #!/usr/bin/env python3 # -*- coding:utf-8 -*- u''' Created on 2019年4月13日 @author: wuluo ''' author = ...

最新文章

  1. Dubbo原理和源码解析之服务引用
  2. HOW-TO:带有MySQL的JEE应用程序中具有集群功能的Quartz Scheduler
  3. 清除WIN7桌面背景历史记录
  4. 2.JVM和DVM之间的区别
  5. 学弟学妹看过来,小白到大神必经之路!
  6. flash源文件_Animate/FLASH如何将多个源文件合并
  7. 使用LiteOS Studio图形化查看LiteOS在STM32上运行的奥秘
  8. react-redux草稿
  9. webapi 重复提交问题
  10. JavaScript面向对象之Function类型
  11. 《libGDX移动游戏开发从入门到精通》一1.5 其他的一些准备工作
  12. 数仓SQL面试题(持续更新中!!!)
  13. JQuery的选择器对控件ID含有特殊字符的解决方法
  14. 数据库管理员详细介绍
  15. R语言气泡图 bubble chart
  16. Just Waiting for You!个性化推荐带你领略不一样的算法之美
  17. 移动游戏性能优化通用技法
  18. CAD图纸怎么打印?几步教你轻松操作
  19. MySQL定时备份与清除脚本
  20. 查看Windows下各个磁盘下的所有文件

热门文章

  1. Unity ShaderGraph初始使用配置
  2. Jquery----下拉菜单(利用滑动效果)
  3. day fit into much one too_PGone Talking too much歌词
  4. 个人博客标签和文章的表结构设计
  5. HDR视频色调映射算法(之二:Adaptive temporal TMO)
  6. 免费好用的PC端屏幕录制软件
  7. 2019 虎鲸杯电子取证大赛赛后复盘总结
  8. 2022-2028年中国塑封机行业市场需求分析及投资前景展望报告
  9. 自动化办公 | 快速从Excel中提取图片并匹配命名
  10. C++随机生成字符串,亲测可用,简单易懂