%tetris.m
%Richard Moore, Feb 2013
%This will be a simple tetris game.
board = zeros(20,16);
pieces{1} = [1 1; 1 1];
pieces{2} = [1 1; 0 1; 0 1];
pieces{3} = [1 1; 1 0; 1 0];
pieces{4} = [0 1 1; 1 1 0];
pieces{5} = [1 1 0; 0 1 1];
pieces{6} = [1 1 1 1];
pieces{7} = [0 1 0; 1 1 1];
a = figure;
b1 = uipanel('parent',a,'units','normalized','position',[0 0.1 1 0.9]);
b2 = uipanel('parent',a,'units','normalized','position',[0 0 1 0.1]);
c = axes('parent',b1);
d = uicontrol('parent',b2,'style','edit');
hold on;
score = 0;
CurrPieceInd = 0;
while 1<10
pause(0.3.*1./(1+floor(score/5)));%pause(0.1);
if CurrPieceInd == 0
CurrPieceInd = ceil(7*rand);
CurrPiece = pieces{CurrPieceInd};
CurrRow = 0;
CurrCol = floor(size(board,2)/2);%10;
end
dischar = get(gcf,'currentchar');
switch dischar
case 'a'
CurrCol = CurrCol - 1;
case 'd'
CurrCol = CurrCol + 1;
case 'w'
CurrPiece = rot90(CurrPiece);
end
set(gcf,'currentchar','h');
CurrRow = CurrRow + 1;
board2 = board;
board3 = zeros(size(board));
board3((CurrRow:(CurrRow + size(CurrPiece,1)-1)),(CurrCol:(CurrCol + size(CurrPiece,2)-1))) = CurrPiece;
if (CurrRow + size(CurrPiece,1) - 1)<=size(board,1)&&(sum(sum(board.*board3,1),2)==0)
board2((CurrRow:(CurrRow + size(CurrPiece,1)-1)),(CurrCol:(CurrCol + size(CurrPiece,2)-1))) = CurrPiece|board2((CurrRow:(CurrRow + size(CurrPiece,1)-1)),(CurrCol:(CurrCol + size(CurrPiece,2)-1)));
imshow(board2,[],'InitialMagnification','fit','parent',c);
drawnow;
else
CurrPieceInd = 0;
board2(((CurrRow-1):(CurrRow + size(CurrPiece,1)-2)),(CurrCol:(CurrCol + size(CurrPiece,2)-1))) = CurrPiece|board2(((CurrRow-1):(CurrRow + size(CurrPiece,1)-2)),(CurrCol:(CurrCol + size(CurrPiece,2)-1)));
board = board2;
end
RowTest = prod(board,2);
if sum(RowTest)>0
Fulls = find(RowTest==1);
board((Fulls(1)+1):end,:) = board((Fulls(1)+1):end,:);
board(2:(Fulls(1)),:) = board(1:(Fulls(1)-1),:);
board(1,:) = 0;
score = score + 1;
end
figure(gcf);
end