Repository files navigation

ruby_arena

Code ClimateBuild Status

Screenshot from the game

Ruby Arena is a game for programmers and people who wants to learn how to program in Ruby.

Instead of controling your robot with keys you have to program its AI (artifical intelligence) and see if it can beat other robots!

This project has been inspired by [robocode][robocode] (Java, .NET) and [rrobots][rrobots] (Ruby).

Goals of the project

  • create arena from scratch
  • learn
  • have fun!

How to run arena (and battles)

gem install ruby_arena
ruby_arena path_to/robot.rb path_to/another_robot.rb

You can run game with some predefined robots (levels).

ruby_arena -l 0 path_to/your_ai.rb

Example robots (AIs)

You can use source code of level robots as reference.

If you have your own robots (well AIs), then feel free to publish them as gists and add them here.

How to create your own robot (AI)

Just extend RubyArena::Ai class and implement your own #tick method.

class TestAi < RubyArena::Ai
def tick(events)
fire # do nothing but fire when possible
end
end

API for AI

AI api is very similar to robot api from [rrobots][rrobots].

# change speed by 1, max to 8
accelerate # change speed by -1, min to -8
decelerate
# turn robot, gun and radar
turn(angle)
# turn gun and radar
turn_gun(angle)
# turn radar
turn_radar(angle)
# fire a bullet
fire
# change radar view angle
set_radar_view_angle(angle)

You can do each action just once in each tick, so:

turn(2)
turn(2)

Will do just turn by 2 degrees. It is the same for other actions.

Current status

Project is in very early stage with unstable API. Any contribution (your own robot, reported issue, new pull request, advice regarding code/OO design) is very much appreciated.

However you can already start the game and the battle between robots! Detais were mentioned above.

How to contribute

  1. Fork the repo
  2. Create your own branch
  3. Do your changes
  4. Create pull request

Rules for contribution

  • Everything needs to be tested! Well not everything. I really do not have an idea how to test Gui. But rest of the code must be tested before merging to master. If you do not now how to test it, than open new issue and we can discuss it.
  • If something is hard to implement or change, then please refactor the code first so change is easy and then implement it.

Contributors

I would like to thank to each of the contributors.

License

MIT LICENSE [robocode]: http://robocode.sourceforge.net/ [rrobots]: http://rrobots.rubyforge.org/

About

Ruby Arena for fights between robots with own AI.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ruby_arena

Code ClimateBuild Status

Screenshot from the game

Ruby Arena is a game for programmers and people who wants to learn how to program in Ruby.

Instead of controling your robot with keys you have to program its AI (artifical intelligence) and see if it can beat other robots!

This project has been inspired by [robocode][robocode] (Java, .NET) and [rrobots][rrobots] (Ruby).

Goals of the project

  • create arena from scratch
  • learn
  • have fun!

How to run arena (and battles)

gem install ruby_arena
ruby_arena path_to/robot.rb path_to/another_robot.rb

You can run game with some predefined robots (levels).

ruby_arena -l 0 path_to/your_ai.rb

Example robots (AIs)

You can use source code of level robots as reference.

If you have your own robots (well AIs), then feel free to publish them as gists and add them here.

How to create your own robot (AI)

Just extend RubyArena::Ai class and implement your own #tick method.

class TestAi < RubyArena::Ai
def tick(events)
fire # do nothing but fire when possible
end
end

API for AI

AI api is very similar to robot api from [rrobots][rrobots].

# change speed by 1, max to 8
accelerate # change speed by -1, min to -8
decelerate
# turn robot, gun and radar
turn(angle)
# turn gun and radar
turn_gun(angle)
# turn radar
turn_radar(angle)
# fire a bullet
fire
# change radar view angle
set_radar_view_angle(angle)

You can do each action just once in each tick, so:

turn(2)
turn(2)

Will do just turn by 2 degrees. It is the same for other actions.

Current status

Project is in very early stage with unstable API. Any contribution (your own robot, reported issue, new pull request, advice regarding code/OO design) is very much appreciated.

However you can already start the game and the battle between robots! Detais were mentioned above.

How to contribute

  1. Fork the repo
  2. Create your own branch
  3. Do your changes
  4. Create pull request

Rules for contribution

  • Everything needs to be tested! Well not everything. I really do not have an idea how to test Gui. But rest of the code must be tested before merging to master. If you do not now how to test it, than open new issue and we can discuss it.
  • If something is hard to implement or change, then please refactor the code first so change is easy and then implement it.

Contributors

I would like to thank to each of the contributors.

License

MIT LICENSE [robocode]: http://robocode.sourceforge.net/ [rrobots]: http://rrobots.rubyforge.org/

About

Ruby Arena for fights between robots with own AI.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ruby_arena

