커맨드 라인 뱀 게임?


14

나는 오래 전에 "뱀"또는 "뱀"과 같은 것으로 여겨지는 게임을 가지고있는 오래된 휴대 전화를 가지고 있었으며, 기본적으로 화살표 키로 뱀의 방향을 바꿀 수있었습니다. 뱀은 자신을 만질 수 없거나 (게임 오버) 맵의 가장자리에 닿으면 반대편에 나타납니다. 이 게임의 목적은 뱀이 음식을 먹도록하는 것이었지만, 음식을 조금씩 먹을 때마다 (어떤 음식을 먹을 때마다 다른 곳에 나타날 것이지만, 보통 한 번에 하나씩) 뱀이 조금 더 길어질 것입니다 게임하기가 더 어렵습니다.

터미널에이 게임의 버전이 있다면 (이 게임을 놓치고 이상한 3D 버전 만 찾을 수 있기 때문에)이 게임에 익숙 할 것입니다. 나는 그것이 원본에 충실하고 아마도 ASCII 줄을 따라 무언가를 갈 것으로 기대하고 있었습니까?

나는 그놈 3.20과 함께 우분투 그놈 16.04.1을 실행하고 있습니다. 공식 저장소에 무료 응용 프로그램이 있습니까?

답변:


20

", 공식 저장소에 무료 응용 프로그램이 있습니까 (어디에서 선호하는지)?"

먼저 nsnake당신의 요구를 정확히 충족시켜야합니다

sudo apt-get install nsnake

여기에 이미지 설명을 입력하십시오

내가 찾은 두 가지가 더 있지만 snake4이것은 새 창에서 열리므로 터미널 게임 gnibbles은 아니지만 실행할 수는 없습니다.


gnibbles로 쉽게 업그레이드 할 수있는 과도기적 패키지 일뿐 gnome-nibbles입니다 gnome-nibbles. 실제 패키지는 게임입니다 .

@ParanoidPanda 그것은 그것을 설명합니다 :) 나는 그것에 대해 약간의 세부 사항으로 이것을 곧 업데이트 할 것입니다.
Mark Kirby

맞습니다, 당신 nsnake은 적어도 거기에 벽을 만들지 않고 뱀이 벽을 통과하여 맵의 반대편 끝에 나타나도록 허용 하는 레벨 또는 설정인지 알고 있습니까? 나는 모양이 있었고 모양이 좋지 않지만 확인하고 싶습니다!

@ParanoidPanda 옵션을 찾을 수 없습니다. 연락처 페이지 github.com/alexdantas/nSnake 와 함께 개발자 페이지는 소스를 통해 벽을 비활성화하는 방법을 알고 있습니다.
Mark Kirby

원래 게임을 기억하기 때문에 옵션을 제안 할 수도 있다고 생각합니다. 뱀은 다른 쪽에도 나타나야하기 때문에 작은 조정보다 조금 더 구현해야한다고 생각합니다. 그들은 모든 것을 코딩했으며, 작은 변화 이상이 필요할 수 있습니다. 몰라요, 코드를 보지 못했습니다. 그러나 사용자에게 제공 할 수있는 옵션으로 제안 할 것이라고 생각합니다.

7

게임이 호출 centipede되고 전체 내용은 http://wp.subnetzero.org/?p=269 에서 찾을 수 있습니다 . 이것은 다운로드가 필요없는 bash 게임이며 bash 스크립트에 관심이있는 사람들을위한 흥미로운 연구입니다.

다음 변수를 변경하여 화면 크기를 변경하여 더 작고 도전적으로 만들 수 있습니다.

LASTCOL=40                              # Last col of game area
LASTROW=20                              # Last row of game area

코드는 다음과 같습니다.

#!/bin/bash
#
# Centipede game
#
# v2.0
#
# Author: sol@subnetzero.org
#
# Functions

