决定自学开始,在这里记录一下学习的过程,工作之余作为一个非科班出身的IT从业者,想利用时间提升自己的开发能力,所以第一个学习的语言是python,下面将学习2个月的成果,也就是第一个pygame 的项目发出来,欢迎大神们的指正。
1、主程序
coding=gbk
import pygame
from setting import Settings
from setting import Ship
from setting import GameStats
from setting import Button
from setting import Scoreboard
import gamefunction as gf
调用精灵组管理类
from pygame.sprite import Group
def rungame():
pygame.init()
ai_setting=Settings()
screan=pygame.display.set_mode((ai_setting.screan_width,ai_setting.screan_height))
pygame.display.set_caption(‘zealerzhang’)
#创建play按钮
play_button=Button(ai_setting,screan,’play’)
#创建一个用于游戏统计数据的实例
stats=GameStats(ai_setting)
#创建剩余飞船
sbfc=Scoreboard(ai_setting,screan,stats)
sbfc.rect.top=60
sbfc.board_color=(100,200,80)
#创建记分牌
sb=Scoreboard(ai_setting,screan,stats)
ship=Ship(screan)
#创建一个用于存储子弹的编组
bullets=Group()
#创建外星人编组
aliens=Group()
#更新外星人编组
gf.create_fleet(ai_setting,screan,aliens,ship)
#开始游戏的主循环
while True:
#检查事件
gf.check_events(ai_setting,screan,ship,bullets,stats,play_button,aliens)
if stats.game_active:
#飞船位置更新
ship.update(ai_setting.ship_speed_factor)
#移除到达屏幕边缘的子弹
gf.update_bullets(bullets,aliens,ai_setting,screan,ship,stats,sb,sbfc)
#print(len(bullets))
#子弹位置更新,编组调用update时,对每个精灵(实例)调用update()方法
bullets.update()
#更新外星人的位置
gf.update_alien(aliens,ai_setting,ship,stats,bullets,screan)
#让绘制的屏幕可见
gf.update_screan(ai_setting,screan,ship,bullets,aliens,play_button,stats,sb,sbfc)
rungame()
2、用到的方法
#coding=gbk
import pygame
import sys
from bullet import Bullet
from setting import Alien
from time import sleep
def fire_bullet(bullets,ai_setting,screan,ship):
#添加子弹的函数
if len(bullets)
coding=gbk
import pygame
from pygame.sprite import Sprite
import pygame.font
class Settings():
“”“存储外星人入侵的所有参数的类”“”
def init(self):
“”“初始化游戏的设置”“”
self.screan_width=1200
self.screan_height=600
self.color=(100,100,100)
self.ship_speed_factor=2
self.ship_llimit=3
#子弹设置
self.bullet_speed_factor=1
self.bullet_width=3
self.bullet_height=15
self.bullet_color=(20,20,20)
self.bullet_allowed=5
#外星人设置
self.alien_speed_factor=0.5
self.fleet_drop_speed=2
#fleet_driction 为1表示向右移动,-1表示向左移动
self.fleet_driction=1
self.alien_point=50
#加快游戏节奏的设置
self.speed_up=1.1
self.score_up=1.5
self.initialize_settings()
def initialize_settings(self):
“”“初始化游戏,进而进行改变的设置”“”
self.ship_speed_factor=1.5
self.bullet_speed_factor=3
self.alien_speed_factor=1
self.alien_point=50
def increase_speed(self):
#随着玩家等级的提高,提高速度
self.ship_speed_factor*=self.speed_up
self.bullet_speed_factor*=self.speed_up
self.alien_speed_factor*=self.speed_up
self.alien_point=int(self.alien_point*self.score_up)
print(self.alien_point)
class Ship():
def init(self,screan):
“”“初始化飞船,并初始化位置”“”
self.screan=screan
#加载飞船图像并获取其外接矩形,pygame.image.load,返回的是surface
self.image=pygame.image.load(‘images/ship.png’)
#self.image.fill((110,110,110))
self.rect=self.image.get_rect()
self.screan_rect=screan.get_rect()
self.moving_right=False
self.moving_left=False
self.moving_up=False
self.moving_down=False
#将每艘飞船放在底部中央
self.rect.centerx=self.screan_rect.centerx
self.rect.bottom=self.screan_rect.bottom
def blitme(self):
“”“在指定位置绘制飞船”“”
#一定要注意函数内的变量顺序
self.screan.blit(self.image,self.rect)
def update(self,setting):
#飞船位置的变化
#向左移动
if self.moving_right and self.rect.right
coding=gbk
import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):
“”“一个对发射子弹管理的类”“”
def init(self,ai_setting,screan,ship):
#继承类的方法
super().init()
self.screan=screan
#在(0,0)处创建一个表示子弹的矩形
self.rect=pygame.Rect(0,0,ai_setting.bullet_width,ai_setting.bullet_height)
self.rect.centerx=ship.rect.centerx
self.rect.top=ship.rect.top
#存储用小数表示的子弹位置
self.y=float(self.rect.y)
self.color=ai_setting.bullet_color
self.speed_factor=ai_setting.bullet_speed_factor
def update(self):
“”“向上移动子弹”“”
#更新表示子弹位置的小数值
self.y-=self.speed_factor
#更新子弹的rec值
self.rect.y=self.y
def draw_bullet(self):
“”“在屏幕上绘制子弹”“”
pygame.draw.rect(self.screan,self.color,self.rect)