diff --git a/README.md b/README.md index 13b2cb0..5757f7c 100644 --- a/README.md +++ b/README.md @@ -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或-1,1向右,反之向左 + 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() -