Perl字元貪吃蛇

2022-07-04 08:39:09 字數 2056 閱讀 1166

一時興起,想試試能不能用perl實現字元貪吃蛇,演算法如下:

定義2個陣列@bg、@snake,@bg用來顯示整個介面,@snake從蛇頭開始儲存蛇的座標點。

蛇每移動一次,新的座標點放到@snake頭部,並去除最後乙個元素,再改變@bg對應座標的值。

通過控制台視窗不斷清屏再列印,使蛇「看起來在移動」。

簡單的速度控制實現:每次移動後sleep 若干秒。

感覺原來的make_food演算法不夠好,修改如下:

sub

make_food)

} #找出所有空的座標點,存入@empty_points陣列

until($food

)[0,1

];

$bg[$y][$x]='o'

;

$food=1

; } }}

view code

乙個要解決的問題:無阻塞獲取按鍵。通過度娘找到模組term::readkey,新的問題產生了:批量輸入方向,蛇會依次按照輸入移動,暫時想不到好辦法解決。

使用time::hires的sleep,實現毫秒級等待,use 5.01 支援given...when語法。

使用 w a s d 控制移動,**如下:

use

strict;

use5.01

;use

time::hires qw/sleep/;

use term::readkey;

use constant ;

my@bg=();

my@snake=();

my ($score,$food,$speed,$alive)=(0,0,1,1); #

長度、食物、速度、存活

my$full=width*height;

my%direct=( up=>[-1,0],down=>[1,0],left=>[0,-1],right=>[0,1], ); #

移動方向

my$head='

right

'; #

初始移動方向

&init;

while($alive

)

else

}sub

init0..width-1]}0..height-1

; @[1,2]=('

#','

@'); #

初始蛇身位置

@snake=( [$y,2],[$y,1], ); #

儲存蛇身座標

&make_food; #

產生食物

}sub

show

submove

else

}when('a

')else

}when('s

')else

}when('d

')else

}default

}unshift

@snake,[$snake[0][0]+$direct[0],$snake[0][1]+$direct[1

]];}

submake_food} }

}sub

check_head

#蛇吃到自己

if(@snake>3

) }

}#移動

if($bg[$snake[0][0]][$snake[0][1]] eq '.'

)

#吃到食物

if($bg[$snake[0][0]][$snake[0][1]] eq 'o'

)

$bg[$snake[-1][0]][$snake[-1][1]]='

.'; #

先清除尾巴顯示

pop@snake; #

去掉尾巴

map1..$#

snake; # 其他蛇身顯示

}

遊戲介面:

字元遊戲 貪吃蛇

貪吃蛇遊戲的設計思路很簡單,相信有過一些程式設計經驗的同學都不至於束手無策,可在我剛剛接觸程式設計時,這個小小的貪吃蛇遊戲可是讓我費了不少腦筋,即使軟導老師已經把偽 告訴了我們,我還是花費了好大的功夫。話不多說,我們現在就開始吧,首先我們整理一下思路。首先列印地圖,然後用兩個一維陣列來表示蛇頭的座標...

字元遊戲 貪吃蛇

貪吃蛇是一款十分經典的遊戲。下面介紹一下字元版本貪吃蛇。偽 框架 輸出字元矩陣 while not 遊戲結束 do ch 等待輸入 case ch do a 左前進一步,break d 右前進一步,break w 上前進一步,break s 下前進一步,break end case 輸出字元矩陣 e...

C字元貪吃蛇

演算法參照perl字元貪吃蛇,原始碼 include include define width 12 寬 define height 8 高 define debug 0 const char fence 柵欄const char head 蛇頭const char body 蛇身const cha...