Update README.md

main
m5tajiz6o 8 months ago
parent 82c9887337
commit cff1bd2d0d

@ -1,4 +1,3 @@
# 3a3
#pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame
import pygame, sys, time, random
from pygame.locals import *
@ -6,7 +5,7 @@ FPS = 60
winwidth = 1200
winheight = 800
maxhealth = 8
basicspeed = 10
basicspeed = 7
createenemytime = 2
createbullettime = 0.2
enemybreadth = 30
@ -15,7 +14,9 @@ enemyheight = 40
playerwidth = 40
playerheight = 40
enemymaxhealth = 2
enemybulletspeed = 4
enemybulletsize = 6
enemybulletgailv = 10#每一秒产生一个子弹的概率
#R G B
red = (255, 0, 0)
green = (0, 255, 0)
@ -25,9 +26,10 @@ black = (0, 0, 0)
yellow = (255, 255, 0)
bgcolor = white
enemybulletcolor = black
def main():
global moveright,moveleft,moveup,movedown,dissurf,bulletlist,enemylist,basicfont,\
global moveright,moveleft,moveup,movedown,dissurf,bulletlist,enemybulletlist,enemylist,basicfont,\
bigfont,biggerfont,biggestfont,score,level,clock,playerobj
pygame.init()
dissurf = pygame.display.set_mode((winwidth,winheight))
@ -55,6 +57,7 @@ def main():
attackflag = False
enemylist = []
bulletlist = []
enemybulletlist = []
attackstarttime = time.time()
bulletcreatecishu = 0
score = 0
@ -109,8 +112,10 @@ createbullet(playerobj['x']+playerobj['width']/2-3,playerobj['y']-playerobj['hei
bulletcreatecishu += 1
if not enemylist:
updateenemylist(enemylist,number = 20)
createfleet(enemylist)
n = random.randint(1,5)
guanqia = Guanqia(20)
enemybulletlist.clear()
eval(f'guanqia.guanqia{n}')(0.6,10)
enemylistfu = enemylist[:]
@ -128,7 +133,16 @@ createbullet(playerobj['x']+playerobj['width']/2-3,playerobj['y']-playerobj['hei
updatefleet(enemy)
allattack(enemy,bulletlist,playerobj)
drawenemyhealth(enemy)
if random.randint(1,6000) <= enemybulletgailv:
appendenemybullet(enemy,playerobj)
if enemybulletlist:
updateenemybulletlocation()
drawenemybullet()
beibulletattack(playerobj)
drawplayerhealth(playerobj)
drawscore()
@ -141,12 +155,129 @@ createbullet(playerobj['x']+playerobj['width']/2-3,playerobj['y']-playerobj['hei
pygame.display.update()
clock.tick(FPS)
class Guanqia:
def __init__(self,number):
self.allnumber = number
self.starttime = 0
self.bubianstarttime = time.time()
self.cishu = 0
if random.randint(0,1) == 0:
self.moveflag = 1#设置为1或-11向右反之向左
else:
self.moveflag = -1
def guanqia1(self,jiangetime,lasttime):#无规律x坐标间隔时间相同出现敌人
if time.time() - self.bubianstarttime <= lasttime:
if time.time() - self.starttime > jiangetime:
enemy = createenemy()
enemy['y'] = enemybreadth
enemy['x'] = random.randint(enemybreadth, winwidth-enemy['width']-enemybreadth)
enemylist.append(enemy)
self.starttime = time.time()
def guanqia2(self,jiangetime,lasttime):#从左右两边界生成,间隔时间相同
if time.time() - self.bubianstarttime <= lasttime:
if time.time() - self.starttime > jiangetime:
enemy0, enemy1 = createenemy(), createenemy()
enemy0['y'], enemy1['y'] = enemybreadth, enemybreadth
enemy0['x'], enemy1['x'] = enemybreadth, winwidth-enemy1['width']-enemybreadth
enemylist.append(enemy0)
enemylist.append(enemy1)
self.starttime = time.time()
def guanqia3(self,jiangetime,lasttime):#从中间成对出现,间隔时间相同
if time.time() - self.bubianstarttime <= lasttime:
if time.time() - self.starttime > jiangetime:
enemy0, enemy1 = createenemy(), createenemy()
enemy0['y'], enemy1['y'] = enemybreadth, enemybreadth
enemy0['x'], enemy1['x'] = winwidth/2 - enemy0['width'] - enemybreadth/2, winwidth/2 + enemybreadth/2
enemy0['moveleft'],enemy0['moveright'] = True, False
enemy1['moveleft'],enemy1['moveright'] = False, True
enemylist.append(enemy0)
enemylist.append(enemy1)
self.starttime = time.time()
def guanqia4(self,jiangetime,lasttime):#不会移动快速左右生成形成s形曲线
if time.time() - self.bubianstarttime <= lasttime:
breadth = 200
if time.time() - self.starttime > jiangetime:
enemy = createenemy()
enemy['y'] = enemybreadth
enemy['x'] = enemybreadth + self.cishu * breadth
enemy['moveleft'] = False
enemy['moveright'] = False
if enemy['x'] + enemy['width'] + enemybreadth > winwidth:
self.moveflag = -1
elif enemy['x'] - enemybreadth < 0:
self.moveflag = 1
if self.moveflag == 1:
self.cishu += 1
elif self.moveflag == -1:
self.cishu -= 1
enemylist.append(enemy)
self.starttime = time.time()
def guanqia5(self,jiangetime,lasttime):#一次性创建舰队
if not enemylist:
updateenemylist(enemylist,number = self.allnumber)
createfleet(enemylist)
'''
def controllevel():
if
if
'''
def beibulletattack(playerobj):
playerrect = pygame.Rect(playerobj['x'],playerobj['y'],playerobj['width'],playerobj['height'])
for bullet in enemybulletlist:
bulletrect = pygame.Rect(bullet['x'],bullet['y'],bullet['width'],bullet['height'])
if bulletrect.colliderect(playerrect):
playerobj['health'] -= 1
enemybulletlist.remove(bullet)
if playerobj['health'] <= 0:
showgameover()
def drawenemybullet(enemy):
'''
def drawenemybullet():
for bullet in enemybulletlist:
dissurf.blit(bullet['surf'], (bullet['x'], bullet['y']))
def updateenemybulletlocation():
for bullet in enemybulletlist:
bullet['x'] += bullet['xspeed']
bullet['y'] += bullet['yspeed']
def appendenemybullet(enemy,playerobj):
lx = playerobj['x'] - enemy['x']
ly = playerobj['y'] - enemy['y']
ls = (lx**2 + ly**2) ** (1/2)
xspeed = enemy['bulletspeed'] * lx / ls
yspeed = enemy['bulletspeed'] * ly / ls
bullet = createenemybullet(enemy['x']+enemy['width']/2-3,enemy['y']+enemy['height']/2*3,
enemy['bulletsize'],enemy['bulletsize'],enemy['bulletspeed'],black)
bullet['xspeed'] = xspeed
bullet['yspeed'] = yspeed
enemybulletlist.append(bullet)
def createenemybullet(x,y,width,height,speed,color):
bullet = {'x':x,
'y':y,
'width':width,
'height':height,
'speed':speed,
'xspeed':0,
'yspeed':0,
'surf':pygame.Surface((width,height)),}
bullet['surf'].fill(color)
return bullet
def reset():
@ -155,6 +286,7 @@ def reset():
level = 0
bulletlist.clear()
enemylist.clear()
enemybulletlist.clear()
playerobj['x'] = winwidth / 2 - playerwidth / 2
playerobj['y'] = winheight - playerheight
playerobj['health'] = maxhealth
@ -304,7 +436,11 @@ def createenemy():
'moveleft':False,
'health':enemymaxhealth,
'surf':pygame.image.load('敌人飞船.jpg'),
'score':100,}
'score':100,
'attack':1,
'bulletspeed':enemybulletspeed,
'bulletsize':enemybulletsize,
'bulletcolor':enemybulletcolor,}
enemy['surf'] = pygame.transform.scale(enemy['surf'],(enemywidth,enemyheight))
enemy['surf'] = pygame.transform.flip(enemy['surf'],False,True)
jindutiao = JinzhiJindutiao(enemy['x']+enemy['width']/2,enemy['y']-2,enemy['width']/3*2,8,
@ -382,14 +518,16 @@ def allattack(enemy,bulletlist,playerobj):
def beiattack(enemy,playerobj):
global score
enemyrect = pygame.Rect(enemy['x'],enemy['y'],enemy['width'],enemy['height'])
playerrect = pygame.Rect(playerobj['x'],playerobj['y'],playerobj['width'],playerobj['height'])
if enemyrect.colliderect(playerrect):
enemylist.remove(enemy)
playerobj['health'] -= 1
score += enemy['score']
if playerobj['health'] <= 0:
showgameover()
def dealxiaoshi(bulletlist,enemylist):
@ -428,4 +566,3 @@ def terminate():
sys.exit()
main()

Loading…
Cancel
Save