Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Problems with my tetris game
Index -> Programming, Turing -> Turing Help
Goto page Previous  1, 2, 3
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
jason98wang




PostPosted: Mon Jan 16, 2017 8:56 pm   Post subject: RE:Problems with my tetris game

i Have tried what you told me to do but currently this is still bugging up, with the animation as well as the blocks stacking, can you help me please
Sponsor
Sponsor
Sponsor
sponsor
Insectoid




PostPosted: Tue Jan 17, 2017 10:50 am   Post subject: RE:Problems with my tetris game

All right, here's a bit of code to help you get started.

code:


var grid : array 0 .. 9, 0 .. 50 of int
var blockX, blockY : int

%Here we just set the grid to all 0.
for x : 0 .. 9
    for y : 0 .. 49
        grid (x, y) := 0
    end for
    grid (x, 50) := 1 %set the bottom to all 1's, to make a floor
end for

%This checks if grid(x, y) is full or not
%a 1 means that spot is full. A 0 means that spot is taken.
function checkBlock (x : int, y : int) : int
    if grid (x, y) > 0 then
        result 1
    else
        result 0
    end if
end checkBlock

%This just draws everything. It's the only code that draws anything, and drawing things is all it does. It draws upside down, because I'm too lazy to fix it.
%It just loops over every cell in our grid array. If it finds a '1', it drawfills a red box there. Otherwise, it just draws a black box. Then it draws a green box at (blockX, blockY).
proc drawGrid
    for x : 0 .. 9
        for y : 0 .. 50
            if checkBlock (x, y) = 1 then
                Draw.FillBox (10 * x, 10 * y, 10 * x + 10, 10 * y + 10, red)
            end if
            Draw.Box (10 * x, 10 * y, 10 * x + 10, 10 * y + 10, black)
        end for
    end for
    Draw.FillBox (10 * blockX, 10 * blockY, 10 * blockX + 10, 10 * blockY + 10, green)
end drawGrid


%That's all we need to make it work. Here's the main loop where it all comes together:

blockX := 5
blockY := 0
View.Set ("graphics:100;510")

loop
    %First, we draw everything. Doesn't have to be first. Could be last. Up to you.
    drawGrid
   
    %Here, we check if the block can move down. If it can, it does. If it can't, it sets that spot to filled (1) and then resets to the top.
    if checkBlock (blockX, blockY + 1) = 0 then
        blockY := blockY + 1 %This moves the block down
    else
        grid (blockX, blockY) := 1 %this sets the spot to '1' ie 'occupied'
        blockY := 0 %this moves the block back to the top
    end if
    delay (10)
    cls %erase EVERYTHING. Everything will get re-drawn at the top of the loop anyway!
end loop


It's quite flashy so if you've got epilepsy don't run it. Don't worry about that though, we can fix it later. Trying to fix that now will only cause you more problems.

Notice that the function drawGrid ONLY draws things. There is no game logic. We can change that function all we want, and the game will still work. All of the logic functions are nice and clean- things only move by 1 at a time, collision detection is one super simple line of code, etc. The game itself is easy to write, easy to read, easy to debug. The draw function might be a bit of a mess, but at least the mess is contained there instead of sprawled over the entire codebase.
jason98wang




PostPosted: Tue Jan 17, 2017 4:25 pm   Post subject: RE:Problems with my tetris game

This is my current updated program can you help me fix the problem
setscreen ("graphics:300;600")
var grid : array 0 .. 10, 0 .. 20 of int
var dely : int
var turn : int
var blockType : int
var rightturn, leftturn, bottom : int
var chars : array char of boolean
dely := 500
for x : 0 .. 10
for y : 0 .. 20
grid (x, y) := 0
end for
end for


%1 means block occupuy that positino
%0 means its an empty block
%Making blocks fall

var x := 10
var y := 60
turn := 1
var array_x : int := 5
var array_y : int := 20
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%All the procedures of drawing and the different shapes and different turns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
procedure L_block_turn
if turn = 1 then
%turn 1
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 42)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 42)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 42)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 42)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 42)
%turn 2
elsif turn = 2 then
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 42)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 42)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 42)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 42)
%turn 3
elsif turn = 3 then
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 42)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 42)
drawfillbox (array_x * 10 + 60, array_y * 10 - 30, array_x * 10 + 90, array_y * 10, 42)
drawfillbox (array_x * 10 + 60, array_y * 10, array_x * 10 + 90, array_y * 10 + 30, 42)
%turn 4
elsif turn = 4 then
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 42)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 42)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 42)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 42)
end if

end L_block_turn

