




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 貪吃蛇游戲設(shè)計(jì)基于xilinx spartan-3anfpga開(kāi)發(fā)板專業(yè):電子科學(xué)與技術(shù)學(xué)號(hào):姓名: 貪吃蛇游戲設(shè)計(jì)基于xilinx spartan-3anfpga開(kāi)發(fā)板一、實(shí)驗(yàn)要求設(shè)計(jì)一款貪吃蛇游戲。設(shè)計(jì)平臺(tái)為xilinx的spartan3an fpga開(kāi)發(fā)板。通過(guò)vga接口控制液晶顯示器,在液晶顯示器上實(shí)現(xiàn)該游戲。具體要求為,在液晶顯示器上有一移動(dòng)的”蛇”,通過(guò)開(kāi)發(fā)板上的撥碼開(kāi)關(guān)實(shí)現(xiàn)“蛇”上下左右移動(dòng)。并且要求“蛇”只能在顯示器一定范圍內(nèi)運(yùn)動(dòng),若碰到坐標(biāo)區(qū)域的邊緣或者“蛇”的身體,則游戲結(jié)束。同時(shí)會(huì)在屏幕有效區(qū)域隨機(jī)出現(xiàn)“蘋(píng)果”,“蛇”每吃到一次蘋(píng)果則表示一次成功操作,得分加1,并在數(shù)碼
2、管上顯示得分。本實(shí)驗(yàn)剛開(kāi)始的蛇身長(zhǎng)度定位3。為了便于書(shū)寫(xiě)程序,我們?cè)O(shè)定蛇的最大長(zhǎng)度為16。二、實(shí)驗(yàn)原理 (1)vga接口 本開(kāi)發(fā)板提供vga接口。對(duì)硬件進(jìn)行編程,輸出標(biāo)準(zhǔn)的vga信號(hào)(紅、綠、藍(lán)三色信號(hào)和行、幀同步信號(hào)),通過(guò)15針vga接口輸出至顯示器,可驅(qū)動(dòng)顯示器顯示圖像信號(hào)。如下圖所示: 在實(shí)驗(yàn)中只需使用其中的五個(gè)引腳,如上圖所示。vga接口信號(hào)基本時(shí)序圖如下圖所示:符號(hào)含義垂直同步水平同步時(shí)間時(shí)鐘線數(shù)時(shí)間時(shí)鐘ts同步脈沖時(shí)間16.7ms41680052132us800tdisp顯示時(shí)間15.36ms38400048025.6us640tpwvsync脈沖寬度64us160023.84u
3、s96tfp前沿320us800010640ns16tbp后沿928us23200291.92us48表1 640*480模式下的vga時(shí)序圖信號(hào)fpga管教約束vga_rt13vga_gv13vga_bu13h_syncw13v_syncy13表2 vga引腳配置(2)撥碼開(kāi)關(guān) 本游戲通過(guò)開(kāi)發(fā)板下方的四個(gè)撥碼開(kāi)關(guān)來(lái)實(shí)現(xiàn)上下左右控制。4撥碼開(kāi)關(guān)直接接入fpga管腳,用戶可自行配置。撥碼開(kāi)關(guān)撥到“on”位置時(shí),其狀態(tài)為“0”,否則狀態(tài)為“1”;按鍵連接原理圖如下:信號(hào)fpga管腳約束sw1_1j4sw1_2h3sw1_3j3sw1_4j2表3 4碼開(kāi)關(guān)fpga引腳配置(3)led數(shù)碼管此開(kāi)發(fā)板提
4、供4個(gè)led數(shù)碼管,可顯示數(shù)字,直接與fpga相連,其控制方法為掃描式,如圖所示,此數(shù)碼管內(nèi)部接線為共陰方式,即低電平亮。所以若要控制左邊第一個(gè)七節(jié)燈管輸出2的字型,可以先輸出“0010010”到cadp,然后輸出“0111”到a1a4即可。 信號(hào)fpga管教約束led_bit1m2led_bit2m3led_bit3m4led_bit4m5led_can1led_cbn2led_ccn3led_cdn4led_cet1led_cft2led_cgt3led_dpr4表4 7段數(shù)碼管fpga引腳配置三、實(shí)驗(yàn)代碼1. 由于本實(shí)驗(yàn)涉及的模塊較多,我們采用小模塊化設(shè)計(jì)的思想。本設(shè)計(jì)含有六個(gè)子模塊,分
5、別是: game_ctrl_unit snake_eating_apple snake key vga_control seg_display頂層模塊代碼如下:module greedy_snake (input clk,input reset,input left,input right,input up,input down,output h_sync,output v_sync,output 2:0 color_out,output 7:0 seg_out,output 3:0 sel);wire left_key_press,right_key_press, up_key_press,
6、 down_key_press;wire 1:0 snake;wire 9:0 x_pos;wire 9:0 y_pos;wire 5:0 apple_x;wire 4:0 apple_y;wire 5:0 head_x;wire 5:0 head_y;wire add_cube;wire 1:0 game_status;wire hit_wall;wire hit_body;wire die_flash;wire restart;wire 6:0 cube_num;game_ctrl_unit game_ctrl_unit1( .clk(clk),.reset(reset),.key1_pr
7、ess(left_key_press),.key2_press(right_key_press),.key3_press(up_key_press),.key4_press(down_key_press),.game_status(game_status),.hit_wall(hit_wall),.hit_body(hit_body),.die_flash(die_flash),.restart(restart) ); snake_eating_apple snake_eating_apple1( .clk(clk),.reset(reset),.apple_x(apple_x),.apple
8、_y(apple_y),.head_x(head_x),.head_y(head_y),.add_cube(add_cube) );snake snake(.clk(clk),reset(reset),.left_press(left_key_press),.right_press(right_key_press),.up_press(up_key_press),.down_press(down_key_press),.snake(snake),.x_pos(x_pos),.y_pos(y_pos),.head_x(head_x),.head_y(head_y),.add_cube(add_c
9、ube),.game_status(game_status),.cube_num(cube_num),.hit_body(hit_body),.hit_wall(hit_wall),.die_flash(die_flash) );vga_control vga_control(.clk(clk),.reset(reset),.h_sync(h_sync), .v_sync(v_sync), .snake(snake),.color_out(color_out),.x_pos(x_pos), .y_pos(y_pos),.apple_x(apple_x),.apple_y(apple_y) );
10、key key1( .clk(clk),.reset(reset),.left(left),.right(right),.up(up),.down(down),.left_key_press(left_key_press), .right_key_press(right_key_press),.up_key_press(up_key_press),.down_key_press(down_key_press) ); seg_display seg_display1( .clk(clk),.reset(reset),.add_cube(add_cube),.seg_out(seg_out),.s
11、el(sel) );endmodule2.每個(gè)子模塊的實(shí)現(xiàn)方法及要求 2.1 game_ctrl_unit本模塊從其他模塊接受信號(hào),決定游戲狀態(tài)(ready、play、die),并且產(chǎn)生其他模塊的控制信號(hào)。在ready的狀態(tài)下,只要有鍵按下(上下左右),則蛇就會(huì)自動(dòng)向右運(yùn)動(dòng),從而進(jìn)入play的狀態(tài)。在play狀態(tài)下,本模塊等待hit_wall或者h(yuǎn)it_body的信號(hào),如果這兩個(gè)信號(hào)發(fā)生,則進(jìn)入die狀態(tài),即游戲結(jié)束。在die狀態(tài)下,屏幕會(huì)閃爍一段時(shí)間,最后進(jìn)入ready狀態(tài)。此子模塊代碼如下:module game_ctrl_unit(input clk,input reset,input
12、key1_press,input key2_press,input key3_press,input key4_press,input hit_wall,input hit_body,output reg 1:0 game_status,output reg die_flash,output reg restart);localparam restart = 2b00;localparam start = 2b01;localparam play = 2b10;localparam die = 2b11;reg 31:0 clk_cnt;always ( posedge clk ) begin
13、 if( !reset ) begin game_status = start; clk_cnt = 0; die_flash = 1; restart = 0; endelse begin case( game_status ) restart:begin if( clk_cnt = 5 ) begin clk_cnt = clk_cnt + 1; restart = 1; end else begin game_status = start; clk_cnt = 0; restart = 0; endend start: begin if( key1_press | key2_press
14、| key3_press | key4_press ) begingame_status = play; end end play: begin if( hit_wall | hit_body ) game_status = die;end die: begin if( clk_cnt = 200000000 ) begin clk_cnt = clk_cnt + 1; if( clk_cnt = 25000000 ) die_flash = 0; else if( clk_cnt = 50000000 ) die_flash = 1; else if( clk_cnt = 75000000
15、)die_flash = 0; else if( clk_cnt = 100000000 )die_flash = 1; else if( clk_cnt = 125000000 )die_flash = 0; else if( clk_cnt = 150000000 )die_flash = 1; end else begin die_flash = 1; clk_cnt = 0; game_status = restart; end end endcaseendendendmodule2.2 snake 這是本次試驗(yàn)最復(fù)雜的部分,此模塊需要完成四項(xiàng)任務(wù):(1)保持蛇的運(yùn)動(dòng) (2)根據(jù)按下的
16、鍵改變蛇的運(yùn)動(dòng)方向 (3)判斷蛇是否碰撞墻或者自己的身體 (4)在液晶顯示器上顯示根據(jù)vga_control模塊此子模塊代碼如下:module snake (input clk,input reset,input left_press,input right_press,input up_press,input down_press,input 9:0 x_pos,input 9:0 y_pos,input add_cube,input 1:0 game_status,input die_flash,output reg 1:0 snake,output reg 6:0 cube_num,ou
17、tput 5:0 head_x,output 5:0 head_y,output reg hit_body,output reg hit_wall);localparam up = 2b00;localparam down = 2b01;localparam left = 2b10;localparam right = 2b11;localparam none = 2b00;localparam head = 2b01;localparam body = 2b10;localparam wall = 2b11;localparam play = 2b10;reg 31:0 cnt;wire 1
18、:0 direct; reg 1:0 direct_r;assign direct=direct_r;reg 1:0 direct_next;reg change_to_left;reg change_to_right;reg change_to_up;reg change_to_down; reg 5:0 cube_x15:0;reg 5:0 cube_y15:0;reg 15:0 is_exist;reg 2:0 color;assign head_x = cube_x0;assign head_y = cube_y0;always ( posedge clk ) /初始化剛開(kāi)始時(shí)我們?cè)O(shè)定
19、蛇向右運(yùn)動(dòng)if( !reset)direct_r=right ;elsedirect_r=direct_next;always ( posedge clk )beginif(!reset ) begin /設(shè)定初始化后剛開(kāi)始三個(gè)蛇塊的位置cnt = 0;cube_x0 = 10;cube_y0 = 5;cube_x1 = 9;cube_y1 = 5;cube_x2 = 8;cube_y2 = 5;hit_wall = 0;hit_body = 0; endelse begincnt = cnt + 1;if( cnt = 12500000 ) begincnt = 0;if( game_sta
20、tus = play ) begin /在play過(guò)程中判斷是否hit_wallif( ( direct = up & cube_y0 = 1 ) | ( direct = down & cube_y0 = 28 )| ( direct = left & cube_x0 = 1 )| ( direct = right & cube_x0 = 38 ) )hit_wall = 1;/下邊判斷是否hit_dodyelse if( ( cube_y0 = cube_y1 & cube_x0 = cube_x1 & is_exist1 = 1 )| ( cube_y0 = cube_y2 & cube
21、_x0 = cube_x2 & is_exist2 = 1 )| ( cube_y0 = cube_y3 & cube_x0 = cube_x3 & is_exist3 = 1 )| ( cube_y0 = cube_y4 & cube_x0 = cube_x4 & is_exist4 = 1 )| ( cube_y0 = cube_y5 & cube_x0 = cube_x5 & is_exist5 = 1 )| ( cube_y0 = cube_y6 & cube_x0 = cube_x6 & is_exist6 = 1 )| ( cube_y0 = cube_y7 & cube_x0 =
22、 cube_x7 & is_exist7 = 1 )| ( cube_y0 = cube_y8 & cube_x0 = cube_x8 & is_exist8 = 1 )| ( cube_y0 = cube_y9 & cube_x0 = cube_x9 & is_exist9 = 1 )| ( cube_y0 = cube_y10 & cube_x0 = cube_x10 & is_exist10 = 1 )| ( cube_y0 = cube_y11 & cube_x0 = cube_x11 & is_exist11 = 1 )| ( cube_y0 = cube_y12 & cube_x0
23、 = cube_x12 & is_exist12 = 1 )| ( cube_y0 = cube_y13 & cube_x0 = cube_x13 & is_exist13 = 1 )| ( cube_y0 = cube_y14 & cube_x0 = cube_x14 & is_exist14 = 1 )| ( cube_y0 = cube_y15 & cube_x0 = cube_x15 & is_exist15 = 1 ) ) hit_body=1;else /蛇運(yùn)動(dòng)過(guò)程中相鄰模塊之間坐標(biāo)存在聯(lián)系,依次代替 begincube_x1 = cube_x0;cube_y1 = cube_y0
24、;cube_x2 = cube_x1;cube_y2 = cube_y1;cube_x3 = cube_x2;cube_y3 = cube_y2;cube_x4 = cube_x3;cube_y4 = cube_y3;cube_x5 = cube_x4;cube_y5 = cube_y4;cube_x6 = cube_x5;cube_y6 = cube_y5;cube_x7 = cube_x6;cube_y7 = cube_y6;cube_x8 = cube_x7;cube_y8 = cube_y7;cube_x9 = cube_x8;cube_y9 = cube_y8;cube_x10 =
25、cube_x9;cube_y10 = cube_y9;cube_x11 = cube_x10;cube_y11 = cube_y10;cube_x12 = cube_x11;cube_y12 = cube_y11;cube_x13 = cube_x12;cube_y13 = cube_y12;cube_x14 = cube_x13;cube_y14 = cube_y13;cube_x15 = cube_x14;cube_y15 = cube_y14;case( direct ) /根據(jù)運(yùn)動(dòng)方向來(lái)決定蛇頭的坐標(biāo)up:beginif( cube_y0 = 1 )hit_wall = 1;else
26、cube_y0 = cube_y0 1;enddown: beginif( cube_y0 = 28 )hit_wall = 1;elsecube_y0 = cube_y0 + 1;endleft:beginif( cube_x0 = 1 )hit_wall = 1;else cube_x0 = cube_x0 1;endright: beginif( cube_x0 = 38 )hit_wall = 1;elsecube_x0 = cube_x0 + 1;endendcaseendendendendendalways ( * ) begindirect_next = direct;case(
27、 direct )up: beginif( change_to_left )direct_next = left;else if( change_to_right )direct_next = right;else direct_next = up;enddown : beginif( change_to_left )direct_next = left;else if( change_to_right )direct_next = right;else direct_next = down;endleft : beginif( change_to_up )direct_next = up;e
28、lse if( change_to_down )direct_next = down;else direct_next = left;endright : beginif( change_to_up )direct_next = up;else if( change_to_down )direct_next = down;else direct_next = right;endendcaseendalways ( posedge clk ) beginif( left_press = 1 ) beginchange_to_left = 1;endelse if( right_press = 1
29、 ) beginchange_to_right = 1;endelse if( up_press = 1 ) beginchange_to_up = 1;endelse if( down_press = 1 ) beginchange_to_down = 1;endelse beginchange_to_left = 0;change_to_right = 0;change_to_up = 0;change_to_down = 0;endendreg addcube_state;always ( posedge clk ) beginif( reset = 0 ) beginis_exist
30、= 16b0000000000000111;cube_num = 3;addcube_state = 0;endelse begincase( addcube_state )0: beginif( add_cube ) begincube_num = cube_num + 1;is_existcube_num = 1;addcube_state = 1;endend1: beginif(!add_cube)addcube_state = 0 & x_pos = 0 & y_pos 480 ) beginif( ( x_pos9:4 = 0 | y_pos9:4 = 0 | x_pos9:4 =
31、 39 | y_pos9:4 = 29 ) )snake = wall;else if( x_pos9:4 = cube_x0 & y_pos9:4 = cube_y0 & is_exist0 = 1 ) beginsnake = ( die_flash = 1 ) ? head : none;endelse if( ( x_pos9:4 = cube_x1 & y_pos9:4 = cube_y1 & is_exist1 = 1 )| ( x_pos9:4 = cube_x2 & y_pos9:4 = cube_y2 & is_exist2 = 1 )| ( x_pos9:4 = cube_
32、x3 & y_pos9:4 = cube_y3 & is_exist3 = 1 )| ( x_pos9:4 = cube_x4 & y_pos9:4 = cube_y4 & is_exist4 = 1 )| ( x_pos9:4 = cube_x5 & y_pos9:4 = cube_y5 & is_exist5 = 1 )| ( x_pos9:4 = cube_x6 & y_pos9:4 = cube_y6 & is_exist6 = 1 )| ( x_pos9:4 = cube_x7 & y_pos9:4 = cube_y7 & is_exist7 = 1 )| ( x_pos9:4 =
33、cube_x8 & y_pos9:4 = cube_y8 & is_exist8 = 1 )| ( x_pos9:4 = cube_x9 & y_pos9:4 = cube_y9 & is_exist9 = 1 )| ( x_pos9:4 = cube_x10 & y_pos9:4 = cube_y10 & is_exist10 = 1 )| ( x_pos9:4 = cube_x11 & y_pos9:4 = cube_y11 & is_exist11 = 1 )| ( x_pos9:4 = cube_x12 & y_pos9:4 = cube_y12 & is_exist12 = 1 )|
34、 ( x_pos9:4 = cube_x13 & y_pos9:4 = cube_y13 & is_exist13 = 1 )| ( x_pos9:4 = cube_x14 & y_pos9:4 = cube_y14 & is_exist14 = 1 )| ( x_pos9:4 = cube_x15 & y_pos9:4 = cube_y15 & is_exist15 = 1 )snake = ( die_flash = 1 ) ? body : none;elsesnake = none;endend endmodule2.3snake_eating_apple此模塊需要在液晶顯示器有效區(qū)域
35、內(nèi)隨機(jī)產(chǎn)生一個(gè)蘋(píng)果,而且需要判斷蛇是否已吃下蘋(píng)果。此子模塊代碼如下:module snake_eating_apple (input clk,input reset,input 5:0 head_x,input 5:0 head_y,output reg 5:0 apple_x,output reg 4:0 apple_y,output reg add_cube);reg 31:0 clk_cnt;reg 10:0 random_num;always ( posedge clk )random_num = random_num + 927; always ( posedge clk ) beg
36、inif( reset = 0 ) beginclk_cnt = 0;apple_x = 24;apple_y = 10;add_cube = 0;endelse beginclk_cnt = clk_cnt + 1;if( clk_cnt = 250000 ) beginclk_cnt = 0;if( apple_x = head_x & apple_y = head_y ) begin add_cube = 1;apple_x 38 ) ? ( random_num10:5 - 25 ) :( random_num10:5 = 0 ) ? 1:random_num10:5;apple_y
37、28 ) ? ( random_num4:0 - 3 ) :( random_num4:0 = 0 ) ? 1 : random_num4:0; endelse add_cube = 0;endendendendmodule2.4vga_control此模塊直接控制液晶屏的顯示。產(chǎn)生五個(gè)信號(hào):紅、綠、藍(lán)三色信號(hào)和行幀同步信號(hào)。此子模塊代碼如下:module vga_control (input clk,input reset,input 1:0 snake,input 5:0 apple_x,input 4:0 apple_y,output reg 9:0 x_pos,output reg 9
38、:0 y_pos,output reg h_sync,output reg v_sync,output reg 2:0 color_out);reg 19:0 clk_cnt;reg 9:0 line_cnt;reg clk_25m;localparam none = 2b00;localparam head = 2b01;localparam body = 2b10;localparam wall = 2b11;localparam head_color = 3b010;localparam body_color = 3b011;reg 3:0 lox;reg 3:0 loy;always
39、( posedge clk ) beginclk_25m = clk_25m;end/ generate display signalalways ( posedge clk_25m ) beginif( reset = 0) begin clk_cnt = 0;line_cnt = 0;h_sync = 1;v_sync = 1;endelse beginx_pos = clk_cnt 144;y_pos = line_cnt 33;/產(chǎn)生水平控制信號(hào)if( clk_cnt = 0 ) beginh_sync = 0;clk_cnt = clk_cnt + 1;endelse if( clk
40、_cnt = 96 ) beginh_sync = 1;clk_cnt = clk_cnt + 1;endelse if( clk_cnt = 799 ) beginclk_cnt = 0;line_cnt = line_cnt + 1;endelse clk_cnt = clk_cnt + 1;/ 產(chǎn)生垂直控制信號(hào)if( line_cnt = 0 ) beginv_sync = 0;endelse if( line_cnt = 2 ) beginv_sync = 1;endelse if( line_cnt = 521 ) beginline_cnt = 0;v_sync = 0 & x_p
41、os = 0 & y_pos 480 ) beginlox = x_pos3:0;loy = y_pos3:0;if( x_pos9:4 = apple_x & y_pos9:4 = apple_y )case( loy, lox )8b0000_0000: color_out = 3b000; default:color_out = 3b001; endcaseelse if( snake = none )color_out = 3b000;else if( snake = wall )color_out = 3b101;else if( snake = head | snake = bod
42、y ) begincase( lox, loy )8b0000_0000: color_out = 3b000;default:color_out = ( snake = head ) ? head_color : body_color;endcaseendendelse color_out = 3b000;endend endmodule2.5key 本模塊根據(jù)撥碼開(kāi)關(guān)的高低電平,來(lái)產(chǎn)生left、right、up和down的信號(hào),從而控制蛇的運(yùn)動(dòng)方向。此子模塊代碼如下:module key (input clk,input reset,input left,input right,input up,input down,output reg left_key_press,output reg right_key_press,output reg up_key_press,output reg down_key_press);reg 31:0 clk_cnt;reg left_key_last;reg right_key_last;reg up_key_last;reg down_key_last;always ( posedge clk ) beginif( !reset
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 香椿種植轉(zhuǎn)讓合同范本
- 南昌購(gòu)房合同范本
- 余泥外運(yùn)合同范本
- 衛(wèi)星定位合同范本
- 合同范本從里
- 不良資產(chǎn)合同范本
- 小型裝修合同范本
- 北京地暖合同范本
- 包工頭和工人簽合同范本
- 合同范本快速打字
- 日本商務(wù)禮儀課件
- 公務(wù)用車申請(qǐng)表
- 中國(guó)民間傳說(shuō):田螺姑娘
- 淺談鋼琴即興伴奏在教學(xué)中應(yīng)用現(xiàn)狀及提高方法 論文
- 身體功能訓(xùn)練
- 部編人教版四年級(jí)語(yǔ)文下冊(cè)《全冊(cè)全套》課件ppt
- 英文版-你來(lái)比劃我來(lái)猜游戲
- 皖2015s209 混凝土砌塊式排水檢查井
- 五年級(jí)道德與法治下冊(cè) (我參與我奉獻(xiàn))新課件
- 診所負(fù)責(zé)人聘用合同
- 單層工業(yè)廠房排架結(jié)構(gòu)設(shè)計(jì)正文
評(píng)論
0/150
提交評(píng)論