import pygame
from pygame.locals import *
import random
import time
class herobullet():
def __init__(self,x,y,windows):
self.x=x
self.y=y
self.windows=windows
self.pic=pygame.image.load('d:\\desktop\\it研究院-python\\new_stydy\\img\\bullet.png')
def draw(self):
self.windows.blit(self.pic,(self.x,self.y))
self.move()
def move(self):
self.y=self.y-5
class dijibullet():
def __init__(self,x,y,windows):
self.x=x
self.y=y
self.windows=windows
self.pic=pygame.image.load('d:\\desktop\\it研究院-python\\new_stydy\\img\\bullet1.png')
def draw(self):
self.windows.blit(self.pic,(self.x,self.y))
self.move()
def move(self):
self.y+=5
windows=pygame.display.set_mode((480,650),0,32)#建立視窗 0,32 為固定值
beijingtu=pygame.image.load('d:\\desktop\\it研究院-python\\new_stydy\\img\\1.png')#匯入背景圖
pygame.display.set_caption('飛機大戰(小小爭520)')#給視窗命名
icon=pygame.image.load('d:\\desktop\\it研究院-python\\new_stydy\\img\\liuzheng.png')#左上角可更改
pygame.display.set_icon(icon)#顯示背景圖
heroplane1=pygame.image.load('d:\\desktop\\it研究院-python\\new_stydy\\img\\hero1.png')#匯入我方戰機
heroplane2=pygame.image.load('d:\\desktop\\it研究院-python\\new_stydy\\img\\hero2.png')#為了使我方戰機能夠動態展示,再次匯入一次其它相同戰機
dijiplane=pygame.image.load('d:\\desktop\\it研究院-python\\new_stydy\\img\\666.png')#匯入敵方戰機
dijiplanelist=['d:\\desktop\\it研究院-python\\new_stydy\\img\\enemy1_down1.png',
'd:\\desktop\\it研究院-python\\new_stydy\\img\\enemy1_down2.png',
'd:\\desktop\\it研究院-python\\new_stydy\\img\\enemy1_down3.png',
'd:\\desktop\\it研究院-python\\new_stydy\\img\\enemy1_down4.png'
] #將敵方戰機消滅動態放在敵方戰機列表裡,分別顯示4個不同狀態
pygame.key.set_repeat(50,10)#為了能夠使按鍵持續按動
heroplanex=190#我方戰機在x軸座標 從左上角開始
heroplaney=526#我方戰機在y軸座標
heroindexshift=0#切換**用來顯示動態效果
dijiplanex=205.5#敵方戰機在x軸座標
dijiplaney=0#敵方戰機在y軸座標
direct='左'#敵方戰機初始值方向 從左開始
biulist=#將我方發出的無數子彈放在乙個列表裡
dijibiulist=#將敵方發出的無數子彈放在乙個列表裡
dijiplanebomb=false #敵方飛機發射子彈開始不發射
dijiplanebombindex=0 #敵方飛機放在列表裡 下標索引 初始值為0
while true:
windows.blit(beijingtu,(0,0))#將背景圖貼到視窗
if heroindexshift==0:#剛要動的時候(動態效果剛開始時)
windows.blit(heroplane1,(heroplanex,heroplaney))
heroindexshift+=1
else:
windows.blit(heroplane2,(heroplanex,heroplaney))
heroindexshift=0
#我方兩架戰機疊加在一起來顯示動態效果,一架飛機不可以顯示動態,當閃動的時候說明疊加在一起
if direct=='左':#調整敵機方向 並不是指從左或右 開始 也可以用1,0表示 此時敵機只有左右移動
dijiplanex-=3#敵方戰機移動三個座標值
if dijiplanex<=0:#當敵機走到左側臨界視窗時,只能往右方向走 相反同理
direct='右'
if direct=='右':
dijiplanex+=3
if dijiplanex>=480-69:#敵機走到右側臨界視窗
direct='左' #此時敵機會折返往左走
if dijiplanebomb == false:#敵機還沒有**
windows.blit(dijiplane,(dijiplanex,dijiplaney))#還是原圖
else:
if dijiplanebombindex==len(dijiplanelist):#否則 敵機**
time.sleep(1)
exit()
pic=pygame.image.load(dijiplanelist[dijiplanebombindex])#4張以匯入的敵機狀態 用來顯示**後的狀態
windows.blit(pic,(dijiplanex,dijiplaney))#敵機**狀態一一顯示出來
dijiplanebombindex+=1# 0,1,2,3 這幾張一一顯示
time.sleep(0.5)#**間隔0.5秒
for biu in biulist:#將我方發射的子彈從子彈庫里提取出來
biu.draw()#將我方子彈畫出來
biulist.remove(biu) if biu.y<0 else '' #當我方發射的子彈到達上邊界時 移除子彈
for biu in dijibiulist:
biu.draw()
dijibiulist.remove(biu) if biu.y>650-69//2 else ''
for event in pygame.event.get():
if event.type==quit:
print('關閉了')
exit()
if event.type == keydown:
if event.key==k_left:
print('向左')
heroplanex=heroplanex-5 if heroplanex>=5 else 0
if event.key==k_right:
print('向右')
heroplanex=heroplanex+5 if heroplanex<=375 else 380
if event.key==k_up:
print('向上')
heroplaney=heroplaney-5 if heroplaney>=5 else 0
if event.key==k_down:
print('向下')
heroplaney=heroplaney+5 if heroplaney<=521 else 526
if event.key==k_space:
onebiu=herobullet(heroplanex+50-11,heroplaney-22,windows)
#對我方戰機方向進行設定 上下左右,不能出邊界 ,呼叫類函式 發射子彈位置在飛機中間:注意子彈也有長寬
x=random.randint(0,100)#
if x==12 or x==29:#讓子彈隨機發射 任意數均可
onebiu=dijibullet(dijiplanex+69//2-9//2,dijiplaney+89,windows)#敵機發射第一課子彈在飛機正中間
dijirect=rect(dijiplanex,dijiplaney,69,69)#敵機看成矩形方便碰撞檢測
for biu in biulist:
biurect=rect(biu.x,biu.y,22,22)#我方子彈看成矩形方便和敵機碰撞檢測
if biurect.colliderect(dijirect):#碰撞檢測
print('**')
dijiplanebomb=true
biulist.remove(biu)
pygame.display.update()
報表製作簡化版
機房收費系統無論是重構還是第一版,都用到了報表,為什麼在乙個系統中要新增報表呢?報表的作用是什麼呢?報表百科。我理解的報表是 向上級報告情況的乙個媒介,沒有固定的格式。之前在專案中,我們真正給企業做過一次報表,是以匯出word的形式生成的,大概格式如圖 這次在自己的 機房收費系統 中設計報表,我使用...
簡化版桶排序
例 讓計算機隨機讀入 5個數然後將這 5個數從大到小輸出 輸入 5 3 5 2 8 輸出 8 5 5 3 2 思路 先申請乙個大小為 11 的陣列 int a 11 現在你已經有了 11 個變數,編號從 a 0 a 10 剛開始,我們將 a 0 a 10 都初始化為 0,表示這些0 10的數字還沒出...
飛機大戰(小鳥版)
using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...