From ab784b4ad6dad26b4d1c4e2366f25c6d145f447b Mon Sep 17 00:00:00 2001 From: feurig Date: Sun, 5 Dec 2021 20:59:09 -0800 Subject: this is the modern world --- README.md | 14 +-- go.mod | 2 +- main.go | 4 +- modernworld/alien.go | 3 +- modernworld/alien_cluster.go | 5 +- modernworld/arena.go | 4 +- modernworld/entity.go | 2 +- modernworld/files/alien_basic.txt | 2 - modernworld/files/alien_medium.txt | 2 - modernworld/files/alien_strong.txt | 2 - modernworld/files/citizen_l.txt | 4 + modernworld/files/citizen_r.txt | 4 + modernworld/files/citizen_s.txt | 4 + modernworld/files/hero.txt | 2 - modernworld/game.go | 183 +++++++++++++++++++------------------ modernworld/game_over_zone.go | 2 +- modernworld/hero.go | 5 +- modernworld/hud.go | 5 +- modernworld/laser.go | 2 +- modernworld/screens.go | 81 ++++++++-------- 20 files changed, 171 insertions(+), 161 deletions(-) delete mode 100644 modernworld/files/alien_basic.txt delete mode 100644 modernworld/files/alien_medium.txt delete mode 100644 modernworld/files/alien_strong.txt create mode 100644 modernworld/files/citizen_l.txt create mode 100644 modernworld/files/citizen_r.txt create mode 100644 modernworld/files/citizen_s.txt delete mode 100644 modernworld/files/hero.txt diff --git a/README.md b/README.md index 8908dda..6d01b15 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# Go Invaders -A Space Invaders inspired game written in Go. Built with [Termloop](https://github.com/JoelOtter/termloop). +# Go modernworld +A Space modernworld inspired game written in Go. Built with [Termloop](https://github.com/JoelOtter/termloop). ## Installation ``` -go install github.com/afagundes/go-invaders@latest -$GOPATH/bin/go-invaders +go install github.com/afagundes/go-modernworld@latest +$GOPATH/bin/go-modernworld ``` ## Controls @@ -12,8 +12,8 @@ Use the arrow keys to move the hero spaceship and space bar to shoot. Press back # Screenshots -![Image of title screen](https://github.com/afagundes/go-invaders/blob/main/images/title_screen.png) +![Image of title screen](https://github.com/afagundes/go-modernworld/blob/main/images/title_screen.png) -![Image of game screen](https://github.com/afagundes/go-invaders/blob/main/images/running_game_screen.png) +![Image of game screen](https://github.com/afagundes/go-modernworld/blob/main/images/running_game_screen.png) -![Image of game over screen](https://github.com/afagundes/go-invaders/blob/main/images/game_over_screen.png) +![Image of game over screen](https://github.com/afagundes/go-modernworld/blob/main/images/game_over_screen.png) diff --git a/go.mod b/go.mod index a4356d2..d806833 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/afagundes/go-invaders +module github.com/afagundes/go-modernworld go 1.16 diff --git a/main.go b/main.go index a802cef..a7e492e 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,7 @@ package main -import "github.com/afagundes/go-invaders/invaders" +import "github.com/afagundes/go-modernworld/modernworld" func main() { - invaders.NewGame().Start() + modernworld.NewGame().Start() } diff --git a/modernworld/alien.go b/modernworld/alien.go index f73b7e1..b5ec30b 100644 --- a/modernworld/alien.go +++ b/modernworld/alien.go @@ -1,7 +1,8 @@ -package invaders +package modernworld import ( _ "embed" + tl "github.com/JoelOtter/termloop" ) diff --git a/modernworld/alien_cluster.go b/modernworld/alien_cluster.go index 62bcdcf..19c3030 100644 --- a/modernworld/alien_cluster.go +++ b/modernworld/alien_cluster.go @@ -1,9 +1,10 @@ -package invaders +package modernworld import ( - tl "github.com/JoelOtter/termloop" "math/rand" "time" + + tl "github.com/JoelOtter/termloop" ) type AlienCluster struct { diff --git a/modernworld/arena.go b/modernworld/arena.go index 440db57..f3c9252 100644 --- a/modernworld/arena.go +++ b/modernworld/arena.go @@ -1,8 +1,8 @@ -package invaders +package modernworld import ( tl "github.com/JoelOtter/termloop" - "github.com/afagundes/go-invaders/invaders/utils" + "github.com/afagundes/go-modernworld/modernworld/utils" ) type Arena struct { diff --git a/modernworld/entity.go b/modernworld/entity.go index 023aace..80240f3 100644 --- a/modernworld/entity.go +++ b/modernworld/entity.go @@ -1,4 +1,4 @@ -package invaders +package modernworld import ( tl "github.com/JoelOtter/termloop" diff --git a/modernworld/files/alien_basic.txt b/modernworld/files/alien_basic.txt deleted file mode 100644 index ca67a36..0000000 --- a/modernworld/files/alien_basic.txt +++ /dev/null @@ -1,2 +0,0 @@ -▄██▄ - diff --git a/modernworld/files/alien_medium.txt b/modernworld/files/alien_medium.txt deleted file mode 100644 index 1e19062..0000000 --- a/modernworld/files/alien_medium.txt +++ /dev/null @@ -1,2 +0,0 @@ -▄██▄ -▀ ▀ diff --git a/modernworld/files/alien_strong.txt b/modernworld/files/alien_strong.txt deleted file mode 100644 index 25853d0..0000000 --- a/modernworld/files/alien_strong.txt +++ /dev/null @@ -1,2 +0,0 @@ -█ █ -▀██▀ diff --git a/modernworld/files/citizen_l.txt b/modernworld/files/citizen_l.txt new file mode 100644 index 0000000..e0c01a0 --- /dev/null +++ b/modernworld/files/citizen_l.txt @@ -0,0 +1,4 @@ + //// + ('o') - + ╚██╗ -- + ╔╝╚═ -- \ No newline at end of file diff --git a/modernworld/files/citizen_r.txt b/modernworld/files/citizen_r.txt new file mode 100644 index 0000000..560670f --- /dev/null +++ b/modernworld/files/citizen_r.txt @@ -0,0 +1,4 @@ + \\\\ +- ('o') +-- ╔██╝ + - ═╝╚╗ \ No newline at end of file diff --git a/modernworld/files/citizen_s.txt b/modernworld/files/citizen_s.txt new file mode 100644 index 0000000..ef3714d --- /dev/null +++ b/modernworld/files/citizen_s.txt @@ -0,0 +1,4 @@ + \|/// + ('o') + ╚██╝ + ║║ \ No newline at end of file diff --git a/modernworld/files/hero.txt b/modernworld/files/hero.txt deleted file mode 100644 index 1edcd05..0000000 --- a/modernworld/files/hero.txt +++ /dev/null @@ -1,2 +0,0 @@ - ▄ -███ diff --git a/modernworld/game.go b/modernworld/game.go index 54052de..ad80474 100644 --- a/modernworld/game.go +++ b/modernworld/game.go @@ -1,11 +1,12 @@ -package invaders +package modernworld import ( - tl "github.com/JoelOtter/termloop" "time" + + tl "github.com/JoelOtter/termloop" ) -type Invaders struct { +type modernworld struct { *tl.Entity Game *tl.Game Level *tl.BaseLevel @@ -22,8 +23,8 @@ type Invaders struct { ScreenSizeNotOK bool } -func NewGame() *Invaders { - invaders := Invaders{ +func NewGame() *modernworld { + modernworld := modernworld{ Entity: tl.NewEntity(0, 0, 1, 1), Game: tl.NewGame(), Level: tl.NewBaseLevel(tl.Cell{Bg: tl.ColorBlack, Fg: tl.ColorWhite}), @@ -32,135 +33,135 @@ func NewGame() *Invaders { Score: 0, } - invaders.Game.Screen().SetFps(60) - invaders.Game.SetEndKey(tl.KeyBackspace) - invaders.Game.Screen().SetLevel(invaders.Level) - invaders.Level.AddEntity(&invaders) + modernworld.Game.Screen().SetFps(60) + modernworld.Game.SetEndKey(tl.KeyBackspace) + modernworld.Game.Screen().SetLevel(modernworld.Level) + modernworld.Level.AddEntity(&modernworld) - return &invaders + return &modernworld } -func (invaders *Invaders) Start() { - go ShowTitleScreen(invaders) - invaders.Game.Start() +func (modernworld *modernworld) Start() { + go ShowTitleScreen(modernworld) + modernworld.Game.Start() } -func (invaders *Invaders) Tick(event tl.Event) { - if invaders.Started == false && invaders.ScreenSizeNotOK == false && event.Type == tl.EventKey && event.Key == tl.KeyEnter { - go invaders.initializeGame() +func (modernworld *modernworld) Tick(event tl.Event) { + if modernworld.Started == false && modernworld.ScreenSizeNotOK == false && event.Type == tl.EventKey && event.Key == tl.KeyEnter { + go modernworld.initializeGame() } } -func (invaders *Invaders) initializeGame() { - prepareScreen(invaders) +func (modernworld *modernworld) initializeGame() { + prepareScreen(modernworld) - invaders.Started = true + modernworld.Started = true - invaders.initHero() - invaders.initAliens() - invaders.initGameOverZone() - invaders.gameLoop() + modernworld.initHero() + modernworld.initAliens() + modernworld.initGameOverZone() + modernworld.gameLoop() } -func (invaders *Invaders) initArena() { - screenWidth, screenHeight := invaders.getScreenSize() - invaders.Arena = newArena(screenWidth, screenHeight) - invaders.Level.AddEntity(invaders.Arena) +func (modernworld *modernworld) initArena() { + screenWidth, screenHeight := modernworld.getScreenSize() + modernworld.Arena = newArena(screenWidth, screenHeight) + modernworld.Level.AddEntity(modernworld.Arena) } -func (invaders *Invaders) initHud() { - invaders.Hud = NewHud(invaders.Arena, invaders.Level) +func (modernworld *modernworld) initHud() { + modernworld.Hud = NewHud(modernworld.Arena, modernworld.Level) } -func (invaders *Invaders) getScreenSize() (int, int) { - screenWidth, screenHeight := invaders.Game.Screen().Size() +func (modernworld *modernworld) getScreenSize() (int, int) { + screenWidth, screenHeight := modernworld.Game.Screen().Size() for screenWidth == 0 && screenHeight == 0 { time.Sleep(100 * time.Millisecond) - screenWidth, screenHeight = invaders.Game.Screen().Size() + screenWidth, screenHeight = modernworld.Game.Screen().Size() } return screenWidth, screenHeight } -func (invaders *Invaders) initHero() { - invaders.Hero = NewHero(invaders.Arena) - invaders.Level.AddEntity(invaders.Hero) +func (modernworld *modernworld) initHero() { + modernworld.Hero = NewHero(modernworld.Arena) + modernworld.Level.AddEntity(modernworld.Hero) } -func (invaders *Invaders) initAliens() { - invaders.AlienCluster = NewAlienCluster() - SetPositionAndRenderAliens(invaders.AlienCluster.Aliens, invaders.Level, invaders.Arena) +func (modernworld *modernworld) initAliens() { + modernworld.AlienCluster = NewAlienCluster() + SetPositionAndRenderAliens(modernworld.AlienCluster.Aliens, modernworld.Level, modernworld.Arena) } -func (invaders *Invaders) initGameOverZone() { - invaders.GameOverZone = CreateGameOverZone(invaders.Arena, invaders.Hero) - invaders.Level.AddEntity(invaders.GameOverZone) +func (modernworld *modernworld) initGameOverZone() { + modernworld.GameOverZone = CreateGameOverZone(modernworld.Arena, modernworld.Hero) + modernworld.Level.AddEntity(modernworld.GameOverZone) } -func (invaders *Invaders) gameLoop() { +func (modernworld *modernworld) gameLoop() { for { - if invaders.Hero.IsDead() || invaders.AlienCluster.IsAllAliensDead() { - invaders.Hero.animateHeroEndGame(invaders.Level) - invaders.Started = false + if modernworld.Hero.IsDead() || modernworld.AlienCluster.IsAllAliensDead() { + modernworld.Hero.animateHeroEndGame(modernworld.Level) + modernworld.Started = false break } - invaders.updateLaserPositions() - invaders.RemoveDeadAliensAndIncrementScore() - invaders.updateAlienClusterPosition() - invaders.updateScore() - invaders.verifyGameOverZone() + modernworld.updateLaserPositions() + modernworld.RemoveDeadAliensAndIncrementScore() + modernworld.updateAlienClusterPosition() + modernworld.updateScore() + modernworld.verifyGameOverZone() - time.Sleep(invaders.RefreshSpeed * time.Millisecond) + time.Sleep(modernworld.RefreshSpeed * time.Millisecond) } - if invaders.Hero.IsDead() { - ShowGameOverScreen(invaders) + if modernworld.Hero.IsDead() { + ShowGameOverScreen(modernworld) } - if invaders.AlienCluster.IsAllAliensDead() { - invaders.initializeGame() + if modernworld.AlienCluster.IsAllAliensDead() { + modernworld.initializeGame() } } -func (invaders *Invaders) updateScore() { - invaders.Hud.UpdateScore(invaders.Score) +func (modernworld *modernworld) updateScore() { + modernworld.Hud.UpdateScore(modernworld.Score) } -func (invaders *Invaders) updateAlienClusterPosition() { - invaders.AlienCluster.UpdateAliensPositions(invaders.Game.Screen().TimeDelta(), invaders.Arena) - invaders.AlienCluster.Shoot() +func (modernworld *modernworld) updateAlienClusterPosition() { + modernworld.AlienCluster.UpdateAliensPositions(modernworld.Game.Screen().TimeDelta(), modernworld.Arena) + modernworld.AlienCluster.Shoot() } -func (invaders *Invaders) RemoveDeadAliensAndIncrementScore() { - points := invaders.AlienCluster.RemoveDeadAliensAndGetPoints(invaders.Level) - invaders.addScore(points) +func (modernworld *modernworld) RemoveDeadAliensAndIncrementScore() { + points := modernworld.AlienCluster.RemoveDeadAliensAndGetPoints(modernworld.Level) + modernworld.addScore(points) } -func (invaders *Invaders) updateLaserPositions() { - invaders.updateHeroLasers() - invaders.updateAlienLasers() - invaders.removeLasers() +func (modernworld *modernworld) updateLaserPositions() { + modernworld.updateHeroLasers() + modernworld.updateAlienLasers() + modernworld.removeLasers() } -func (invaders *Invaders) updateHeroLasers() { - invaders.updateLasers(invaders.Hero.Lasers) +func (modernworld *modernworld) updateHeroLasers() { + modernworld.updateLasers(modernworld.Hero.Lasers) } -func (invaders *Invaders) updateAlienLasers() { - invaders.TimeDelta += invaders.Game.Screen().TimeDelta() +func (modernworld *modernworld) updateAlienLasers() { + modernworld.TimeDelta += modernworld.Game.Screen().TimeDelta() - if invaders.TimeDelta >= invaders.AlienLaserVelocity { - invaders.TimeDelta = 0 - invaders.updateLasers(invaders.AlienCluster.Lasers) + if modernworld.TimeDelta >= modernworld.AlienLaserVelocity { + modernworld.TimeDelta = 0 + modernworld.updateLasers(modernworld.AlienCluster.Lasers) } } -func (invaders *Invaders) updateLasers(lasers []*Laser) { +func (modernworld *modernworld) updateLasers(lasers []*Laser) { for _, laser := range lasers { if laser.IsNew { - invaders.renderNewLaser(laser) + modernworld.renderNewLaser(laser) continue } @@ -169,32 +170,32 @@ func (invaders *Invaders) updateLasers(lasers []*Laser) { } } -func (invaders *Invaders) renderNewLaser(laser *Laser) { +func (modernworld *modernworld) renderNewLaser(laser *Laser) { laser.IsNew = false - invaders.Level.AddEntity(laser) + modernworld.Level.AddEntity(laser) } -func (invaders *Invaders) removeLasers() { - _, arenaY := invaders.Arena.Position() - _, arenaH := invaders.Arena.Size() +func (modernworld *modernworld) removeLasers() { + _, arenaY := modernworld.Arena.Position() + _, arenaH := modernworld.Arena.Size() upperLimit := arenaY bottomLimit := arenaY + arenaH - 1 - invaders.Hero.Lasers = invaders.removeLaserOf(invaders.Hero.Lasers, upperLimit) - invaders.AlienCluster.Lasers = invaders.removeLaserOf(invaders.AlienCluster.Lasers, bottomLimit) + modernworld.Hero.Lasers = modernworld.removeLaserOf(modernworld.Hero.Lasers, upperLimit) + modernworld.AlienCluster.Lasers = modernworld.removeLaserOf(modernworld.AlienCluster.Lasers, bottomLimit) } -func (invaders *Invaders) removeLaserOf(lasers []*Laser, arenaLimit int) []*Laser { +func (modernworld *modernworld) removeLaserOf(lasers []*Laser, arenaLimit int) []*Laser { for index, laser := range lasers { _, y := laser.Position() isEndOfArena := y == arenaLimit if isEndOfArena || laser.HasHit { - invaders.Level.RemoveEntity(laser) + modernworld.Level.RemoveEntity(laser) if laser.HitAlienLaser { - invaders.addScore(laser.Points) + modernworld.addScore(laser.Points) } if index < len(lasers) { @@ -206,12 +207,12 @@ func (invaders *Invaders) removeLaserOf(lasers []*Laser, arenaLimit int) []*Lase return lasers } -func (invaders *Invaders) addScore(points int) { - invaders.Score += points +func (modernworld *modernworld) addScore(points int) { + modernworld.Score += points } -func (invaders *Invaders) verifyGameOverZone() { - if invaders.GameOverZone.EnteredZone { - invaders.Hero.IsAlive = false +func (modernworld *modernworld) verifyGameOverZone() { + if modernworld.GameOverZone.EnteredZone { + modernworld.Hero.IsAlive = false } } diff --git a/modernworld/game_over_zone.go b/modernworld/game_over_zone.go index 702deb4..e483ada 100644 --- a/modernworld/game_over_zone.go +++ b/modernworld/game_over_zone.go @@ -1,4 +1,4 @@ -package invaders +package modernworld import tl "github.com/JoelOtter/termloop" diff --git a/modernworld/hero.go b/modernworld/hero.go index c9b4500..a519a1f 100644 --- a/modernworld/hero.go +++ b/modernworld/hero.go @@ -1,9 +1,10 @@ -package invaders +package modernworld import ( _ "embed" - tl "github.com/JoelOtter/termloop" "time" + + tl "github.com/JoelOtter/termloop" ) type Hero struct { diff --git a/modernworld/hud.go b/modernworld/hud.go index cbe2c8e..0129db1 100644 --- a/modernworld/hud.go +++ b/modernworld/hud.go @@ -1,7 +1,8 @@ -package invaders +package modernworld import ( "fmt" + tl "github.com/JoelOtter/termloop" ) @@ -12,7 +13,7 @@ type Hud struct { } func NewHud(arena *Arena, level *tl.BaseLevel) *Hud { - hud := Hud{Title: "Go Invaders", PressToQuit: "Press BACKSPACE to quit"} + hud := Hud{Title: "Go modernworld", PressToQuit: "Press BACKSPACE to quit"} hud.drawTitle(arena, level) hud.drawPressToQuit(arena, level) hud.drawScore(arena, level) diff --git a/modernworld/laser.go b/modernworld/laser.go index d2d532d..80161a0 100644 --- a/modernworld/laser.go +++ b/modernworld/laser.go @@ -1,4 +1,4 @@ -package invaders +package modernworld import tl "github.com/JoelOtter/termloop" diff --git a/modernworld/screens.go b/modernworld/screens.go index 739ce70..e2d86a8 100644 --- a/modernworld/screens.go +++ b/modernworld/screens.go @@ -1,8 +1,9 @@ -package invaders +package modernworld import ( _ "embed" "fmt" + tl "github.com/JoelOtter/termloop" ) @@ -14,21 +15,21 @@ var ( gameOverScreenFile []byte ) -func ShowTitleScreen(invaders *Invaders) { - prepareScreen(invaders) - showTitle(invaders) +func ShowTitleScreen(modernworld *modernworld) { + prepareScreen(modernworld) + showTitle(modernworld) - if checkArenaSizeNotOk(invaders) { - invaders.ScreenSizeNotOK = true - showMaximizeScreen(invaders) + if checkArenaSizeNotOk(modernworld) { + modernworld.ScreenSizeNotOK = true + showMaximizeScreen(modernworld) return } - showPressToInit(invaders, 0) + showPressToInit(modernworld, 0) } -func checkArenaSizeNotOk(invaders *Invaders) bool { - w, h := invaders.Arena.Size() +func checkArenaSizeNotOk(modernworld *modernworld) bool { + w, h := modernworld.Arena.Size() if w < 100 || h < 37 { return true @@ -37,61 +38,61 @@ func checkArenaSizeNotOk(invaders *Invaders) bool { return false } -func ShowGameOverScreen(invaders *Invaders) { - prepareScreen(invaders) - showGameOver(invaders) - showScore(invaders) - showPressToInit(invaders, 2) +func ShowGameOverScreen(modernworld *modernworld) { + prepareScreen(modernworld) + showGameOver(modernworld) + showScore(modernworld) + showPressToInit(modernworld, 2) } -func prepareScreen(invaders *Invaders) { - invaders.Level = tl.NewBaseLevel(tl.Cell{Bg: tl.ColorBlack, Fg: tl.ColorWhite}) - invaders.Game.Screen().SetLevel(invaders.Level) - invaders.Level.AddEntity(invaders) +func prepareScreen(modernworld *modernworld) { + modernworld.Level = tl.NewBaseLevel(tl.Cell{Bg: tl.ColorBlack, Fg: tl.ColorWhite}) + modernworld.Game.Screen().SetLevel(modernworld.Level) + modernworld.Level.AddEntity(modernworld) - invaders.initArena() - invaders.initHud() + modernworld.initArena() + modernworld.initHud() } -func showTitle(invaders *Invaders) { - showCanvas(invaders, titleScreenFile) +func showTitle(modernworld *modernworld) { + showCanvas(modernworld, titleScreenFile) } -func showGameOver(invaders *Invaders) { - showCanvas(invaders, gameOverScreenFile) +func showGameOver(modernworld *modernworld) { + showCanvas(modernworld, gameOverScreenFile) } -func showCanvas(invaders *Invaders, file []byte) { +func showCanvas(modernworld *modernworld, file []byte) { canvas := CreateCanvas(file) - arenaX, arenaY := invaders.Arena.Position() - arenaW, arenaH := invaders.Arena.Size() + arenaX, arenaY := modernworld.Arena.Position() + arenaW, arenaH := modernworld.Arena.Size() x := arenaX + arenaW/2 - len(canvas)/2 y := arenaY + arenaH/2 + -len(canvas[0]) - 1 - invaders.Level.AddEntity(tl.NewEntityFromCanvas(x, y, canvas)) + modernworld.Level.AddEntity(tl.NewEntityFromCanvas(x, y, canvas)) } -func showScore(invaders *Invaders) { - score := fmt.Sprintf("SCORE: %4d ", invaders.Score) - showCenterText(score, 0, invaders) +func showScore(modernworld *modernworld) { + score := fmt.Sprintf("SCORE: %4d ", modernworld.Score) + showCenterText(score, 0, modernworld) } -func showPressToInit(invaders *Invaders, topPadding int) { - showCenterText("Press ENTER to start", topPadding, invaders) +func showPressToInit(modernworld *modernworld, topPadding int) { + showCenterText("Press ENTER to start", topPadding, modernworld) } -func showMaximizeScreen(invaders *Invaders) { - showCenterText("Maximize the console and run the game again", 0, invaders) +func showMaximizeScreen(modernworld *modernworld) { + showCenterText("Maximize the console and run the game again", 0, modernworld) } -func showCenterText(text string, topPadding int, invaders *Invaders) { - arenaX, arenaY := invaders.Arena.Position() - arenaW, arenaH := invaders.Arena.Size() +func showCenterText(text string, topPadding int, modernworld *modernworld) { + arenaX, arenaY := modernworld.Arena.Position() + arenaW, arenaH := modernworld.Arena.Size() x := arenaX + arenaW/2 - len(text)/2 y := arenaY + arenaH/2 + topPadding - invaders.Level.AddEntity(tl.NewText(x, y, text, tl.ColorWhite, tl.ColorBlack)) + modernworld.Level.AddEntity(tl.NewText(x, y, text, tl.ColorWhite, tl.ColorBlack)) } -- cgit v1.2.3