procedure L_block_turn_White
if turn = 1 then
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 0)
elsif turn = 2 then
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 0)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 0)
elsif turn = 3 then
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10 + 60, array_y * 10 - 30, array_x * 10 + 90, array_y * 10, 0)
drawfillbox (array_x * 10 + 60, array_y * 10, array_x * 10 + 90, array_y * 10 + 30, 0)
elsif turn = 4 then
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 0)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 0)
end if
end L_block_turn_White
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
procedure J_block_turn
%turn 1
if turn = 1 then
drawfillbox (array_x * 10 - 30, array_y * 10 - 30, array_x * 10, array_y * 10, 9)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 9)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 9)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 9)

%turn 2
elsif turn = 2 then
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 9)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 9)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 9)
drawfillbox (array_x * 10 - 30, array_y * 10 - 60, array_x * 10, array_y * 10 - 30, 9)

%turn 3
elsif turn = 3 then
drawfillbox (array_x * 10 - 30, array_y * 10 - 30, array_x * 10, array_y * 10, 9)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 9)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 9)
drawfillbox (array_x * 10 - 30, array_y * 10, array_x * 10, array_y * 10 + 30, 9)
%turn 4
elsif turn = 4 then
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 9)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 9)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 9)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 9)
end if
end J_block_turn

procedure J_block_turn_White
if turn = 1 then
drawfillbox (array_x * 10 - 30, array_y * 10 - 30, array_x * 10, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 0)
elsif turn = 2 then
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 0)
drawfillbox (array_x * 10 - 30, array_y * 10 - 60, array_x * 10, array_y * 10 - 30, 0)
elsif turn = 3 then
drawfillbox (array_x * 10 - 30, array_y * 10 - 30, array_x * 10, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10 - 30, array_y * 10, array_x * 10, array_y * 10 + 30, 0)
elsif turn = 4 then
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10, array_x * 10 + 30, array_y * 10 + 30, 0)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 0)
end if
end J_block_turn_White
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
procedure I_block_turn
%turn 1 + 3
if turn = 1 or turn = 3 then
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 11)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 11)
drawfillbox (array_x * 10, array_y * 10 - 90, array_x * 10 + 30, array_y * 10 - 60, 11)
drawfillbox (array_x * 10, array_y * 10 - 120, array_x * 10 + 30, array_y * 10 - 90, 11)

%turn 2 + 4
elsif turn = 2 or turn = 4 then
drawfillbox (array_x * 10 - 30, array_y * 10 - 60, array_x * 10, array_y * 10 - 30, 11)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 11)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 11)
drawfillbox (array_x * 10 + 60, array_y * 10 - 60, array_x * 10 + 90, array_y * 10 - 30, 11)
end if
end I_block_turn

procedure I_block_turn_White

if turn = 1 or turn = 3 then
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
drawfillbox (array_x * 10, array_y * 10 - 90, array_x * 10 + 30, array_y * 10 - 60, 0)
drawfillbox (array_x * 10, array_y * 10 - 120, array_x * 10 + 30, array_y * 10 - 90, 0)

elsif turn = 2 or turn = 4 then
drawfillbox (array_x * 10 - 30, array_y * 10 - 60, array_x * 10, array_y * 10 - 30, 0)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 0)
drawfillbox (array_x * 10 + 60, array_y * 10 - 60, array_x * 10 + 90, array_y * 10 - 30, 0)
end if
end I_block_turn_White
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
procedure O_block_turn


drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 14)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 14)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 14)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 14)
end O_block_turn

procedure O_block_turn_White


drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 0)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
end O_block_turn_White


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
procedure S_block_turn

%turn 1 + 3
if turn = 1 or turn = 3 then
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 10)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 10)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 10)
drawfillbox (array_x * 10 - 30, array_y * 10 - 60, array_x * 10, array_y * 10 - 30, 10)
%turn 2 + 4
elsif turn = 2 or turn = 4 then
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 10)
drawfillbox (array_x * 10, array_y * 10 - 90, array_x * 10 + 30, array_y * 10 - 60, 10)
drawfillbox (array_x * 10 - 30, array_y * 10 - 60, array_x * 10, array_y * 10 - 30, 10)
drawfillbox (array_x * 10 - 30, array_y * 10 - 30, array_x * 10, array_y * 10, 10)
end if
end S_block_turn

procedure S_block_turn_White
if turn = 1 or turn = 3 then
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
drawfillbox (array_x * 10 - 30, array_y * 10 - 60, array_x * 10, array_y * 10 - 30, 0)

elsif turn = 2 or turn = 4 then
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
drawfillbox (array_x * 10, array_y * 10 - 90, array_x * 10 + 30, array_y * 10 - 60, 0)
drawfillbox (array_x * 10 - 30, array_y * 10 - 60, array_x * 10, array_y * 10 - 30, 0)
drawfillbox (array_x * 10 - 30, array_y * 10 - 30, array_x * 10, array_y * 10, 0)
end if
end S_block_turn_White


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

