게임을 만들어서 Bash를 배웁니다.

소개하다.


좋아요!만약 적당한 목표가 없다면 BASH를 배우는 것은 매우 혼란스러울 수 있다.따라서 BASH를 배우고 많은 즐거움을 얻을 수 있는 아주 좋은 아이디어가 될 것입니다.짧은 시간 안에 제가 작년에 C++로 직접 디자인한 디지털 게임을 만들 것입니다. 게으른 연구와 시간 낭비로 약 3개월이 걸렸습니다.하지만 놀랍게도 나는 BASH에서 두 시간 만에 이 게임을 완성했다.이 설명서repository at Github의 게임 설명을 참조하십시오.

콘셉트


게임은 사용자에게 0과 9 사이의 숫자를 물어볼 것이다.그리고 10개의 무작위 숫자로 구성된 목록이 사용자의 목록과 색인 그룹의 숫자에 사용되는 목록에 나타납니다.계속하려면 선택한 번호 아래의 색인을 선택해야 합니다.사용자가 정확한 숫자 인덱스를 입력하지 못하거나 5초 이상 입력할 때까지 게임이 순환됩니다.사용자는 매번 성공적으로 클릭할 때마다 1점을 받는다.이것은 아마도 게임의 소개일 것이다. 우리는 게임의 규격을 깊이 있게 이해하자.

BASH의 게임 규범


이 게임은 숫자에 기초를 두고 있는데, 이것은 그것이 많은 산술 연산을 필요로 한다는 것을 의미한다.실제로 우리는 복잡한 함수, 예를 들어shuf가 필요하다.우리는while와 for 순환을 자주 사용하여 몇 가지 작업을 수행할 것입니다. 예를 들어, 그룹을 채우고 인쇄하고, 게임 순환을 합니다.우리는 일부 표지 변수를 사용하여 게임의 현재 상황을 표시하고 마지막으로 몇몇 수조와 숫자의 알고리즘을 사용할 것이다.

스크립트 해석


이 게임은 이해하기 쉽다.셸 스크립트에서 선택한 숫자 아래의 숫자를 5초 안에 선택하십시오.간단한 echo 명령과 형식을 통해 터미널에 유사한 메뉴를 만들 것입니다.메뉴에 앞서, 우리는while 순환을 할 것입니다. 이 순환은 사용자가 3을 입력할 때까지 반복됩니다. 이 3은 변수 ch 에 저장되며, 이 변수는 시작할 때 0으로 초기화되어 처음으로 순환에 들어갈 수 있습니다.while 순환은 도 문장으로 시작하고done 문장으로 끝납니다.
while [ condition ];
do 
# statements
done
For 루프는 장면에 따라 다를 수 있습니다.우리는 범위 기반의 for 순환을 사용하고 {} 연산자를 사용하여 일련의 숫자를 교체할 것입니다.For 순환도 도는 순환의 시작으로, 도는 순환의 끝으로 한다.
for i in {1..5};
do 
#statements
done
정확한 사용자 입력과 종료 상태를 확인하기 위해 If-else 문구도 사용할 것입니다.if 문장은 then로 이 블록을 시작하고 fi로 if 블록을 끝냅니다.
if [ condition ];
then
    #statements
elif
    #statements
else
    #statements
fi
우리는 매개 변수 -p가 있는read 문장을 사용하여 사용자에게 정보를 입력하라고 알립니다.메뉴의 선택 입력, 즉 1은 재생, 2는 지령, 3은 종료, 변수ch에 저장.1로 입력하면 게임이 시작되며 게임이 끝날 때까지 사용자에게 숫자n를 입력하도록 요구한다.
현재 우리는 게임의 나머지 부분의 번호가 생겼기 때문에 사용자가 그 중에서 번호를 선택할 수 있도록 목록을 만들어야 한다.우리는 사용자가 정확한 숫자를 입력했는지 확인하기 위해 표지판을 만들 것이다. 즉, c. 이것은 정확한 입력 (숫자 x) 을 위해 0 을 저장하고, 잘못된 입력을 위해 1 을 저장할 것이다.이것은 0으로 초기화되어 숫자를 생성하기 전에while 순환에 들어갑니다.
10개의 중복된 숫자를 생성하고 씻으려면 여러 개의 숫자가 있을 수 있기 때문에 불공평할 수도 있고 사용자가 선택한 숫자가 중복되어 존재하지 않을 수도 있다.따라서 위조 랜덤수의 파괴를 피하기 위해서는 0에서 9까지의 10개의 숫자를 만들어야 한다.이를 위해 BASH에서 shuf 라는 명령을 사용합니다. 목록/그룹의 요소나 입력 흐름의 숫자 서열의 배열을 만들 수 있습니다.우리는 shuf 명령shuf -i 0-9 -n 10을 사용하여 0에서 9까지의 10개의 숫자의 무작위 서열을 생성할 것이다.