Code ClimateBuild Status

Screenshot from the game

Ruby Arena is a game for programmers and people who wants to learn how to program in Ruby.

Instead of controling your robot with keys you have to program its AI (artifical intelligence) and see if it can beat other robots!

This project has been inspired by [robocode][robocode] (Java, .NET) and [rrobots][rrobots] (Ruby).

Goals of the project

  • create arena from scratch
  • learn
  • have fun!

How to run arena (and battles)

gem install ruby_arena
ruby_arena path_to/robot.rb path_to/another_robot.rb

You can run game with some predefined robots (levels).

ruby_arena -l 0 path_to/your_ai.rb

Example robots (AIs)

You can use source code of level robots as reference.

If you have your own robots (well AIs), then feel free to publish them as gists and add them here.

How to create your own robot (AI)

Just extend RubyArena::Ai class and implement your own #tick method.

class TestAi < RubyArena::Ai
def tick(events)
fire # do nothing but fire when possible
end
end

API for AI

AI api is very similar to robot api from [rrobots][rrobots].

# change speed by 1, max to 8
accelerate # change speed by -1, min to -8
decelerate
# turn robot, gun and radar
turn(angle)
# turn gun and radar
turn_gun(angle)
# turn radar
turn_radar(angle)
# fire a bullet
fire
# change radar view angle
set_radar_view_angle(angle)

You can do each action just once in each tick, so:

turn(2)
turn(2)

Will do just turn by 2 degrees. It is the same for other actions.

Current status

Project is in very early stage with unstable API. Any contribution (your own robot, reported issue, new pull request, advice regarding code/OO design) is very much appreciated.

However you can already start the game and the battle between robots! Detais were mentioned above.

How to contribute

  1. Fork the repo
  2. Create your own branch
  3. Do your changes
  4. Create pull request

Rules for contribution

  • Everything needs to be tested! Well not everything. I really do not have an idea how to test Gui. But rest of the code must be tested before merging to master. If you do not now how to test it, than open new issue and we can discuss it.
  • If something is hard to implement or change, then please refactor the code first so change is easy and then implement it.

Contributors

I would like to thank to each of the contributors.

License

MIT LICENSE [robocode]: http://robocode.sourceforge.net/ [rrobots]: http://rrobots.rubyforge.org/

About

Ruby Arena for fights between robots with own AI.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ruby_arena

Code ClimateBuild Status

Screenshot from the game

Ruby Arena is a game for programmers and people who wants to learn how to program in Ruby.

Instead of controling your robot with keys you have to program its AI (artifical intelligence) and see if it can beat other robots!

This project has been inspired by [robocode][robocode] (Java, .NET) and [rrobots][rrobots] (Ruby).

Goals of the project

  • create arena from scratch
  • learn
  • have fun!

How to run arena (and battles)

gem install ruby_arena
ruby_arena path_to/robot.rb path_to/another_robot.rb

You can run game with some predefined robots (levels).

ruby_arena -l 0 path_to/your_ai.rb

Example robots (AIs)

You can use source code of level robots as reference.

If you have your own robots (well AIs), then feel free to publish them as gists and add them here.

How to create your own robot (AI)

Just extend RubyArena::Ai class and implement your own #tick method.

class TestAi < RubyArena::Ai
def tick(events)
fire # do nothing but fire when possible
end
end

API for AI

AI api is very similar to robot api from [rrobots][rrobots].

# change speed by 1, max to 8
accelerate # change speed by -1, min to -8
decelerate
# turn robot, gun and radar
turn(angle)
# turn gun and radar
turn_gun(angle)
# turn radar
turn_radar(angle)
# fire a bullet
fire
# change radar view angle
set_radar_view_angle(angle)

You can do each action just once in each tick, so:

turn(2)
turn(2)

Will do just turn by 2 degrees. It is the same for other actions.

Current status

Project is in very early stage with unstable API. Any contribution (your own robot, reported issue, new pull request, advice regarding code/OO design) is very much appreciated.

However you can already start the game and the battle between robots! Detais were mentioned above.

How to contribute

  1. Fork the repo
  2. Create your own branch
  3. Do your changes
  4. Create pull request

Rules for contribution

  • Everything needs to be tested! Well not everything. I really do not have an idea how to test Gui. But rest of the code must be tested before merging to master. If you do not now how to test it, than open new issue and we can discuss it.
  • If something is hard to implement or change, then please refactor the code first so change is easy and then implement it.

Contributors

I would like to thank to each of the contributors.

License

MIT LICENSE [robocode]: http://robocode.sourceforge.net/ [rrobots]: http://rrobots.rubyforge.org/

About

Ruby Arena for fights between robots with own AI.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ruby_arena

Code ClimateBuild Status

Screenshot from the game

Ruby Arena is a game for programmers and people who wants to learn how to program in Ruby.

Instead of controling your robot with keys you have to program its AI (artifical intelligence) and see if it can beat other robots!

This project has been inspired by [robocode][robocode] (Java, .NET) and [rrobots][rrobots] (Ruby).

Goals of the project

  • create arena from scratch
  • learn
  • have fun!

How to run arena (and battles)

gem install ruby_arena
ruby_arena path_to/robot.rb path_to/another_robot.rb

You can run game with some predefined robots (levels).

ruby_arena -l 0 path_to/your_ai.rb

Example robots (AIs)

You can use source code of level robots as reference.

If you have your own robots (well AIs), then feel free to publish them as gists and add them here.

How to create your own robot (AI)

Just extend RubyArena::Ai class and implement your own #tick method.

class TestAi < RubyArena::Ai
def tick(events)
fire # do nothing but fire when possible
end
end

API for AI

AI api is very similar to robot api from [rrobots][rrobots].

# change speed by 1, max to 8
accelerate # change speed by -1, min to -8
decelerate
# turn robot, gun and radar
turn(angle)
# turn gun and radar
turn_gun(angle)
# turn radar
turn_radar(angle)
# fire a bullet
fire
# change radar view angle
set_radar_view_angle(angle)

You can do each action just once in each tick, so:

turn(2)
turn(2)

Will do just turn by 2 degrees. It is the same for other actions.

Current status

Project is in very early stage with unstable API. Any contribution (your own robot, reported issue, new pull request, advice regarding code/OO design) is very much appreciated.

However you can already start the game and the battle between robots! Detais were mentioned above.

How to contribute

  1. Fork the repo
  2. Create your own branch
  3. Do your changes
  4. Create pull request

Rules for contribution

  • Everything needs to be tested! Well not everything. I really do not have an idea how to test Gui. But rest of the code must be tested before merging to master. If you do not now how to test it, than open new issue and we can discuss it.
  • If something is hard to implement or change, then please refactor the code first so change is easy and then implement it.

Contributors

I would like to thank to each of the contributors.

License

MIT LICENSE [robocode]: http://robocode.sourceforge.net/ [rrobots]: http://rrobots.rubyforge.org/

About

Ruby Arena for fights between robots with own AI.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ruby_arena

Code ClimateBuild Status

Screenshot from the game

Ruby Arena is a game for programmers and people who wants to learn how to program in Ruby.

Instead of controling your robot with keys you have to program its AI (artifical intelligence) and see if it can beat other robots!

This project has been inspired by [robocode][robocode] (Java, .NET) and [rrobots][rrobots] (Ruby).

Goals of the project

  • create arena from scratch
  • learn
  • have fun!

How to run arena (and battles)

gem install ruby_arena
ruby_arena path_to/robot.rb path_to/another_robot.rb

You can run game with some predefined robots (levels).

ruby_arena -l 0 path_to/your_ai.rb

Example robots (AIs)

You can use source code of level robots as reference.

If you have your own robots (well AIs), then feel free to publish them as gists and add them here.

How to create your own robot (AI)

Just extend RubyArena::Ai class and implement your own #tick method.

class TestAi < RubyArena::Ai
def tick(events)
fire # do nothing but fire when possible
end
end

API for AI

AI api is very similar to robot api from [rrobots][rrobots].

# change speed by 1, max to 8
accelerate # change speed by -1, min to -8
decelerate
# turn robot, gun and radar
turn(angle)
# turn gun and radar
turn_gun(angle)
# turn radar
turn_radar(angle)
# fire a bullet
fire
# change radar view angle
set_radar_view_angle(angle)

You can do each action just once in each tick, so:

turn(2)
turn(2)

Will do just turn by 2 degrees. It is the same for other actions.

Current status

Project is in very early stage with unstable API. Any contribution (your own robot, reported issue, new pull request, advice regarding code/OO design) is very much appreciated.

However you can already start the game and the battle between robots! Detais were mentioned above.

How to contribute

  1. Fork the repo
  2. Create your own branch
  3. Do your changes
  4. Create pull request

Rules for contribution

  • Everything needs to be tested! Well not everything. I really do not have an idea how to test Gui. But rest of the code must be tested before merging to master. If you do not now how to test it, than open new issue and we can discuss it.
  • If something is hard to implement or change, then please refactor the code first so change is easy and then implement it.

Contributors

I would like to thank to each of the contributors.

License

MIT LICENSE [robocode]: http://robocode.sourceforge.net/ [rrobots]: http://rrobots.rubyforge.org/

About

Ruby Arena for fights between robots with own AI.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ruby_arena