drawborder() {
   # Draw top
   tput setf 6
   tput cup $FIRSTROW $FIRSTCOL
   x=$FIRSTCOL
   while [ "$x" -le "$LASTCOL" ];
   do
      printf %b "$WALLCHAR"
      x=$(( $x + 1 ));
   done

   # Draw sides
   x=$FIRSTROW
   while [ "$x" -le "$LASTROW" ];
   do
      tput cup $x $FIRSTCOL; printf %b "$WALLCHAR"
      tput cup $x $LASTCOL; printf %b "$WALLCHAR"
      x=$(( $x + 1 ));
   done

   # Draw bottom
   tput cup $LASTROW $FIRSTCOL
   x=$FIRSTCOL
   while [ "$x" -le "$LASTCOL" ];
   do
      printf %b "$WALLCHAR"
      x=$(( $x + 1 ));
   done
   tput setf 9
}

apple() {
   # Pick coordinates within the game area
   APPLEX=$[( $RANDOM % ( $[ $AREAMAXX - $AREAMINX ] + 1 ) ) + $AREAMINX ]
   APPLEY=$[( $RANDOM % ( $[ $AREAMAXY - $AREAMINY ] + 1 ) ) + $AREAMINY ]
}

drawapple() {
   # Check we haven't picked an occupied space
   LASTEL=$(( ${#LASTPOSX[@]} - 1 ))
   x=0
   apple
   while [ "$x" -le "$LASTEL" ];
   do
      if [ "$APPLEX" = "${LASTPOSX[$x]}" ] && [ "$APPLEY" = "${LASTPOSY[$x]}" ];
      then
         # Invalid coords... in use
         x=0
         apple
      else
         x=$(( $x + 1 ))
      fi
   done
   tput setf 4
   tput cup $APPLEY $APPLEX
   printf %b "$APPLECHAR"
   tput setf 9
}

growsnake() {
   # Pad out the arrays with oldest position 3 times to make snake bigger
   LASTPOSX=( ${LASTPOSX[0]} ${LASTPOSX[0]} ${LASTPOSX[0]} ${LASTPOSX[@]} )
   LASTPOSY=( ${LASTPOSY[0]} ${LASTPOSY[0]} ${LASTPOSY[0]} ${LASTPOSY[@]} )
   RET=1
   while [ "$RET" -eq "1" ];
   do
      apple
      RET=$?
   done
   drawapple
}

move() {
   case "$DIRECTION" in
      u) POSY=$(( $POSY - 1 ));;
      d) POSY=$(( $POSY + 1 ));;
      l) POSX=$(( $POSX - 1 ));;
      r) POSX=$(( $POSX + 1 ));;
   esac

   # Collision detection
   ( sleep $DELAY && kill -ALRM $$ ) &
   if [ "$POSX" -le "$FIRSTCOL" ] || [ "$POSX" -ge "$LASTCOL" ] ; then
      tput cup $(( $LASTROW + 1 )) 0
      stty echo
      echo " GAME OVER! You hit a wall!"
      gameover
   elif [ "$POSY" -le "$FIRSTROW" ] || [ "$POSY" -ge "$LASTROW" ] ; then
      tput cup $(( $LASTROW + 1 )) 0
      stty echo
      echo " GAME OVER! You hit a wall!"
      gameover
   fi

   # Get Last Element of Array ref
   LASTEL=$(( ${#LASTPOSX[@]} - 1 ))
   #tput cup $ROWS 0
   #printf "LASTEL: $LASTEL"

   x=1 # set starting element to 1 as pos 0 should be undrawn further down (end of tail)
   while [ "$x" -le "$LASTEL" ];
   do
      if [ "$POSX" = "${LASTPOSX[$x]}" ] && [ "$POSY" = "${LASTPOSY[$x]}" ];
      then
         tput cup $(( $LASTROW + 1 )) 0
         echo " GAME OVER! YOU ATE YOURSELF!"
         gameover
      fi
      x=$(( $x + 1 ))
   done

   # clear the oldest position on screen
   tput cup ${LASTPOSY[0]} ${LASTPOSX[0]}
   printf " "

   # truncate position history by 1 (get rid of oldest)
   LASTPOSX=( `echo "${LASTPOSX[@]}" | cut -d " " -f 2-` $POSX )
   LASTPOSY=( `echo "${LASTPOSY[@]}" | cut -d " " -f 2-` $POSY )
   tput cup 1 10
   #echo "LASTPOSX array ${LASTPOSX[@]} LASTPOSY array ${LASTPOSY[@]}"
   tput cup 2 10
   echo "SIZE=${#LASTPOSX[@]}"

   # update position history (add last to highest val)
   LASTPOSX[$LASTEL]=$POSX
   LASTPOSY[$LASTEL]=$POSY

   # plot new position
   tput setf 2
   tput cup $POSY $POSX
   printf %b "$SNAKECHAR"
   tput setf 9

   # Check if we hit an apple
   if [ "$POSX" -eq "$APPLEX" ] && [ "$POSY" -eq "$APPLEY" ]; then
      growsnake
      updatescore 10
   fi
}

updatescore() {
   SCORE=$(( $SCORE + $1 ))
   tput cup 2 30
   printf "SCORE: $SCORE"
}
randomchar() {
    [ $# -eq 0 ] && return 1
    n=$(( ($RANDOM % $#) + 1 ))
    eval DIRECTION=\${$n}
}

gameover() {
   tput cvvis
   stty echo
   sleep $DELAY
   trap exit ALRM
   tput cup $ROWS 0
   exit
}

###########################END OF FUNCS##########################

# Prettier characters but not supported
# by all termtypes/locales
#SNAKECHAR="\0256"                      # Character to use for snake
#WALLCHAR="\0244"                       # Character to use for wall
#APPLECHAR="\0362"                      # Character to use for apples
#
# Normal boring ASCII Chars
SNAKECHAR="@"                           # Character to use for snake
WALLCHAR="X"                            # Character to use for wall
APPLECHAR="o"                           # Character to use for apples
#
SNAKESIZE=3                             # Initial Size of array aka snake
DELAY=0.2                               # Timer delay for move function
FIRSTROW=3                              # First row of game area
FIRSTCOL=1                              # First col of game area
LASTCOL=40                              # Last col of game area
LASTROW=20                              # Last row of game area
AREAMAXX=$(( $LASTCOL - 1 ))            # Furthest right play area X
AREAMINX=$(( $FIRSTCOL + 1 ))           # Furthest left play area X
AREAMAXY=$(( $LASTROW - 1 ))            # Lowest play area Y
AREAMINY=$(( $FIRSTROW + 1))            # Highest play area Y
ROWS=`tput lines`                       # Rows in terminal
ORIGINX=$(( $LASTCOL / 2 ))             # Start point X - use bc as it will round
ORIGINY=$(( $LASTROW / 2 ))             # Start point Y - use bc as it will round
POSX=$ORIGINX                           # Set POSX to start pos
POSY=$ORIGINY                           # Set POSY to start pos

# Pad out arrays
ZEROES=`echo |awk '{printf("%0"'"$SNAKESIZE"'"d\n",$1)}' | sed 's/0/0 /g'`
LASTPOSX=( $ZEROES )                    # Pad with zeroes to start with
LASTPOSY=( $ZEROES )                    # Pad with zeroes to start with

SCORE=0                                 # Starting score

clear
echo "
Keys:

 W - UP
 S - DOWN
 A - LEFT
 D - RIGHT
 X - QUIT

If characters do not display properly, consider changing
SNAKECHAR, APPLECHAR and WALLCHAR variables in script.
Characters supported depend upon your terminal setup.

Press Return to continue
"

stty -echo
tput civis
read RTN
tput setb 0
tput bold
clear
drawborder
updatescore 0

# Draw the first apple on the screen
# (has collision detection to ensure we don't draw
# over snake)
drawapple
sleep 1
trap move ALRM

# Pick a random direction to start moving in
DIRECTIONS=( u d l r )
randomchar "${DIRECTIONS[@]}"

sleep 1
move
while :
do
   read -s -n 1 key
   case "$key" in
   w)   DIRECTION="u";;
   s)   DIRECTION="d";;
   a)   DIRECTION="l";;
   d)   DIRECTION="r";;
   x)   tput cup $COLS 0
        echo "Quitting..."
        tput cvvis
        stty echo
        tput reset
        printf "Bye Bye!\n"
        trap exit ALRM
        sleep $DELAY
        exit 0
        ;;
   esac
done

0

라는 명령 줄 게임 모음이 있습니다 bsdgames.

당신은 입력하여 설치할 수 있습니다 sudo apt-get install bsdgames 또는 sudo apt install bsdgames.

성공적으로 설치 한 후에는이 목록에서 게임을 시작할 수 있습니다 (이름을 터미널에 입력하기 만하면 됨).

adventure (6)        - an exploration game
sol (6)              - a collection of card games which are easy to play with the aid of a mouse.
arithmetic (6)       - quiz on simple arithmetic
atc (6)              - air traffic controller game
backgammon (6)       - the game of backgammon
battlestar (6)       - a tropical adventure game
bcd (6)              - "reformat input as punch cards, paper tape or morse code"
boggle (6)           - word search game
caesar (6)           - decrypt caesar ciphers
canfield (6)         - the solitaire card game canfield
cfscores (6)         - the solitaire card game canfield
chkfont (6)          - checks figlet 2.0 and up font files for format errors
countmail (6)        - be obnoxious about how much mail you have
cowsay (6)           - configurable speaking/thinking cow (and a bit more)
cribbage (6)         - the card game cribbage
dab (6)              - Dots and Boxes game
espdiff (6)          - apply the appropriate transformation to a set of patches
figlet-figlet (6)    - display large characters made up of ordinary screen characters
figlist (6)          - lists figlet fonts and control files
fortune (6)          - print a random, hopefully interesting, adage
gnome-mahjongg (6)   - A matching game played with Mahjongg tiles
gnome-mines (6)      - The popular logic puzzle minesweeper
gnome-sudoku (6)     - puzzle game for the popular Japanese sudoku logic puzzle
go-fish (6)          - play "Go Fish"
gomoku (6)           - game of 5 in a row
hack (6)             - exploring The Dungeons of Doom
hangman (6)          - computer version of the game hangman
hunt (6)             - a multi-player multi-terminal game
huntd (6)            - hunt daemon, back-end for hunt game
intro (6)            - introduction to games
lolcat (6)           - rainbow coloring for text
mille (6)            - play Mille Bornes
monop (6)            - Monopoly game
morse (6)            - "reformat input as punch cards, paper tape or morse code"
number (6)           - convert Arabic numerals to English
phantasia (6)        - an interterminal fantasy game
pig (6)              - eformatray inputway asway Igpay Atinlay
pom (6)              - display the phase of the moon
ppt (6)              - "reformat input as punch cards, paper tape or morse code"
primes (6)           - generate primes
quiz (6)             - random knowledge tests
rain (6)             - animated raindrops display
random (6)           - random lines from a file or random numbers
robots (6)           - fight off villainous robots
rot13 (6)            - decrypt caesar ciphers
sail (6)             - multi-user wooden ships and iron men
snake (6)            - display chase game
snscore (6)          - display chase game
teachgammon (6)      - learn to play backgammon
tetris-bsd (6)       - the game of tetris
trek (6)             - trekkie game
wargames (6)         - shall we play a game?
worm (6)             - Play the growing worm game
worms (6)            - animate worms on a display terminal
wtf (6)              - translates acronyms for you
wump (6)             - hunt the wumpus in an underground cave

이 게임들은 보통 Ctrl+ 를 눌러 종료됩니다C

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.