0에서 9 사이의 무질서한 숫자 목록을 만들었기 때문에 10개의 숫자가 있음을 알 수 있다.우리는 나중에 접근해서 인쇄할 수 있도록 결과를 하나의 그룹에 저장할 것이다.당신은 thisthese문장을 참고하여shuf를 이해할 수 있습니다.
주요한 일은 이미 해결되었다. 현재 우리는 목록을 인쇄해야 하고, 사용자에게 숫자의 인덱스를 표시하기 위해 다른 목록을 인쇄해야 한다.우리는 @ 변수를 사용하여 for 순환이 없는 목록을 인쇄할 것입니다.만약 당신이 BASH의 초보자라면 BASH의 안내서를 알고 싶으면 BASH scripting에 실린 시리즈의 글을 보십시오. 저는 이미 모든 내용을 소개했습니다.따라서 @를 사용하여 BASH에서 전체 배열을 인쇄할 수 있습니다.

낮은 인덱스 목록을 인쇄하려면, 범위에 기반한 for 순환을 사용합니다. 즉, 이것은 한 범위 내에서 교체되고 (이 예에서 1부터 10까지) 모든 요소에 계수기의 값을 분배합니다. 즉, 1에서 10까지입니다.우리는 r를 무질서한 목록으로 사용하고 a를 색인 목록으로 사용합니다.그리고 같은 방법으로 이 그룹을 인쇄합니다.
목록의 생성과 인쇄가 완료되면 사용자로부터 그의 번호 인덱스 입력을 받을 것입니다.우리는read에서timeout이라는 인자를 사용할 것입니다. 인자에 제공된 몇 초 후에 입력 흐름을 멈출 것입니다.이 예에서, 우리는 5초를 색인 입력의 시간 초과로 사용할 것이다.read -t 5 -p "Enter the index of your number : " x우리는 입력을 x 변수에 저장한 후에 그것을 방문하여 검증할 것이다.
다음에, 우리는 입력이 시간을 초과하기 전에 완성되었는지 검사할 것이다.이 점에 대해 사용자가 시간을 초과하기 전에 입력을 하면 계속할 수 있지만, 시간이 지나면 128보다 높은 종료 상태를 얻을 수 있기 때문에 시간을 초과하는 검사 프로그램으로 사용합니다.이것article을 통해서 왔어요. 정말 도움이 됐어요.우리는 순환을 깨고 로고c를 1로 설정하여 입력이 정확하지 않다는 것을 표시하기 때문에'게임 끝'을 표시할 것이다.그러나 만약 당신이 충분하다면, 우리는 카드 세척 그룹의 인덱스에 당신이 선택한 숫자가 있는지 검사할 것입니다. 우리는 이 ${r[$(($x))-1]} -eq $n 를 사용하여 정확한 숫자를 검사할 것입니다.왜. - 1?그룹의 인덱스가 기본적으로 0에서 시작되는 것을 기억한다면, 1에서 두 번째 목록을 시작했기 때문에, 모든 요소가 1로 이동하여 인덱스를 인용하지 않도록 합니다.
만약 숫자의 인덱스가 같고 정확하며 잘하면 우리는 점계수기p를 1로 늘리고, 정확하지 않으면 로고는 앞에서 말한 바와 같이 1로 설정하여 순환을 깨뜨릴 것이다.순환을 종료한 후, 상태 표시기 c 가 1인지 확인한 다음, 게임을 출력하고, 이긴 점수를 표시합니다.이렇게몇 가지 게임을 살펴보겠습니다.

BASH 스크립트


#!/bin/bash

echo -e "\n NumberJack \n"
ch=0
while [ $ch -ne 3 ];
do
    echo  "  
         PLAY : Hit 1 and enter.
         HELP : Hit 2 and enter.
         EXIT : Hit 3 and enter.
         "

    read -p "Enter your choice : " ch
    if [ $ch -eq 1 ];then
    x=0
    c=0
    p=0
    read -p "Enter any number between 0 and 9 : " n
    while [ $c -eq 0 ];
    do
        x=11
        r=($(shuf -i 0-9 -n 10))
        echo "${r[@]} "
        for i in {1..10};
        do
            a[$i]=$i    
        done
        echo "${a[@]} "
        read -t 5 -p "Enter the index of your number : " x
        if [[ $? -gt 128 ]]; then 
            c=1
            break
        fi
        if [ ${r[$(($x))-1]} -eq $n ];then
            echo "Great"
            ((p=p+1))
        else
            c=1
            break
        fi
    done
    elif [ $ch -eq 2 ];then
        echo "HELP: INSTRUCTIONS TO PLAY THE GAME. "
    else
        break
fi

if [ $c -eq 1 ];then
            echo -e "\nGAME OVER\n"
            echo "You scored $p points"
fi
        done


이것은 최종적인 기본 스크립트입니다. 어떤 도움말도 없이 스크립트를 간단하게 유지할 뿐입니다.나는 네가 BASH의 게임 개발에서 약간의 것을 배울 수 있기를 바란다.이것은 단지 재미있는 작은 프로젝트일 뿐이고 BASH의 일부 개념을 배우는 매우 멋진 방식이다. 예를 들어 순환, 조건문과 산술 등이다.즐겁게 놀다.해피 코딩:)

좋은 웹페이지 즐겨찾기