Code ClimateBuild Status

Screenshot from the game

Ruby Arena is a game for programmers and people who wants to learn how to program in Ruby.

Instead of controling your robot with keys you have to program its AI (artifical intelligence) and see if it can beat other robots!

This project has been inspired by [robocode][robocode] (Java, .NET) and [rrobots][rrobots] (Ruby).

Goals of the project

  • create arena from scratch
  • learn
  • have fun!

How to run arena (and battles)

gem install ruby_arena
ruby_arena path_to/robot.rb path_to/another_robot.rb

You can run game with some predefined robots (levels).

ruby_arena -l 0 path_to/your_ai.rb

Example robots (AIs)

You can use source code of level robots as reference.

If you have your own robots (well AIs), then feel free to publish them as gists and add them here.

How to create your own robot (AI)

Just extend RubyArena::Ai class and implement your own #tick method.

class TestAi < RubyArena::Ai
def tick(events)
fire # do nothing but fire when possible
end
end

API for AI

AI api is very similar to robot api from [rrobots][rrobots].

# change speed by 1, max to 8
accelerate # change speed by -1, min to -8
decelerate
# turn robot, gun and radar
turn(angle)
# turn gun and radar
turn_gun(angle)
# turn radar
turn_radar(angle)
# fire a bullet
fire
# change radar view angle
set_radar_view_angle(angle)

You can do each action just once in each tick, so:

turn(2)
turn(2)

Will do just turn by 2 degrees. It is the same for other actions.

Current status

Project is in very early stage with unstable API. Any contribution (your own robot, reported issue, new pull request, advice regarding code/OO design) is very much appreciated.

However you can already start the game and the battle between robots! Detais were mentioned above.

How to contribute

  1. Fork the repo
  2. Create your own branch
  3. Do your changes
  4. Create pull request

Rules for contribution

  • Everything needs to be tested! Well not everything. I really do not have an idea how to test Gui. But rest of the code must be tested before merging to master. If you do not now how to test it, than open new issue and we can discuss it.
  • If something is hard to implement or change, then please refactor the code first so change is easy and then implement it.

Contributors

I would like to thank to each of the contributors.

License

MIT LICENSE [robocode]: http://robocode.sourceforge.net/ [rrobots]: http://rrobots.rubyforge.org/

About

Ruby Arena for fights between robots with own AI.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ruby_arena

Code ClimateBuild Status

Screenshot from the game

Ruby Arena is a game for programmers and people who wants to learn how to program in Ruby.

Instead of controling your robot with keys you have to program its AI (artifical intelligence) and see if it can beat other robots!

This project has been inspired by [robocode][robocode] (Java, .NET) and [rrobots][rrobots] (Ruby).

Goals of the project

  • create arena from scratch
  • learn
  • have fun!

How to run arena (and battles)

gem install ruby_arena
ruby_arena path_to/robot.rb path_to/another_robot.rb

You can run game with some predefined robots (levels).

ruby_arena -l 0 path_to/your_ai.rb

Example robots (AIs)

You can use source code of level robots as reference.

If you have your own robots (well AIs), then feel free to publish them as gists and add them here.

How to create your own robot (AI)

Just extend RubyArena::Ai class and implement your own #tick method.

class TestAi < RubyArena::Ai
def tick(events)
fire # do nothing but fire when possible
end
end

API for AI

AI api is very similar to robot api from [rrobots][rrobots].

# change speed by 1, max to 8
accelerate # change speed by -1, min to -8
decelerate
# turn robot, gun and radar
turn(angle)
# turn gun and radar
turn_gun(angle)
# turn radar
turn_radar(angle)
# fire a bullet
fire
# change radar view angle
set_radar_view_angle(angle)

You can do each action just once in each tick, so:

turn(2)
turn(2)

Will do just turn by 2 degrees. It is the same for other actions.

Current status

Project is in very early stage with unstable API. Any contribution (your own robot, reported issue, new pull request, advice regarding code/OO design) is very much appreciated.

However you can already start the game and the battle between robots! Detais were mentioned above.

How to contribute

  1. Fork the repo
  2. Create your own branch
  3. Do your changes
  4. Create pull request

Rules for contribution

  • Everything needs to be tested! Well not everything. I really do not have an idea how to test Gui. But rest of the code must be tested before merging to master. If you do not now how to test it, than open new issue and we can discuss it.
  • If something is hard to implement or change, then please refactor the code first so change is easy and then implement it.

Contributors

I would like to thank to each of the contributors.

License

MIT LICENSE [robocode]: http://robocode.sourceforge.net/ [rrobots]: http://rrobots.rubyforge.org/

About

Ruby Arena for fights between robots with own AI.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages