linux ascii游戏,linux – Bash ASCII实现

我开始学习vim并开始使用类似于1978年经典的Space Invaders的bash游戏进行shell脚本编写.我对ASCII艺术比较陌生,我想知道以编程方式定义太空飞船等内容或从文件中读取字符内容是否更好?如果是这样,你会推荐什么,你将如何以编程方式解决它?

#!/bin/bash

function getShip() {

declare -r FILENAME=/Users/demetriusford/space_ship

for index in $FILENAME; do

cat $index

done

}

文件内部:

* /\ *

!__/()\__!

/==: :==\

(/\/\)

解决方法:

尽管有可能你会赢得2013年“编程语言和程序之间最糟糕的不匹配”奖,但是会遇到像x86编写的会计软件包,或者基于COBOL的操作系统,或任何用Pascal编写的任何竞争对手:-) ,您可能会发现直接在bash脚本中编码该形状更容易.

似乎没有迫切需要将形状与代码本身分开.

对于启动器,这是一个使用tput(curses和terminfo数据库)在窗口底部为您的船设置动画的小脚本.

这不完全是魔兽世界,但它应该是一个很好的起点.首先,我们将设置永不改变的东西,发货和子弹字符串,以及各种屏幕坐标:

#!/bin/bash

bull1=' * * '

bull2=' '

ship1=' ^ /\ ^ '

ship2=' !__/()\__! '

ship3=' /==: :==\ '

ship4=' (/\/\) '

tput clear

((line1 = $(tput lines) - 6))

((line2 = line1 + 1))

((line3 = line2 + 1))

((line4 = line3 + 1))

((maxcol = $(tput cols) - 15))

然后我们将初始化相关变量并进入无限循环:

((bullline = 1))

((bullcol = 1))

((curcol = 1))

((coldir = 1))

while true ; do

在循环内部,我们只需通过消隐先前的值并编写新值来移动精灵.子弹位置也在本节中更新.请注意,我们不需要明确地将船空白,因为它被空格包围,无论如何都会使边缘字符空白:

tput cup $bullline $bullcol ; echo "$bull2"

if [[ $bullline -le 2 ]] ; then

((bullline = line1 - 1))

((bullcol = curcol))

else

((bullline = bullline - 2))

fi

tput cup $bullline $bullcol ; echo "$bull1"

tput cup $line1 $curcol ; echo "$ship1"

tput cup $line2 $curcol ; echo "$ship2"

tput cup $line3 $curcol ; echo "$ship3"

tput cup $line4 $curcol ; echo "$ship4"

然后我们只需更新船的变量,让它左右移动,最后延迟一点,以便动画顺畅:

((curcol = curcol + coldir))

if [[ $curcol -eq $maxcol ]] ; then

((coldir = -coldir))

else

if [[ $curcol -eq 1 ]] ; then

((coldir = -coldir))

fi

fi

sleep 0.1

done

鉴于平台的局限性,你最终得到的是一个看起来可以忍受的动画:

* *

^ /\ ^

!__/()\__!

/==: :==\

(/\/\)

标签:bash,shell,unix,linux

来源: https://codeday.me/bug/20190704/1372685.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值