如何用Matlab做一個(gè)貪吃蛇游戲
環(huán)境準(zhǔn)備:
matlab開發(fā)環(huán)境:matlab R2010以上版本
操作系統(tǒng):windows XP 及以上操作系統(tǒng)
matlab貪吃蛇游戲源碼以及解析:
游戲運(yùn)行方法:將以下代碼保存為snake_game.m文件,用matlab打開醋安,運(yùn)行即可犬第。
function snake_game()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 按 'Q' 鍵退出游戲 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all
%OPTIONS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
difficulty=9; %難度等級(jí): 1-10
bounds=0; %是否設(shè)置邊界 1-是(撞墻退出游戲) 0-不設(shè)置邊界(撞墻后繼續(xù)游戲)
axis_limit= 20; %游戲界面大小
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
d=0; % 方向變量惩坑,1/2/3/4 代表鍵盤的上下左右鍵
x = round(axis_limit/2); %起始點(diǎn)X坐標(biāo)
y =round(axis_limit/2); %起始點(diǎn)Y坐標(biāo)
d =randi([1,4]);% 隨機(jī)生成一個(gè)方向手蝎,作為初始方向
a =randi([1 axis_limit-1],1);%隨機(jī)生成一個(gè)食物的X坐標(biāo)
b =randi([1 axis_limit-1],1);%隨機(jī)生成一個(gè)食物的Y坐標(biāo)
snake(1,1:2)=[x y];%(X,Y)確定食物的坐標(biāo)位置
size_snake=1; % 食物的大小
ate=1; %吃掉食物
ex=0; % 退出游戲的一個(gè)標(biāo)志
food=[a b];%定義食物的坐標(biāo)
draw_snake(snake,food,size_snake,axis_limit) % 開始游戲
figure('KeyPressFcn',@my_callback);
function my_callback(~,event)%callback function for movement
switch event.Character
case 'q' % Q鍵退出
ex=1;
case 30 % 箭頭方向
if(d~=2)
d = 1; %向上 d=1
end
case 31
if(d~=1)
d = 2; %向下 d=2
end
case 29
if(d~=4)
d = 3; %向右 d=3
end
case 28
if(d~=3)
d = 4; %向左 d=4
end
end
end
while (ex~=1) %循環(huán)執(zhí)行局蚀,直到按q鍵退出游戲
size_snake=size(snake);
size_snake=size_snake(1);
for l=size_snake+ate:-1:2
snake(l,:)=snake(l-1,:);
end
switch d %判斷鍵盤的四個(gè)方向
case 1
snake(1,2)=snake(1,2)+1;%Y 坐標(biāo)加1
case 2
snake(1,2)=snake(1,2)-1;% Y 坐標(biāo)減1
case 3
snake(1,1)=snake(1,1)+1;% X 坐標(biāo)加1
case 4
snake(1,1)=snake(1,1)-1;% X坐標(biāo)減1
end
draw_snake(snake,food,size_snake,axis_limit)% 繪制蛇的形狀
pause(max([(105-difficulty*10)/(10*axis_limit) .001])) %設(shè)置難度等級(jí)
if snake(1,1)==food(1) && snake(1,2)==food(2)%如果蛇頭和食物相遇彻桃,再同一點(diǎn)
ate=1; % 吃標(biāo)記置1
food(1) = randi([1 axis_limit-1]);%重新創(chuàng)建一個(gè)食物:X坐標(biāo)
food(2) = randi([1 axis_limit-1]);%重新創(chuàng)建一個(gè)食物:Y坐標(biāo)
else
ate=0;
end
if bounds==1 % 如果設(shè)置了邊界
snake(1,:)
if snake(1,1)==0 %如果超過了邊界
msgbox('YOU LOST! ')
ex=1;
elseif snake(1,2)==0 % 如果超過了邊界
msgbox('YOU LOST! ')
ex=1;
elseif snake(1,1)==axis_limit % 如果超過了邊界
msgbox('YOU LOST! ')
ex=1;
elseif snake(1,2)==axis_limit % 如果超過了邊界
msgbox('YOU LOST! ')
ex=1;
end
else
snake=snake-((snake>axis_limit).*(axis_limit+1));
snake=snake+((snake<0).*(axis_limit+1));
end
if (sum(snake(:, 1) ==snake(1, 1) & snake(:, 2) == snake(1, 2) )>1) %如果蛇碰到了自己的身體急但,退出
msgbox('Hit yourself, YOU LOST! ')
break
end
end
close all
end
function draw_snake(snake,food,size_snake,axis_limit)
for p = 1:size_snake
plot(snake(p,1),snake(p,2), 'wo')
hold on
end
plot(food(1,1),food(1,2), 'rs')%creates the vectors for the food and snake and plots them
whitebg([0.1 0.8 0.4])% 設(shè)置游戲面板顏色
axis([0, axis_limit, 0, axis_limit])%創(chuàng)建游戲面板澎媒,四個(gè)界限
hold off
end
不定期分享有趣的代碼和游戲,歡迎關(guān)注公號(hào):“木石說”