|
|

楼主 |
发表于 2020-1-30 16:39:15
|
显示全部楼层
main.py- from turtle import *
- from sprite import *
- from setting import *
- from player import *
- from bullet import *
- from enemy import *
- from game_functions import *
- from supply import *
- import random
- class Game():
- def __init__(self):
- self.running=True
- setup(WIDTH,HEIGHT)
- title(TITLE)
- tracer(0)
-
- def new(self):
- self.all_sprites=Group()
- self.players=Group()
- self.bullets=Group()
- self.enemies=Group()
- self.middleEnemies=Group()
- self.largeEnemies=Group()
- self.supplies=Group()
- self.player=Player()
- self.players.add(self.player)
- self.all_sprites.add(self.player)
- self.supply = Supply()
- self.supplies.add(self.supply)
- self.all_sprites.add(self.supply)
- for i in range(30):
- bullet = Bullet()
- self.bullets.add(bullet)
- self.all_sprites.add(bullet)
- for i in range(10):
- enemy=Enemy()
- self.enemies.add(enemy)
- self.all_sprites.add(enemy)
- for i in range(5):
- middleEnemy=MiddleEnemy()
- self.middleEnemies.add(middleEnemy)
- self.all_sprites.add(middleEnemy)
- for i in range(1):
- largeEnemy=LargeEnemy()
- self.largeEnemies.add(largeEnemy)
- self.all_sprites.add(largeEnemy)
- self.player.load(self.bullets)
- self.key_binding()
- self.run()
-
- def run(self):
- self.playing=True
- while self.playing:
- self.update()
- update()
- def update(self):
- self.all_sprites.update()
- collide(self.players,self.enemies,20,True,True)
- collide(self.bullets,self.enemies,20,True,True)
- collide(self.players,self.middleEnemies,30,True,True)
- collide(self.bullets,self.middleEnemies,30,True,True)
- collide(self.players,self.largeEnemies,40,True,True)
- collide(self.bullets,self.largeEnemies,40,True,True)
- hits1 = collide(self.bullets,self.enemies,20,True,True)
- print(hits1)
- for hit in hits1:
- if random.random()<1 and self.supply.active == False:
- self.supply.active = True
- self.supply.goto(hit)
-
-
- def show_start_screen(self):
- pass
- def show_go_screen(self):
- pass
- def key_binding(self):
- onkey(self.player.forward,'w')
- onkey(self.player.backward,'s')
- onkey(self.player.left,'a')
- onkey(self.player.right,'d')
- onkey(self.player.shoot,'space')
- listen()
- if __name__=='__main__':
- g = Game()
- g.show_start_screen()
- while g.running:
- g.new()
- g.show_go_screen()
复制代码
game_functions.py
- def collide(group1,group2,distance,f1,f2):
- hits = []
- for sprite1 in group1.group:
- for sprite2 in group2.group:
- if sprite1.distance(sprite2)<distance:
- hits.append(sprite2.pos())
- if f1:
- sprite1.hit()
- if f2:
- sprite2.hit()
- return hits
复制代码
setting.py
- from sprite import *
- from setting import *
- from player import *
- class Bullet(Sprite):
- def __init__(self):
- Sprite.__init__(self)
- self.shape('circle')
- self.color('green')
- self.active=False
- self.goto(-1000,-1000)
-
- def move(self):
- if self.active:
- self.border_check()
- self.sety(self.ycor()+BULLET_SPEED)
-
- def border_check(self):
- if self.ycor()>(HEIGHT//2):
- self.active = False
- self.goto(-1000,-1000)
- def hit(self):
- self.active=False
- self.goto(-1000,-1000)
-
复制代码
bullet.py
- from sprite import *
- from setting import *
- from player import *
- class Bullet(Sprite):
- def __init__(self):
- Sprite.__init__(self)
- self.shape('circle')
- self.color('green')
- self.active=False
- self.goto(-1000,-1000)
-
- def move(self):
- if self.active:
- self.border_check()
- self.sety(self.ycor()+BULLET_SPEED)
-
- def border_check(self):
- if self.ycor()>(HEIGHT//2):
- self.active = False
- self.goto(-1000,-1000)
- def hit(self):
- self.active=False
- self.goto(-1000,-1000)
-
复制代码
player.py
- from sprite import *
- from setting import *
- from bullet import *
- class Player(Sprite):
- def __init__(self):
- Sprite.__init__(self)
- self.shape('square')
- self.color('red')
- def forward(self):
- self.y += PLAYER_SPEED
- def backward(self):
- self.y -= PLAYER_SPEED
- def left(self):
- self.x -= PLAYER_SPEED
- def right(self):
- self.x += PLAYER_SPEED
- def load(self,bullets):
- self.bullets = bullets
- def shoot(self):
- bullet = self.bullets.group.pop(0)
- bullet.goto(self.pos())
- bullet.active=True
- self.bullets.add(bullet)
- def hit(self):
- self.ht()
复制代码
sprite.py
- from sprite import *
- from setting import *
- import random
- class Enemy(Sprite):
- def __init__(self):
- Sprite.__init__(self)
- self.shape('triangle')
- self.color('black')
- self.reset()
-
- def move(self):
- self.sety(self.ycor()-ENEMY_SPEED)
- self.border_check()
- def reset(self):
- x = random.randint(-WIDTH//2,WIDTH//2)
- y = random.randint(HEIGHT//2+100,HEIGHT//2+200)
- self.goto(x,y)
- def border_check(self):
- if self.ycor()<-HEIGHT//2:
- self.reset()
- def hit(self):
- self.reset()
- class MiddleEnemy(Enemy):
- def __init__(self):
- Enemy.__init__(self)
- self.color('purple')
- self.life = 2
- def hit(self):
- self.life -=1
- if self.life == 0:
- self.reset()
- self.life = 2
- class LargeEnemy(Enemy):
- def __init__(self):
- Enemy.__init__(self)
- self.color('orange')
- self.life = 3
- def hit(self):
- self.life -= 1
- if self.life == 0:
- self.reset()
- self.life = 3
复制代码
enemy.py- from sprite import *
- from setting import *
- import random
- class Enemy(Sprite):
- def __init__(self):
- Sprite.__init__(self)
- self.shape('triangle')
- self.color('black')
- self.reset()
-
- def move(self):
- self.sety(self.ycor()-ENEMY_SPEED)
- self.border_check()
- def reset(self):
- x = random.randint(-WIDTH//2,WIDTH//2)
- y = random.randint(HEIGHT//2+100,HEIGHT//2+200)
- self.goto(x,y)
- def border_check(self):
- if self.ycor()<-HEIGHT//2:
- self.reset()
- def hit(self):
- self.reset()
- class MiddleEnemy(Enemy):
- def __init__(self):
- Enemy.__init__(self)
- self.color('purple')
- self.life = 2
- def hit(self):
- self.life -=1
- if self.life == 0:
- self.reset()
- self.life = 2
- class LargeEnemy(Enemy):
- def __init__(self):
- Enemy.__init__(self)
- self.color('orange')
- self.life = 3
- def hit(self):
- self.life -= 1
- if self.life == 0:
- self.reset()
- self.life = 3
复制代码
supply.py
- from sprite import *
- from setting import *
- class Supply(Sprite):
- def __init__(self):
- Sprite.__init__(self)
- self.shape('turtle')
- self.color('black')
- self.active = False
- self.goto(-1000,1000)
- def move(self):
- self.sety(self.ycor()-SUPPLY_SPEED)
- self.border_check()
- def border_check(self):
- if self.ycor()<-HEIGHT//2:
- self.active = False
- self.goto(-1000,-1000)
复制代码
这是完整代码
|
|