procedure Z_block_turn
%turn 1 + 3
if turn = 1 or turn = 3 then
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, brightred)
drawfillbox (array_x * 10 - 30, array_y * 10 - 30, array_x * 10, array_y * 10, brightred)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, brightred)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, brightred)
elsif turn = 2 or turn = 4 then
%turn 2 + 4
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, brightred)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, brightred)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, brightred)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, brightred)
end if
end Z_block_turn

procedure Z_block_turn_White
if turn = 1 or turn = 3 then
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10 - 30, array_y * 10 - 30, array_x * 10, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 60, array_x * 10 + 60, array_y * 10 - 30, 0)
elsif turn = 2 or turn = 4 then
%turn 2 + 4
drawfillbox (array_x * 10, array_y * 10 - 30, array_x * 10 + 30, array_y * 10, 0)
drawfillbox (array_x * 10, array_y * 10 - 60, array_x * 10 + 30, array_y * 10 - 30, 0)
drawfillbox (array_x * 10 + 30, array_y * 10 - 30, array_x * 10 + 60, array_y * 10, 0)
drawfillbox (array_x * 10 + 30, array_y * 10, array_x * 10 + 60, array_y * 10 + 30, 0)
end if
end Z_block_turn_White




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%End of procedures%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

loop
x := 10
y := 30
turn := 1
blockType := 1%Rand.Int (1, 6)
bottom := 3
rightturn := 23
leftturn := 0
if blockType = 1 then
loop
locate (1,1)
put array_x," ", x

exit when grid (array_x, array_y - 1) = 1 or y = bottom
L_block_turn_White
dely := 200
y := y - 1
L_block_turn
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
if turn <= 4 then
turn := turn + 1
else
turn := 1
end if

elsif chars (KEY_RIGHT_ARROW) then
put x
if x < rightturn then
x := x + 1
end if
elsif chars (KEY_LEFT_ARROW) then
put x
if x > leftturn then
array_x := array_x - 1
end if
elsif chars (KEY_DOWN_ARROW) then
dely := 50
end if

delay (dely)
View.Update
Time.Delay (5)
array_x := round (x / 30)
array_y := round (y / 6)
end loop
if turn = 1 then
grid (array_x, array_y) := 1
grid (array_x, array_y + 1) := 1
grid (array_x + 1, array_y + 1) := 1
grid (array_x + 2, array_y + 1) := 1

elsif turn = 2 then
grid (array_x, array_y) := 1
grid (array_x + 1, array_y) := 1
grid (array_x + 2, array_y + 1) := 1
grid (array_x + 3, array_y + 1) := 1

elsif turn = 3 then
grid (array_x, array_y) := 1
grid (array_x, array_y + 1) := 1
grid (array_x + 1, array_y + 1) := 1
grid (array_x + 2, array_y + 1) := 1

elsif turn = 4 then
grid (array_x, array_y) := 1
grid (array_x, array_y + 1) := 1
grid (array_x + 1, array_y + 1) := 1
grid (array_x + 2, array_y + 1) := 1
end if
elsif blockType = 2 then
%put array_y
loop
exit when grid (array_x, array_y - 1) = 1 or y = bottom
Z_block_turn_White
dely := 200
y := y - 1
Z_block_turn
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
if turn <= 4 then
turn := turn + 1
else
turn := 1
end if
elsif chars (KEY_RIGHT_ARROW) then

if x < rightturn then
x := x + 1
end if
elsif chars (KEY_LEFT_ARROW) then

if x > leftturn then
x := x - 1
end if
elsif chars (KEY_DOWN_ARROW) then
dely := 50
end if

delay (dely)
View.Update
Time.Delay (5)
array_x := round (x / 30)
array_y := round (y / 6)
end loop

grid (array_x, array_y + 1) := 1 %this spot is now full.
grid (array_x + 1, array_y + 1) := 1
grid (array_x + 1, array_y) := 1
grid (array_x + 2, array_y) := 1

elsif blockType = 3 then
%put array_y
loop
exit when grid (array_x, array_y - 1) = 1 or y = bottom
S_block_turn_White
dely := 200
y := y - 1
S_block_turn
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
if turn <= 4 then
turn := turn + 1
else
turn := 1
end if
elsif chars (KEY_RIGHT_ARROW) then

if x < rightturn then
x := x + 1
end if
elsif chars (KEY_LEFT_ARROW) then

if x > leftturn then
x := x - 1
end if
elsif chars (KEY_DOWN_ARROW) then
dely := 50
end if

