Python语言程序设计课程论文--飞机大战

Python语言程序设计课程论文

项目名称:飞机大战

摘要

这款游戏的名字叫<飞机大战>,是使用Python开发的纵版飞行射击类游戏.Python是一种面向对象的解释型计算机程序设计语言,具有简单易学,可移植,可拓展等特点.并且拥有丰富的资源.在图形处理,数字处理,网络编程等方面有广泛用途.这个游戏利用了Python的pygame模块,射击了子弹,飞机类的相关方法和属性,进行了背景贴图,实现了飞机大战游戏的功能.由于这款游戏的受众是年龄比较小的小朋友,所以我把飞机改成了一个小猪仔,比较可爱,应该会更受小朋友们的喜欢.
关键字: Python,pygame,面向对象,飞机大战.
Abstract The game’s name is , was developed by using the Python version longitudinal flight shooting game. Python is an object-oriented interpreted computer programming language, is easy to learn, portable, scalable, etc., and is rich in resources. In image processing, digital processing, network programming, etc have broad USES. The game using the module of pygame Python, fired bullets, the related methods and properties of a class, the background map, realized the function of the plane war game. Because of the game, the audience is the age small kid, so I changed the plane into a small pig, more cute, should be more liked by children.
Key Words: Python,pygame,object-oriented,plane war

1.绪论

1.1研究的背景及意义

当今社会是一个信息社会.自从世界上第一台计算机问世以来,计算机行业飞速发展.随着以全球信息网络普及和全球信息共享为标志的”全球信息网络革命”的蓬勃兴起,计算机变成了人们生活中必不可少的一部分.
过去,人们主要是借助电影,电视,音乐等方式来娱乐.而今天,以游戏为代表的电子娱乐正成为主流娱乐方式.因为CPU以及显卡等设备的高速发展,为人们开发出更加炫目多彩的游戏提供了可能.目前纷繁复杂的游戏软件比比皆是,无论在线的网络游戏还是桌面游戏,二维的还是三维立体空间的,多由单机版游戏孕育而来.学习简单的单机版游戏的制作,有利于初学者了解游戏制作的理念.

1.2国内外发展现状

96,97年的国产游戏产品是单机版的游戏,在当时的市场是虽然品质和档次不如外来产品,但也占有一定的市场,例如<仙剑奇侠传>,<三国志>等系列带有鲜明中国特色与气息的游戏在市场上掀起了一波高潮.1998年联众与中国游戏中心等老牌的游戏平台的推出标志着电脑游戏在中国的开荒与生根.但是到了1999年没有形成主流产品的情况下,政策不明朗,包括开发资金出现问题等原因国产游戏开始走下坡路.一直到了2000年,网络游戏问世并且很快流行起来,我国的游戏行业才有渐渐的复苏.但是由于投入差距太大,起步晚等原因与外国游戏相对而言并没有竞争力.
时至今日,网络游戏走入盛世,成为了大部分人休闲娱乐的主要修为.国内网易,腾讯,九城,完美等公司百花齐放,国产网游渐渐走入国际市场,而且基于网络的发展真正实现了网络全球化,网络游戏也是遍布全球,全球同玩一款游戏的现象比比皆是.大量海外游戏走入中国市场,电脑游戏百花纷呈,随着经济的进步,计算机科技的发展,这一现象将愈演愈烈.

1.3主要的研究内容

本项目主要完成一种基于Python开发的一款单机游戏.项目研究的具体任务包括:
(1)完成敌机发射子弹功能
(2)实现敌机子弹和玩家飞机的碰撞检测
(3)为消失的飞机添加爆炸效果

1.4本文的组织结构

第1章绪论 本章主要介绍了项目的研究背景,项目研究的目的与意义,以及该项目所在领域国内外发展状况等.最后指出了本文工作内容及论文的组织结构.
第2章项目结构 介绍项目的结构,对使用的相关技术,相关模块,实现功能的原理进行介绍,采用框架图,示例图等进行表述,使人可以对项目的框架和原理有个比较好的把握.
第3章实现代码 对代码进行分段介绍,先干什么,然后干什么.
第4章实验 展示实验结果.
第5章总结和展望 总结工作并指出不足.

1.5小结

详细介绍了电脑游戏开发的国内外现状,以及本论文研究的方向和论文的整体结构.从文章中能够清楚的了解本论文的整体框架,对以后的个细节都有清晰的认识.

2.项目结构

2.1项目的结构

本项目分为主程序plane_main.py和主程序所用到的模块plane_sprites.py.

2.2项目的实现思路

创建一个pygame窗口
必须使用循环使其可以退出
必须增加语句让其更改背景颜色后的屏幕显示
Python语言程序设计课程论文--飞机大战_第1张图片

3.实现代码

