Swift Projekt: Space Shooter "Asteroid Blast"

Seit einiger Zeit tüftle ich mit Xcode herum und versuche mir die Programmiersprache Swift beizubringen. Angefangen hatte ich mit Swift 2.0 und bin nun auch auf Swift 3.0 umgestiegen. Nach einigen "Hello World!" Programmen hatte ich mich entschieden ein Spiel zu schreiben. Die ersten beiden Versuche waren jeweils ein Jump'n'Run. Sie waren aber nicht viel mehr als eine Fingerübung und mein Einstieg in die App Entwicklung unter Swift.

Mein aktuelles Projekt ist ambitionierter. Es handelt sich dabei um einen Side-Scroller mit Weltraumsetting. Die genauere Bezeichnung wäre wohl Shoot'em-up, indem man in die Rolle eines Weltraumpiloten schlüpft, der seinen Weg durch ein Asteroidenfeld finden muss. Das Setting und die Mechanik ist alles andere als innovativ, aber darum ging es mir auch gar nicht. Das Spiel sollte mir als Lehrstück dienen: Wie verwalte ich den Speicher unter iOS, wie funktioniert die Physik Engine, wie animiere ich Grafiken und wie binde ich Musik ein? Das sind Fragen, die ich nun beantworten kann. Über die Wochen habe ich dann meine App auch lieb gewonnen und führe das Projekt nun weiter. Ich bin gespannt, wo es mich hinführt. Jeden Tag tauchen neue Fragen auf, deren Antworten mein Wissen um Swift erweitern.

Das soll es zur Motivation gewesen sein. Jetzt möchte noch ein paar Sätze zum Spiel selbst verlieren. Mir war von Anfang an klar, dass es einen Retro-Look bekommen sollte. Die Grafik und das Sounddesign sollen an alte Klassiker aus der 8Bit Zeit erinnern. Pixelgrafik und Chiptunes waren meine Wahl. Natürlich war das auch eine bewusste und pragmatische Designentscheidung, die mir es erleichtert, die benötigten Grafiken und Sounds selbst herzustellen oder mich freier Bibliotheken zu bedienen. Zudem stammt das Spielgenre aus dieser Zeit und die Pixeloptik hat momentan eine Renaissance. Wie bereits erwähnt steuert man ein kleines Raumschiff durch ein Feld voller Asteroiden, denen man entweder ausweichen oder die man mit Laserwaffen pulverisieren kann. Dabei sammelten man Punkte und Power-Ups, die das Schiff verbessern. Im Laufe der Zeit verdichtet sich das Asteroidenfeld und es wird schwieriger nicht getroffen zu werden. Das Spiel ist Beendet, wenn das Schiff zerstört wird. Die Jagd nach höheren Highscores und die Erfüllung von Achievements sollen dazu animieren, erneut zu spielen. Bis jetzt sind nicht alle Features umgesetzt, die im fertigen Spiel enthalten sein sollen. Eine genaue Übersicht gibt es am Ende dieses Artikels in meinem Developer Log. Der Name des Spiels "Asteroid Blast" ist auch nur ein Arbeitstitel. Bis jetzt ist mir noch nichts besseres eingefallen, respektive waren die Namen bereits im App Store vergeben. Das Programmieren fällt mir sehr viel leichter, als einen griffigen Namen zu finden. Ich bin für sämtliche Vorschläge offen.

Die aktuelle Version des Spiels ist die 0.40. Ich hatte im Laufe der Zeit zwei Videos aufgenommen, die das Gameplay zeigen sollen. In der Zwischenzeit hat sich einiges verändert, aber die Grundmechanik ist unverändert. Das komplette Projekt mit allen  Versionen befindet sich in meinem GitHub Repository unter: 

https://github.com/Stish/iOS/tree/master/iOS_Game_003

 

Gameplay Video - Asteroid Blast ver. 0.35

Gameplay Video - Asteroid Blast ver. 0.21

Weiter Updates und Videos folgen. Auf GitHub ist immer die aktuelle Version zu finden, auch wenn es hier keinen Artikel dazu gibt.

 

Devlog

 

ToDo

- enemies

- nebulas

- Add new game features to tutorial

- Improve sprites

- Different ship sprites?

- More Shields

- Horizontal movement

 

ver 0.40

- Number of destroyed asteroids is tracked for achievements

- Data for achievements is saved

- 6 achievements added

- Achievements:

01:     "Master Blaster"

