{"id":20191325,"url":"https://github.com/patrickbussmann/shooting-target","last_synced_at":"2025-09-20T08:57:51.456Z","repository":{"id":57036291,"uuid":"100169534","full_name":"patrickbussmann/shooting-target","owner":"patrickbussmann","description":"Draw shooting targets with hits based on coordinate system","archived":false,"fork":false,"pushed_at":"2017-10-17T08:04:57.000Z","size":158,"stargazers_count":11,"open_issues_count":2,"forks_count":3,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-09-18T01:39:32.663Z","etag":null,"topics":["aim","air-gun","air-pistol","air-rifle","draw","drawing","goal","gun","hit","hits","shoot","shooting","shooting-sport","shot","target","weapon"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/patrickbussmann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-13T10:32:57.000Z","updated_at":"2025-01-28T07:28:54.000Z","dependencies_parsed_at":"2022-08-24T14:11:06.660Z","dependency_job_id":null,"html_url":"https://github.com/patrickbussmann/shooting-target","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/patrickbussmann/shooting-target","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickbussmann%2Fshooting-target","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickbussmann%2Fshooting-target/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickbussmann%2Fshooting-target/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickbussmann%2Fshooting-target/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrickbussmann","download_url":"https://codeload.github.com/patrickbussmann/shooting-target/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickbussmann%2Fshooting-target/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276070744,"owners_count":25580129,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-20T02:00:10.207Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aim","air-gun","air-pistol","air-rifle","draw","drawing","goal","gun","hit","hits","shoot","shooting","shooting-sport","shot","target","weapon"],"created_at":"2024-11-14T03:48:31.170Z","updated_at":"2025-09-20T08:57:51.440Z","avatar_url":"https://github.com/patrickbussmann.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Shooting Target\n===============\n\n[![Build Status](https://travis-ci.org/patrickbussmann/shooting-target.svg?branch=master)](https://travis-ci.org/patrickbussmann/shooting-target)\n[![Latest Stable Version](https://poser.pugx.org/patrickbussmann/shooting-target/v/stable.png)](https://packagist.org/packages/patrickbussmann/shooting-target)\n[![Total Downloads](https://poser.pugx.org/patrickbussmann/shooting-target/downloads.png)](https://packagist.org/packages/patrickbussmann/shooting-target)\n[![StyleCI](https://styleci.io/repos/100169534/shield?branch=master)](https://styleci.io/repos/100169534)\n[![codecov.io](https://codecov.io/github/patrickbussmann/shooting-target/coverage.svg?branch=master)](https://codecov.io/github/patrickbussmann/shooting-target?branch=master)\n\nThe goal was it to display the hits from the [www.meyton.org/shooting-data-feed-sdf/](Meyton) system.\nThe data source is called Shooting Data Feed (SDF) and could be a XML file or a MySQL database.\n\n## Installation\n\n### With Composer\n\n```\n$ composer require patrickbussmann/shooting-target\n```\n\n```json\n{\n    \"require\": {\n        \"patrickbussmann/shooting-target\": \"dev-master\"\n    }\n}\n```\n\n```php\n\u003c?php\n\nrequire 'vendor/autoload.php';\n\nuse ShootingTarget\\Target;\nuse ShootingTarget\\Hit;\n```\n\n### Without Composer\n\n```\n$ git clone https://github.com/patrickbussmann/shooting-target.git\n```\n\n```php\n\u003c?php\n\nrequire 'shooting-target/src/Target.php';\nrequire 'shooting-target/src/Hit.php';\n\nuse ShootingTarget\\Target;\nuse ShootingTarget\\Hit;\n```\n\n## Usage\n\n### Example `Air Rifle 10m` (DE: Luftgewehr LG 10m)\n\n```php\n$target = new Target(0.5, 0.5, 2.5, 4, 10);\n$target-\u003eaddHit(new Hit(0, 0));\n$target-\u003eaddHit(new Hit(500, 500));\n$target-\u003eaddHit(new Hit(-500, 500));\n$target-\u003eaddHit(new Hit(500, -500));\n$target-\u003eaddHit(new Hit(-500, -500));\nheader('Content-Type: image/png');\n$target-\u003edraw();\n```\n\n#### Result\n\n![The picture generated by the script above](https://raw.githubusercontent.com/patrickbussmann/shooting-target/master/resources/img/lg10.jpg)\n\n### Example `Air Pistol 10m` (DE: Luftpistole / LP 10m)\n\n```php\n$target = new Target(11.5, 5.0, 8.0, 7, 10);\n$target-\u003eaddHit(new Hit(0, 0));\n$target-\u003eaddHit(new Hit(1000, 1000));\n$target-\u003eaddHit(new Hit(-1000, 1000));\n$target-\u003eaddHit(new Hit(1000, -1000));\n$target-\u003eaddHit(new Hit(-1000, -1000));\nheader('Content-Type: image/png');\n$target-\u003edraw(10);\n```\n\n#### Result\n\n![The picture generated by the script above](https://raw.githubusercontent.com/patrickbussmann/shooting-target/master/resources/img/lp10.jpg)\n\n### Example with custom font\nUsing a custom font is more better because it will scale up to your selected size.\n\n```php\n$target = new Target(0.5, 0.5, 2.5, 4, 10);\n$target-\u003eaddHit(new Hit(0, 0));\n$target-\u003eaddHit(new Hit(500, 500));\n$target-\u003eaddHit(new Hit(-500, 500));\n$target-\u003eaddHit(new Hit(500, -500));\n$target-\u003eaddHit(new Hit(-500, -500));\nheader('Content-Type: image/png');\n$target-\u003edraw(10, Target::DRAW_TYPE_PNG, __DIR__ . '/arial.ttf');\n```\n\n#### Result\n\n![The picture generated by the script above](https://raw.githubusercontent.com/patrickbussmann/shooting-target/master/resources/img/lg10-custom-font.jpg)\n\n## Target list\n\nThere are many targets which are compatible with this. Use them as you like.\nThe examples below based on [this](http://www.dsb.de/media/PDF/Statuten/Sportordnung/SpO_2015/Teil_0_-_Allgemeiner_Teil_closed.pdf) document from the DSB.\nThis is the reason why the table is in german language.\n\n\u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003eWettbewerb / Discipline\u003c/th\u003e\u003cth\u003eØ 10\u003c/th\u003e\u003cth\u003eInnen-Ø 10\u003c/th\u003e\u003cth\u003eRingabstand\u003c/th\u003e\u003cth\u003eErster schw. Ring\u003c/th\u003e\u003cth\u003eRingzahl\u003c/th\u003e\u003cth\u003eStatus\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eGewehr 10 m\u003cbr /\u003eArmbrust 10 m\u003c/td\u003e\u003ctd\u003e0.5\u003c/td\u003e\u003ctd\u003e0.5\u003c/td\u003e\u003ctd\u003e2.5\u003c/td\u003e\u003ctd\u003e4\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e✅\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(0.5, 0.5, 2.5, 4, 10);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e10 m Pistole\u003c/td\u003e\u003ctd\u003e11.5\u003c/td\u003e\u003ctd\u003e5\u003c/td\u003e\u003ctd\u003e8\u003c/td\u003e\u003ctd\u003e7\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e✅\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(11.5, 5, 8, 7, 10);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eGewehr 15 m\u003c/td\u003e\u003ctd\u003e4.5\u003c/td\u003e\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\u003ctd\u003e4.5\u003c/td\u003e\u003ctd\u003e6\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(4.5, 0, 4.5, 6, 10);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e100 m Gewehr\u003cbr /\u003e25 m Pistole\u003cbr /\u003e50 m Pistole\u003c/td\u003e\u003ctd\u003e50\u003c/td\u003e\u003ctd\u003e25\u003c/td\u003e\u003ctd\u003e25\u003c/td\u003e\u003ctd\u003e7\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(50, 25, 25, 7, 10);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eGewehr 300 m\u003cbr /\u003eVorderlader Freigewehr 300 m\u003c/td\u003e\u003ctd\u003e100\u003c/td\u003e\u003ctd\u003e50\u003c/td\u003e\u003ctd\u003e50\u003c/td\u003e\u003ctd\u003e5\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(100, 50, 50, 5, 10);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eMuskete 50 m\u003c/td\u003e\u003ctd\u003e80\u003c/td\u003e\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\u003ctd\u003e40\u003c/td\u003e\u003ctd\u003e1\u003c/td\u003e\u003ctd\u003e6\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(80, 0, 40, 1, 6);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e25 m Schnellfeuer-/Duell-Pistole\u003cbr /\u003ePistole (Duell)\u003c/td\u003e\u003ctd\u003e100\u003c/td\u003e\u003ctd\u003e50\u003c/td\u003e\u003ctd\u003e40\u003c/td\u003e\u003ctd\u003e5\u003c/td\u003e\u003ctd\u003e6\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(100, 50, 40, 5, 6);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eLaufende Scheibe 10 m\u003c/td\u003e\u003ctd\u003e5.5\u003c/td\u003e\u003ctd\u003e0.5\u003c/td\u003e\u003ctd\u003e2.5\u003c/td\u003e\u003ctd\u003e5\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(5.5, 0.5, 2.5, 5, 10);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eLaufende Scheibe 50 m\u003c/td\u003e\u003ctd\u003e60\u003c/td\u003e\u003ctd\u003e30\u003c/td\u003e\u003ctd\u003e17\u003c/td\u003e\u003ctd\u003e0\u003c/td\u003e\u003ctd\u003e2\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(60, 30, 17, 0, 2);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eArmbrust international 30 m\u003c/td\u003e\u003ctd\u003e6\u003c/td\u003e\u003ctd\u003e2\u003c/td\u003e\u003ctd\u003e6\u003c/td\u003e\u003ctd\u003e3\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(6, 2, 6, 3, 10);\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eArmbrust National 30 m\u003c/td\u003e\u003ctd\u003e10\u003c/td\u003e\u003ctd\u003e0.5\u003c/td\u003e\u003ctd\u003e15\u003c/td\u003e\u003ctd\u003e4\u003c/td\u003e\u003ctd\u003e6\u003c/td\u003e\u003ctd\u003e❔\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd colspan=\"7\"\u003e$target = new Target(10, 0.5, 15, 4, 6);\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n## Contribution\n- **Having an issue**? or looking for support? [Open an issue](https://github.com/patrickbussmann/shooting-target/issues/new) please.\n- Do you have a **new feature or a bug fix**? Fork the repo, make your changes, and submit a pull request. Thank you in Advance!\n\n## Support\nIf you like this project please star it 😉\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickbussmann%2Fshooting-target","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatrickbussmann%2Fshooting-target","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickbussmann%2Fshooting-target/lists"}