一時興起,想試試能不能用perl實現字元貪吃蛇,演算法如下:
定義2個陣列@bg、@snake,@bg用來顯示整個介面,@snake從蛇頭開始儲存蛇的座標點。
蛇每移動一次,新的座標點放到@snake頭部,並去除最後乙個元素,再改變@bg對應座標的值。
通過控制台視窗不斷清屏再列印,使蛇「看起來在移動」。
簡單的速度控制實現:每次移動後sleep 若干秒。
感覺原來的make_food演算法不夠好,修改如下:
subview codemake_food)
} #找出所有空的座標點,存入@empty_points陣列
until($food
)[0,1
];
$bg[$y][$x]='o'
;
$food=1
; } }}
乙個要解決的問題:無阻塞獲取按鍵。通過度娘找到模組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...