Task:   Destroy 100000 asteroids

Reward: New skin

 

02:     "Wreck-it <NAME>"

Task:   Get hit 30 times in one game

Reward: Shields +1

 

03:     "Gunslinger"

Task:   Hit 300 asteroids without missing in one game with standard laser

Reward: New weapon: Disruptor

 

04:     "Dodge this!"

Task:   Surviving 300s without hitting and being hit

Reward: Vertical movement enabled

 

05:     "I'm T.N.T., I'm dynamite"

Task:   Get killed by own bomb explosion

Reward: Bombs +1

 

06:     "King of the impossible"

Task:   Score 100000 points in one game

Reward: New skin

 

ver 0.39

- Migration to SWIFT 3.0

- Sounds added for shields being hit

- Achievements menu added

- Scrolling trough achievements

 

ver 0.38

- New ship sprites

- Options can be changed from "Pause" menu

- Pause layout and functions moved to TLPause

- New app icon based on new ship design

 

ver 0.37

- Score can be tweeted on Twitter

- Score can be tweeted on Facebook

- New sprites for power ups

- Back button texture problem solved

 

ver 0.36

- Controls improved

 

ver 0.35

- High score list added

- High score are persistently saved

- Small bug fixes

 

ver 0.34

- Game settings are saved to and loaded from file

 

ver 0.33

- Game pause added

- HUD has now icons for game pause and weapons

- Game can be quitted

- Ship inventory added

- Player can switch between weapons

 

ver 0.32

- Adjustment in spawning times

- Bug fixes

- Power ups added: Laser sphere and laser cone

- Weapon can be picked up and will be equipped

- Inventory class added

 

ver 0.31

- New weapon: Laser cone

- Laser cone implemented

- New sound effects added

- Nebula added

 

ver 0.30

- Laser sphere implemented

- Shooting sound added

 

ver 0.29

- New weapon: laser sphere

- Animation for laser sphere added

- Basic mechanics for laser sphere added

 

ver 0.28

- Bomb hits objects in explosion radius

- Ship can be destroyed by bomb explosion

- Shields light up when being hit by meteorite or bomb explosion

 

ver 0.27

- New game font for longer text passages

- Bombs added to tutorial

- Info of power ups will be displayed when picked up

- Game pauses when home button is triggered

- Touch gesture for firing bombs added

- Bombs explosion sprites added

- Bombs have now two hit boxes (bomb body and explosion radius)

- Bomb dropping and exploding sounds added

 

ver 0.26

- Power ups: Bombs and shield power

- Power up sound added

- Bombs added to HUD

- Minor bug fixes

 

ver 0.25

- Shields for the space ship

- Health points for the space ship

- Slower background scrolling speed

 

ver 0.24

- Tutorial menu added

- Tutorial demo added, which shows the important game functions

- Minor bug fixes

 

ver 0.23

- Player name input in options

- Click sounds are adjusted with sound effect options

- About menu complete

- Twitter and website added to about menu

- Highscore menu added

- Highscores are read from array

- Highscores can be switched between time or score based data

 

ver 0.22

- adjustable volume of sound effects

- adjustable volume of music

- sound effects and music can be muted

- laser shooting interval adjustable

- issue with rotating scores has been fixed

 

ver 0.21

- Sprites and fonts sizes are now dynamic to screen sizes

- Game objects sizes and positions are now dynamic to screen sizes

- Options menu added

- About menu added

 

ver 0.20

- Error with explosions fixed

- Sound problems fixed

- New HUD design

- Game menu with new design

 

ver 0.19

- Title screen added

- Menu screen added

- Hit sounds

- minor bug fixes

 

ver 0.18

- improve background transitions

- different backgrounds

- different textures for meteorites

- different health points for meteorites

- minor bug fixes

 

ver 0.17

- meteorites appear random sizes

- meteorites have now random rotation speed and direction

- meteorites spawn time and speed increase slower

- space ship size reduced

 

ver 0.16

- meteorite speed and spawn time increases while playing

- experimental HUD

- custom fonts added

- minor code improvements

 

ver 0.15

- meteorites renamed

- more meteorites

- game speed increased

- minor bugfixes

- minor code improvements

 

ver 0.1

- basic concept

- sprites and backgrounds

- movement of ship

- movement of backgrounds

- moving object: meteorite

- laser weapon

- collision detection

- explosions

- game score

- destroyable ship

- sound effects

- background music

 

Kommentar schreiben

Kommentare: 0