delay (dely)
View.Update
Time.Delay (5)
array_x := round (x / 30)
array_y := round (y / 6)
end loop

grid (array_x, array_y) := 1 %this spot is now full.
grid (array_x + 1, array_y) := 1
grid (array_x + 2, array_y + 1) := 1
grid (array_x + 3, array_y + 1) := 1
elsif blockType = 4 then
%put array_y
loop
exit when grid (array_x, array_y - 1) = 1 or y = bottom
J_block_turn_White
dely := 200
y := y - 1
J_block_turn
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
if turn <= 4 then
turn := turn + 1
else
turn := 1
end if
elsif chars (KEY_RIGHT_ARROW) then

if x < rightturn then
x := x + 1
end if
elsif chars (KEY_LEFT_ARROW) then

if x > leftturn and array_x + 1 = 1 then
x := x - 1
end if
elsif chars (KEY_DOWN_ARROW) then
dely := 50
end if

delay (dely)
View.Update
Time.Delay (5)
array_x := round (x / 30)
array_y := round (y / 6)
end loop

grid (array_x, array_y) := 1 %this spot is now full.
grid (array_x + 1, array_y) := 1
grid (array_x + 2, array_y) := 1
grid (array_x + 3, array_y - 1) := 1
elsif blockType = 5 then
loop
exit when grid (array_x, array_y - 1) = 1 or y = bottom
I_block_turn_White
dely := 200
y := y - 1
I_block_turn
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
if turn <= 4 then
turn := turn + 1
else
turn := 1
end if
elsif chars (KEY_RIGHT_ARROW) then

if x < rightturn then
x := x + 1
end if
elsif chars (KEY_LEFT_ARROW) then

if x > leftturn and array_x + 1 = 1 then
x := x - 1
end if
elsif chars (KEY_DOWN_ARROW) then
dely := 50
end if

delay (dely)
View.Update
Time.Delay (5)
array_x := round (x / 30)
array_y := round (y / 6)
end loop

grid (array_x, array_y) := 1 %this spot is now full.
grid (array_x, array_y + 1) := 1
grid (array_x, array_y + 2) := 1
grid (array_x, array_y + 3) := 1
elsif blockType = 6 then

loop
exit when grid (array_x, array_y - 1) = 1 or y = bottom
O_block_turn_White
dely := 200
y := y - 1
O_block_turn
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
if turn <= 4 then
turn := turn + 1
end if
turn := 1
elsif chars (KEY_RIGHT_ARROW) then

if x < rightturn then
x := x + 1
end if
elsif chars (KEY_LEFT_ARROW) then

if x > leftturn then
x := x - 1
end if
elsif chars (KEY_DOWN_ARROW) then
dely := 50
end if

delay (dely)
View.Update
Time.Delay (5)
array_x := round (x / 15)
array_y := round (y / 3)
end loop

grid (array_x, array_y) := 1 %this spot is now full.
grid (array_x + 1, array_y + 1) := 1
grid (array_x, array_y + 1) := 1
grid (array_x + 1, array_y) := 1
end if

end loop
jason98wang




PostPosted: Tue Jan 17, 2017 5:30 pm   Post subject: RE:Problems with my tetris game

Hi, im wordering how are you gonna rid of falling blocks? because if you use cls then won't the landed blocks reset?
Insectoid




PostPosted: Tue Jan 17, 2017 6:21 pm   Post subject: RE:Problems with my tetris game

No, they won't. cls is a draw command. It doesn't have any effect on the game itself at all. It just draws things.

Everything 'in the game' happens on the grid array. Every single block in the game is represented there. When you rotate something, it gets rotated in the array. When you delete a row, it is deleted from the array. Not from the screen.

The draw procedure draws everything. It looks at the array, and the score, etc and draws them to the screen. Anything you want drawn gets drawn here. We look at cell (1,1), if it's full, we draw it. If not, we don't. Then we look at cell (1, 2), then (1, 3), and so on. It looks at everything, and decides, based on what it sees, what to draw.

Things change pretty quickly in games. What we drew to the screen isn't accurate for very long, because as soon as we drew it, we started changing things. Maybe a row got deleted, maybe the user pressed a key, maybe the score went up. We already have a procedure that looks at EVERYTHING, and decides what to draw. So instead of writing another function to erase the parts we don't want, we just erase everything and draw it all again. Maybe something changed, maybe it didn't. We don't know, and we don't have to.
jason98wang




PostPosted: Wed Jan 18, 2017 1:12 am   Post subject: RE:Problems with my tetris game

can you fix my program?
i
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 3 of 3  [ 36 Posts ]
Goto page Previous  1, 2, 3
Jump to:   


Style:  
Search: