
1978年在Spielekonsolen的Geschichte der Computerspiele and erschien erstmals中入侵太空的入侵者Klassiker。 在日本的Spielhallen战争中,daßnach kurzer Zeit死于100日元-明岑im ganzen土地knapp wurden。
死于1979年的二战之后,阿辛(Ahari)2600剧院在海姆马克特(Durchbruch)的影片市场上亮相。
在Diesem Beitragmöchteich eine(eigenwillige)版本中,Klassikers mit Python和dem Turtle-Modul编程器死亡。 从模板开始到模板,从舞台到桌面再到尖顶。
范本广告素材和图片,尺寸为700×700像素芬斯特和艾因姆·施瓦岑欣特格伦德祖弗芬恩:
#太空侵略者第1阶段:模板türid= 700导入Turtle-Programmeimport turtle
高度= 700#高层指挥官死于Klassendefinitionen hin
#Initialisierungwn = t.Screen()
wn.bgcolor(“#000000”)
wn.setup(width = WIDTH,height = HEIGHT)
wn.title(“太空侵略者–阶段1”)#Bildschirm-Refresh ausschalten
wn.tracer(0)def exitGame():
全球保持
keepGoing = False#Auf Tastaturereignisse lauschen
t.listen()
t.onkey(exitGame,“ Escape”)#逃生bedet das SpielkeepGoing = True
在keepGoing期间:
wn.update()#Bildschirm刷新einschalten
#und den gesamten Bildschirm neuzeichnen
乌龟与模样的重要故事,康斯坦丁与布雷斯特与芬斯特的巨星节。 Dann wird das Fenster的初学者和副教授。
Eine wn.tracer(0)
ist der Befehl wn.tracer(0)
。 Denn im»Normalbetrieb«的作品Jede Turtle kontinuierlich,jeden Graphikbefehl sofort abzuarbeiten und zu zeichnen。 Das wird mit diesem Befehl ausgeschaltet,Solange wie ergültigist,wird mit allen Zeichnungen nur ein Buffergefüllt。
wn.update()
der Befehl wn.update()
Bildschirm中吸取缓冲区。 死于节目主持人节目,所以在杜尔克劳夫·德勒克劳斯因缓冲而死后,他就在书店里死了。 死于Graphikausgabe Enorm。
狄恩斯版本冯· 太空侵略者的命运在塔斯塔图尔·沃森(Dastur gesteuert werden),听众(eingerichtet werden)面前。
Zur Zeit lauscht er nur auf die Escape -Taste,mit der das Spiel beedet wird。
乌龟模块的“威特与芬特斯之父”,也是墨德尔·吕德夫,也因不合时宜而丧命。 达赫尔山峰(Daher sollte die Spielewelt deutlich内部) Ich habe michfüreine 600×600 PixelgroßeWelt entschieden,Im im Fenster zentriere。 Dazu habe ich ert einmal zwei weitere Konstanten definiert:
WW = 600
宽= 600
Natürlichwollte ich Space Invaders mit allenVorzügender Objektorienterung Implementieren,以及因此而产生的最终灭绝Klasse GameWorld
定义:
GameWorld(t.Turtle)类:
def __init __():
t.Turtle .__ init __(自己)
self.penup()
self.hideturtle()
自速度(0)
self.color(“白色”)
self.pensize(3)
self.keepGoing =真
def draw_border(自己):
self.penup()
self.goto(-WW / 2,-WH / 2)
self.pendown()
对于我在范围(4)中:
自我转发(WW)
self.left(90)def exit_game(self):
self.keepGoing =假
安全性与安全性的关系Funktion exit_game()
Methode的死者Klasse gemacht。 Damit verhindere ich,daßich keepGoing keepGoing
全球性的 Namensraum sauber定义和名称。 索米特·坎恩·希奇(Somit kann ich)死于全球Funktion exitGame()
定义的第一阶段 。
Das bedingt的监听器,正在监听器中 :
t.listen()
t.onkey(world.exit_game,“ Escape”)#逃生bedet das Spiel
Darüberwird die Welt初始化和Methode zum Zeichnen des Randes aufgerufen:
#Objekte initialisieren
世界= GameWorld()
world.draw_border()
Alles andere bleibt gleich。 Wenn wir nun das Programf aufrufen,与Welt initialisiert和mit einemweißenRand versehen在一起。 逃脱程序的趣味性,以及听众对方法和基恩功能的了解。
Ursprünglich战争精灵( Graphicobjekt ),图形硬件,Graphikobjekt和Graphikhardeküberdas Hintergrundbild beziehungsweise den restlichen吸入Birdschirmanzeige eingeblendet wird。 模具硬件的位置错误。
来自Sprite-Technik的高级技术,由计算机制造的,由ohne的问题在Ursprünglicher表格中的Bildschirm darzustellen和zugleich den Hintergrund发行。 Auf derdafürnötigeSpeicherplatz ist weniger wichtig geworden。 可以从软件(统计图形硬件)和软件的修女那里获得经验。 Solche Software-Sprites高速运转的Grundlage快速jeden Computerspiels和daher ist es sinnvoll,Ihnen eine eigene Klasse zu widmen:
Sprite(t.Turtle)类:
def __init __(self,tshape,tcolor):
t.Turtle .__ init __(自己)
self.penup()
自速度(0)
自形(tshape)
self.color(tcolor)
self.speed = 1
欧拉·克拉斯(Elgenschaften der Klasse) Turtle
。 Sie ist momentan noch ein wenigschmalbrüstig,aber schonmächtiggenug,da von ihr der Spieler abgeleitet werden kann(schließlicherbt sie alle Methoden der Turtle
):
类Actor(Sprite):
def __init __(self,tshape,tcolor):
Sprite .__ init __(self,tshape,tcolor)
self.speed = 10
self.x = 0
self.y = -280
自我挫败感(90)
self.goto(self.x,self.y)
def go_left():
self.x-= self.speed
如果self.x <= -WW / 2 + 20:
self.x = -WW / 2 + 20
self.setx(self.x)def go_right(self):
self.x + = self.speed
如果self.x> = WW / 2-20:
self.x = WW / 2-20
self.setx(self.x)
Daich den Spieler mit Hilfe der Pfeiltasten nach rechts或其他人联系了Fensterrand bleibt(也称为nicht vertikal bewegen soll),也可能是Methoden go_left()
和go_right()
实施者。 Sie迷恋EineRänderabfrage,所以Spieler的一切都与Spielewelt verlassen kann息息相关。
德累克大街(Dreum),大街90号,距离诺登大街(Norden zeigt):
玩家=演员(“三角形”,“紫色”)
侦听器和侦听器之间的关系:
t.onkey(player.go_right,“右”)
t.onkey(world.exit_game,“ Escape”)#逃生bedet das Spiel
Wien haben nine eine Spielfigur,Pieltasten nach rechts und link bewegenkönnen。 Alsnächstes酒庄Spieler einen Gegner花店。
Um einem Gegner zu Implementieren,wird erst einmal eine Klasse Invaderbenötigt,死了(Überraschung!)ebenfalls von Sprite
abgeleitet wird:
类Invader(Sprite):
def __init __(self,tshape,tcolor):
Sprite .__ init __(self,tshape,tcolor)
self.speed = 2
self.x = -200
self.y = 250
self.goto(self.x,self.y)
def移动(自己):
self.x + = self.speed
如果self.x> = WW / 2-20或self.x <= -WW / 2 + 20:
self.y-= 40
self.sety(self.y)
self.speed * = -1
self.setx(self.x)
Der Gegener ist(德国)-einfach einegrüneScheibe:
敌人=侵略者(“圆圈”,“绿色”)
达希希·德·盖格纳州立大学方法学系的move()
作者,慕尼黑大学校区的米尔森·维尔斯:
而world.keepGoing:
wn.update()
敌人。移动()
Methode move()
Ränderab开始。 Im Gegensatz zum Spielerkönnenwir den rechten wie den linken Rand in einer mit or
verknüpftenAbfrageprüfen。 Wird einer derRändererreicht,坐标为40像素,而不是verschoben。 理查德·温特·恩芬奇
self.speed * = -1
erreicht,da ja bekannt die乘法mit -1
das Vorzeichen wechselt。
Bislang ist das Spiel noch ziemlich langweilig。 Um das zuändern,Werde ich nun eine Raketefürden Spielerhinzufügen。 Damit es nicht zu einfach wird,Rakete immer nur dann abgefeuert werden,wenn gerade keine andere Rakete im Spiel ist。 Dafürhab ich ert einmal die Klasse Bullet
angelegt,natürlichebenfalls von Sprite
erbt。
类Bullet(Sprite):
def __init __(self,tshape,tcolor):
Sprite .__ init __(self,tshape,tcolor)
self.speed = 20
自我挫败感(90)
self.shapesize(0.3,0.5)
self.state =“就绪”
self.hideturtle()
Die Rakete solltenatürlichetwas kleiner和schlanker als der Spieler sein。 self.shapesize(0.3, 0.5)
habe ich sie mit self.shapesize(0.3, 0.5)
schrumpfen lassen。 Une da eine Raketenatürlichschnell sein sollte,habe ich das mit self.speed = 20
。
Rakete的状态与self.state = "ready"
初始化。 Sie soll zweimöglicheZuständebesitzen,nämlich ready
,wie sie unterwegs ist。 Dasheißt,Zustand消防员,Sang sie nicht erneut abgeschossen werdenkönnen。 DerÜbersichthalber habe ich在zwei Methoden aufgeteteilt中去世:
def fire(个体):
如果self.state ==“就绪”:
self.state =“火”
self.x = player.xcor()
self.y = player.ycor()+ 10
self.setposition(self.x,self.y)
self.showturtle()
def移动(自己):
如果self.state ==“ fire”:
y = self.ycor()
y + =自速度
自定(y)
如果self.ycor()> = WH / 2-20:
self.hideturtle()
self.state =“就绪”
Damit ist死了Klasse Bullet
。 拉克特·米德·法fire()
Rakete mit der Methode fire()
生死了,苏黎世大学fire()
Uberprüftsie erst einmal fire()
,祖斯塔德fire()
wistand fire()
作家也很高兴。 Wenn ja,wird der Zustand auf fire
gesetzt。 乌龟与天体之间的关系不存在。
方法论move()
方法论,Raketeüberhauptim Zustand fire
,denn nur dannmußsie sich bewegen。 温恩·贾(Wenn ja),沃登(Koden)hochgesetzt和拉克特(Rakete)在科恩(Koordinaten bewegt)面前。 准备好兰德·斯皮尔韦尔特(Rand der Spielewelt),再到祖斯塔德·韦希瑟尔特·维德·祖尔(wistand sie versteckt und ihr Zustand wechselt wieder zu)–拜瑞特(Berit),伯尔特(erneut),阿伯特·弗埃特(aerget abgefeuert zu werden)。
现在进行中
导弹=子弹(“三角形”,“黄色”)
Eine Instanz der Klasse最初的werden。 Wie der Spieler ist sie ein Dreieck。 Das istnatürlichnicht zwingend notwendig,auch ein kleiner Kreis( circle
)wäredenkbar。
达·拉克特·米德·莱特阿斯特·阿布格菲特·沃登·霍尔
t.onkey(missile.fire,“ space”)
弗兰克·米奇·比特·尼曼德(Ferch mich bitte niemand),勒特·阿斯特(Leertaste)( space
)在基根萨茨·祖登·安德伦·塔斯滕·米特·克莱宁格施莱本(Anfangsbuchstaben)
Hauptschleife integriert werden中的Raketenatürlich和ZumSchluß博物馆。 Diese sieht dann so aus:
而world.keepGoing:
wn.update()
敌人。移动()
missile.move()
Das Programmist如此-wie jeder Andere Stage -lauffähig。 Leertastegerrückt,Spieler eine Rakete ab的前任主席,Rand des Spielfeldes verschwindet和dann wieder的新任主席一职。 Allerdings Passiert noch nichts,《 Invader invader》琐事。 Dazumußerst eine Kollisionserkennung Implementiert werden。
Da das Spiel mindestens zwei Kollisionserkennungen braucht,nämlicheinmal
- Rakete trifft auf einen Invader und Zum Anderen
- 入侵者kollidiert mit dem Spieler
Lohnt es sich,在Oberklasse Sprite
zu Implementieren中死亡。 Dafürhabe ich dort diese Methodeeingefügt:
def collides_with(self,obj):
一个= self.xcor()-obj.xcor()
b = self.ycor()-obj.ycor()
距离= math.sqrt((a ** 2)+(b ** 2))
如果距离<15:
返回True
其他:
返回False
保留下来的古堡,旧的毕达哥拉斯的萨尔赫特河畔的阿尔伯特,还有一些历史遗迹。 Um die Quadratwurzel( sqrt
)初等教育计划麻省理工学院
导入数学
Das Mathematikpaket aus der Standardbibliothek geladen werden。 遵守的方法< 15
正确的名称Ergebnisse带,Habe ich durch Probieren herausgefunden 1。
在霍夫施莱夫(Ber Hauptschleife)死去,死者(Avafrage)啤酒师(MöglichenKollisionen)(杀手入侵者oder Rakete攻击者入侵者),死于Dadurch deutlich一头Umfang Gewonnen帽子:
而world.keepGoing:
wn.update()
敌人。移动()
如果敌人.collides_with(玩家):
敌人.hideturtle()
player.hideturtle()
打印(“游戏结束!”)
world.keepGoing =假
missile.move()
如果missile.collides_with(enemy):
missile.hideturtle()
missile.state =“就绪”
导弹位置(-4000,-4000)
敌人。跳转()
斯皮尔勒(Kollidiert einer der Invader)和斯皮勒hideturtle()
beide mit hideturtle()
任职,《游戏结束!》和《世界大战》。
Trifft dagegen死于Rakete auf einen入侵者,Wird死于Rakete nicht nur aus dem Verkehr gezogen,sondern sie wird mit missile.setposition(-4000, -4000)
。setposition missile.setposition(-4000, -4000)
ready
状态后,状态为Rakete wieder。 Sie ist damit wieder bereit,新abgefeuert zu werden。
侵略者斯特拉夫(Der Invader wiederummußzur Strafe),特雷芬·拉森(miter Method Method jump()
der Klasse Invader
实施中的新和新:
def跳转(个体):
self.x = -200
self.y = 250
self.speed = 2
self.goto(self.x,self.y)
Damit der Invader在richiche«Richtung(冯·林克·纳赫·里希特)中饰演, self.speed = 2
ebenfalls wieder auf den Anfangszustand gesetzt。
Jetzt ist das Spiel schon richtig spielbar,probiert es aus。 温恩·迪格·特纳(Wake Dieerzurückgeworfen)死了。 Trifft dagegen der Invader auf den Spieler,wird das Spiel gnadenlos bedet。
太空侵略者战争(Wie jedes Andere Konsolenspiel)–尼古拉·达拉夫·奥斯格莱格(Nsht darauf ausgelegt),斯皮勒(Georgnen konnte)。 斯皮勒(Spieler)在慕尼黑的汽车修理厂(Date Spieler sollte nur eineMünze)中,因此,勒本·祖布利本(Lenben zu bleiben)的朗格·威格勒(Lange wiemöglich),新·斯登(Nenn Spierbeneötigteer eine neueMünze)。 Aber als Anreiz在脱颖而出的时候被入侵,而Spieler mit denhöchstenPunktzahlen (高分)沃登—温·尼尔曼·斯皮尔特( Wen niemand spielte)—监察员。 因此, 高登zuüübertreffen(在Daddelkasten zu werfen的neueMünzen中)枯竭了。
二战时期的达赫尔·默希特(Dahermöchteich)以及阿芬·拉森(Aenseigen lassen)和Abschußpunkte和sie im Fenster。 用户最喜欢的Kalasse HeadUpDisplay
游戏2:
HeadUpDisplay(t.Turtle)类:
def __init __():
t.Turtle .__ init __(自己)
self.penup()
self.hideturtle()
自速度(0)
self.color(“白色”)
self.goto(-WIDTH / 2 + 50,HEIGHT / 2-40)
self.score = 0
def update_score():
self.clear()
self.write(“ Punkte:{}”。format(self.score),False,align =“ left”,
字体=(“ Arial”,14,“普通”))
def change_score(自我,得分):
self.score + =分
self.update_score()
Es wird keinenüberraschen,死了,Klasse eine Unterklasse von Turtle
教授。 Die Klasseverfügtüberzwei Methoden, update_score()
和change_score()
。 加强基因组update_score()
更新时间:2012年10月14日级别:级别change_score()
更新change_score()
11月值: 庞克泰斯特美术馆和阿克苏莱伦美术馆和斯特莱美术馆。 (Die Koordinaten habe ichübrigensebenfalls durch Ausprobieren herausgefunden。)
change_score()
von ergreifender Schlichtheit。 较高级的应用程序将添加到Punktzahl添加程序和dann update_score()
。
国民经济和社会发展状况–最初的建议:
平视显示器= HeadUpDisplay()
hud.change_score(0)
尖顶帽子的铰链,您可以在下面查看:
而world.keepGoing:
wn.update()
敌人。移动()
如果敌人.collides_with(玩家):
敌人.hideturtle()
player.hideturtle()
打印(“游戏结束!”)
world.keepGoing =假
missile.move()
如果missile.collides_with(enemy):
missile.hideturtle()
missile.state =“就绪”
导弹位置(-4000,-4000)
敌人。跳转()
hud.change_score(10)
Nach jedem Treffer是hud.change_score hud.change_score(10)
朋友,您可以在Rand des Fensters网站上找到Punkte werden。
Mit nur einem Invader als Gegner和das Spiel noch nicht richtig spannend。 代尔·福尔赫·达斯·斯皮尔(Dolger Spiel mit Mehr)死于澳大利亚。 宜必思尚品博物馆和历史博物馆。 编辑本人的经验,请先阅读本节的《 East Konstanten定义程序》。
数量= 12
Die Leserin oder der Les Lesind aufgefordert,Selber mit der Anzahl der Gegner做实验。
Es ist eingroßerVorteil der objektorientierten Programmierung,eine solche,eigentlich gravierendeÄnderungkaumÄnderungenam Programmcode。 您可以在地图上找到自己的名字。 Damit nicht alle Gegner an der gleichen职位开始在米尔森(Wüdeder Konstruktor der Klasse) Invader
(德国)
def __init __(self,tshape,tcolor,x,y):
Sprite .__ init __(self,tshape,tcolor)
self.speed = 2
self.x = x
self.y = y
self.goto(self.x,self.y)
Er nimmt nun auch diegewünschtenx-和y-Koordinaten der Objekte auf。
保荐人和保荐人:
敌人= []
对于范围内的我(NUMENEMIES):
敌人。附加(入侵者(``圆圈'',``绿色'',-200 + i * 40、250))
Zuerst wurde eine leere Liste的enemies
angelegt。 Solche听,Objekte热情,Konvention mit dem Plural der Objekte bezeichnet奉献精神。
丹尼尔·韦登(Einner Schleife)的《丹尼尔·沃登(Dann werden append()
和《 Listehinzugefügt》中的append()
入侵者。 起点坐标x坐标起点um 40 Pixel nach rechts verschoben worden。
入侵者的死亡之地,入侵者的死亡之地, enemies
入侵者, enemies
仇恨, enemies
:
而world.keepGoing:
wn.update()
对于敌人中的敌人:
敌人。移动()
如果敌人.collides_with(玩家):
敌人.hideturtle()
player.hideturtle()
打印(“游戏结束!”)
world.keepGoing =假
missile.move()
对于敌人中的敌人:
如果missile.collides_with(enemy):
missile.hideturtle()
missile.state =“就绪”
导弹位置(-4000,-4000)
敌人。跳转()
hud.change_score(10)
Aber das程式设计师DenüchRechtüberschaubargeblieben。 Es ist im Prinzip die spielbare Endfassung,由Abschnittmöchteich es nur noch ein wenigaufhübschen创建。

ZumSchlußmöchteich Gegner mit dem Bild eines Ufosaufhübschen。 Ich habe死于Bild einem freien Spriteset经济学家,而das Jacob Zinman-Jeanes auf Gamedevtuts +veröffentlich帽子。 Die Lizenzbedingungen verlangen eine Nennung der Urheber。 Diesem bin ich hiermit nachgekommen。
乌龟-模组化蟒蛇-标准-图书馆书,GIF-书籍作者,形状,动物,动物,动物,动物和动物。 Zum einenmußteich das Bild des Ufos als形状注册商:
wn = t.Screen()
wn.bgcolor(“#000000”)
#wn.bgcolor(“#2b3e50”)
#path_to_bg = os.path.join(os.getcwd(),“ sources / spaceinvaders / farback.gif”)
#wn.bgpic(path_to_bg)
#ufo = os.path.join(os.getcwd(),“ sources / spaceinvaders / ufo.gif”)
ufo =“ ufo.gif”
wn.register_shape(ufo)
伊奇·哈贝(Ich habe)去世了,他是一名初学者,因为他的名字是弗恩斯特(Fenster)的首创。 Wis die Leserin oder der Les Les a den auskommentierten Zeilen erkennt,habe ich auch versucht,dem Spiel ein Hintergrundbild zu verpassen。 Das zwang aber mein neun Jahre在Knie中改变了MacBook。 我在Mac电脑上的动画制作是由动画制作的,这是因为动画制作的,而现在却是实验性的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

Das Hintergrundbild stammtübrigensebenfalls aus der obenerwähntenSprite-Sammlung。 图片大小为600×600像素的图片和GIF图片。
模具制造商,制造商和制造商之间的关系有所不同。 Dazu habe ich dann auch nach das Paket os
aus der Standardbibliothek importierenmüssen。 Wenn ihr das Spiel im Terminal startet reicht aber die Angabe
ufo =“ ufo.gif”
völligaus(温恩·达斯Bild im gleichen Verzeichnis wie Euer Programm liegt)。
ZumSchlußdarf allersdings nicht vergessen werden, 敌人的名字从下面的形状 :
对于范围内的我(NUMENEMIES):
nobody.append(Invader(ufo,“ green”,-200 + i * 40,250))
Puristen werden bemerken,在德国的法尔贝格大街(Berken)居住。 Das stimmt,Klasse Sprite
死了,而Farbgebungzuständig死了,所以variabel wiemöglich停了下来。 Und da die Farbegrünhoffentlich niemandenstört…
MehrÄnderungenwaren nichtnötig,um dem Spiel den letzten Schliff zu geben。 Natürlichkönnte人的野蛮人viel mehr机械师,wie im原始人-在mehreren的侵略者死 从祖国到祖国,从祖国到祖国,再到祖国。
您可以通过以下任何一种方式来获得最终的成绩:
#太空侵略者第9阶段:最终接触将海龟作为t
导入数学
导入操作系统#Fenstergröße
宽度= 700
高度= 700
#Weltgröße
WW = 600
宽= 600
#Anzahl der Invaders
NUMENEMIES = 12#Hier kommen死于Klassendefinitionen hinclass GameWorld(t.Turtle):
def __init __():
t.Turtle .__ init __(自己)
self.penup()
self.hideturtle()
自速度(0)
self.color(“白色”)
self.pensize(3)
self.keepGoing =真
def draw_border(自己):
self.penup()
self.goto(-WW / 2,-WH / 2)
self.pendown()
对于我在范围(4)中:
自我转发(WW)
self.left(90)def exit_game(self):
self.keepGoing = Falseclass HeadUpDisplay(t.Turtle):
def __init __():
t.Turtle .__ init __(自己)
self.penup()
self.hideturtle()
自速度(0)
self.color(“白色”)
self.goto(-WIDTH / 2 + 50,HEIGHT / 2-40)
self.score = 0
def update_score():
self.clear()
self.write(“ Punkte:{}”。format(self.score),False,align =“ left”,
字体=(“ Arial”,14,“普通”))
def change_score(自我,得分):
self.score + =分
self.update_score()类Sprite(t.Turtle):
def __init __(self,tshape,tcolor):
t.Turtle .__ init __(自己)
self.penup()
自速度(0)
自形(tshape)
self.color(tcolor)
self.speed = 1 def collides_with(self,obj):
一个= self.xcor()-obj.xcor()
b = self.ycor()-obj.ycor()
距离= math.sqrt((a ** 2)+(b ** 2))
如果距离<15:
返回True
其他:
返回Falseclass Actor(Sprite):
def __init __(self,tshape,tcolor):
Sprite .__ init __(self,tshape,tcolor)
self.speed = 10
self.x = 0
self.y = -280
自我挫败感(90)
self.goto(self.x,self.y)
def go_left():
self.x-= self.speed
如果self.x <= -WW / 2 + 20:
self.x = -WW / 2 + 20
self.setx(self.x)def go_right(self):
self.x + = self.speed
如果self.x> = WW / 2-20:
self.x = WW / 2-20
self.setx(self.x)类Bullet(Sprite):
def __init __(self,tshape,tcolor):
Sprite .__ init __(self,tshape,tcolor)
self.speed = 20
自我挫败感(90)
self.shapesize(0.3,0.5)
self.state =“就绪”
self.hideturtle()
def fire(个体):
如果self.state ==“就绪”:
self.state =“火”
self.x = player.xcor()
self.y = player.ycor()+ 10
self.setposition(self.x,self.y)
self.showturtle()
def移动(自己):
如果self.state ==“ fire”:
y = self.ycor()
y + =自速度
自定(y)
如果self.ycor()> = WH / 2-20:
self.hideturtle()
self.state =“ ready”类Invader(Sprite):
def __init __(self,tshape,tcolor,x,y):
Sprite .__ init __(self,tshape,tcolor)
self.speed = 2
self.x = x
self.y = y
self.goto(self.x,self.y)
#self.edge =假
def移动(自己):
self.x + = self.speed
如果self.x> = WW / 2-20或self.x <= -WW / 2 + 20:
self.y-= 40
self.sety(self.y)
self.speed * = -1
self.setx(self.x)def跳转(self):
self.x = -200
self.y = 250
self.speed = 2
self.goto(self.x,self.y)#Initialisierungwn = t.Screen()
wn.bgcolor(“#000000”)
#wn.bgcolor(“#2b3e50”)
#path_to_bg = os.path.join(os.getcwd(),“ sources / spaceinvaders / farback.gif”)
#wn.bgpic(path_to_bg)
#ufo = os.path.join(os.getcwd(),“ sources / spaceinvaders / ufo.gif”)
ufo =“ ufo.gif”
wn.register_shape(ufo)wn.setup(宽度=宽度,高度=高度)
wn.title(“太空侵略者–终结版”)#Bildschirm-Refresh ausschalten
wn.tracer(0)#对象初始化
世界= GameWorld()
world.draw_border()
平视显示器= HeadUpDisplay()
hud.change_score(0)
玩家=演员(“三角形”,“紫色”)
导弹=子弹(“三角形”,“黄色”)
敌人= []
对于范围内的我(NUMENEMIES):
nobody.append(Invader(ufo,“ green”,-200 + i * 40,250))#Auf Tastaturereignisse lauschen
t.listen()
t.onkey(player.go_left,“左”)
t.onkey(player.go_right,“右”)
t.onkey(missile.fire,“ space”)
t.onkey(world.exit_game,“ Escape”)#逃脱bedet das Spielwhile world.keep
wn.update()
对于敌人中的敌人:
敌人。移动()
如果敌人.collides_with(玩家):
敌人.hideturtle()
player.hideturtle()
打印(“游戏结束!”)
world.keepGoing =假
missile.move()
对于敌人中的敌人:
如果missile.collides_with(enemy):
missile.hideturtle()
missile.state =“就绪”
导弹位置(-4000,-4000)
敌人。跳转()
hud.change_score(10)
- Es gibt sicher genauere Methoder der Kollisionserkennung,aberfürdieses einfache问题从高到低。 ↩
- 平视 显示器 ,计算机显示器的 显示面板,由Bildrand eingeblendet werden制造。 ↩