1 Commits

Author SHA1 Message Date
T. von Dein
fee8aaeed9 move to codeberg (#10) 2025-11-13 21:30:44 +01:00
34 changed files with 220 additions and 147 deletions

65
.goreleaser.yaml Normal file
View File

@@ -0,0 +1,65 @@
# vim: set ts=2 sw=2 tw=0 fo=cnqoj
version: 2
before:
hooks:
- go mod tidy
gitea_urls:
api: https://codeberg.org/api/v1
download: https://codeberg.org
builds:
- env:
- CGO_ENABLED=0
goos:
- linux
- freebsd
archives:
- formats: [tar.gz]
# this name template makes the OS and Arch compatible with the results of `uname`.
name_template: >-
{{ .ProjectName }}_
{{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386
{{- else }}{{ .Arch }}{{ end }}
{{- if .Arm }}v{{ .Arm }}{{ end }}_{{ .Tag }}
# use zip for windows archives
format_overrides:
- goos: windows
formats: [zip]
- goos: linux
formats: [tar.gz,binary]
files:
- src: "*.md"
strip_parent: true
- src: Makefile.dist
dst: Makefile
wrap_in_directory: true
changelog:
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
groups:
- title: Improved
regexp: '^.*?(feat|add|new)(\([[:word:]]+\))??!?:.+$'
order: 0
- title: Fixed
regexp: '^.*?(bug|fix)(\([[:word:]]+\))??!?:.+$'
order: 1
- title: Changed
order: 999
release:
header: "# Release Notes"
footer: >-
---
Full Changelog: [{{ .PreviousTag }}...{{ .Tag }}](https://codeberg.org/scip/golsky/compare/{{ .PreviousTag }}...{{ .Tag }})

104
Makefile
View File

@@ -1,15 +1,101 @@
.PHONY all:
all: build
# Copyright © 2024 Thomas von Dein
.PHONY: build
build:
make -C src
mv src/golsky .
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# no need to modify anything below
tool = golsky
VERSION = $(shell grep VERSION main.go | head -1 | cut -d '"' -f2)
archs = darwin freebsd linux windows
PREFIX = /usr/local
UID = root
GID = 0
HAVE_POD := $(shell pod2text -h 2>/dev/null)
#TAGS = -tags=ebitenginedebug
all: buildlocal
buildlocal:
go build $(TAGS) -o $(tool)
install: buildlocal
install -d -o $(UID) -g $(GID) $(PREFIX)/bin
install -d -o $(UID) -g $(GID) $(PREFIX)/man/man1
install -o $(UID) -g $(GID) -m 555 $(tool) $(PREFIX)/sbin/
install -o $(UID) -g $(GID) -m 444 $(tool).1 $(PREFIX)/man/man1/
.PHONY: clean
clean:
make -C src clean
rm -f dump* rect*
rm -rf $(tool) coverage.out testdata t/out
test: clean
mkdir -p t/out
go test ./... $(ARGS)
testlint: test lint
lint:
golangci-lint run
lint-full:
golangci-lint run --enable-all --exclude-use-default --disable exhaustivestruct,exhaustruct,depguard,interfacer,deadcode,golint,structcheck,scopelint,varcheck,ifshort,maligned,nosnakecase,godot,funlen,gofumpt,cyclop,noctx,gochecknoglobals,paralleltest
testfuzzy: clean
go test -fuzz ./... $(ARGS)
singletest:
@echo "Call like this: make singletest TEST=TestPrepareColumns ARGS=-v"
go test -run $(TEST) $(ARGS)
cover-report:
go test ./... -cover -coverprofile=coverage.out
go tool cover -html=coverage.out
goupdate:
go get -t -u=patch ./...
buildall:
./mkrel.sh $(tool) $(VERSION)
release: buildall
gh release create $(VERSION) --generate-notes releases/*
show-versions: buildlocal
@echo "### golsky version:"
@./golsky -V
@echo
@echo "### go module versions:"
@go list -m all
@echo
@echo "### go version used for building:"
@grep -m 1 go go.mod
# lint:
# golangci-lint run -p bugs -p unused
buildwasm:
env GOOS=js GOARCH=wasm go build -o $(tool).wasm $(LDFLAGS) .
zipwasm:
zip -r openquell-$(SHORTVERSION).zip index.html $(tool).wasm wasm_exec.js
wasm: buildwasm zipwasm
@ls -l $(tool)-$(SHORTVERSION).zip
.PHONY: profile
profile: build

18
Makefile.dist Normal file
View File

@@ -0,0 +1,18 @@
# -*-make-*-
.PHONY: install all
tool = rpn
PREFIX = /usr/local
UID = root
GID = 0
all:
@echo "Type 'sudo make install' to install the tool."
@echo "To change prefix, type 'sudo make install PREFIX=/opt'"
install:
install -d -o $(UID) -g $(GID) $(PREFIX)/bin
install -d -o $(UID) -g $(GID) $(PREFIX)/share/doc
install -o $(UID) -g $(GID) -m 555 $(tool) $(PREFIX)/sbin/
install -o $(UID) -g $(GID) -m 444 *.md $(PREFIX)/share/doc/

View File

@@ -1,9 +1,9 @@
# golsky - Conway's game of life written in GO
![Golsky Logo](https://github.com/TLINDEN/golsky/blob/main/.github/assets/golskylogo.png)
![Golsky Logo](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/golskylogo.png)
[![License](https://img.shields.io/badge/license-GPL-blue.svg)](https://github.com/tlinden/golsky/blob/master/LICENSE)
[![Go Report Card](https://goreportcard.com/badge/github.com/tlinden/golsky)](https://goreportcard.com/report/github.com/tlinden/golsky)
[![License](https://img.shields.io/badge/license-GPL-blue.svg)](https://codeberg.org/scip/golsky/blob/master/LICENSE)
[![Go Report Card](https://goreportcard.com/badge/codeberg.org/scip/golsky)](https://goreportcard.com/report/codeberg.org/scip/golsky)
I wanted to play around a little bit with [**Conways Game of Life**](https://conwaylife.com/)
in golang and here's the result. It's a simple game using
@@ -14,15 +14,15 @@ John Conway himself: https://youtu.be/R9Plq-D1gEk?si=yYxs77e9yXxeSNbL
Based on: https://youtu.be/FWSR_7kZuYg?si=ix1dmo76D8AmF25F
# Screenshots
[![golsky-mainmenu.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-mainmenu.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-mainmenu.png)
[![golsky-options.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-options.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-options.png)
[![golsky-bindings.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-bindings.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-bindings.png)
[![golsky-evolution-trace.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-evolution-trace.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-evolution-trace.png)
[![golsky-zoom.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-zoom.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-zoom.png)
[![golsky-debug.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-debug.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-debug.png)
[![golsky-capture.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-capture.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-capture.png)
[![golsky-captured.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-captured.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-captured.png)
[![golsky-dark-theme.png](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/256_golsky-dark-theme.png)](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-dark-theme.png)
[![golsky-mainmenu.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-mainmenu.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-mainmenu.png)
[![golsky-options.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-options.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-options.png)
[![golsky-bindings.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-bindings.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-bindings.png)
[![golsky-evolution-trace.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-evolution-trace.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-evolution-trace.png)
[![golsky-zoom.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-zoom.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-zoom.png)
[![golsky-debug.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-debug.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-debug.png)
[![golsky-capture.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-capture.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-capture.png)
[![golsky-captured.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-captured.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-captured.png)
[![golsky-dark-theme.png](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/256_golsky-dark-theme.png)](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-dark-theme.png)
[Youtube video game preview](https://www.youtube.com/watch?v=xEto6Oew16I)
@@ -102,7 +102,7 @@ While it runs, there are a couple of commands you can use:
# Report bugs
[Please open an issue](https://github.com/TLINDEN/golsky/issues). Thanks!
[Please open an issue](https://codeberg.org/scip/golsky/issues). Thanks!
# License

View File

@@ -11,8 +11,8 @@
- try arche ecs variant with either a component of the cells neighbors or using relations.
- https://mattnakama.com/blog/go-branchless-coding/
- add performance measurements, see:
DrawTriangles: https://github.com/TLINDEN/testgol
WritePixels: https://github.com/TLINDEN/testgol/tree/wrpixels
DrawTriangles: https://codeberg.org/scip/testgol
WritePixels: https://codeberg.org/scip/testgol/tree/wrpixels
https://www.tasnimzotder.com/blog/optimizing-game-of-life-algorithm
- pre-draw the grid separately to a cache grid image, then during
rendering, first draw the dead background, then the life cells, and

View File

Before

Width:  |  Height:  |  Size: 269 B

After

Width:  |  Height:  |  Size: 269 B

View File

Before

Width:  |  Height:  |  Size: 263 B

After

Width:  |  Height:  |  Size: 263 B

View File

Before

Width:  |  Height:  |  Size: 269 B

After

Width:  |  Height:  |  Size: 269 B

View File

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 289 B

View File

Before

Width:  |  Height:  |  Size: 271 B

After

Width:  |  Height:  |  Size: 271 B

View File

@@ -1,6 +1,6 @@
// this comes from the camera example but I enhanced it a little bit
package main
package cmd
import (
"fmt"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"errors"
@@ -10,7 +10,7 @@ import (
"strings"
"github.com/spf13/pflag"
"github.com/tlinden/golsky/rle"
"codeberg.org/scip/golsky/rle"
)
// all the settings comming from commandline, but maybe tweaked later from the UI

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"github.com/hajimehoshi/ebiten/v2"

View File

@@ -1,4 +1,4 @@
package main
package cmd
// find an item in a list, generic variant
func Contains[E comparable](s []E, v E) bool {

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"bufio"
@@ -9,7 +9,7 @@ import (
"strings"
"time"
"github.com/tlinden/golsky/rle"
"codeberg.org/scip/golsky/rle"
)
// equals grid height, is being used to access grid elements and must be global

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"image/color"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"log"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"bytes"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"embed"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"image/color"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"image/color"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"fmt"
@@ -10,7 +10,7 @@ import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil"
"github.com/hajimehoshi/ebiten/v2/vector"
"github.com/tlinden/golsky/rle"
"codeberg.org/scip/golsky/rle"
"golang.org/x/image/math/f64"
)

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"log"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import "github.com/hajimehoshi/ebiten/v2"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import "runtime"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"fmt"

View File

@@ -1,4 +1,4 @@
package main
package cmd
import (
"image/color"

2
go.mod
View File

@@ -1,4 +1,4 @@
module github.com/tlinden/golsky
module codeberg.org/scip/golsky
go 1.22

View File

@@ -8,6 +8,7 @@ import (
_ "net/http/pprof"
"codeberg.org/scip/golsky/cmd"
"github.com/hajimehoshi/ebiten/v2"
)
@@ -18,22 +19,22 @@ func main() {
directstart = true
}
config, err := ParseCommandline()
config, err := cmd.ParseCommandline()
if err != nil {
log.Fatal(err)
}
if config.ShowVersion {
fmt.Printf("This is golsky version %s\n", VERSION)
fmt.Printf("This is golsky version %s\n", cmd.VERSION)
os.Exit(0)
}
start := Play
start := cmd.Play
if !directstart {
start = Menu
start = cmd.Menu
config.DelayedStart = true
}
game := NewGame(config, SceneName(start))
game := cmd.NewGame(config, cmd.SceneName(start))
if config.ProfileFile != "" {
// enable cpu profiling. Do NOT use q to stop the game but

View File

@@ -1,97 +0,0 @@
# Copyright © 2024 Thomas von Dein
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# no need to modify anything below
tool = golsky
VERSION = $(shell grep VERSION main.go | head -1 | cut -d '"' -f2)
archs = darwin freebsd linux windows
PREFIX = /usr/local
UID = root
GID = 0
HAVE_POD := $(shell pod2text -h 2>/dev/null)
#TAGS = -tags=ebitenginedebug
all: buildlocal
buildlocal:
go build $(TAGS) -o $(tool)
install: buildlocal
install -d -o $(UID) -g $(GID) $(PREFIX)/bin
install -d -o $(UID) -g $(GID) $(PREFIX)/man/man1
install -o $(UID) -g $(GID) -m 555 $(tool) $(PREFIX)/sbin/
install -o $(UID) -g $(GID) -m 444 $(tool).1 $(PREFIX)/man/man1/
clean:
rm -rf $(tool) coverage.out testdata t/out
test: clean
mkdir -p t/out
go test ./... $(ARGS)
testlint: test lint
lint:
golangci-lint run
lint-full:
golangci-lint run --enable-all --exclude-use-default --disable exhaustivestruct,exhaustruct,depguard,interfacer,deadcode,golint,structcheck,scopelint,varcheck,ifshort,maligned,nosnakecase,godot,funlen,gofumpt,cyclop,noctx,gochecknoglobals,paralleltest
testfuzzy: clean
go test -fuzz ./... $(ARGS)
singletest:
@echo "Call like this: make singletest TEST=TestPrepareColumns ARGS=-v"
go test -run $(TEST) $(ARGS)
cover-report:
go test ./... -cover -coverprofile=coverage.out
go tool cover -html=coverage.out
goupdate:
go get -t -u=patch ./...
buildall:
./mkrel.sh $(tool) $(VERSION)
release: buildall
gh release create $(VERSION) --generate-notes releases/*
show-versions: buildlocal
@echo "### golsky version:"
@./golsky -V
@echo
@echo "### go module versions:"
@go list -m all
@echo
@echo "### go version used for building:"
@grep -m 1 go go.mod
# lint:
# golangci-lint run -p bugs -p unused
buildwasm:
env GOOS=js GOARCH=wasm go build -o $(tool).wasm $(LDFLAGS) .
zipwasm:
zip -r openquell-$(SHORTVERSION).zip index.html $(tool).wasm wasm_exec.js
wasm: buildwasm zipwasm
@ls -l $(tool)-$(SHORTVERSION).zip