Giter VIP home page Giter VIP logo

quinesnake's Introduction

quinesnake

A quine that plays snake over its own source!

quinesnake gif

How to run it

The program compiles itself; to run it first make the source file executable (chmod +x quinesnake.cpp), then run it with ./quinesnake.cpp. It invokes g++ on itself and then starts the game.

The snake is controlled with w, a, s and d.

Note: some people have reported issues where the snake and food appear black in their terminals. This is likely due to the value of the environments TERM variable. You can try run the program with:

TERM=xterm-256color ./quinesnake.cpp

This will tell curses that your terminal supports the high-intensity colour range used by quinesnake.

quinesnake.cpp

This is the quine version that also compiles itself and plays snake over its own source. It requires:

  • libcurses
  • Some binary called g++ needs to exist (tested with GCC and Clang)
  • /bin/ls needs to exist and be executable

quinesnake-commented.cpp

This version of the program isn't a quine and doesn't compile itself, but it has all of the basic game-playing logic that the real version has, plus it's commented and readable.

quinesnake's People

Contributors

taylorconor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quinesnake's Issues

code cannot run, gives Assertion '__pos <= size()' failed. error

I run it on simple terminal and xterm, both died with same error, here's the whole output:

% ./quinesnake.cpp 
./quinesnake.cpp: In function ‘int C(int, int, int)’: 
./quinesnake.cpp:19:80: warning: no return statement in function returning non- 
void [-Wreturn-type] 
   19 | win();})x";I G(I x,I y){K 3&s[y*w+x]>>8;}I C(I x,I y,I c){(s[y*w+x]&=~z 
)|=c<<8;} 
      | 
        ^ 
./quinesnake.cpp: In function ‘int P(int, int&, int&)’: 
./quinesnake.cpp:20:62: warning: no return statement in function returning non- 
void [-Wreturn-type] 
   20 | I P(I d,I &x,I &y){F(d==1)x-=2;!d&&y++;d==2&&y--;F(d==3)x+=2;}I M(){cur 
s_set(0); 
      |                                                              ^ 
/usr/src/debug/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:1221: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](size_type) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; _Alloc = std::allocator<wchar_t>; reference = wchar_t&; size_type = long unsigned int]: Assertion '__pos <= size()' failed. 
                                                                                                                        sh: line 3: 13148 Aborted                 ./o < /dev/tty 

I do have ncurses and g++ installed.

Add a LICENSE

I recommend Apache 2.0, but there should be one in this repo.

Add support for Dvorak

wasd is QWERTY-specific, and doesn't work for other keyboards.

PR incoming for Dvorak's ,aoe

Color doesn't work on my setup

For some reason the color isn't working on my setup -- characters are gray, the absence of a character is black. You really have to hunt for that first food! (After that subsequent ones can be found by looking for what changes.)

Anyway, my setup is:

OS: Release Linux Mint 18.3 Sylvia 64-bit
Terminal emulator: MATE Terminal 1.18.2
Shell: GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
g++: g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
curses: 6.0+20160213-1ubuntu1 [I'm going by the pacakge manager here, I can't figure out how else to get my curses version; this is the version for the libncurses5 package]

Fix LICENSE

Who is [name of copyright owner] and when is [yyyy]?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.