GreedyZnake on Terminal GameBoard === #### A group of greedy snake gaming AI on ncurses-based gameboard framework using C++. How greedy are you? #### https://github.com/hyili/GreedyZnake.git ![GithubWorkFlowStatus](https://img.shields.io/github/workflow/status/hyili/GreedyZnake/CodeQL) ![GithubLastCommitDay](https://img.shields.io/github/last-commit/hyili/GreedyZnake) ![GithubCommitActivity](https://img.shields.io/github/commit-activity/m/hyili/GreedyZnake) ![GithubCodeSize](https://img.shields.io/github/languages/code-size/hyili/GreedyZnake) ### Demo Building process is deprecated, for the latest building instructions, please refers to [Building Process](#How-to-build) ![build_and_execute](build_and_execute.gif) ![game_autoplay](game_autoplay.gif) ### Programming Language & Prerequisition Written in C++(C++11) Ncurses library ### How to build ``` # cd {Project_Root} # aclocal # autoconf # automake --add-missing # ./configure # make # make install ``` ### How to run ``` # snake ``` ### Autoplay Using -a and -m option. e.g. ``` # snake -a -e -f 60 -s 100 -m O ``` ### Options available - -a: auto play mode, default false. - Auto mode(-a) support, using customizable Bot to autoplay the game - -e: fence around the map, default false. - Fence mode(-e) support, the snake will be blocked by fence around the map - -l: snake length, default 50. - A snake's initial body length(-l {length}) is adjustable - -y: snake y, default 5. - A snake's initial location(-y {location})(-x {location}) is adjustable - -x: snake x, default 5. - A snake's initial location(-y {location})(-x {location}) is adjustable - -f: max frames per second, default 100. min: 1, max: 200 - Gameboard support adjustable maxfps(-f {FPS}, Frames Per Second, refresh rate) - -s: distance per second(speed), default 20. min: 1, max: 200 - Gameboard support adjustable maxaps(-s {APS}, Action-applied Per Second, speed) - A snake's move speed(-s {speed}) is adjustable, implement based on APS - -m: bot path-finding method. default: 'O' - Strategy selection(-m {strategy}) - 'A': Pure food-finding(A*) and Wandering. - 'a': Pure food-finding(A*). - 'T': Food-finding(A*), tail-chasing(A*) and Wandering. - 't': Food-finding(A*) and tail-chasing(A*). - 'O': Advanced food-finding(A*) and filling(A* extension). - 'P': Pure tail-chasing(A*) and Wandering. - 'p': Pure tail-chasing(A*). - 'F': Food-finding(A*) and filling(A* extension). - 'W': Wandering. - others: Straight forward. ### Keyboard Control - Move - Up/Down/Left/Right - Pause - p - Quit - q - Restart(Reset) - r ### Rules - A snake keeps searching for food - A snake grows up its body each time after having a food - A snake cannot cross over its body - A snake will stop moving while meeting walls or body