Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use IEEE.Numeric_STD.ALL;
- entity Game is
- Port ( clk : in STD_LOGIC;
- SW0,SW1,SW2,SW3 : in STD_LOGIC;
- DAC_CLK : out STD_LOGIC;
- H : out STD_LOGIC;
- V : out STD_LOGIC;
- Bout : out STD_LOGIC_VECTOR (7 downto 0);
- Gout : out STD_LOGIC_VECTOR (7 downto 0);
- Rout : out STD_LOGIC_VECTOR (7 downto 0)
- );
- end Game;
- architecture Behavioral of Game is
- signal x, y, VSync, HSync, hBP, vBP : Integer := 0;
- signal xR,xB,xG : STD_LOGIC_VECTOR(7 downto 0):= "00000000";
- signal xH, xV,xDAC_CLK : STD_LOGIC :='0';
- signal Paddle1y : integer := 240;
- signal Paddle2y : integer := 240;
- signal Paddle1counter, Paddle2counter, ball_counter : integer;
- signal bx : integer := 80;
- signal by : integer := 80;
- signal b_pos_x :integer := 1;
- signal b_pos_y :integer := 1;
- --
- -- signal score1,score2 : integer :=0;
- signal pause : integer :=0;
- begin
- process(clk)
- begin
- if (rising_edge(clk)) then
- xDAC_CLK <= NOT(xDAC_CLK);
- end if;
- end process;
- process(xDAC_CLK)
- begin
- if (rising_edge(xDAC_CLK)) then
- if (HSync < 800 -1) then
- HSync <= HSync + 1;
- else
- HSync <= 0;
- if (VSync < 525 - 1) then
- VSync <= VSync + 1;
- else
- VSync <= 0;
- end if;
- end if;
- end if;
- end process;
- xH <=
- '1' when (HSync < 640 + 16) OR (HSync > 640 + 16 + 96) else
- '0';
- xV <=
- '1' when (VSync < 480 + 10) OR (VSync > 480 + 10 + 2) else
- '0';
- x <=
- HSync when (HSync < 640) else
- X;
- y <=
- VSync when (VSync < 480) else
- X;
- process(xDAC_CLK)
- begin
- if (rising_edge(xDAC_CLK)) then
- Paddle1counter <= Paddle1counter +1;
- if (Paddle1counter > 300000) then
- Paddle1counter <= 0;
- if ((SW0 XOR SW1)= '1') then
- if (SW0 = '1' AND Paddle1y - 30 > 30) then
- Paddle1y <= Paddle1y - 1;
- elsif (SW1 = '1' AND Paddle1y + 30 < 450) then
- Paddle1y <= Paddle1y + 1;
- end if;
- end if;
- end if;
- end if;
- end process;
- process(xDAC_CLK)
- begin
- if (rising_edge(xDAC_CLK)) then
- Paddle2counter <= Paddle2counter + 1;
- if (Paddle2counter > 300000) then
- Paddle2counter <= 0;
- if ((SW2 XOR SW3) = '1') then
- if (SW2 = '1' AND Paddle2y - 30 > 30) then
- Paddle2y <= Paddle2y - 1;
- elsif (SW3 = '1' AND Paddle2y + 30 < 450) then
- Paddle2y <= Paddle2y + 1;
- end if;
- end if;
- end if;
- end if;
- end process;
- process(xDAC_CLK)
- begin
- if (rising_edge(xDAC_CLK)) then
- ball_counter <= ball_counter + 1;
- if (ball_counter > 175000) then
- ball_counter <= 0;
- -- if (score1 = 4 OR score2 = 4) then
- -- bx <= 320;
- -- by <= 240;
- -- score1 <= 0;
- -- score2 <= 0;
- -- end if;
- if (((bx + b_pos_x - 8) < 30) AND ( ((by + b_pos_y - 8) > 160) AND ((by + b_pos_y + 8) < 320 ) )) then
- pause <= pause + 1;
- if (pause = 20) then
- bx <= 320;
- by <= 240;
- -- score1 <= score1 + 1;
- pause <= 0;
- end if;
- elsif (((bx + b_pos_x + 8) > 610) AND ( ((by + b_pos_y - 8) > 160) AND ((by + b_pos_y + 8) < 320 ) )) then
- pause <= pause + 1;
- if (pause = 20) then
- bx <= 320;
- by <= 240;
- -- score2 <= score2 + 1;
- pause <= 0;
- end if;
- else
- if ( (((bx + b_pos_x - 8 < 70) AND (bx + b_pos_x + 8 > 60)) AND ( (Paddle1y+30 > by + b_pos_y + 8 ) AND (Paddle1y-30 < by + b_pos_y - 8) ) ) OR (((bx + b_pos_x + 8 > 570) AND (bx + b_pos_x - 8 < 580)) AND ( (Paddle2y+30 > by + b_pos_y + 8 ) AND (Paddle2y-30 < by + b_pos_y - 8) ))) Then
- b_pos_x <= -b_pos_x;
- b_pos_y <= -b_pos_y;
- else
- if ((bx + b_pos_x +8 > 610) OR (bx + b_pos_x - 8 < 30) ) then
- b_pos_x <= -b_pos_x;
- elsif (by + b_pos_y + 8 > 450 OR by +b_pos_y -8 < 30) then
- b_pos_y <= -b_pos_y;
- end if;
- end if;
- bx <= bx + b_pos_x;
- by <= by + b_pos_y;
- end if;
- end if;
- end if;
- end process;
- process (xDAC_CLK)
- begin
- if (VSync < 480 AND HSync < 640) then
- if ((y < 10) OR (y > 470)) then
- xR <= "11111111";
- xG <= "11111111";
- xB <= "11111111";
- elsif( ((y > 15 AND y < 30) AND (x > 30 AND x < 610)) OR ((y < 465 AND y>450) AND (x > 30 AND x < 610)) OR (((y>15 AND y<160) OR (y>320 AND y<465)) AND (x>30 AND x<45)) OR (((y>15 AND y<160) OR (y>320 AND y<465)) AND (x>595 AND x<610))) then
- xR <= "00000000";
- xG <= "00000000";
- xB <= "00000000";
- elsif ((x > 318 AND x < 322) AND ((y>60 AND y<100) OR (y>140 AND y<180) OR (y>220 AND y<260) OR (y>300 AND y<340) OR (y>380 AND y<420))) then
- xR <= "10101010";
- xG <= "00000000";
- xB <= "11111111";
- elsif(((y > 29 AND y < 451) AND (x > 44 AND x < 104)) OR ((y > 29 AND y < 451) AND (x > 164 AND x < 224)) OR ((y > 29 AND y < 451) AND (x > 284 AND x < 344)) OR ((y > 29 AND y < 451) AND (x > 404 AND x < 464)) OR ((y > 29 AND y < 451) AND (x > 524 AND x < 584)) OR ((y > 29 AND y < 451) AND (x > 644 AND x < 704))) then
- xR <= "00000000";
- xG <= "11111111";
- xB <= "00000000";
- else
- xR <= "11111111";
- xG <= "11111111";
- xB <= "11111111";
- end if;
- if((y>(Paddle1y-30) AND y<(Paddle1y+30)) AND (x>60 AND x<70)) then
- xB <= "11111111";
- xR <= "00000000";
- xG <= "00000000";
- end if;
- if ((y>(Paddle2y-30) AND y<(Paddle2y+30)) AND (x>570 AND x<580)) then
- xB <= "00000000";
- xR <= "11110111";
- xG <= "00000000";
- end if;
- if(((y > (by-8)) AND (y < (by+8))) AND ((x > (bx-8)) AND (x < (bx+8)))) then
- xR <= "10101010";
- xG <= "00000000";
- xB <= "11111111";
- end if;
- if (((((bx) < 40) AND (((by) > 160) AND ((by) < 320 ))) OR (((bx) > 600) AND (((by) > 160) AND ((by) < 320 )))) AND ((y > (by-8)) AND (y < (by+8))) AND ((x > (bx-8)) AND (x < (bx+8)))) then
- xR <= "10101010";
- xG <= "11111111";
- xB <= "00000000";
- end if;
- else
- xR <= "00000000";
- xG <= "00000000";
- xB <= "00000000";
- end if;
- end process;
- --PORT MAPING
- DAC_CLK <= xDAC_CLK;
- Rout <= xR;
- Gout <= xG;
- Bout <= xB;
- H <= xH;
- V <= xV;
- end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement