版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 WORD 課程設(shè)計(jì)報(bào)告題 目 :基于C+俄羅斯方塊學(xué) 院:專 業(yè):學(xué) 號(hào):姓 名:二一三 年 十二 月經(jīng)典小游戲設(shè)計(jì)-俄羅斯方塊一、 需求分析。1.1、游戲需求隨機(jī)給出不同的形狀(長(zhǎng)條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,若在游戲中各形狀填滿了給定區(qū)域,為輸者,彈出相應(yīng)提示。1.2、游戲界面需求良好的用戶界面,有關(guān)信息顯示(如操作方法、等級(jí)等)。讓方塊在一定的區(qū)域運(yùn)動(dòng)和變形,該區(qū)域用一種顏色表明,即用一種顏色作為背景,本游戲的背景設(shè)為黑色。還需用另一種顏色把黑色圍起來,寬度適中,要實(shí)現(xiàn)美感。而不同的方塊用不同的著色表示,使游戲界面更加清晰、
2、有條理。消層時(shí)采用一定的時(shí)間延遲,增加視覺消行的感官效果。1.3、游戲方塊需求良好的方塊形狀設(shè)計(jì),繪制七種常見的基本圖形(長(zhǎng)條形、Z字形、反Z形、田字形、L字形、反L形、T字型)以與另外本程序另外加入的點(diǎn)形方塊,各個(gè)方塊要能實(shí)現(xiàn)它的變形,可設(shè)為順時(shí)針或逆時(shí)針變形,一般為逆時(shí)針。為體現(xiàn)游戲的趣味性和擴(kuò)展性,本游戲象征性的增加了點(diǎn)形方塊,其他更多形狀的方塊可用類似方法增加。1.4、游戲控制的需求游戲控分為多個(gè)方面,包括畫面繪制,控制命令的獲取,控制命令的分配、控制命令的處理,方塊的繪制,方塊的移動(dòng),方塊的旋轉(zhuǎn),方塊下落和消層以與計(jì)分等。對(duì)各個(gè)命令的合理處理和綜合控制十分重要,一旦出錯(cuò)可能導(dǎo)致整個(gè)程
3、序的崩潰,因此需要小心設(shè)計(jì)。二、 系統(tǒng)設(shè)計(jì)。2.1、程序流程圖:2.2、游戲設(shè)計(jì)概述從整體上而言,在該游戲可設(shè)計(jì)一個(gè)方塊類,其中包括對(duì)方塊的信息描述(如:ID)、方塊的操作(如:旋轉(zhuǎn)、下沉)。再設(shè)計(jì)一個(gè)控制類,實(shí)現(xiàn)各種控制(如:獲取控制信號(hào),分發(fā)控制信號(hào))。另定義一個(gè)游戲區(qū)類,用以處理游戲區(qū)繪制等容??驁D如下: 方塊類(GAME_BLOCK)游戲區(qū)類(Window)Private:BLOCKINFO g_CurBlock;(新方塊)BLOCKINFO g_NextBlock;(下一方塊)Private:無Public:Void InitWindow()Public:GAME_BLOCK ()G
4、AME_BLOCK ()void NewBlock();/生成方塊bool CheckBlock(BLOCKINFO _block);/檢測(cè)方塊能否放下void DrawBlock(BLOCKINFO _block,DRAW_draw=SHOW);void OnRotate();/旋轉(zhuǎn)方塊void OnLeft();/ 左移方塊void OnRight();/ 右移方塊void OnDown();/ 下移方塊void OnSink(CGAME &);/ 沉底方塊BLOCKINFO &CurBlock();BLOCKINFO &NextBlock();游戲控制類(CGam
5、e)Private:Void DispatchControl(CTRL);Public:void InitGame();/初始化游戲VoidStart_Game();/開始游戲void Game_Over();/游戲結(jié)束void NewGame();/新游戲void Quit_Game();/退出游戲CTRL GetControl(bool _onlyresettimer = false);/獲取控制命令在主函數(shù)中(按照2.1中框圖),先通過控制類初始化游戲,再通過隨機(jī)時(shí)間函數(shù)獲得一個(gè)隨機(jī)數(shù),該隨機(jī)數(shù)確定一個(gè)方塊,即用該隨機(jī)數(shù)產(chǎn)生一個(gè)ID從而確定產(chǎn)生的為方塊。然后從鍵盤取得各種操作信號(hào),通過控
6、類函數(shù)對(duì)操作信號(hào)進(jìn)行分發(fā)、處理,進(jìn)而控制方塊的行為改變。與此同時(shí),監(jiān)控游戲區(qū)中已有方塊的狀態(tài),一旦滿足消行即進(jìn)行消行控制,同時(shí)進(jìn)行計(jì)分和等級(jí)劃分,而如果游戲區(qū)已滿則游戲結(jié)束,彈出提示。而對(duì)界面和方塊的展現(xiàn)主要通過第三方軟件EasyX實(shí)現(xiàn),通過其畫圖位置的改變與時(shí)間的結(jié)合達(dá)到方塊視覺移動(dòng)的效果。2.3、定義方塊的數(shù)據(jù)結(jié)構(gòu)方塊是本游戲的基本要素,對(duì)于方塊的設(shè)計(jì),本游戲用4*4的矩陣畫出來,在相應(yīng)的位置置為1和0以實(shí)現(xiàn)各種方塊的形狀,以“立L形”為例如下:0100010001100000而在程序設(shè)計(jì)中則賦予各種基本方塊一個(gè)不同的十六進(jìn)制ID即可表示該方塊,如“立7形”其ID為0x4460,再與其其他
7、變形組合和著色分配即可得到各種L形ID的集合0x4460, 0x02E0, 0x0622, 0x0740,MAGENTA;其他各種方塊類似設(shè)計(jì)。具體清單如下:0x0F00, 0x4444, 0x0F00, 0x4444, RED,/ I0x0660, 0x0660, 0x0660, 0x0660, BLUE,/ 口0x4460, 0x02E0, 0x0622, 0x0740, CYAN, / L 藍(lán)綠色0x2260, 0x0E20, 0x0644, 0x0470, GREEN,/ 反L0x0C60, 0x2640, 0x0C60, 0x2640, BROWN,/ Z0x0360, 0x4620
8、, 0x0360, 0x4620, YELLOW,/ 反Z0x4E00, 0x4C40, 0x0E40, 0x4640, MAGENTA;/ T 品紅2.4、方塊的變形方塊要實(shí)現(xiàn)變形,其實(shí)就是通過EasyX畫出不同的圖形來實(shí)現(xiàn)的,當(dāng)然亂畫是不行的,而為了控制其變形的情況,必須設(shè)定相應(yīng)的圖形描述,本程序使用的是不同圖形的不同ID碼表示的方法來實(shí)在方塊的描述的。能過鍵盤接收變形指令(即向上鍵),將所得信號(hào)傳遞給信號(hào)接收函數(shù),再通過信號(hào)處理函數(shù)改變當(dāng)前方塊的ID值,最后根據(jù)新的ID值畫出新的圖形,此時(shí)即實(shí)在了方塊的變形。2.5、定時(shí)處理機(jī)制為了提高游戲的易控性和自動(dòng)性,定時(shí)機(jī)制是很有必要的。經(jīng)過定時(shí)
9、器的設(shè)置后,這里通過利用控制程序跳到定時(shí)器的時(shí)間的處理函數(shù)去實(shí)現(xiàn),當(dāng)固定時(shí)間片間隔到達(dá)后,先檢測(cè)當(dāng)前下墜物是否已經(jīng)到達(dá)了底部,不是則進(jìn)行下墜物向下移動(dòng)一個(gè)單位的操作,是則到底后產(chǎn)生一個(gè)新的“下一個(gè)下墜物”,并代替舊的,將原先舊的“下一個(gè)下墜物”用作當(dāng)前激活狀態(tài)下正在使用的下墜物,并對(duì)使用后的一些狀態(tài)進(jìn)行檢測(cè):是否馬上到達(dá)底部,使則進(jìn)行銷行操作;是否在到達(dá)底部的同時(shí)到達(dá)游戲區(qū)域的頂部,從而判定游戲是否因違規(guī)而結(jié)束,彈出相應(yīng)對(duì)話框供用戶選擇是否繼續(xù)重新開始。圖 3.2.2裝載方塊 視圖類通過不同十六進(jìn)制ID來記錄下墜物的類型,共有七種形狀,并從7種方塊中隨機(jī)抽取圖形。而ID除了記錄下墜物的類型外,
10、還需記錄其當(dāng)前的變形狀態(tài)。在產(chǎn)生新的下一個(gè)下墜物前,需要先將當(dāng)前狀態(tài)物的記錄和舊的下一個(gè)下墜物保存下來,然后用隨機(jī)函數(shù)Random()產(chǎn)生一個(gè)最大值不大于指定值的隨機(jī)正整數(shù),將這個(gè)新生成的正整數(shù)用作新的“下一個(gè)下墜物”的形狀值。三、關(guān)鍵代碼描述。#include <easyx.h>#include <conio.h>#include <time.h>/ 定義常量、枚舉量、結(jié)構(gòu)體、全局變量/#defineWIDTH10/ 游戲區(qū)寬度#defineHEIGHT22/ 游戲區(qū)高度#defineUNIT20/ 每個(gè)游戲區(qū)單位的實(shí)際像素/ 定義操作類型enum CMD
11、CMD_ROTATE,/ 方塊旋轉(zhuǎn)CMD_LEFT, CMD_RIGHT, CMD_DOWN,/ 方塊左、右、下移動(dòng)CMD_SINK,/ 方塊沉底CMD_QUIT/ 退出游戲;/ 定義繪制方塊的方法enum DRAWSHOW,/ 顯示方塊CLEAR,/ 擦除方塊FIX/ 固定方塊;/ 定義七種俄羅斯方塊struct BLOCKWORD dir4;/ 方塊的四個(gè)旋轉(zhuǎn)狀態(tài)COLORREF color;/ 方塊的顏色g_Blocks7 = 0x0F00, 0x4444, 0x0F00, 0x4444, RED,/ I0x0660, 0x0660, 0x0660, 0x0660, BLUE,/ 口0x
12、4460, 0x02E0, 0x0622, 0x0740, CYAN, / L 藍(lán)綠色0x2260, 0x0E20, 0x0644, 0x0470, GREEN,/ 反L0x0C60, 0x2640, 0x0C60, 0x2640, BROWN,/ Z0x0360, 0x4620, 0x0360, 0x4620, YELLOW,/ 反Z0x4E00, 0x4C40, 0x0E40, 0x4640, MAGENTA;/ T 品紅/ 定義當(dāng)前方塊、下一個(gè)方塊的信息struct BLOCKINFObyte id;/ 方塊 IDchar x, y;/ 方塊在游戲區(qū)中的坐標(biāo)byte dir:2;/ 方向
13、g_CurBlock, g_NextBlock;/ 定義游戲區(qū)BYTE g_WorldWIDTHHEIGHT = 0;/ 函數(shù)聲明/void Init();/ 初始化游戲void Quit();/ 退出游戲void NewGame();/ 開始新游戲void GameOver();/ 結(jié)束游戲CMD GetCmd();/ 獲取控制命令void DispatchCmd(CMD _cmd);/ 分發(fā)控制命令void NewBlock();/ 生成新的方塊bool CheckBlock(BLOCKINFO _block);/ 檢測(cè)指定方塊是否可以放下void DrawUnit(int x, int
14、y, COLORREF c, DRAW _draw);/ 畫單元方塊void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW);/ 畫方塊void OnRotate();/ 旋轉(zhuǎn)方塊void OnLeft();/ 左移方塊void OnRight();/ 右移方塊void OnDown();/ 下移方塊void OnSink();/ 沉底方塊static int score=0;/ 函數(shù)定義/ 主函數(shù)void main()Init();CMD c;while(true)c = GetCmd();DispatchCmd(c);/ 按退出時(shí),顯示對(duì)話框咨
15、詢用戶是否退出if (c = CMD_QUIT)HWND wnd = GetHWnd();if (MessageBox(wnd, _T("您要退出游戲嗎?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) = IDOK)Quit();/ 初始化游戲void Init()initgraph(640, 480);srand(unsigned)time(NULL);setbkmode(TRANSPARENT);/ 設(shè)置圖案填充的背景色為透明/ 顯示操作說明settextstyle(14, 0, _T("宋體&qu
16、ot;);outtextxy(20, 330, _T("操作說明:");outtextxy(20, 350, _T("上:旋轉(zhuǎn)");outtextxy(20, 370, _T("下:下移");outtextxy(20, 390, _T("左:左移");outtextxy(20, 410, _T("右:右移");outtextxy(20, 430, _T("空格:沉底");outtextxy(20, 450, _T("ESC:退出");outtextxy(4
17、0, 150,_T(score);/ 設(shè)置坐標(biāo)原點(diǎn)setorigin(220, 20);/ 繪制游戲區(qū)邊界rectangle(-1, -1, WIDTH * UNIT, HEIGHT * UNIT);rectangle(WIDTH + 1) * UNIT - 1, -1, (WIDTH + 5) * UNIT, 4 * UNIT);/ 開始新游戲NewGame();/ 退出游戲void Quit()closegraph();exit(0);/ 開始新游戲void NewGame()/ 清空游戲區(qū)setfillcolor(BLACK);solidrectangle(0, 0, WIDTH * U
18、NIT - 1, HEIGHT * UNIT - 1);ZeroMemory(g_World, WIDTH * HEIGHT);/ 生成下一個(gè)方塊g_NextBlock.id = rand() % 7;g_NextBlock.dir = rand() % 4;g_NextBlock.x = WIDTH + 1;g_NextBlock.y = HEIGHT - 1;/ 獲取新方塊NewBlock();/ 結(jié)束游戲void GameOver()HWND wnd = GetHWnd();if (MessageBox(wnd, _T("游戲結(jié)束。n想重新來一局嗎?"), _T(&q
19、uot;游戲結(jié)束"), MB_YESNO | MB_ICONQUESTION) = IDYES)NewGame();elseQuit();/ 獲取控制命令DWORD m_oldtime;CMD GetCmd()/ 獲取控制值while(true)/ 如果超時(shí),自動(dòng)下落一格DWORD newtime = GetTickCount();if (newtime - m_oldtime >= 500)m_oldtime = newtime;return CMD_DOWN;/ 如果有按鍵,返回按鍵對(duì)應(yīng)的功能if (kbhit()switch(getch()case 'w'
20、:case 'W':return CMD_ROTATE;case 'a':case 'A':return CMD_LEFT;case 'd':case 'D':return CMD_RIGHT;case 's':case 'S':return CMD_DOWN;case 27:return CMD_QUIT;case ' ':return CMD_SINK;case 0:case 0xE0:switch(getch()case 72:return CMD_ROTATE
21、;case 75:return CMD_LEFT;case 77:return CMD_RIGHT;case 80:return CMD_DOWN;/ 延時(shí) (降低 CPU 占用率)Sleep(20);/ 分發(fā)控制命令void DispatchCmd(CMD _cmd)switch(_cmd)case CMD_ROTATE:OnRotate();break;case CMD_LEFT:OnLeft();break;case CMD_RIGHT:OnRight();break;case CMD_DOWN:OnDown();break;case CMD_SINK:OnSink();break;ca
22、se CMD_QUIT:break;/ 生成新的方塊void NewBlock()g_CurBlock.id = g_NextBlock.id,g_NextBlock.id = rand() % 7;g_CurBlock.dir = g_NextBlock.dir,g_NextBlock.dir = rand() % 4;g_CurBlock.x = (WIDTH - 4) / 2;g_CurBlock.y = HEIGHT + 2;/ 下移新方塊直到有局部顯示W(wǎng)ORD c = g_Blocksg_CurBlock.id.dirg_CurBlock.dir;while(c & 0xF)
23、 = 0)g_CurBlock.y-;c >>= 4;/ 繪制新方塊DrawBlock(g_CurBlock);/ 繪制下一個(gè)方塊setfillcolor(BLACK);solidrectangle(WIDTH + 1) * UNIT, 0, (WIDTH + 5) * UNIT - 1, 4 * UNIT - 1);DrawBlock(g_NextBlock);/ 設(shè)置計(jì)時(shí)器,用于判斷自動(dòng)下落m_oldtime = GetTickCount();/ 畫單元方塊void DrawUnit(int x, int y, COLORREF c, DRAW _draw)/ 計(jì)算單元方塊對(duì)應(yīng)
24、的屏幕坐標(biāo)int left = x * UNIT;int top = (HEIGHT - y - 1) * UNIT;int right = (x + 1) * UNIT - 1;int bottom = (HEIGHT - y) * UNIT - 1;/ 畫單元方塊switch(_draw)case SHOW:/ 畫普通方塊setlinecolor(0x006060);roundrect(left + 1, top + 1, right - 1, bottom - 1, 5, 5);setlinecolor(0x003030);roundrect(left, top, right, bott
25、om, 8, 8);setfillcolor(c);setlinecolor(LIGHTGRAY);fillrectangle(left + 2, top + 2, right - 2, bottom - 2);break;case FIX:/ 畫固定的方塊setfillcolor(RGB(GetRValue(c) * 2 / 3, GetGValue(c) * 2 / 3, GetBValue(c) * 2 / 3);setlinecolor(DARKGRAY);fillrectangle(left + 1, top + 1, right - 1, bottom - 1);break;cas
26、e CLEAR:/ 擦除方塊setfillcolor(BLACK);solidrectangle(x * UNIT, (HEIGHT - y - 1) * UNIT, (x + 1) * UNIT - 1, (HEIGHT - y) * UNIT - 1);break;/ 畫方塊void DrawBlock(BLOCKINFO _block, DRAW _draw)WORD b = g_Blocks_block.id.dir_block.dir;int x, y;for(int i = 0; i < 16; i+, b <<= 1)if (b & 0x8000)x =
27、 _block.x + i % 4;y = _block.y - i / 4;if (y < HEIGHT)DrawUnit(x, y, g_Blocks_block.id.color, _draw);/ 檢測(cè)指定方塊是否可以放下bool CheckBlock(BLOCKINFO _block)WORD b = g_Blocks_block.id.dir_block.dir;int x, y;for(int i = 0; i < 16; i+, b <<= 1)if (b & 0x8000)x = _block.x + i % 4;y = _block.y -
28、i / 4;if (x < 0) | (x >= WIDTH) | (y < 0)return false;if (y < HEIGHT) && (g_Worldxy)return false;return true;/ 旋轉(zhuǎn)方塊void OnRotate()/ 獲取可以旋轉(zhuǎn)的 x 偏移量int dx;BLOCKINFO tmp = g_CurBlock;tmp.dir+;if (CheckBlock(tmp)dx = 0;goto rotate;tmp.x = g_CurBlock.x - 1;if (CheckBlock(tmp)dx = -1;go
29、to rotate;tmp.x = g_CurBlock.x + 1;if (CheckBlock(tmp)dx = 1;goto rotate;tmp.x = g_CurBlock.x - 2;if (CheckBlock(tmp)dx = -2;goto rotate;tmp.x = g_CurBlock.x + 2;if (CheckBlock(tmp)dx = 2;goto rotate;return;rotate:/ 旋轉(zhuǎn)DrawBlock(g_CurBlock, CLEAR);g_CurBlock.dir+;g_CurBlock.x += dx;DrawBlock(g_CurBlo
30、ck);/ 左移方塊void OnLeft()BLOCKINFO tmp = g_CurBlock;tmp.x-;if (CheckBlock(tmp)DrawBlock(g_CurBlock, CLEAR);g_CurBlock.x-;DrawBlock(g_CurBlock);/ 右移方塊void OnRight()BLOCKINFO tmp = g_CurBlock;tmp.x+;if (CheckBlock(tmp)DrawBlock(g_CurBlock, CLEAR);g_CurBlock.x+;DrawBlock(g_CurBlock);/ 下移方塊void OnDown()BL
31、OCKINFO tmp = g_CurBlock;tmp.y-;if (CheckBlock(tmp)DrawBlock(g_CurBlock, CLEAR);g_CurBlock.y-;DrawBlock(g_CurBlock);elseOnSink();/ 不可下移時(shí),執(zhí)行“沉底方塊”操作/ 沉底方塊void OnSink()int i, x, y;/ 連續(xù)下移方塊DrawBlock(g_CurBlock, CLEAR);BLOCKINFO tmp = g_CurBlock;tmp.y-;while (CheckBlock(tmp)g_CurBlock.y-;tmp.y-;DrawBloc
32、k(g_CurBlock, FIX);/ 固定方塊在游戲區(qū)WORD b = g_Blocksg_CurBlock.id.dirg_CurBlock.dir;for(i = 0; i < 16; i+, b <<= 1)if (b & 0x8000)if (g_CurBlock.y - i / 4 >= HEIGHT)/ 如果方塊的固定位置超出高度,結(jié)束游戲GameOver();return;elseg_Worldg_CurBlock.x + i % 4g_CurBlock.y - i / 4 = 1;/ 檢查是否需要消掉行,并標(biāo)記BYTE remove = 0;/ 低 4 位用來標(biāo)記方塊涉與的 4 行是否有消除行為for(y = g_CurBlock.y; y >= max(g_CurBlock.y - 3, 0); y-)i = 0;for(x = 0; x <
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年學(xué)生宿舍管理合同3篇
- 2024年林地出租協(xié)議標(biāo)準(zhǔn)格式版B版
- 2024年度智能倉儲(chǔ)服務(wù)合同2篇
- 幼兒園小班集教活動(dòng)
- 2024年度橋梁伸縮縫施工環(huán)境保護(hù)與治理合同3篇
- 農(nóng)村家庭財(cái)產(chǎn)分割合同范例
- 2024年度電信研發(fā)成果轉(zhuǎn)化通訊服務(wù)合同3篇
- 2024年房地產(chǎn)授權(quán)委托合同范本2篇
- 2024年度綠色能源產(chǎn)品經(jīng)銷授權(quán)合同3篇
- 茶商合同范例
- 小罐茶行業(yè)分析報(bào)告
- 福建省國(guó)土空間規(guī)劃(2021-2035年)公眾版
- 西方社會(huì)思想兩千年智慧樹知到期末考試答案章節(jié)答案2024年復(fù)旦大學(xué)
- 新時(shí)代大學(xué)生勞動(dòng)教育智慧樹知到期末考試答案章節(jié)答案2024年黑龍江農(nóng)業(yè)經(jīng)濟(jì)職業(yè)學(xué)院
- 新生兒靜脈留置針穿刺
- 外貿(mào)公司介紹
- 2024年度-銀行不良清收技巧培訓(xùn)課件(學(xué)員版)
- 2024年貴州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫及答案解析
- 利那洛肽治療便秘病例
- 九年級(jí)下冊(cè)語文第三單元作業(yè)設(shè)計(jì)
- 中國(guó)電影改編的跨文化傳播啟示以中外電影《花木蘭》對(duì)比分析為例
評(píng)論
0/150
提交評(píng)論