palne_main.py
import pygame
from plane_sprites import *
class PlaneGane(object):
def init(self):
print(“游戏初始化”)
self.screen = pygame.display.set_mode(SCREEN_RECT.size)
self.clock = pygame.time.Clock()
self.__creat_sprites()
pygame.time.set_timer(CREATE_ENEMY_EVENT,1000)
pygame.time.set_timer(HERO_FIRE_EVENT, 500)
def __creat_sprites(self):
bg1 = Background()
bg2 = Background(True)
self.back_group = pygame.sprite.Group(bg1,bg2)
self.enemy_group = pygame.sprite.Group()
self.hero = Hero()
self.hero_group = pygame.sprite.Group(self.hero)
def start_game(self):
print(“游戏开始…”)
while True:
self.clock.tick(FRAME_PER_SEC)
self.__event_handler()
self.__check_collide()
self.__update_sprites()
pygame.display.update()
def __event_handler(self):
for event in pygame.event.get():
#判断是否退出程序
if event.type==pygame.QUIT:
PlaneGane.__game_over()
elif event.type == CREATE_ENEMY_EVENT:
print(“炸弹来了”)
enemy = Enemy()
self.enemy_group.add(enemy)
elif event.type == HERO_FIRE_EVENT:
self.hero.fire()
elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
print(“向右移动”)
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_RIGHT]:
self.hero.speed = 2
elif keys_pressed[pygame.K_LEFT]:
self.hero.speed = -2
else:
self.hero.speed = 0
def __check_collide(self):
pygame.sprite.groupcollide(self.hero.bullets,self.enemy_group,True,True)
enemies = pygame.sprite.spritecollide(self.hero,self.enemy_group,True)
if len(enemies) > 0:
self.hero.kill()
PlaneGane.__game_over()
def __update_sprites(self):
self.back_group.update()
self.back_group.draw(self.screen)

   self.enemy_group.update()
   self.enemy_group.draw(self.screen)

   self.hero_group.update()
   self.hero_group.draw(self.screen)

   self.hero.bullets.update()
   self.hero.bullets.draw(self.screen)
@staticmethod
def __game_over():
    print("游戏结束")
    pygame.quit()
    exit()

if name == ‘main’:
game=PlaneGane()
game.start_game()

plane_sprites.py
import random
import pygame

SCREEN_RECT = pygame.Rect(0,0,480,700)
FRAME_PER_SEC = 60
CREATE_ENEMY_EVENT = pygame.USEREVENT
HERO_FIRE_EVENT = pygame.USEREVENT + 1

class GameSprite(pygame.sprite.Sprite):
def init(self,image_name,speed=1):
super().init()
self.image=pygame.image.load(image_name)
self.rect=self.image.get_rect()
self.speed=speed
def update(self):
self.rect.y +=self.speed

class Background(GameSprite):
def init(self,is_alt=False):
super().init("./images/2.jpg")
if is_alt:
self.rect.y = -self.rect.height
def update(self):
super().update()
if self.rect.y >= SCREEN_RECT.height:
self.rect.y= -self.rect.height

class Enemy(GameSprite):
def init(self):
super().init("./images/5.png")
self.speed = random.randint(1,3)
self.rect.bottom = 0
max_x = SCREEN_RECT.width - self.rect.width
self.rect.x = random.randint(0,max_x)

def update(self):
    super().update()
    if self.rect.y >= SCREEN_RECT.height:
        self.kill()

def __del__(self):
    print("炸弹销毁 %s"%self.rect)
    pass

class Hero(GameSprite):
def init(self):
super().init("./images/3.png",0)
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom
self.bullets = pygame.sprite.Group()

def update(self):
    self.rect.x += self.speed
    if self.rect.x <0:
        self.rect.x = 0
    elif self.rect.right > SCREEN_RECT.right:
        self.rect.right = SCREEN_RECT.right

def fire(self):
    print("发射子弹")

    for i in (0,1,2):
        bullet = Bullet()
        bullet.rect.bottom = self.rect.y - i*20
        bullet.rect.centerx = self.rect.centerx
        self.bullets.add(bullet)

class Bullet(GameSprite):
def init(self):
super().init("./images/bullet1.png", -2)

def update(self):
    super().update()
    if self.rect.bottom < 0:
        self.kill()

def __del__(self):
    print("子弹被销毁")

4.实验

Python语言程序设计课程论文--飞机大战_第2张图片

5.总结和展望

基于Python的飞机大战游戏是采用python语言及其pygame模块开发完成的.本项目实现了游戏流程中的所有功能,界面布局更加人性化,并有着良好的可扩展性.
这次项目设计开发为今后的学习和工作产生了积极的意义.由于还是初学者,在项目设计中还有欠缺和考虑不周的地方.游戏还有待进一步研究和改善.

你可能感兴趣的:(python,python,飞机大战)